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 ライブラリにあります。

このブロックは、モデル検証 ライブラリの汎用 アサーション ブロックと同じように使用できます。シミュレーションの動作は Simulink アサーション ブロックと同じですが、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 シミュレーション動作にのみ影響します。

アサーション カスタム コマンド が有効な SystemVerilog ステートメントであることに注意してください。

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

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

SystemVerilog DPI-C コンポーネントを生成する

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

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

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

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

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 を plusargs 引数として HDL シミュレータに指定する必要があります。

たとえば、「InfoAssertion」アサーション ブロックの SID は「svdpi_assertion:6」です。したがって、このブロックによって提供される情報メッセージをフィルタリングするには、HDL シミュレータに引数「+svdpi_assertion:6」を指定する必要があります。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