このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
Simulink Testベンチからの SystemVerilog アサーションの生成
DPI assertionブロックは、入力信号がゼロかどうかをチェックします。このブロックを使用して、ブール式を作成し、それをブロックに接続することで、Simulink®テストベンチが期待どおりに動作することを確認します。SystemVerilog を生成すると、生成されたモジュールに即時アサーションが作成されます。このブロックを使用して、 Simulinkと SystemVerilog 環境の両方でスティミュラスが期待どおりに動作することを確認します。
アサーションの生成ワークフロー
この例では、ゲイン ブロックの出力がゼロの場合に警告を発するアサーション ブロックを含むモデルを作成する方法を示します。次に、カウンターを使用してモデルの出力を表示します。
Simulinkモデルを作成する
サンプル モデルには単一のゲイン ブロックがあります。この例では、ゲイン出力がゼロになるたびに警告を作成します。
Simulink Block Library 、 Commonly Used Blocksを開きます。
Inportブロックを追加します。
Gainブロックを追加します。このブロックをダブルクリックしてパラメーターを開きます。Gainの値を
2
に設定します。Outportブロックを追加します。
上の図に示すように、すべてのブロックを接続します。
アサーション ブロックの追加と構成
Assertionを選択して、 Librariesツリー ビューでHDL Verifier 、 For Use with DPI-C SystemVerilogブロックを見つけます。このブロックをモデルに追加し、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
に設定し、カスタム SystemVerilog コマンドを [Assertion custom command]ボックスに入力します。このコマンドには、$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]をクリックします。Configuration ParametersダイアログがCode Generationで開きます。
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でのアサーションの無効化. DPI-C AssertionブロックのEnable assertionAssertionの入力信号のチェックや警告やエラーの発生を無効にできます。パラメーター。
このチェック ボックスをオフにすると、アサーションによる警告やエラーの発行、および SystemVerilog アサーションの生成が無効になります。
SystemVerilog でのアサーションの無効化. SystemVerilog 環境では、 Simulink識別子をコマンド ライン引数として HDL シミュレーターに指定することで、アサーションを無効にすることができます。たとえば、 ModelSimを使用し、SID が 14 であると仮定すると、次のコマンドを使用して、Assertionブロックによって生成される警告、エラー メッセージ、またはカスタム コマンドの出力を無効にできます。次のプラス引数:
vsim -c -voptargs=+acc -sv_lib ../dut_win64 work.dut_dpi_tb +assertion:14