このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
dpigen
MATLAB関数から UVM または SystemVerilog DPI コンポーネントを生成
アドオンが必要です: この機能には、 ASIC Testbench for HDL Verifierアドオンが必要です。
構文
説明
dpigen
は、 MATLAB®関数fcn
-args args
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
は、指定されたオプションに従って SystemVerilog DPI コンポーネント共有ライブラリを生成します。0 個以上のオプションの引数を任意の順序で指定できます。 fcn
-args args
-testbench tb_name
options
files
-c
-launchreport
-PortsDataType
type -ComponentTemplateType
template_type
-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にポートしますを参照してください。
例
DPI コンポーネントとテストベンチを生成する
関数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 コンポーネントとテストベンチを生成
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
MATLAB関数から SystemVerilog DPI コンポーネントを生成
この例では、 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.
入力引数
fcn
— MATLAB関数の名前
文字ベクトル | string スカラー
DPI コンポーネントの生成元となるMATLAB関数の名前。文字ベクトルまたは文字列スカラーとして指定します。MATLAB関数は、MATLABパス上または現在のフォルダー内に存在する必要があります。
-config
— SystemVerilog DPI 構成
svdpiConfiguration
オブジェクト | coder.config
オブジェクト
svdpiConfiguration
オブジェクトを使用してカスタム構成パラメーターを指定します。このオブジェクトには、 coder.config('dll')
オブジェクトを使用したカスタム C コード生成パラメーターと、生成する SystemVerilog コンポーネントの種類の仕様 ( sequential-module
、 uvm-predictor
など) が含まれています。 $、 uvm-sequence
、またはcustom
。
競合するオプションの使用を避けるために、構成オブジェクトとコマンドライン オプションを組み合わせないでください。通常、config
オブジェクトは、コマンド ライン フラグよりも多くのオプションを提供します。
メモ
coder.config
オブジェクトを指定するオプションは、将来のリリースでは非推奨になります。svdpiConfiguration
オブジェクトの使用に移行します。
coder.config
オブジェクトのすべてのオプションが DPI 機能と互換性があるわけではありません。互換性のないオプションを使用しようとすると、どのオプションが互換性がないかを示すエラー メッセージが表示されます。
-args args
— MATLAB関数入力のデータ型とサイズ
cell 配列
MATLAB関数入力のデータ型とサイズ。セル配列として指定します。生成された DPI コンポーネントが受け入れる入力タイプを指定します。 args
は、各関数の引数の型を指定するセル配列です。要素はcoder.typeof
を使用して型に変換されます。この引数は必須です。
この引数は、 codegen
(MATLAB Coder)関数の引数args
と同じ機能を持ちます。 args
は、関数fcn
にのみ適用されます。
例: -args {double(0),int8(0)}
-testbench tb_name
— MATLABテスト ベンチは、生成された DPI コンポーネントのテスト ベンチを生成するために使用されます
文字ベクトル | string スカラー
MATLABテスト ベンチは、生成された DPI コンポーネントのテスト ベンチを生成するために使用されます。文字ベクトルまたは文字列スカラーとして指定します。dpigen
関数は、このテストベンチを使用して、データ ファイルおよび実行スクリプトとともに SystemVerilog テストベンチを生成します。MATLABテストベンチは、MATLABパスまたは現在のフォルダーに存在する必要があります。
-testbench
引数には、Fixed-Point Designer™ライセンスが必要です。
例: -testbench My_Test_bench.m
options
— コンパイラとコード生成のオプション
文字ベクトル | string スカラー
コンパイラおよび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 |
以下に例を示します。
MATLABコードを C/C++ コードに変換する場合、 あるいは、 |
-o output | 生成されたコンポーネントの名前を文字ベクトルまたは文字列スカラーとして指定します。
|
-d dir | 出力フォルダーを指定します。生成されたすべてのファイルは たとえば、 |
-globals globals | MATLABファイル内のグローバル変数の初期値を指定します。関数内のグローバル変数は、セル配列
MATLAB Coder™とMATLABはそれぞれ、グローバル データの独自のコピーを持っています。一貫性を保つために、2 つの製品が相互作用するたびにグローバル データを同期してください。データを同期しない場合、グローバル変数が異なる可能性があります。 |
-rowmajor | すべての関数で行優先の配列レイアウトを使用するコードを生成するには、このオプションを指定します。このオプションが指定されていない場合、生成されるコードは列優先の配列レイアウトを使用します。特定の関数とその関数が呼び出す関数で使用される配列レイアウトをオーバーライドするには、関数のbodyでcoder.rowMajor またはcoder.columnMajor を指定します。 |
files
— 生成されたコードに含めるカスタム ファイル
文字ベクトル | string スカラー
生成されたコードに含めるカスタム ファイル。各ファイルは文字ベクトルまたは文字列スカラーとして指定されます。ファイルは、 MATLAB fcn
関数に従ってビルドされます。各ファイルをスペースで区切って個別にリストします。次の拡張子がサポートされています。
ファイルの種類 | 説明 |
---|---|
.c | カスタム C ファイル |
.cpp | カスタム C++ ファイル |
.h | カスタムヘッダーファイル (生成されたすべてのファイルに含まれます) |
.o | オブジェクトファイル |
.obj | オブジェクトファイル |
.a | ライブラリ ファイル |
.so | ライブラリ ファイル |
.lib | ライブラリ ファイル |
Windowsでは、 MATLAB関数に行列またはベクトルの出力引数または入力引数が含まれる場合、 files
オプションを使用してライブラリを指定します (.lib
)、 ModelSim® DPI 定義が含まれます。それ以外の場合は、生成された Makefile (*.mk
) を手動で変更し、ライブラリを個別にコンパイルする必要があります。
-c
— C コードのみを生成するオプション
文字ベクトル | string スカラー
DPI コンポーネントをコンパイルせずに C コードを生成するオプション。文字ベクトル-c
として指定します。-c
オプションを使用しない場合、 dpigen
はデフォルトのコンパイラを使用して DPI コンポーネントをコンパイルしようとします。別のコンパイラを選択するには、 -config
オプションを使用し、別のオプションの指定手順についてはcodegen
(MATLAB Coder)のドキュメントを参照してください。
-launchreport
— コード生成レポートを生成して開くオプション
文字ベクトル | string スカラー
コード生成レポートを生成して開くオプション。文字ベクトル-launchreport
として指定します。
-PortsDataType
— ポート用に生成された SystemVerilog データ型
Compatible C Type
| Bit Vector
| Logic Vector
ポートに使用される SystemVerilog データ タイプを選択します。可能な 3 つの値から選択します。
CompatibleCType
– ポート用の互換性のある C タイプ インターフェイスを生成します。BitVector
– ポートのビット ベクトル タイプ インターフェイスを生成します。LogicVector
– ポートの論理ベクトル型インターフェイスを生成します。
この表の左側の列にはMATLABデータ型が示されており、 PortsDataType
の各値に対して生成された SystemVerilog 型が示されています。
生成された SystemVerilog タイプ
MATLAB | SystemVerilog | ||
---|---|---|---|
互換性のあるCタイプ | ロジックベクトル | ビットベクトル | |
uint8 | byte unsigned | logic [7:0] | bit [7:0] |
uint16 | shortint unsigned | logic [15:0] | bit [15:0] |
uint32 | int unsigned | logic [31:0] | bit [31:0] |
uint64 | longint unsigned | logic [63:0] | bit [63:0] |
int8 | byte | logic signed [7:0] | bit signed [7:0] |
int16 | shortint | logic signed [15:0] | bit signed [15:0] |
int32 | int | logic signed [31:0] | bit signed [31:0] |
int64 | longint | logic signed [63:0] | bit signed [63:0] |
logical | byte unsigned | logic [0:0] | bit [0:0] |
fi (固定小数点データ型) | 固定小数点の語長に依存します。固定小数点のワード長がホストのワード サイズより大きい場合 (たとえば、64 ビットと 32 ビット)、このデータ型をMATLABによって SystemVerilog データ型に変換することはできません。 Coderとするとエラーが発生します。固定小数点のワード長がホストのワード サイズ以下の場合、 MATLAB Coderは固定小数点データ型を組み込みの C 型に変換します。 。 |
論理ベクトルの長さ ( |
ビット ベクトルの長さ ( |
single | shortreal | ||
double | real | ||
complex | コーダーは、複雑な信号を SystemVerilog コンポーネントの実数部と虚数部に平坦化します。 | ||
ベクトル、行列 | 配列 たとえば、 MATLABの 4 行 2 列の行列は、SystemVerilog では 8 つの要素からなる 1 次元配列に変換されます。デフォルトでは、コーダーは行列を列優先の順序で平坦化します。行優先の順序に変更するには、 | ||
structure | コーダーは、構造要素を SystemVerilog コンポーネントの個別のポートに平坦化します。 | ||
列挙されたデータ型 | enum |
-ComponentTemplateType
— 組み合わせた SystemVerilog DPI コンポーネントを生成するオプション
Sequential
(既定値) | Combinational
SystemVerilog ラッパーの DPI コンポーネント テンプレートを選択します。
Sequential
– レジスタを使用してシーケンシャル デザインを指定します。Combinational
– レジスタなしの組み合わせデザインを指定します。
依存関係
config
引数がsvdpiConfiguration
オブジェクトに設定されている場合、この引数は無視されます。
関数に永続変数が含まれている場合、それはシーケンシャル設計とみなされます。
バージョン履歴
R2014b で導入R2023a: svdpiConfiguration
オブジェクトのサポート
MATLAB関数から UVM コンポーネントまたは SystemVerilog DPI コンポーネントを生成します。新しいsvdpiConfiguration
オブジェクトを使用して、コード生成に使用するコンポーネントの種類とテンプレートを指定します。一般的なコンポーネントの種類の組み込みテンプレートを選択するか、独自のカスタム テンプレートを作成します。
R2023a: 非推奨
config
引数をcoder.config
オブジェクトとともに使用することはお勧めできません。代わりに、新しいsvdpiConfiguration
オブジェクトを使用してください。このオブジェクトはSystemVerilog および UVM テンプレート エンジンの使用のサポートを追加し、SystemVerilog DPI コンポーネントに加えてMATLAB関数から UVM コンポーネントを生成できるようにします。
R2022a: 組み合わせ設計のサポート
入力の変更が出力に即座に反映されるように、組み合わせMATLAB関数の DPI コンポーネントを生成します。
新しいdpigen
-ComponentTemplateType
引数をCombinational
関数を使用します。
dpigen myCombFunction -args {0,0} -ComponentTemplateType Combinational
R2020b: 関数入力の名前が変更されました
FixedpointDataType
の名前と値のペアの引数は、 PortsDataType
に名前変更されました。
R2018a: 行優先配列のサポート
行メジャー配列で DPI-C コードを生成できるようになりました。このレイアウトを指定するには、 MATLABコマンド プロンプトで次のように入力します。
dpigen -rowmajor
あるいは、関数bodyにcoder.rowMajor
を挿入します。
参考
svdpiConfiguration
| codegen
(MATLAB Coder) | uvmbuild
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)