DUT サブシステムに関するガイドライン
これらのガイドラインは、HDL コードやテストベンチの生成用に DUT をモデル化する方法に関するいくつかのベスト プラクティスを示したものです。各ガイドラインに準拠要件のレベルを示す重大度レベルが割り当てられています。詳細については、HDL モデリング ガイドラインの重大度レベルを参照してください。
DUT サブシステムに関する考慮事項
ガイドライン ID
1.2.1
重大度
強く推奨
説明
DUT はコードを生成するアルゴリズムを含む Subsystem です。一般に、最上位のサブシステムを DUT として指定します。DUT およびテスト ベンチへのモデルの分割も参照してください。
HDL コード生成用の DUT サブシステムを設計するときは、以下の推奨される設定を使用することを検討してください。
DUT が Enabled Subsystem や Triggered Subsystem などの条件付き実行サブシステムでないことを確認します。有効な最上位の Subsystem を DUT として使用していることを確認するには、HDL モデル チェックの無効な最上位サブシステムをチェックを実行します。
DUT の [HDL Architecture] が
BlackBox
として指定されていないことを確認します。BlackBox サブシステムを参照してください。未接続の出力信号は Terminator ブロックに接続します。詳細については、未接続のブロック出力の終端を参照してください。
最上位以外の DUT では、シミュレーション結果の数値の不一致を回避するために、HDL コードを生成する前に DUT を非バーチャル サブシステムとして指定します。詳細については、さまざまなサブシステム タイプの使用方法を参照してください。
連続ブロックを使用したテストベンチ用のモデル参照への DUT サブシステムの変換
ガイドライン ID
1.2.2
重大度
強く推奨
説明
場合によっては、Simulink™ テストベンチの一部に、連続サンプル時間で動作する Simscape™ ブロックやその他の Simulink ライブラリのブロックが含まれることがあります。それらのブロックをシミュレートするには、モデルに対して連続ソルバー設定を指定しなければなりません。指定したソルバー設定はモデル内のすべてのブロックに適用されます。そのため DUT サブシステムで連続ソルバーが使用されますが、これは HDL コード生成ではサポートされていません。HDL コードを生成するには、DUT サブシステムをモデル参照に変換し、その参照モデルに固定ステップ離散ソルバーを使用します。使用するソルバー設定が親モデルと参照モデルで異なるため、DUT の境界に Zero-Order Hold ブロックと Rate Transition ブロックを挿入してサンプル時間を変換しなければなりません。
たとえば、モデル hdlcoder_testbench_continuous.slx
を開きます。このモデルでは、連続ソルバー設定の ode45
を使用しています。DUT は Model ブロックになっています。境界にある Zero-Order Hold ブロックと Rate Transition ブロックでサンプル時間が変換されます。
open_system('hdlcoder_testbench_continuous') set_param('hdlcoder_testbench_continuous','SimulationCommand','Update') get_param('hdlcoder_testbench_continuous', 'Solver')
ans = 'ode45'
参照モデル hdlcoder_DUT_discrete
を確認するには、DUT
ブロックをダブルクリックします。DUT で離散ソルバー設定が使用されています。
open_system('hdlcoder_testbench_continuous/DUT') get_param('hdlcoder_DUT_discrete', 'Solver')
ans = 'FixedStepDiscrete'
Simulink モデリング環境への手書きコードの挿入
ガイドライン ID
1.2.3
重大度
情報
説明
次の方法を使用して、Simulink® モデリング環境で検証済みの RTL IP を再利用したり手書きの HDL コードを挿入したりできます。
Verilog HDL インポート
手書きの Verilog コードがある場合、そのコードを Simulink 環境にインポートできます。インポート処理で、手書きの HDL コードと機能的に等しい Simulink モデルが生成されます。
HDL インポートでは、Verilog 構造のサブセットがサポートされており、サブセットを使用して Simulink モデルを作成するための設計をインポートできます。詳細については、以下を参照してください。
BlackBox サブシステム
BlackBox サブシステムを使用して、ブロックの手書きの HDL コードを Simulink モデルに挿入できます。その後、BlackBox サブシステムを Simulink モデル内の他のブロックと統合して HDL コードを生成できます。
BlackBox Subsystem を HDL コード生成用の他のブロックと互換性があるブロックとしてモデルに含めるには、Simulink で次のようにしてブロックを作成します。
ブロックの名前を VHDL エンティティ、または Verilog モジュールまたは SystemVerilog モジュールと同じ名前にします。
型、サイズ、名前などを同じにして、同じ入力と出力を定義します。
同じクロック信号、リセット信号、クロック イネーブル信号を定義します。1 つの信号ブロックに含めることができるクロック信号、リセット信号、クロック イネーブル信号は 1 つまでです。
ブロックで使用するサンプルレートは 1 つにします。
[HDL ブロック プロパティ] でブロックの [Architecture] を
[BlackBox]
として指定します。
詳細については、サブシステムのブラック ボックス インターフェイスの生成を参照してください。
BlackBox サブシステムの DocBlock
HDL コードを個別のファイルとしてではなくモデルで維持する場合は、DocBlock を使用してカスタム HDL コードを統合します。DocBlock では手書きの独自の VHDL コード、Verilog コードまたは SystemVerilog コードをテキストとして使用できます。
カスタム HDL コードが含まれる各 DocBlock を含めるには、それぞれをブラック ボックス サブシステムに配置し、そのブラック ボックス サブシステムを DUT に含めます。ブラック ボックス サブシステムごとに 1 つの HDL ファイルが生成されます。詳細については、DocBlock を使用したカスタム HDL コードの統合を参照してください。
HDL Cosimulation ブロック
Mentor Graphics® ModelSim® や Cadence Incisive® などの HDL シミュレーターがある場合は、HDL Cosimulation (HDL Verifier) ブロックでその HDL シミュレーターを使用して DUT の HDL コードをシミュレートできます。
DUT の HDL コードを Simulink でシミュレートし、その HDL コードを DUT の生成コードでインスタンス化できます。