RTL設計:データパスとパイプライン
数値とサイクルの契約を定義し、ALU、コントローラ、パイプライン、ready-validバッファを設計します。実行可能な参照モデルを使う4つの実習で、算術の境界、ストール、FIFO、順序を検証し、ストリーミング演算の総合課題に取り組みます。
このコースで学ぶこと
- ビット幅、符号の有無、キャリー、オーバーフローの契約を区別する
- レジスタ転送、FSM制御、同期メモリの動作をスケジュールする
- レイテンシ、スループット、開始間隔を計算する
- ready-validのストールとFIFOの境界をデータ損失なく処理する
- ハザードとリセットを網羅するスコアボード検査を構築する
- 独立したモデルでストリーミング演算の総合課題を検証する
はじめる前に
ブラウザー演習は教育用モデルで、HDLのコンパイルや実行は行いません。配布ソースを別途実行する場合は、OSに合ったDigital Design Studioの手順に従い、必要な操作ではログインしてください。
インストールと初回起動 ↗ · ダウンロード ↗カリキュラム
- 数値と算術の契約
- 式をデータパスの契約に変える概念
算術とともにビット幅、受け入れイベント、有効な結果を定義します。
- ビット幅、符号拡張、オーバーフロー概念
数値例を用いて、解釈、拡張、ビット幅の縮小を区別します。
- 実習:8ビットALUの参照モデル実習
独立した実行ファイルでADD、SUB、AND、XOR、キャリー、ボローを検査します。
- 確認:キャリーと符号付きオーバーフロー理解度チェック
符号なし解釈と符号付き解釈での数値の境界を区別します。
- レジスタ転送と制御
- クロックエッジでのレジスタ転送を読む概念
現在の状態と次状態を区別し、イネーブルが保持値を維持する様子を追います。
- FSMで共有リソースをスケジュールする概念
状態遷移と取り込みを定義し、1つの加算器で4個の値を累積します。
- メモリ要求と応答のタイミング契約概念
同期読み出し、遅延させたタグ、同一アドレスの衝突を区別します。
- 確認:完了した結果の保持理解度チェック
DONE状態での引き渡しと次の要求の受け入れを分けます。
- パイプラインのタイミングとスループット
- パイプラインの境界でトランザクション全体を保持する概念
valid、タグ、ビット幅の対応を保ちながら、加算と定数倍を分割します。
- レイテンシ、スループット、開始間隔概念
1件のトランザクションの遅延と、継続的な完了率を別々に計算します。
- 実習:2段とバブルを追跡する実習
更新前の状態から次状態を計算し、出力のタグ、値、エッジを比較します。
- 確認:II=1の意味理解度チェック
段数と継続スループットを混同しないようにします。
- Ready-validフロー制御
- 受け入れイベントとストール中の安定性概念
供給側と受け取り側の責任を決め、ストールしたペイロードを保持します。
- 1スロットの弾力的レジスタを設計する概念
空のスロットへ受け入れるか、同時に消費される項目を置き換えます。
- 実習:1024のストールパターンを検査する実習
10サイクルのすべてのreadyパターンで、保持、置き換え、空にする動作を試します。
- 確認:ストールしたトランザクションを数える理解度チェック
validの継続時間と実際のハンドシェイク回数を区別します。
- FIFOとハザードの境界
- FIFOの空、満杯、同時転送概念
占有数とポインタを区別し、境界でのpush/pop動作を定義します。
- 依存関係、リソースハザード、フォワーディング概念
演算が先行する結果を必要とする場合のストールとフォワーディングを比較します。
- フラッシュとリセットを通してトランザクション収支を保つ概念
取り消しと引き渡しを区別し、valid状態を期待値キューと合わせます。
- 確認:満杯のFIFOでの置き換え理解度チェック
同時push/popの占有数と順序を計算します。
- 検証とストリーミング計算器
- スコアボードと局所的な不変条件を組み合わせる概念
受け入れたトランザクションから、値、順序、占有数、ストール中の安定性を検査します。
- 総合実習:FIFOと2段のストリーミング計算器実習
深さ2の入力FIFO、2つの弾力的な段、スコアボードを接続します。
- 性能を測り、設計をレビューする概念
観測区間を指定し、ストールを診断し、モデルの証拠の範囲を限定します。
- 最終確認:損失のないストールと排出理解度チェック
算術、未完了数の収支、完了条件を組み合わせます。