Main Content

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

Simulinkからネイティブ SystemVerilog アサーションを生成する

この例では、 Simulink®モデルのアサーションからネイティブ SystemVerilog アサーションを生成する方法を示します。この機能は、 Simulinkと HDL テスト環境で同じアサーション動作が必要な場合に役立ちます。

要件と前提条件

この例に必要な製品:

  • Mentor Graphics® ModelSim®/QuestaSim® またはその他のサポートされている SystemVerilog シミュレータ

  • サポートされている C コンパイラの 1 つ:Microsoft® Visual C++、または GNU GCC

サポートされているソフトウェア バージョンについては、 サポートされている EDA ツールとハードウェアを参照してください。

概要

SystemVerilog アサーションを含む DPI-C コンポーネントを生成するには、 Simulinkモデルで Assertion for DPI-C ブロックを使用する必要があります。以下に示すように、HDL Verifier-> For Use with DPI-C SystemVerilog ライブラリでこのブロックを見つけます。

このブロックは、Model Verification ライブラリの汎用の Assertion ブロックと同様に使用できます。シミュレーションの動作はSimulink Assertion ブロックと同じですが、DPI-C コンポーネントの生成中に、ブロックはモデル内に存在する各 Assertion for DPI-C ブロックに対してネイティブ SystemVerilog アサーションを生成します。

セットアップ例

この例のモデルには 2 つの「DPI-C ブロックのアサーション」が含まれています。そのうちの 1 つはカスタマイズ オプションを使用して遅延に関する情報を提供するために使用され、2 番目のブロックは 2 番目の遅延が終了したときに警告を提供するように設定されています。

次のコードを実行してデザインを開きます。

open_system('svdpi_assertion');

コード生成用のモデルをセットアップする

モデルは、DPI-C システム ターゲット ファイル (systemverilog_dpi_grt.tlc) の 1 つで事前構成されています。DPI-C コンポーネントを生成する前に、ブロック マスクを介して SystemVerilog で必要なアサーション動作を構成してください。

デフォルトでは、アサーション ブロックがトリガーされると、空のメッセージを含む SystemVerilog エラー ($error("")) が生成されます。これは、エラー メッセージを提供するか、エラーを警告メッセージ付きの警告 ($warning("")) に変更するか、実行する独自のカスタム SystemVerilog コマンドを提供することで変更できます。

以下の図は、最初の遅延後のアサーション ブロックの SystemVerilog 動作設定を示しています。DPI-C アサーション オプション グループ外のパラメーターは、 Simulinkシミュレーションの動作にのみ影響します。

「Assertion カスタム コマンド」は有効な SystemVerilog ステートメントであることに注意してください。

2 番目のアサーション ブロックは、以下に示すように、指定されたメッセージを含む警告を出力するように構成されています。

モデルを実行すると、 Simulinkで 2 つのアサーション警告がトリガーされることがわかります。

SystemVerilog DPI-C コンポーネントの生成

  1. svdpi_assertion モデルで、DPI_C_Assertion ブロックを右クリックし、[C/C++ コード] -> [このサブシステムの構築] を選択します。

  2. 表示されるダイアログボックスで「ビルド」をクリックします。

  3. このビルドでは、DPI_C_Assertion サブシステムの C コードと、System Verilog DPI-C ラッパーおよび"DPI_C_Assertion_build/DPI_C_Assertion_dpi.sv"および"DPI_C_Assertion_build/DPI_C_Assertion_dpi_pkg.sv"という名前のパッケージ ファイルが生成されます。

あるいは、次のコマンドを実行してコンポーネントを生成することもできます。

slbuild('svdpi_assertion/DPI_C_Assertion');

HDL シミュレーターで生成されたテストベンチを実行する

この例では、ModelsSim/QuestaSim シミュレーターが使用されます。テストベンチの実行方法の詳細については、「SystemVerilog DPI コンポーネント生成の開始」を参照してください。

テストベンチを実行した後、DPI-C コンポーネントによってスローされるメッセージと警告に注目してください。

SystemVerilog アサーションをSimulinkに遡ってトレースする

警告を生成したアサーションをSimulinkまで追跡する場合は、以下に示すように、警告メッセージからSimulink識別子 (SID) を見つける必要があります。

アサーション ブロックの SID を見つけたら、 Simulinkプログラム API を使用して、対応するブロックを強調表示できます。実行する:

Simulink.ID.hilite('svdpi_assertion:7');

これにより、関連するブロックが強調表示されます。

HDL シミュレータでのアサーションのフィルタリング

HDL シミュレーターでアサーションをフィルター処理する場合は、フィルター処理するブロックの SID を HDL シミュレーターの plusargs 引数として指定する必要があります。

たとえば、「InfoAssertion」アサーション ブロックの SID は「svdpi_assertion:6」です。したがって、このブロックによって提供される情報メッセージをフィルターするには、引数「+svdpi_assertion:6」を HDL シミュレーターに提供する必要があります。Linux で ModelSim/QuestaSim を実行する場合は、 MATLABプロンプトに次のコマンドを入力します。

vsim -c -voptargs=+acc -sv_lib ../DPI_C_Assertion work.DPI_C_Assertion_dpi_tb +svdpi_assertion:6

Windows ユーザーの場合は、次のコマンドを入力します。

vsim -c -voptargs=+acc -sv_lib ../DPI_C_Assertion_win64 work.DPI_C_Assertion_dpi_tb +svdpi_assertion:6