このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
ビット ベクトル データ型とロジック ベクトル データ型の生成
この例では、DPI コンポーネントの SystemVerilog インターフェイスでビットまたはロジック ベクトル データ型を生成する方法を示します。この機能は、DPI コンポーネントをテストベンチに統合するためにポートの正確な幅が重要である場合に役立ちます。
要件と前提条件
この例に必要な製品:
MATLAB®
Simulink®
Simulink Coder™
Fixed-Point Designer™
Mentor Graphics® 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 コードを生成するには、構成パラメーターを開きます。次に、コード生成 > システム Verilog DPI で、ポート データ タイプ メニューからBit Vector
を選択します。
あるいは、次のコマンドを実行してこのパラメーターを設定することもできます。
set_param('svdpi_BitVector','DPIFixedPointDataType','BitVector');
SystemVerilog DPI コンポーネントの生成
「svdpi_BitVector」モデルで、SineWaveGenerator ブロックを右クリックし、[C/C++ コード] -> [このサブシステムの構築] を選択します。
表示されるダイアログボックスで「ビルド」をクリックします。
このビルドでは、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」を開き、インターフェイスのデータ型をメモします。
「Logic Vector」を選択した場合、SystemVerilog DPI-C コンポーネントはインターフェイスに SystemVerilog「ロジック」タイプを使用します。
デフォルトの「互換性のある C タイプ」を選択した場合、生成される SystemVerilog データ型は、次のように「int」になります。
ポートタイプに関する考慮事項
「互換性のある C タイプ」は、最大 64 ビット幅のポートをサポートします。デザインにワード長が 64 を超えるポートが含まれている場合は、「ビット ベクター」または「ロジック ベクター」を選択する必要があります。
デザインに固定小数点数のベクトルが含まれており、「ビット ベクトル」または「ロジック ベクトル」を選択した場合、結果のデータ型は混合 (アンパックおよびパック) SystemVerilog 配列になります。たとえば、語長 2 の固定小数点数を含むサイズ 3 のベクトルは、ビット [1:0] PortName [3] にマップされます。