Main Content

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

dpigen

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

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

説明

dpigen fcn -args args は、MATLAB® 関数 fcnfcn が呼び出すすべての関数から 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 コンポーネントを生成すると、そのホスト プラットフォームに固有の共有ライブラリが作成されます。たとえば、Windows で 64 ビットの MATLAB を使用すると、64 ビットの DLL が生成されますが、これは Windows の 64 ビット HDL シミュレーターでのみ使用できます。生成されたコンポーネントを Windows から Linux に移植するには、生成されたコンポーネントとテストベンチをLinuxに移植する を参照してください。

すべて折りたたむ

関数 fun.m とそれに関連するテスト ベンチ fun_tb.m の DPI コンポーネントとテスト ベンチを生成します。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

関数 fun.m とそれに関連するテスト ベンチ fun_tb.m の DPI コンポーネントとテスト ベンチを生成します。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/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_pkg.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/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/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/myDut_pkg.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/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/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sinWave_predictor_pkg.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/predictor_input_trans.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/predictor_output_trans.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/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/Bdoc24a_2589924_894856/tpcc27045f/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/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.c
### Generating DPI-C Wrapper header file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveGen_dpi.h
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sinWave_predictor_pkg.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveTrans.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/hdlverifier-ex13685125/codegen/dll/sineWaveGen/sineWaveOut.sv from template text.
### Generating source code file /tmp/Bdoc24a_2589924_894856/tpcc27045f/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/Bdoc24a_2589924_894856/tpcc27045f/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 コード生成パラメータと、sequential-moduleuvm-predictoruvm-sequencecustom など、生成する SystemVerilog コンポーネントの種類の指定が含まれます。

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

メモ

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

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

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

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

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

生成された DPI コンポーネントのテスト ベンチを生成するために使用される MATLAB テスト ベンチ。文字ベクトルまたは文字列スカラーとして指定されます。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 の値に初期化されます。セル配列は、各グローバル変数の名前と初期値を提供します。

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

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

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

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

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

Windows では、MATLAB 関数に行列またはベクトルの出力引数または入力引数が含まれている場合は、files オプションを使用して、ModelSim® DPI 定義を含むライブラリ (.lib) を指定します。それ以外の場合は、生成された 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 Coder によって SystemVerilog データ型に変換できず、エラーが発生します。固定小数点ワード長がホストワードサイズ以下の場合、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 次元配列に変換されます。デフォルトでは、コーダは列優先の順序で行列をフラット化します。行優先順序に変更するには、dpigen 関数とともに -rowmajor オプションを使用します。詳細については、行優先の配列レイアウトを使用するコードの生成 (MATLAB Coder) を参照してください。

structure

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

列挙データ型enum

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

  • Sequential – レジスタを使用したシーケンシャル設計を指定します。

  • Combinational – レジスタなしの組み合わせ設計を指定します。

依存関係

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

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

バージョン履歴

R2014b で導入

すべて展開する