Main Content

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

hdlverifier.VivadoHDLCosimulation

VivadoシミュレータとMATLABを使用したHDLコシミュレーション用のSystem objectを作成する

R2022a 以降

説明

hdlverifier.VivadoHDLCosimulation System object™ は、Vivado® シミュレータを使用して MATLAB® とハードウェア コンポーネントを共同シミュレーションします。システム オブジェクトは、HDL シミュレーターでシミュレーション中の HDL モデルに入力信号を書き込み、そこから出力信号を読み取ります。この System object を使用して、System object をそれぞれ出力ポートまたは入力ポートのみで構成することにより、ソース デバイスまたはシンク デバイスをモデル化できます。

MATLAB を使用した HDL 協調シミュレーション用の System object を作成するには:

  1. Cosimulation Wizard を使用してカスタマイズされた hdlverifier.VivadoHDLCosimulation オブジェクトを作成します。

  2. オブジェクトをデザイン内の変数に割り当てます。

  3. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の動作の詳細については、「システム オブジェクトとは?」を参照してください。

作成

hdlverifier.VivadoHDLCosimulation System object を作成するには、まず Cosimulation Wizard を使用してカスタマイズされた VivadoHDLCosimulation System object を生成する必要があります。Cosimulation Wizard の出力は hdlcosim_toplevel.m というファイルです。ここで、toplevel は最上位 HDL モジュールの名前です。次に、ローカル変数に割り当てることで System object を作成できます。

説明

hdlc = hdlcosim_topLevel は hdlverifier.VivadoHDLCosimulation System object を作成します。ここで、topLevel は最上位 HDL モジュールの名前です。この System object のプロパティは Cosimulation Wizard によって構成されます。この System object は、MATLAB ワークスペース内の HDL シミュレーションへのインターフェースを提供します。

hdlcosim_toplevelCosimulation Wizard を使用して作成および構成されており、これが使用が推奨される構文です。

オブジェクトを変数に割り当てた後、値を割り当てることでプロパティを変更できます。たとえば、分数の長さの値を変更するには、次のようにします。

hdlc = hdlcosim_myTopLevel;
hdlc.OutputFractionLengths = 10;

Cosimulation Wizard は、既存の HDL コードと HDL 起動スクリプトを使用して hdlverifier.VivadoHDLCosimulation System object を作成します。簡単に起動するには、Cosimulation Wizard を使用してください。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトを呼び出した後にプロパティ値を変更することはできません。オブジェクトは呼び出し時にロックされ、関数 release でロック解除されます。

プロパティが "調整可能" な場合は、いつでも値を変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

変更できるのは次のプロパティのみであることに注意してください: OutputSignedOutputDataTypesOutputFractionLengthsClockResetTypesClockResetTimesPreRunTimeSampleTime。その他のプロパティは Cosimulation Wizard でのみ設定する必要があります。

この プロパティ は読み取り専用です。

HDL コード内の入力パス。文字列、文字ベクトル、または文字ベクトルのセル配列として指定されます。パスは HDL 階層の最上位レベルを基準として指定されます。

例: 'data_in'

例: {'/top/in1','/top/in2'}

データ型: char | cell | string

この プロパティ は読み取り専用です。

HDL コード内の出力パス。文字列、文字ベクトル、または文字ベクトルのセル配列として指定されます。パスは HDL 階層の最上位レベルを基準として指定されます。

例: 'out1'

例: {'out1','out2'}

データ型: char | cell | string

出力信号のデータ型。文字ベクトルのセル配列として指定されます。有効なデータ型は 'fixedpoint''double'、または 'single' です。

データ型を 1 つだけ指定した場合、各出力は同じデータ型になります。各出力に異なるデータ型を割り当てるには、出力の数と同じサイズのセル配列を指定します。OutputDataTypes セル配列の各要素は、System object 出力 (hdloutputs) 内の対応する要素のデータ型を指定します。

例: {'fixedpoint'} – すべての出力データ型は fixedpoint です。

例: {'double','single'} – 最初の出力のデータ型は double で、2 番目の出力のデータ型は single です。

メモ

OutputDataTypes{'fixedpoint'} で、ビット幅が組み込みデータ型のサイズ (8、16、32、または 64) と一致し、OutputFractionLengths0 に設定されている場合、出力信号のデータ型はその組み込みデータ型として返されます。

データ型: cell

出力の符号。false (符号なし)、true (符号付き)、または論理ベクトルとして指定されます。

true または false のみを指定した場合、各出力には対応する符号が付きます。各出力に異なる符号を適用するには、出力の数と同じサイズの論理ベクトルを指定します。OutputSigned ベクトルの各要素は、System object 出力 (hdloutputs) 内の対応する要素の符号を指定します。

例: true – すべての出力には符号付きの値があります。

例: [true,true,false] — 最初の出力は符号付き値、2 番目の出力は符号付き値、3 番目 (最終) の出力は符号なし値です。

出力小数部の長さ(ビット単位)。整数または整数のベクトルとして指定されます。

スカラーのみを指定した場合、各出力は同じ小数部の長さになります。各出力に異なる小数部の長さを適用するには、出力の数と同じサイズのベクトルを指定します。OutputFractionLengths ベクトルの各要素は、System object 出力 (hdloutputs) 内の対応する要素の小数部の長さを指定します。

例: 10 — すべての出力の小数部の長さは 10 ビットです。

例: [16,8] — 最初の出力の小数部の長さは 16 ビットで、2 番目 (および最終) の出力の小数部の長さは 8 ビットです。

この プロパティ は読み取り専用です。

HDL コードで駆動するクロック信号とリセット信号。文字列または N 文字列のセル配列として指定されます。各文字列には、HDL モジュール内のクロック ポートまたはリセット ポートへのパスが含まれています。

例: /inverter/clk

データ型: char | cell | string

生成するクロックおよびリセット波形のタイプ。文字列または文字列のセル配列として指定します。各文字列には、ClockResetSignals プロパティで指定されたリストに対応するクロックまたはリセット タイプが含まれます。有効なクロックおよびリセット タイプは次の値です。

  • 'Active Rising Edge Clock'

  • 'Active Falling Edge Clock'

  • 'Step 0 to 1'

  • 'Step 1 to 0'

例: Active Rising Edge Clock

データ型: char | cell | string

クロック周期またはステップ関数の持続時間の HDL 時間。正の整数と時間単位のセル配列として指定されます。時間単位の有効な値は次のとおりです。

  • 'fs' — フェムト秒

  • 'ps' — ピコ秒

  • 'ns' — ナノ秒

  • 'us' — マイクロ秒

  • 'ms' — ミリ秒

  • 's' — 秒数

複数のクロックまたはステップ関数を指定するには、ClockResetSignals プロパティで指定されたリストに対応するセル配列のセル配列を使用します。

例: {10,'ps'} は、10 ピコ秒の持続時間を持つ単一クロックまたはステップ関数を指定します。

例: {{10,'ns'}, {8,'ps'}} は、10 ナノ秒の持続時間と 8 ピコ秒の持続時間の 2 つのクロックを指定します。

データ型: cell

コシミュレーションが開始する前の HDL シミュレーターの遅延。2 つの要素を持つセル配列として指定されます。

  • 最初の要素は、負でない整数として指定される HDL 事前シミュレーション遅延です。

  • 2 番目の要素は時間単位で、'fs','ps','ns','us','ms' または 's' のいずれかの文字ベクトルとして指定されます。

例: {10,'fs'}

データ型: cell

HDL シミュレーターで System object の各呼び出し間の経過時間。2 つの要素を持つセル配列として指定されます。

  • 最初の要素は、System object への 2 回の呼び出し間の時間であり、正の整数として指定されます。

  • 2 番目の要素は時間単位で、文字ベクトルとして指定されます: 'fs','ps','ns','us','ms','s'

例: {10,'ns'}

データ型: cell

この プロパティ は読み取り専用です。

vivadosimlib.slx ライブラリへのコシミュレーション インターフェイスに一致するデータ構造。XsiData 構造体として指定されます。Cosimulation Wizard を呼び出してこの構造体を作成し、Vivado 協調シミュレーション用にデザインをカスタマイズします。XSIData には次のフィールドが含まれます。

  • ProductName'EDA Simulator Link VS'

  • DesignLib — ダイナミック リンク ライブラリ (DLL) ファイルへのパス。

  • Language — HDL 言語。0 は Verilog、1 は VHDL を示します。

  • TimePrecision — 指数として指定される HDL 時間精度 (秒単位)。たとえば、1ピコ秒の時間精度は10^(-12)秒に相当し、-12と指定されます。

  • HdlSigInfo — すべての入力と出力の次元と型を含む構造体

  • ResetInfo — リセット信号の名前、初期値、および持続時間を含む構造体

メモ

この構造体の情報は読み取り専用です。この構造体のいずれかのフィールドを変更するには、Cosimulation Wizard ツールを再実行します。

例: xsiData = struct with fields: ProductName: 'EDA Simulator Link VS' DesignLib: 'xsim.dir/design/xsimk' Language: 1 TimePrecision: -12 HdlSigInfo: [1×2 struct] ResetInfo: [0×0 struct]

データ型: struct

使用法

説明

hdloutputs = hdlc(hdlinputs) は HDL シミュレータに接続し、hdlinputs を HDL シミュレータに書き込み、hdloutputs を HDL シミュレータから読み取ります。System object の各呼び出し間の経過シミュレーション時間は、SampleTime プロパティによって定義されます。

入力引数

すべて展開する

HDL シミュレータへの入力。HDL 入力ポートに駆動される値のコンマ区切りリストとして指定されます。HDL 入力ポートは InputSignals プロパティによって設定されます。このコンマ区切りのペアの要素数は、HDL 入力ポートの数と等しくなければなりません。各入力引数値は、対応する HDL 入力ポートに駆動されます。

たとえば、InputSignals{'in1','in2'} として設定されている場合、out = hdlc(input1,input2) を指定して値 input1in1 に、input2in2 にします。

例: [RealFft, ImagFft] = hdlc(3,12); 値 3 と 12 は、2 つの入力ポートを持つ HDL シミュレータへの入力として駆動されます。

出力引数

すべて展開する

HDL シミュレータからの出力。スカラーまたはベクトルとして返されます。返される各要素は、対応する HDL 出力ポートからの出力です。HDL 出力ポートは OutputSignals プロパティで指定されます。返される要素の数は、指定された HDL 出力ポートの数と同じです。たとえば、OutputSignals{'out1','out2'} として設定されている場合、out1 から o1 に値を割り当て、out2 から o2 に値を割り当てるには、[o1, o2] = hdlc(i1,i2) を指定します。

例: out1 = hdlc(3,12); は、1 つの出力ポートを持つ HDL シミュレータからの出力値を割り当てます。

例: [RealFft, ImagFft] = hdlc(3,12); は、2 つの出力ポートを持つ HDL シミュレータからの出力値を割り当てます。この例では、RealFft は最初のポートからの出力であり、ImagFft は 2 番目のポートからの出力です。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、以下の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

コシミュレーション ウィザードを使用して HDL Verifier™ アプリケーションをセットアップします。

この例では、MATLAB® System object™ と次の HDL シミュレータを使用して、レジスタ転送レベル (RTL) 設計を検証します。

  • Xilinx® の Vivado® シミュレータ

  • Mentor Graphics® の ModelSim® または Questa®

  • Cadence® の Xcelium®

このサンプル設計は、Verilog で記述されたサイズ 8 の高速フーリエ変換 (FFT) です。FFT は、信号の周波数分布を生成するためにデジタル信号処理アプリケーションでよく使用されます。

この FFT の正確さを検証するために、MATLAB System object テストベンチが提供されています。このテストベンチは、テスト対象の HDL 設計 (DUT) に周期的な正弦波入力を生成し、複素平面にフーリエ係数をプロットします。

コシミュレーション ウィザードは、この FFT の提供された Verilog ファイルを入力として受け取ります。また、各ステップでコシミュレーションを設定するために必要なユーザー入力も収集します。例の最後に、Cosimulation Wizard は、構成された HdlCosimulation System object をインスタンス化する MATLAB スクリプト、HDL 設計をコンパイルする MATLAB スクリプト、および Cosimulation 用に HDL シミュレーターを起動する MATLAB スクリプトを生成します。

1. 協調シミュレーションウィザードを起動

MATLAB でこのコマンドを実行して、Cosimulation Wizard ツールを起動します。

cosimWizard

2. 協調シミュレーションタイプを指定する

「コシミュレーション タイプ」ページで、次の手順を実行します。

a.ModelSim を使用している場合は、HDL SimulatorModelSim に設定します。

Xcelium を使用している場合は、HDL SimulatorXcelium に設定します。

Vivado シミュレータを使用している場合は、HDL シミュレータVivado Simulator に設定します。

b.HDL コシミュレーションMATLAB System Object に設定します。

c. HDL シミュレータ実行ファイルがシステム パス上に表示される場合は、デフォルトの システム パス上の HDL シミュレータ実行ファイルを使用する オプションを変更しないでください。これらの実行ファイルがパス上に表示されない場合は、HDL シミュレータのパスを指定します。

d. [Next] をクリックします。

3. HDLファイルを選択

HDL ファイル ページで、次の手順を実行します。

a.ファイル リストに HDL ファイルを追加します。

  • 追加 をクリックし、サンプル フォルダー内の Verilog ファイル fft_hdl.vfft_hdl_tc.v を選択します。

  • ファイル リスト内のファイルを確認して、ファイルの種類が正しく識別されていることを確認します。

b.[Next] をクリックします。

4. HDLコンパイルコマンドを指定する

コシミュレーション ウィザードは、コンパイル コマンド ウィンドウにデフォルトのコマンドを一覧表示します。この例では、これらのコマンドを変更する必要はありません。

ModelSim のコンパイル コマンドは次のとおりです。

[Next] をクリックします。MATLAB コンソールにコンパイル ログが表示されます。コンパイル中にエラーが発生した場合、そのエラーはステータス領域に表示されます。次の手順に進む前にエラーを修正してください。

5. 協調シミュレーション用のHDLモジュールを選択する

シミュレーション オプション ページで、次の手順を実行します。

a.協調シミュレーションの HDL モジュールまたはエンティティの名前を指定します。

ModelSim または Xcelium の場合

リストからfft_hdlを選択します。このモジュールは、コシミュレーションに使用する Verilog モジュールです。リストに fft_hdl が表示されない場合は、ファイル名を手動で入力してください。

ModelSim のシミュレーション オプションは次のとおりです。

Vivado シミュレータの場合

Vivado シミュレータの場合、Verilog モジュールの名前がデフォルトで選択されます。Vivado シミュレータのシミュレーション オプションは次のとおりです。

b.[Next] をクリックします。コシミュレーション ウィザードは、指定された HDL モジュールとシミュレーション オプションを使用して、バックグラウンド コンソールで HDL シミュレーターを起動します。ウィザードが HDL シミュレーターを正常に起動すると、ウィザードは Verilog モデル fft_hdl の入力ポートと出力ポートを設定し、次のステップで表示します。

6. 入力/出力ポートの種類を指定する

このステップでは、コシミュレーション ウィザードに、それぞれ fft_hdl の入力ポートと出力ポートを含む 2 つのテーブルが表示されます。

コシミュレーション ウィザードは、各ポートのポート タイプを正しく識別しようとします。ウィザードがポートを誤って識別した場合は、これらのテーブルを使用してポート タイプを変更できます。

  • 入力ポートには、ClockResetInput、または Unused を選択できます。HDL Verifier は、コシミュレーション中に Input から MATLAB とマークされた入力ポートのみを接続します。

  • HDL Verifier は、コシミュレーション中に Output とマークされた出力ポートを MATLAB に接続します。リンク ソフトウェアと MATLAB は、コシミュレーション中に Unused とマークされた出力ポートを無視します。

  • Clock および Reset として識別される信号のパラメータは、後の手順で変更できます。

この例では、デフォルトのポート タイプを受け入れて、次へ をクリックします。

7. 出力ポートの詳細を指定する

この例では、HDL FFT 出力は符号付きで、長さは 13 ビット、小数部の長さは 9 ビットです。出力ポートの詳細ページで、次の手順を実行します。

a.HdlCosimulation System object を使用する場合、サンプル時間 は変更できず、常に 1 に固定されることに注意してください。

b.両方の出力の データ型Fixedpoint に設定します。

c. 両方の入力の SignSigned に設定します。

d. 両方の出力の Fraction Length9 に設定します。

e.[Next] をクリックします。

8.時計の設定と詳細のリセット

クロック周期(ns)を20に設定します。Verilog コードは、リセットが同期しており、アクティブな値が 1 であることを示します。クロックの立ち上がりエッジによってトリガーされ、1 ns の時点で HDL 設計全体をリセットできます。リセット信号には 15 ns の持続時間を使用します。「クロック/リセットの詳細」ページで、次の手順を実行します。

a.クロック周期を20に設定します。

b.アクティブエッジをRisingに設定します。

c. リセット初期値を1に設定します。

d. リセット信号の持続時間を15に設定します。

[Next] をクリックします。

9. 開始時間の調整を確認する

開始時間アライメント ページには、クロック信号とリセット信号の波形のプロットが表示されます。コシミュレーション ウィザードは、コシミュレーションを開始する HDL 時間を赤い線で示します。開始時間は、System object が HDL シミュレータから最初の入力サンプルを取得する時間でもあります。クロックのアクティブ エッジは立ち上がりエッジです。したがって、HDL シミュレータの 20 ns の時点で、FFT の登録された出力は安定します。競合状態は存在せず、コシミュレーションを開始するデフォルトの HDL 時間 (20 ns) は正しいです。

[Next] をクリックします。

10. システムオブジェクトの生成

コシミュレーション ウィザードがスクリプトを生成する前に、HDL シミュレータのサンプリング期間を変更するオプションがあります。サンプリング期間は、HDL シミュレーターでステップ イン MATLAB の各呼び出し間で経過する時間を決定します。サンプリング周期は通常、クロック周期と同じです。入力と出力がサンプルベースではなくフレームベースであるかどうかも指定できます。

コシミュレーション ウィザード セッションを完了するには、[完了] をクリックします。

11. HDL設計を検証するためのテストベンチを作成する

この例では、実際にテストベンチを作成するわけではありません。代わりに、完成したスクリプト fft_tb.m は、Verilog ファイルが存在するディレクトリにあります。

コシミュレーション ウィザードで [完了] をクリックすると、アプリケーションは現在のディレクトリに 3 つの MATLAB スクリプトを生成します。

ModelSimおよびXceliumの場合

  • compile_hdl_design_fft_hdl.m:HDL 設計を再コンパイルします。

  • launch_hdl_simulator_fft_hdl.m:MATLAB System object サーバーを再起動し、HDL シミュレーターを起動します。

  • hdlcosim_fft_hdl.m:HdlCosimulation System object を作成します。

Vivadoシミュレータ用

  • hdlverifier_compile.m:HDL 設計を再コンパイルします。

  • hdlverifier_gendll_fft_hdl.m:System object の動作に統合された HDL 設計およびシミュレーション カーネルを含むコンパイル済み共有ライブラリを作成します。

  • hdlcosim_fft_hdl.m:HdlCosimulation System object を作成します。

Verilog ファイルと同じディレクトリにあるファイル fft_tb.mhdlcosim_fft_hdl.m を開き、HdlCosimulation System object 呼び出しを確認します。hdlcosim_fft_hdl.m には HdlCosimulation インスタンス化が含まれ、fft_tb.m には MATLAB System object テスト ベンチが含まれます。このテスト ベンチを使用して、対応する HdlCosimulation System object の HDL 設計を検証します。

12.コシミュレーションを実行してHDL設計を検証する

ModelSim および Xcelium の場合

スクリプト launch_hdl_simulator_fft_hdl.m を実行して HDL シミュレーターを起動します。

launch_hdl_simulator_fft_hdl

HDL シミュレータの準備ができたら、MATLAB に戻り、スクリプト fft_tb.m を実行してシミュレーションを開始します。

fft_tb

Vivado シミュレータの場合

スクリプト fft_tb.m を実行してシミュレーションを開始します。

fft_tb

テストベンチのプロットから結果を確認します。プロットは複素平面上のフーリエ係数を表示します。

参考

バージョン履歴

R2022a で導入