Main Content

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

dpigen

MATLAB関数から UVM または SystemVerilog DPI コンポーネントを生成

アドオンが必要です: この機能には、 ASIC Testbench for HDL Verifierアドオンが必要です。

説明

dpigen fcn -args args は、 MATLAB®関数fcnと、 fcnが呼び出すすべての関数から DPI コンポーネント共有ライブラリを生成します。 。

  • .dll (Microsoft® Windows®システム上の共有ライブラリ用)

  • .so ( Linux®システム上の共有ライブラリ用)

dpigen関数は、関数宣言を含む SystemVerilog パッケージ ファイルも生成します。

引数-args args は、生成されたコードが受け入れることができる入力のタイプを指定します。生成された DPI コンポーネントは、入力のクラスとサイズに特化されています。この情報を使用して、 dpigen は、 MATLAB関数の動作をエミュレートする DPI コンポーネントを生成します。

fcnおよび—args argsは必須の入力引数です。MATLAB関数は、MATLABパス上または現在のフォルダー内に存在する必要があります。

dpigen fcn -config config -args args は、 svdpiConfigurationオブジェクトで指定されたテンプレートと設定に基づいて、SystemVerilog または UVM コンポーネントを生成します。SystemVerilog および UVM テンプレートの詳細については、 「SystemVerilog および UVM テンプレート エンジン」を参照してください。

dpigen fcn -args args -testbench tb_name options files -c -launchreport -PortsDataType type -ComponentTemplateType template_type は、指定されたオプションに従って SystemVerilog DPI コンポーネント共有ライブラリを生成します。0 個以上のオプションの引数を任意の順序で指定できます。

  • -testbench tb_name は、SystemVerilog DPI コンポーネントのテストベンチも生成します。MATLABテストベンチは、MATLABパスまたは現在のフォルダーに存在する必要があります。

  • options は、コンパイラとコード生成の追加オプションを指定します。

  • files は、生成されたコードに含めるカスタム ファイルを指定します。

  • -c はC コードのみを生成します。

  • -launchreport は、コード生成レポートを生成して開きます。

  • -PortsDataType は、ポートに使用する SystemVerilog データ型を指定します。

  • -ComponentTemplateType は、デザインがシーケンシャルであるか組み合わせであるかを指定します。

DPI コンポーネントを生成すると、そのホスト プラットフォームに固有の共有ライブラリが作成されます。たとえば、 MATLABで 64 ビットWindowsを使用すると、64 ビット DLL が得られますが、これは 64 ビット HDL シミュレータでのみ使用できます。 Windows。生成されたコンポーネントをWindowsからLinuxに移植する場合は、 生成されたコンポーネントとテストベンチをLinuxにポートしますを参照してください。

すべて折りたたむ

関数fun.mの DPI コンポーネントとテストベンチ、およびそれに関連するテストベンチfun_tb.mを生成します。dpigen関数は、デフォルトのコンパイラを使用してコンポーネントを自動的にコンパイルします。-argsオプションは、最初の入力タイプがdoubleであり、2 番目の入力タイプがint8であることを指定します。

dpigen -testbench fun_tb.m -I E:\HDLTools\ModelSim\10.2c-mw-0\questa_sim\include fun.m 
      -args {double(0),int8(0)}
### Generating DPI-C Wrapper fun_dpi.c
### Generating DPI-C Wrapper header file fun_dpi.h
### Generating SystemVerilog module package fun_dpi_pkg.sv
### Generating SystemVerilog module fun_dpi.sv
### Generating makefiles for: fun_dpi
### Compiling the DPI Component
### Generating SystemVerilog test bench fun_tb.sv
### Generating test bench simulation script for Mentor Graphics QuestaSim/Modelsim run_tb_mq.do
### Generating test bench simulation script for Cadence Xcelium run_tb_xcelium.sh
### Generating test bench simulation script for Synopsys VCS run_tb_vcs.sh
### Generating test bench simulation script for Vivado Simulator run_tb_vivado.bat

DPI コンポーネントと関数fun.mのテストベンチ、およびそれに関連するテストベンチfun_tb.mを生成します。dpigen関数がライブラリをコンパイルしないようにするには、 -cオプションを含めます。出力されたソース コードを「MyDPIProject」に送信します。

dpigen -c -d MyDPIProject -testbench fun_tb.m fun.m -args {double(0),int8(0)}
### Generating DPI-C Wrapper fun_dpi.c
### Generating DPI-C Wrapper header file fun_dpi.h
### Generating SystemVerilog module package fun_dpi_pkg.sv
### Generating SystemVerilog module fun_dpi.sv
### Generating makefiles for: fun_dpi
### Generating SystemVerilog test bench fun_tb.sv
### Generating test bench simulation script for Mentor Graphics ModelSim/QuestaSim run_tb_mq.do
### Generating test bench simulation script for Cadence Xcelium run_tb_xcelium.sh
### Generating test bench simulation script for Synopsys VCS run_tb_vcs.sh
### Generating test bench simulation script for Vivado Simulator run_tb_vivado.bat

この例では、 HDL Verifier™のデフォルト テンプレートを使用して、 sineWaveGen関数から SystemVerilog DPI (SVDPI) コンポーネントを生成する方法を示します。

デフォルトのテンプレートを使用して SVDPI モジュールを作成する

デフォルトのテンプレートを使用して構成オブジェクトを作成し、それをdpigen関数で使用します。生成された SystemVerilog ファイルに注目してください。

  • sineWaveGen.sv

  • sineWaveGen_pkg.sv

c=svdpiConfiguration();
dpigen -config c -args {0,0} sineWaveGen
### Generating DPI-C Wrapper /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_pkg.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen.sv from template text.
### Generating makefiles for: sineWaveGen_dpi
Code generation successful.

生成されたモジュールの名前をmyDutに変更します。生成された SystemVerilog ファイルに注目してください。

  • マイダット.sv

  • マイダット_pkg.sv

c.ComponentTypeName = 'myDut';
dpigen -config c -args {0,0} sineWaveGen
### Generating DPI-C Wrapper /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/myDut_pkg.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/myDut.sv from template text.
### Generating makefiles for: sineWaveGen_dpi
Code generation successful.

テンプレートを使用して UVM プレディクターを作成する

UVM 予測子テンプレートを使用して構成オブジェクトを作成し、それをdpigen関数で使用します。生成された SystemVerilog ファイルに注目してください。

  • predictor_input_trans.sv

  • predictor_output_trans.sv

  • sinWave_predictor_pkg.sv

  • sinWave_predictor.sv

c = svdpiConfiguration('uvm-predictor');
c.ComponentTypeName = 'sinWave_predictor';
dpigen sineWaveGen -config c -args {0,0}
### Generating DPI-C Wrapper /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sinWave_predictor_pkg.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/predictor_input_trans.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/predictor_output_trans.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/predictor_cfgobj.sv from template text.
Warning: Port group 'CONFIG_OBJECT_INPUTS' was found in the template file but contained no ports in its list. Specify the PortGroups list using the svdpiConfiguration object.
Warning: Port group 'CONFIG_OBJECT_INPUTS' was found in the template file but contained no ports in its list. Specify the PortGroups list using the svdpiConfiguration object.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sinWave_predictor.sv from template text.
Warning: Port group 'CONFIG_OBJECT_INPUTS' was found in the template file but contained no ports in its list. Specify the PortGroups list using the svdpiConfiguration object.
### Generating makefiles for: sineWaveGen_dpi
Code generation successful.

テンプレート変数値を上書きする

ここで、生成された SystemVerilog トランザクション名を変更します。

  • デフォルトのpredictor_input_transをオーバーライドし、名前をsineWaveTransに変更します。

  • デフォルトのpredictor_output_transをオーバーライドし、名前をsineWaveOutに変更します。

テンプレート ディクショナリのInputTransTypeName変数とOutputTransTypeName変数に新しい値を割り当てるには、 TemplateDictionaryプロパティを設定します。

c.TemplateDictionary = {
    'InputTransTypeName','sineWaveTrans',
    'OutputTransTypeName','sineWaveOut'
};
dpigen sineWaveGen -config c -args {0,0}
### Generating DPI-C Wrapper /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sinWave_predictor_pkg.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveTrans.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveOut.sv from template text.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/predictor_cfgobj.sv from template text.
Warning: Port group 'CONFIG_OBJECT_INPUTS' was found in the template file but contained no ports in its list. Specify the PortGroups list using the svdpiConfiguration object.
Warning: Port group 'CONFIG_OBJECT_INPUTS' was found in the template file but contained no ports in its list. Specify the PortGroups list using the svdpiConfiguration object.
### Generating source code file /tmp/Bdoc23b_2492649_1044276/tpd2444e94/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sinWave_predictor.sv from template text.
Warning: Port group 'CONFIG_OBJECT_INPUTS' was found in the template file but contained no ports in its list. Specify the PortGroups list using the svdpiConfiguration object.
### Generating makefiles for: sineWaveGen_dpi
Code generation successful.

入力引数

すべて折りたたむ

DPI コンポーネントの生成元となるMATLAB関数の名前。文字ベクトルまたは文字列スカラーとして指定します。MATLAB関数は、MATLABパス上または現在のフォルダー内に存在する必要があります。

svdpiConfigurationオブジェクトを使用してカスタム構成パラメーターを指定します。このオブジェクトには、 coder.config('dll')オブジェクトを使用したカスタム C コード生成パラメーターと、生成する SystemVerilog コンポーネントの種類の仕様 ( sequential-moduleuvm-predictorなど) が含まれています。 $、 uvm-sequence、またはcustom

競合するオプションの使用を避けるために、構成オブジェクトとコマンドライン オプションを組み合わせないでください。通常、configオブジェクトは、コマンド ライン フラグよりも多くのオプションを提供します。

メモ

coder.configオブジェクトを指定するオプションは、将来のリリースでは非推奨になります。svdpiConfigurationオブジェクトの使用に移行します。

coder.configオブジェクトのすべてのオプションが DPI 機能と互換性があるわけではありません。互換性のないオプションを使用しようとすると、どのオプションが互換性がないかを示すエラー メッセージが表示されます。

MATLAB関数入力のデータ型とサイズ。セル配列として指定します。生成された DPI コンポーネントが受け入れる入力タイプを指定します。 args は、各関数の引数の型を指定するセル配列です。要素はcoder.typeofを使用して型に変換されます。この引数は必須です。

この引数は、 codegen (MATLAB Coder)関数の引数argsと同じ機能を持ちます。 args は、関数fcnにのみ適用されます。

例: -args {double(0),int8(0)}

MATLABテスト ベンチは、生成された DPI コンポーネントのテスト ベンチを生成するために使用されます。文字ベクトルまたは文字列スカラーとして指定します。dpigen関数は、このテストベンチを使用して、データ ファイルおよび実行スクリプトとともに SystemVerilog テストベンチを生成します。MATLABテストベンチは、MATLABパスまたは現在のフォルダーに存在する必要があります。

-testbench引数には、Fixed-Point Designer™ライセンスが必要です。

例: -testbench My_Test_bench.m

コンパイラおよびcodegenオプション。文字ベクトルまたは文字列スカラーとして指定します。これらのオプションは、 codegen (MATLAB Coder)のオプションのサブセットです。dpigen関数は、構成オブジェクトを使用して指定されたオプションよりも個々のコマンドライン オプションを優先します。コマンドライン オプションが競合する場合は、右端のオプションが優先されます。

0 個以上のオプションの引数を任意の順序で指定できます。以下に例を示します。

dpigen -c -d MyDPIProject -testbench fun_tb.m fun.m -args {double(0),int8(0)} -launchreport

オプションフラグオプションの値
-I include_path

codegenに必要なヘッダーとライブラリ ファイルを含むフォルダーへのパスを指定します。文字ベクトルまたは文字列スカラーとして指定します。コード生成パスの先頭にinclude_pathを追加します。

以下に例を示します。

-I E:\HDLTools\ModelSim\10.2c-mw-0\questa_sim\include

include_path にはスペースを含めることはできません。スペースを含めると、特定のオペレーティング システム構成でコード生成エラーが発生する可能性があります。パスに日本語文字などの 7 ビット ASCII 以外の文字が含まれている場合、 dpigen はこのパスでファイルを見つけられない可能性があります。

MATLABコードを C/C++ コードに変換する場合、 dpigen は最初にコード生成パスを検索します。

あるいは、 files入力引数を使用してインクルード パスを指定することもできます。

-o output

生成されたコンポーネントの名前を文字ベクトルまたは文字列スカラーとして指定します。dpigen関数は、共有ライブラリのこの名前にプラットフォーム固有の拡張子を追加します。

  • .dll ( Microsoft Windowsシステム上の C/C++ 動的ライブラリ用)

  • .so ( Linuxシステム上の C/C++ 動的ライブラリ用)

-d dir

出力フォルダーを指定します。生成されたすべてのファイルはdirに配置されます。デフォルトでは、ファイルは./codegen/dll/<function>に配置されます。

たとえば、 dpigen が関数fun.mをコンパイルすると、生成されたコードは./codegen/dll/funに配置されます。

-globals globals

MATLABファイル内のグローバル変数の初期値を指定します。関数内のグローバル変数は、セル配列GLOBALSの値に初期化されます。cell 配列は、各グローバル変数の名前と初期値を提供します。

-globalsオプションを使用してグローバル変数の初期値を指定しない場合、 dpigen はMATLABグローバル ワークスペース内の変数をチェックします。初期値を指定しない場合、 dpigen はエラーを生成します。

MATLAB Coder™とMATLABはそれぞれ、グローバル データの独自のコピーを持っています。一貫性を保つために、2 つの製品が相互作用するたびにグローバル データを同期してください。データを同期しない場合、グローバル変数が異なる可能性があります。

-rowmajorすべての関数で行優先の配列レイアウトを使用するコードを生成するには、このオプションを指定します。このオプションが指定されていない場合、生成されるコードは列優先の配列レイアウトを使用します。特定の関数とその関数が呼び出す関数で使用される配列レイアウトをオーバーライドするには、関数のbodyでcoder.rowMajorまたはcoder.columnMajorを指定します。

生成されたコードに含めるカスタム ファイル。各ファイルは文字ベクトルまたは文字列スカラーとして指定されます。ファイルは、 MATLAB fcn関数に従ってビルドされます。各ファイルをスペースで区切って個別にリストします。次の拡張子がサポートされています。

ファイルの種類説明
.cカスタム C ファイル
.cppカスタム C++ ファイル
.hカスタムヘッダーファイル (生成されたすべてのファイルに含まれます)
.oオブジェクトファイル
.objオブジェクトファイル
.aライブラリ ファイル
.soライブラリ ファイル
.libライブラリ ファイル

Windowsでは、 MATLAB関数に行列またはベクトルの出力引数または入力引数が含まれる場合、 filesオプションを使用してライブラリを指定します (.lib)、 ModelSim® DPI 定義が含まれます。それ以外の場合は、生成された Makefile (*.mk) を手動で変更し、ライブラリを個別にコンパイルする必要があります。

DPI コンポーネントをコンパイルせずに C コードを生成するオプション。文字ベクトル-cとして指定します。-cオプションを使用しない場合、 dpigen はデフォルトのコンパイラを使用して DPI コンポーネントをコンパイルしようとします。別のコンパイラを選択するには、 -configオプションを使用し、別のオプションの指定手順についてはcodegen (MATLAB Coder)のドキュメントを参照してください。

コード生成レポートを生成して開くオプション。文字ベクトル-launchreportとして指定します。

ポートに使用される SystemVerilog データ タイプを選択します。可能な 3 つの値から選択します。

  • CompatibleCType – ポート用の互換性のある C タイプ インターフェイスを生成します。

  • BitVector – ポートのビット ベクトル タイプ インターフェイスを生成します。

  • LogicVector – ポートの論理ベクトル型インターフェイスを生成します。

この表の左側の列にはMATLABデータ型が示されており、 PortsDataTypeの各値に対して生成された SystemVerilog 型が示されています。

生成された SystemVerilog タイプ

MATLABSystemVerilog
互換性のあるCタイプロジックベクトルビットベクトル
uint8byte unsignedlogic [7:0] bit [7:0]
uint16shortint unsignedlogic [15:0] bit [15:0]
uint32int unsignedlogic [31:0]bit [31:0]
uint64longint unsignedlogic [63:0]bit [63:0]
int8bytelogic signed [7:0]bit signed [7:0]
int16shortintlogic signed [15:0]bit signed [15:0]
int32intlogic signed [31:0]bit signed [31:0]
int64longintlogic signed [63:0]bit signed [63:0]
logicalbyte unsignedlogic [0:0]bit [0:0]
fi (固定小数点データ型)

固定小数点の語長に依存します。固定小数点のワード長がホストのワード サイズより大きい場合 (たとえば、64 ビットと 32 ビット)、このデータ型をMATLABによって SystemVerilog データ型に変換することはできません。 Coderとするとエラーが発生します。固定小数点のワード長がホストのワード サイズ以下の場合、 MATLAB Coderは固定小数点データ型を組み込みの C 型に変換します。 。

logic [n-1:0]

logic signed [n-1:0]

論理ベクトルの長さ (n) はwordlengthと同じです。符号は固定小数点型から継承されます。

bit [n-1:0]

bit signed [n-1:0]

ビット ベクトルの長さ (n) はwordlengthと同じです。符号は固定小数点型から継承されます。

singleshortreal
doublereal
complex

コーダーは、複雑な信号を SystemVerilog コンポーネントの実数部と虚数部に平坦化します。

ベクトル、行列

配列

たとえば、 MATLABの 4 行 2 列の行列は、SystemVerilog では 8 つの要素からなる 1 次元配列に変換されます。デフォルトでは、コーダーは行列を列優先の順序で平坦化します。行優先の順序に変更するには、 -rowmajor関数でdpigenオプションを使用します。詳細については、 「行優先の配列レイアウトを使用するコードの生成 (MATLAB Coder)」を参照してください。

structure

コーダーは、構造要素を SystemVerilog コンポーネントの個別のポートに平坦化します。

列挙されたデータ型enum

SystemVerilog ラッパーの DPI コンポーネント テンプレートを選択します。

  • Sequential – レジスタを使用してシーケンシャル デザインを指定します。

  • Combinational – レジスタなしの組み合わせデザインを指定します。

依存関係

config引数がsvdpiConfigurationオブジェクトに設定されている場合、この引数は無視されます。

関数に永続変数が含まれている場合、それはシーケンシャル設計とみなされます。

バージョン履歴

R2014b で導入

すべて展開する