RTL設計の基礎
デジタル論理回路で学んだ回路をSystemVerilogで表現します。型・幅・符号、組合せ・順序論理、モジュール・パラメータ・generateを扱い、独立したテストベンチで境界条件や失敗するケースを検証します。最後に周期パルスと累算器を接続し、再現可能な実行記録を完成させます。
このコースで学ぶこと
- 各信号の幅・符号・駆動元・有効時点・リセット値を規定します。
- 完全な組合せ代入とクロックによる状態更新を分けて記述します。
- パラメータとgenerateで静的構造を作り、境界設定を検証します。
- 名前付きポート接続と関数でモジュールを構成します。
- 競合を避けた刺激と独立した参照モデルを持つテストベンチを書きます。
- コンパイル・シミュレーション・合成・DDS実行の証拠を区別します。
はじめる前に
ブラウザー演習は教育用モデルで、HDLのコンパイルや実行は行いません。配布ソースを別途実行する場合は、OSに合ったDigital Design Studioの手順に従い、必要な操作ではログインしてください。
インストールと初回起動 ↗ · ダウンロード ↗カリキュラム
- RTLとモジュールの契約
- RTL:同時に動作する回路を記述する概念
ソフトウェアの実行順序と回路の並列構造を区別し、現在状態・次状態・観測時点を規定します。
- 信号とポート:幅・方向・時間の取り決め概念
インターフェースを読み、組合せ出力と状態出力の検証基準を分けます。
- モジュール・ポート・インスタンス:接続を契約として読む概念
名前付き接続、単一駆動元と階層境界を確認し、組合せモジュールを接続します。
- 理解確認:組合せ出力と保存出力理解度チェック
入力の変更時点とレジスタの観測時点を区別します。
- 型・幅・符号と式
- logic・wire・X/Zと明示的なビット幅概念
型宣言と記憶素子を区別し、リテラル・比較・拡張・未知値を検証します。
- ベクトルのインデックス・ビット順・符号概念
ビット番号・シリアル転送順・算術解釈を分けてデータパスを読みます。
- スライス・連結・繰返し演算の幅概念
連結する信号の総幅と値の保存条件を計算し、データパスを構成します。
- 2 の補数・符号拡張・オーバーフロー概念
式と反例を使い、ビット列の signed 解釈と加算のオーバーフロー条件を区別します。
- 理解確認:範囲と明示的な拡張理解度チェック
加算器の入力幅と出力幅を一緒に確認します。
- 完全な組合せRTLと検証
- 組合せ RTL と完全な代入概念
条件演算子と always_comb で同じ関数を表し、ラッチを生む代入漏れを見つけます。
- エンコーダと優先順位:複数の要求から一つを選ぶ概念
ワンホットエンコーダの入力仮定と、優先エンコーダの valid・選択結果を区別します。
- MUX の検証:全数検査とプロパティ概念
組合せ入力の網羅性と記憶動作を別々に検査し、反例を最小化します。
- 設計確認:選択回路の等価性と観測時点理解度チェック
真理値表で十分な検証と、クロック観測が必要な検証を区別します。
- 状態・代入・リセットの優先順位
- フリップフロップ・enable・制御の優先順位概念
保持・ロード・リセットを次状態式で定め、意図しないクロックゲーティングを避けます。
- ノンブロッキング代入と同時状態更新概念
旧値と次の値を分け、パイプライン・カウンタ RTL を正確に解釈します。
- モジュロ・飽和カウンタと終了パルス概念
最大値の扱いと terminal-count 信号の正確なサイクルを設計します。
- 実習:カウンタのリセット・循環・不変条件の検証実習
各立上りエッジの状態を参照モデルと照合し、初期値・リセット・ビット幅の影響を分けます。
- 設計確認:幅・優先順位・循環の境界理解度チェック
与えられた状態遷移の仕様から、境界値と同時制御入力を判断します。
- パラメータと静的構造の生成
- parameter・localparam・$clog2と境界設定概念
動作中の入力と静的設定を分け、N=1や2の累乗でないカウンタの幅と終了動作を設計します。
- generate:反復で静的回路を作る概念
genvarとgenerate-ifで名前付き構造を作り、バスのlane配置を確認します。
- function automaticと式の再利用概念
時間を消費しない関数を書き、戻り値の幅・符号と参照モデルの独立性を確認します。
- 理解確認:N=1とビット幅理解度チェック
最小幅の宣言と実際の状態数を区別します。
- テストベンチと独立した検証
- 波形のサンプリング時点と因果関係概念
組合せの安定化・クロックでの取込み・イベント順を分けて波形を読みます。
- 実習:自分で失敗を報告するテストベンチ実習
DUT・刺激・参照モデル・判定を分け、reset・enable・wrapを競合のない時点で検査します。
- 検証計画・カバレッジ・独立した参照モデル概念
テスト通過と仕様充足を区別し、境界・交差条件・最小反例を検証計画に結び付けます。
- カウンタのデバッグと最小反例概念
リセット・enable・循環境界の誤りを区別する短いテストを設計します。
- 理解確認:参照モデルと競合理解度チェック
DUTから独立した期待値と更新後の観測を選びます。
- モジュール接続と総合実習
- 状態機械:状態・遷移・出力を分ける概念
仕様表から FSM を書き、Moore・Mealy 出力、不正状態、要求の扱いを比較します。
- 総合設計:重なりを許す 101 パターン検出器概念
状態最小化・入力有効性・レジスタ出力・独立参照検証を一つの設計に適用します。
- Ready/valid と 1 要素のエラスティックバッファ概念
停止可能なデータパスで、欠落や重複のない転送条件と同時入出力を設計する。
- 乗加算パイプラインとデータの整列概念
演算をレジスタ境界で分割し、データ・valid・補助オペランドが同じトランザクションに属するよう設計する。
- 総合実習:周期パルスとenable累算器を接続する実習
以前の値を使うモジュール間転送を規定し、enable停止・連続パルス・同時resetを参照モデルと比較します。
- ツール診断と結果の範囲
- セットアップ・ホールドとタイミング予算概念
最大・最小経路遅延を分け、クロック周波数とは別のホールド条件を計算します。
- クロック領域の境界とメタステーブル概念
2 段同期化回路の適用範囲を理解し、単一ビット・短パルス・多ビット転送を区別します。
- コンパイル・lint・合成:診断が示す範囲概念
ソース一覧・top・言語モードを固定し、構文・幅・ラッチと機能検証を区別します。
- 実行記録とDDS実習への接続概念
ソース・入力・期待値・失敗条件・ツール版をまとめ、再現できる実習結果を提出します。
- 最終確認:機能通過と実行証拠理解度チェック
ローカル結果と無料DDS実習の受入証拠を区別します。