Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

Simulink Test ベンチから SystemVerilog アサーションを生成する

DPI assertion ブロックは、入力信号がゼロかどうかをチェックします。このブロックを使用して、ブール式を作成し、それをブロックに接続することで、Simulink® テストベンチが期待どおりに動作することを確認します。SystemVerilog を生成すると、生成されたモジュールに即時アサーションが作成されます。このブロックを使用して、Simulink 環境と SystemVerilog 環境の両方で刺激が期待どおりに動作することを確認します。

アサーション生成ワークフロー

この例では、ゲイン ブロックの出力がゼロの場合に警告を発するアサーション ブロックを含むモデルを作成する方法を示します。次に、カウンターを使用してモデル出力を表示します。

  1. Simulink モデルを作成する

    サンプルモデルにはゲイン ブロックが 1 つあります。この例では、ゲイン出力がゼロになるたびに警告が生成されます。

    1. Simulink Block LibraryCommonly Used Blocksを開きます。

    2. Inport ブロックを追加します。

    3. Gain ブロックを追加します。このブロックをダブルクリックすると、そのパラメータが開きます。Gain の値を 2 に設定します。

    4. Outport ブロックを追加します。

    5. 上の図に示すように、すべてのブロックを接続します。

  2. アサーションブロックの追加と構成

    HDL VerifierFor Use with DPI-C SystemVerilog を選択して、Libraries ツリー ビューで Assertion ブロックを見つけます。このブロックをモデルに追加し、Gain ブロックの出力をアサーション ブロックの入力に接続します。

    この例では、Assertion ブロックを使用してゲイン出力を監視し、信号がゼロの場合に警告を返します。Assertion ブロックをダブルクリックしてパラメータを設定します。Severitywarning に設定し、Assertion fail message"output is 0!" に設定します。Enable assertion が選択されていることを確認してください。

    メモ

    Parameters セクションは Simulink の実行を制御し、Simulink Assertion (Simulink) ブロック内のパラメータと同一です。DPI-C assertion options は、生成された SystemVerilog 内でのみアサーション動作を制御します。

  3. アサーションをカスタマイズする

    Severitycustom に設定し、Assertion custom command ボックスにカスタム SystemVerilog コマンドを入力してアサーションをカスタマイズします。このコマンドには、$display$time などのシステム タスクを含めることができます。

    生成された DPI_getAssertionInfo(obj) SystemVerilog 関数を使用して、アサーションの動作をさらにカスタマイズできます。この関数は、実行されたアサーションをチェックし、そのアサーションに対して記録されたすべての情報を SystemVerilog 構造体配列に返します。そのクロック サイクルで実行された各アサーションに対して、関数はアサーションの StatusMessage、および Severity を返します。

  4. Simulink でシミュレーションを実行する

    シミュレーションを行う前に、刺激ソースとシンクをサブシステムに接続します。この例では、0-1-2-3 シーケンスを生成するカウンターを使用します。

    シミュレーションをビルドして実行するには、ツールバーの Run ボタンをクリックします。

    出力内のアサーション ブロックからの警告に注意してください。

  5. SystemVerilog DPIコンポーネントを生成する

    1. Simulink Apps タブで HDL Verifier をクリックします。次に、[HDL Verifier] タブで [C Code Settings] をクリックします。Code GenerationConfiguration Parameters ダイアログが開きます。

    2. System target file で、Browse をクリックし、systemverilog_dpi_grt.tlc を選択します。

      • Embedded Coder® のライセンスをお持ちの場合は、ターゲット systemverilog_dpi_ert.tlc を選択できます。このターゲットを使用すると、追加のコード生成オプション (モデル構成パラメーターのコード生成ペイン) にアクセスできます。

    3. コード生成グループで、SystemVerilog DPI をクリックします。

    4. 自動テストベンチ生成を有効にするには、Generate test bench チェックボックスをオンにします。

    5. OK をクリックしてこれらの設定を受け入れ、[構成パラメータ] ダイアログ ボックスを閉じます。

    6. HDL Verifier タブで、Generate DPI Component をクリックします。

      SystemVerilog コンポーネントは、現在の作業フォルダーに dut_build/dut_dpi.sv として生成されます。さらに、関数宣言を含むパッケージ ファイルが現在の作業フォルダーに dut_build/dut_dpi_pkg.sv として生成されます。

  6. SystemVerilogシミュレーションを実行する

    HDL Verifier タブで Select Simulator をクリックして、SystemVerilog DPI pane の構成パラメータを開きます。次に、HDL simulator リストからシミュレータを選択します。[OK] をクリックします。

    1. シミュレーターを GUI モードで起動するには、Run Testbench ボタンを展開し、Launch Simulator in GUI Mode を選択します。

    2. ModelSim® または Questa® の場合、次のコマンドを入力してシミュレーションを開始します。

    do  run_tb_mq.do

アサーションによって表示されるシミュレーション警告に注意してください。

run -all
# ** Warning: assertion:14:output is 0!
#    Time: 40 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 80 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 120 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 160 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 200 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 240 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 280 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 320 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 360 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 400 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 440 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 480 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# ** Warning: assertion:14:output is 0!
#    Time: 520 ns  Scope: dut_dpi_tb.u_dut_dpi File: ../dut_dpi.sv Line: 57
# **************TEST COMPLETED (PASSED)**************
# ** Note: $finish    : ./dut_dpi_tb.sv(62)
#    Time: 542 ns  Iteration: 0  Instance: /dut_dpi_tb
# End time: 14:16:43 on Dec 29,2017, Elapsed time: 0:00:04
# Errors: 0, Warnings: 13

生成された SystemVerilog アサーションをトレースする

生成されたアサーションを使用して SystemVerilog シミュレーションを実行すると、ログ ファイルに警告とエラーが表示されます。特定の警告またはエラー出力の原因となったアサーション ブロックを識別するには、hilite_system (Simulink) 関数を使用します。

各警告には、その警告を生成した特定の Assertion ブロックを識別する番号が表示されます。その番号はそのブロックの Simulink 識別子 (SID) です。たとえば、以下は SID 番号 14 のアサーション ブロックによって生成された警告を示しています。

# ** Warning: assertion:14:output is 0!

この警告を生成したブロックを強調表示するには、MATLAB® コマンド ウィンドウで次のコードを実行します。

hilite_system('assertion:14')

アサーションの無効化

Simulink 環境または SystemVerilog 環境のいずれかでアサーション ブロックの実行を無効にすることができます。Simulink と SystemVerilog の両方でアサーションを無視したい場合は、Simulink でアサーションを無効にします。Simulink からコードを再生成したくないが、SystemVerilog シミュレーション中にアサーションを無効にする機能が必要な場合は、SystemVerilog でアサーションを無効にします。

Simulink でのアサーションの無効化.  Assertion ブロック パラメータの Enable assertion チェック ボックスをオフにすると、DPI-C Assertion ブロックによる入力信号のチェックや警告やエラーの発行を無効にすることができます。

このチェックボックスをオフにすると、アサーションによる警告やエラーの発行が無効になり、SystemVerilog アサーションが生成されなくなります。

SystemVerilog でのアサーションの無効化.  SystemVerilog 環境では、HDL シミュレータへのコマンドライン引数として Simulink 識別子を指定することにより、アサーションを無効にすることができます。たとえば、ModelSim を使用し、SID が 14 であると仮定すると、次のプラス引数を使用して、Assertion ブロックによって生成される警告、エラー メッセージ、またはカスタム コマンドの出力を無効にすることができます。

vsim -c -voptargs=+acc -sv_lib ../dut_win64 work.dut_dpi_tb +assertion:14

参考

関連するトピック