最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
これらのガイドラインは、HDL コードやテストベンチの生成用に DUT をモデル化する方法に関するいくつかのベスト プラクティスを示したものです。各ガイドラインに準拠要件のレベルを示す重大度レベルが割り当てられています。詳細については、HDL モデリング ガイドラインの重大度レベルを参照してください。
1.2.1
強く推奨
DUT はコードを生成するアルゴリズムを含む Subsystem です。一般に、最上位のサブシステムを DUT として指定します。DUT およびテスト ベンチへのモデルの分割も参照してください。
HDL コード生成用の DUT サブシステムを設計するときは、以下の推奨される設定を使用することを検討してください。
最上位の DUT:
DUT が Enabled Subsystem や Triggered Subsystem などの条件付き実行サブシステムでないことを確認します。有効な最上位の Subsystem を DUT として使用していることを確認するには、HDL モデル チェックの無効な最上位サブシステムをチェックを実行します。
DUT の [HDL Architecture] が BlackBox
として指定されていないことを確認します。BlackBox サブシステムを参照してください。
未接続の出力信号は Terminator ブロックに接続します。詳細については、未接続のブロック出力の終端を参照してください。
DUT にコメント スルーするブロックが含まれていないことを確認します。それらのブロックのコード生成は HDL Coder™ でサポートされていません。出力信号が未使用の場合はコード生成用にブロックをコメント アウトできます。ブロックのコメント アウトとコメント スルーの使用も参照してください。
最上位のサブシステムよりも下位の階層にあるサブシステムを DUT として使用して HDL コードを生成すると、HDL Coder でモデル参照に変換されます。HDL コードの生成後、hdlsrc
ディレクトリに検証モデルとコシミュレーション モデルへの参照を含む Simulink® モデルが表示されます。場合によっては、参照ファイル名が競合したり、コード生成時間が長くなったりすることがあります。
最上位以外の DUT:
シミュレーション結果の数値の不一致を回避するために、HDL コードを生成する前に DUT を非バーチャル サブシステムとして指定します。詳細については、さまざまなサブシステム タイプの使用方法を参照してください。
DUT の [HDL Architecture] は default
のままにします。
ガイドライン ID
1.2.2
重大度
強く推奨
説明
場合によっては、Simulink™ テストベンチの一部に、連続サンプル時間で動作する Simscape™ ブロックやその他の Simulink ライブラリのブロックが含まれることがあります。それらのブロックをシミュレートするには、モデルに対して連続ソルバー設定を指定しなければなりません。指定したソルバー設定はモデル内のすべてのブロックに適用されます。そのため DUT サブシステムで連続ソルバーが使用されますが、これは HDL コード生成ではサポートされていません。HDL コードを生成するには、DUT サブシステムをモデル参照に変換し、その参照モデルに固定ステップ離散ソルバーを使用します。使用するソルバー設定が親モデルと参照モデルで異なるため、DUT の境界に Zero-Order Hold ブロックと Rate Transition ブロックを挿入してサンプル時間を変換しなければなりません。
メモ: 参照モデル ファイルが競合したりコード生成時間が長くなったりすることを回避するため、最上位のサブシステムよりも下位の階層にあるサブシステムは DUT として使用しないことをお勧めします。
たとえば、モデル hdlcoder_testbench_continuous.slx
を開きます。このモデルでは、連続ソルバー設定の ode45
を使用しています。DUT はモデル参照ブロックになっています。境界にある 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'
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 モジュールと同じ名前にします。
型、サイズ、名前などを同じにして、同じ入力と出力を定義します。
同じクロック信号、リセット信号、クロック イネーブル信号を定義します。1 つの信号ブロックに含めることができるクロック信号、リセット信号、クロック イネーブル信号は 1 つまでです。
ブロックで使用するサンプルレートは 1 つにします。
[HDL ブロック プロパティ] でブロックの [Architecture] を [BlackBox]
として指定します。
詳細については、サブシステムのブラック ボックス インターフェイスの生成を参照してください。
BlackBox サブシステムの DocBlock
HDL コードを個別のファイルとしてではなくモデルで維持する場合は、DocBlock を使用してカスタム HDL コードを統合します。DocBlock では手書きの独自の VHDL コードまたは Verilog コードをテキストとして使用できます。
カスタム HDL コードが含まれる各 DocBlock を含めるには、それぞれをブラック ボックス サブシステムに配置し、そのブラック ボックス サブシステムを DUT に含めます。ブラック ボックス サブシステムごとに 1 つの HDL ファイルが生成されます。詳細については、DocBlock を使用したカスタム HDL コードの統合を参照してください。
HDL コシミュレーション ブロック
Mentor Graphics® ModelSim® や Cadence Incisive® などの HDL シミュレーターがある場合は、HDL Cosimulation (HDL Verifier) ブロックでその HDL シミュレーターを使用して DUT の HDL コードをシミュレートできます。
DUT の HDL コードを Simulink でシミュレートし、その HDL コードを DUT の生成コードでインスタンス化できます。