Main Content

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

ビットベクターとロジックベクターのデータ型を生成する

この例では、DPI コンポーネントの SystemVerilog インターフェイスでビットまたはロジック ベクター データ型を生成する方法を示します。この機能は、DPI コンポーネントをテストベンチに統合するためにポートの正確な幅が重要な場合に役立ちます。

要件と前提条件

この例に必要な製品:

  • MATLAB®

  • Simulink®

  • Simulink Coder™

  • Fixed-Point Designer™

  • メンターグラフィックス® ModelSim®/QuestaSim®

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

概要

Simulink モデルに固定小数点データ型のポートがある場合、生成された SystemVerilog コードはデフォルトで、必要なビットを保持できる互換性のある C 型にポートをマップします。これらのマッピングの詳細については、ドキュメントの「サポートされている Simulink データ型」を参照してください。

この Simulink モデルは、20 ビットの符号付き固定小数点データ型を使用して離散正弦波を生成します。デフォルトでは、生成された SystemVerilog コードは、このポートを表すために 'int' データ型を使用します。この例では、ビット ベクトルまたはロジック ベクトルを使用して固定小数点数の正確な長さを表す SystemVerilog コードを生成する方法を示します。

例を開く

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

open_system('svdpi_BitVector');

コード生成のためのモデルの設定

モデルは、DPI-C システム ターゲット ファイル (systemverilog_dpi_grt.tlc) の 1 つを使用して事前構成されています。ビットまたはロジック ベクトルを含む SystemVerilog コードを生成するには、構成パラメータを開きます。次に、コード生成 > System Verilog DPI で、ポート データ型 メニューから Bit Vector を選択します。

あるいは、次のコマンドを実行してこのパラメータを設定することもできます。

set_param('svdpi_BitVector','DPIFixedPointDataType','BitVector');

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

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

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

  3. このビルドでは、SineWaveGenerator サブシステムの C コード、System Verilog DPI ラッパー「SineWaveGenerator_build/SineWaveGenerator_dpi.sv」、およびパッケージ ファイル「SineWaveGenerator_build/SineWaveGenerator_dpi_pkg.sv」が生成されます。

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

slbuild('svdpi_BitVector/SineWaveGenerator');

SystemVerilog コードを検査する

DPI コンポーネント「SineWaveGenerator_dpi.sv」を開き、インターフェイスのデータ型をメモします。

「ロジック ベクター」を選択した場合、SystemVerilog DPI-C コンポーネントはインターフェイスに SystemVerilog「ロジック」タイプを使用します。

デフォルトの「互換 C 型」を選択した場合、生成される SystemVerilog データ型は次のように「int」になります。

ポートタイプに関する考慮事項

  • 「互換 C タイプ」は最大 64 ビット幅のポートをサポートします。デザインにワード長が 64 を超えるポートが含まれている場合は、「ビット ベクター」または「ロジック ベクター」を選択する必要があります。

  • デザインに固定小数点数のベクトルが含まれており、「ビット ベクトル」または「ロジック ベクトル」を選択した場合、結果のデータ型は混合 (アンパックとパック) SystemVerilog 配列になります。たとえば、ワード長2の固定小数点数を含むサイズ3のベクトルは、ビット[1:0] PortName [3]にマップされます。