このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
Simulink Test ベンチから SystemVerilog アサーションを生成する
DPI assertion ブロックは、入力信号がゼロかどうかをチェックします。このブロックを使用して、ブール式を作成し、それをブロックに接続することで、Simulink® テストベンチが期待どおりに動作することを確認します。SystemVerilog を生成すると、生成されたモジュールに即時アサーションが作成されます。このブロックを使用して、Simulink 環境と SystemVerilog 環境の両方で刺激が期待どおりに動作することを確認します。
アサーション生成ワークフロー
この例では、ゲイン ブロックの出力がゼロの場合に警告を発するアサーション ブロックを含むモデルを作成する方法を示します。次に、カウンターを使用してモデル出力を表示します。
Simulink モデルを作成する
サンプルモデルにはゲイン ブロックが 1 つあります。この例では、ゲイン出力がゼロになるたびに警告が生成されます。
Simulink Block Library 、 Commonly Used Blocksを開きます。
Inport ブロックを追加します。
Gain ブロックを追加します。このブロックをダブルクリックすると、そのパラメータが開きます。Gain の値を
2
に設定します。Outport ブロックを追加します。
上の図に示すように、すべてのブロックを接続します。
アサーションブロックの追加と構成
HDL Verifier 、 For Use with DPI-C SystemVerilog を選択して、Libraries ツリー ビューで Assertion ブロックを見つけます。このブロックをモデルに追加し、Gain ブロックの出力をアサーション ブロックの入力に接続します。
この例では、Assertion ブロックを使用してゲイン出力を監視し、信号がゼロの場合に警告を返します。Assertion ブロックをダブルクリックしてパラメータを設定します。Severity を
warning
に設定し、Assertion fail message を"output is 0!"
に設定します。Enable assertion が選択されていることを確認してください。メモ
Parameters セクションは Simulink の実行を制御し、Simulink Assertion (Simulink) ブロック内のパラメータと同一です。DPI-C assertion options は、生成された SystemVerilog 内でのみアサーション動作を制御します。
アサーションをカスタマイズする
Severity を
custom
に設定し、Assertion custom command ボックスにカスタム SystemVerilog コマンドを入力してアサーションをカスタマイズします。このコマンドには、$display
や$time
などのシステム タスクを含めることができます。生成された
DPI_getAssertionInfo(obj)
SystemVerilog 関数を使用して、アサーションの動作をさらにカスタマイズできます。この関数は、実行されたアサーションをチェックし、そのアサーションに対して記録されたすべての情報を SystemVerilog 構造体配列に返します。そのクロック サイクルで実行された各アサーションに対して、関数はアサーションのStatus
、Message
、およびSeverity
を返します。Simulink でシミュレーションを実行する
シミュレーションを行う前に、刺激ソースとシンクをサブシステムに接続します。この例では、0-1-2-3 シーケンスを生成するカウンターを使用します。
シミュレーションをビルドして実行するには、ツールバーの Run ボタンをクリックします。
出力内のアサーション ブロックからの警告に注意してください。
SystemVerilog DPIコンポーネントを生成する
Simulink Apps タブで HDL Verifier をクリックします。次に、[HDL Verifier] タブで [C Code Settings] をクリックします。Code Generation で Configuration Parameters ダイアログが開きます。
System target file で、Browse をクリックし、
systemverilog_dpi_grt.tlc
を選択します。Embedded Coder® のライセンスをお持ちの場合は、ターゲット
systemverilog_dpi_ert.tlc
を選択できます。このターゲットを使用すると、追加のコード生成オプション (モデル構成パラメーターのコード生成ペイン) にアクセスできます。
コード生成グループで、SystemVerilog DPI をクリックします。
自動テストベンチ生成を有効にするには、Generate test bench チェックボックスをオンにします。
OK をクリックしてこれらの設定を受け入れ、[構成パラメータ] ダイアログ ボックスを閉じます。
HDL Verifier タブで、Generate DPI Component をクリックします。
SystemVerilog コンポーネントは、現在の作業フォルダーに
dut_build/dut_dpi.sv
として生成されます。さらに、関数宣言を含むパッケージ ファイルが現在の作業フォルダーにdut_build/dut_dpi_pkg.sv
として生成されます。
SystemVerilogシミュレーションを実行する
HDL Verifier タブで Select Simulator をクリックして、SystemVerilog DPI pane の構成パラメータを開きます。次に、HDL simulator リストからシミュレータを選択します。[OK] をクリックします。
シミュレーターを GUI モードで起動するには、Run Testbench ボタンを展開し、Launch Simulator in GUI Mode を選択します。
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