Main Content

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

SystemVerilog アサーションと機能カバレッジの生成

SystemVerilog DPI コンポーネントの生成と Universal Verification Methodology (UVM) テストベンチの生成ワークフローを使用すると、生成される SystemVerilog でSimulink®検証モデルを再利用できます。 Simulinkモデル検証ブロック ( Assertion (Simulink)Check Dynamic Lower Bound (Simulink)など)、およびverify (Simulink Test)ステートメントの呼び出しにより、エラー チェックが作成されます。生成された SystemVerilog 内の機能カバレッジ ポイント。

Simulinkアサーションまたはverify呼び出しが失敗すると、デフォルトで SystemVerilog エラーが生成されます。どちらかが成功すると、PASS 結果を記録する SystemVerilog カバー ポイントが生成されます。アサーションとverifyステートメントの動作は、SystemVerilog コマンド ライン引数とHDL Verifier Assertion ブロックを使用してカスタマイズできます。カスタマイズの詳細については、 「 アサーションのカスタマイズ 」を参照してください。

Simulink Testベンチ モデルの作成

Simulinkで、テスト対象デバイス (DUT) のモデルを作成し、そのモデルのテストベンチを作成します。次のような、 Simulink /Model Verification ライブラリのアサーション ブロックとSimulink Testライブラリのverifyステートメントを含むブロックの組み合わせを使用できます。

Simulink Testシーケンスの作成

テストベンチ モデルに、次のブロックを 1 つ以上追加してverifyステートメントを含めます。

テスト ステップを作成および編集するには、 Test Sequence エディター (Simulink Test)を使用します。テスト シーケンスでは、 verifyテスト シーケンスと評価の構文 (Simulink Test) ステートメントを使用してシミュレーションを評価します。

verifyステートメントとTest Sequenceブロックは、 Simulinkでの一時的なチェックを表します。SystemVerilog DPI コンポーネントを生成すると、生成された C コード内に時相ロジックが配置されます。SystemVerilog ラッパーには、検証条件に違反したときにトリガーされる即時アサーションが含まれています。

Simulinkモデル検証ブロックを含める

Simulink / Model Verification (Simulink)ライブラリからこれらのアサーション ブロックを含めることもできます。

さらに、 HDL Verifier Assertionブロックを含めて、カスタマイズ可能なアサーションを作成できます。HDL Verifier Assertionブロックを使用する例については、 Simulinkからネイティブ SystemVerilog アサーションを生成するを参照してください。

SystemVerilog では、すべてのモデル検証ブロックとverifyステートメントがアサーションとカバレッジ ポイントにマップされます。カバレッジ目標を調整したり、特定のアサーションをフィルタリングしたり、各 verify ステートメントの詳細情報を確認したりできます。

モデル内では複数のverifyステートメントとアサーション ブロックを使用できます。

Simulinkでデザインをシミュレーションする場合、アサーションまたはverifyの評価が失敗すると、シミュレーションによって警告が表示されます。

Diagnostic Viewer dialog box showing results of simulation: "Test verification failed at t = 7.1 : System should turn off above max on temp."

シミュレーション データ インスペクターを使用して、シミュレーション結果を表示および検査できます。 (Simulink)MATLAB®コマンド プロンプトで次のコードを入力して、シミュレーション データ インスペクターを開きます。

Simulink.sdi.view

信号を経時的に表示するには、シミュレーション データ インスペクター の左側のペインで信号を選択します。

Simulation Data Inspector dialog box with two signals selected on the left pane and a graph on the right pane showing that one test passed and one failed.

アサーションのカスタマイズ

SystemVerilog 即時アサーションは、次の 2 つの方法でカスタマイズできます。

  • HDL Verifier Assertionブロックを組み込み、生成された SystemVerilog 即時アサーションをカスタマイズします。アサーションが失敗した場合のカスタム メッセージを設定でき、アサーションが失敗した場合は警告、エラー、カスタム コマンドのいずれかを選択できます。HDL Verifier Assertionブロックを使用する例については、 Simulinkからネイティブ SystemVerilog アサーションを生成するを参照してください。結果はこの図と同様になります。

    Input logic connected to a Gain block, which is connected to a DPI customized assertion block

  • モデル検証ライブラリからのアサーションをカスタマイズするには、次の手順に従って、ブロック出力をカスタマイズ可能なHDL Verifier Assertionブロックに接続します。

    1. Simulink / Model Verification ライブラリのブロックをモデルに追加します。

    2. ブロック マスクを開いて、次のパラメーターを設定します (次の図を参照)。

      • 冗長なアサーション出力を防ぐには、Enable assertionパラメーターをクリアします。

      • Output assertion signalパラメーターを選択して、アサーションをキャプチャするブール出力信号を作成します。

      Block mask for Check Static Upper Bound block, showing that the Enable assertion parameter is cleared, and the Output assertion signal parameter is selected.

    3. Assertion HDL Verifier / For Use with DPI-C SystemVerilog ブロックを追加し、Model Verification ブロックの出力信号を Assertionの入力端子に接続します。ブロック。

    4. Assertion アサーションの生成ワークフロー ブロックをカスタマイズします。

    結果はこの図と同様になります。

    A sine-wave generator connected to a static upper bound assertion block, which is connected to a DPI customized assertion block

UVM または SystemVerilog DPI コンポーネントの生成

コード生成用のモデルを構成する

[コンフィギュレーションパラメーター]ダイアログ ボックスの左側のペインでCode Generationを選択します。Target Selectionで、 System Target Filesystemverilog_dpi_grt.tlcに設定するか、$を使用する場合はsystemverilog_dpi_ert.tlcに設定します。 $Embedded Coder®

左側のペインでSystemVerilog DPIを選択します。SystemVerilog Portsで、データ型と接続設定を設定します。[OK]をクリックします。

UVM または SystemVerilog DPI コンポーネントの生成

メモ

UVM または DPI コンポーネントを生成するには、アサーション ブロックまたはテスト ブロックがSimulinkサブシステム内にある必要があります。

Simulinkで、テスト シーケンスを含むサブシステム ブロックを右クリックし、 C/C++ CodeBuild This Subsystemを選択します。表示されるダイアログ ボックスでBuildをクリックします。

あるいは、 MATLABコマンド ラインを使用して DPI コンポーネントを生成することもできます。slbuild (Simulink)関数を使用してシステムを構築します。たとえば、「My_verify_tst」という名前のサブシステムを構築するには、 MATLABコマンド ラインに次のコードを入力します。

slbuild('My_verify_tst');

uvmbuild関数を使用して UVM テストベンチを生成することもできます。テスト モデルにverifyステートメントが含まれている場合、それらは UVM 環境のアサーションにマップされ、カバレッジ データが収集されます。

生成されたコンポーネントを使用して HDL シミュレーションを実行する

現在のフォルダーをdpi_tbフォルダーに変更します。このフォルダーは、HDL シミュレーター インストールのコード生成フォルダーの下にあります。HDL シミュレーターを起動し、生成されたスクリプトを実行してシミュレーションを開始します。シミュレーションの出力は、Simulinkの出力と一致しています。

シミュレーションが完了すると、各アサーションのカバレッジ情報が表示されます。デフォルトでは、アサーションは少なくとも 1 回評価された場合にカバーされているとみなされます。

Log file from HDL simulation. The log shows that two verify calls were checked. One was covered in simulation and the other was not.

HDL シミュレーションの実行の詳細については、 生成されたコンポーネントをSimulinkデータと照合して検証するを参照してください。

アサーションとカバレッジレポートのフィルタリング

生成された各エラーまたは警告には、その原因を識別する一意の名前が表示されます。この番号は、そのブロックの一意のSimulink識別子 (SID) です。たとえば、このログは、SID Req_scenario_4:32:60のブロックによって生成されたエラーを示しています。

# ** Error: Req_scenario_4:32:60: At step 'Check2' verify id 'Simulink:verify_sc4_off' Failed

テスト シーケンスには、 verify評価を利用するいくつかのステップや、シミュレーションからの警告を記録する複数の DPI コンポーネントが含まれる場合があります。テスト モデルでは、関連する SID をコマンド ラインのプラス引数として指定し、その SID を verify-1。。たとえば、SID Req_scenario_4:32:60のすべての出力と機能カバレッジをオフにするには、HDL コマンド ラインで次のコードを入力します。

vsim -c -sv_lib ../Req_4 work.Req_4_dpi_tb +Req_scenario_4:32:60=-1

機能カバレッジ目標を調整する

アサーション ブロックとverifyステートメントを使用して、SystemVerilog シミュレーション中に機能カバレッジを収集できます。uvmbuild関数またはslbuild (Simulink)関数を使用して SystemVerilog を生成した後、各アサーションのカバレッジ目標を定義します。SystemVerilog シミュレーションが完了したら、生成されたログ ファイルの結果を表示するか、サードパーティ ツールを使用して結果を抽出します。デフォルトのカバレッジ目標は、アサーションまたはverify呼び出しを少なくとも 1 回実行することです。

特定のアサーションの機能カバレッジ目標を増やすには、関連する SID をコマンド ラインのプラス引数として指定し、その SID をカバレッジ目標と同等にします。たとえば、SID verifyReq_scenario_4:32:60ステートメントのカバレッジ目標を、デフォルトの 1 つのチェック合格から 2 つに増やすには、HDL コマンド ラインで次のコードを入力します。

vsim -c -sv_lib ../Req_4 work.Req_4_dpi_tb +Req_scenario_4:32:60=2

詳細モード

デフォルトでは、生成された DPI コンポーネントは、機能カバレッジ ポイントが評価されて失敗するとエラーを出力します。機能カバレッジ ポイントによって生成された追加の出力を確認するには、HDL シミュレーション コマンド ラインで引数+VERBOSE_VERIFYを入力します。この引数により、次の追加情報が追加されます。

  • UNTESTED – 機能カバレッジ ポイントが評価されなかった場合

  • PASSED – 機能カバレッジ ポイントが評価され、テストに合格したとき

たとえば、 ModelSim®を使用する場合は、コマンド ラインに次のコードを入力します。

vsim -c -sv_lib ../Req_4 work.Req_4_dpi_tb +VERBOSE_VERIFY

生成された SystemVerilog エラーをSimulinkソースに戻すトレース

生成されたテスト シーケンスを使用して SystemVerilog シミュレーションを実行すると、ログ ファイルに警告とエラーが表示されます。どのブロックが特定の警告またはエラー出力を引き起こしたかを特定するには、 hilite_system (Simulink)関数を使用します。

たとえば、SID Req_scenario_4:32:60の警告を生成したブロックを強調表示するには、 MATLABコマンド ラインに次のコードを入力します。

hilite_system('Req_scenario_4:32:60');

この図は、警告を作成した verify ステートメントとテスト シーケンス ブロックを強調表示しています。

Image of highlighted Test Sequence block. This block is the source of warnings from SID Req_scenario_4:32:60.

Image of verify statement which created the warning for SID Req_scenario_4:32:60.

参考

ブロック

MATLAB 言語構文

関連するトピック