Main Content

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

hdlverifier.VivadoHDLCosimulation

System objectシミュレータとVivado MATLABを作成します。

R2022a 以降

説明

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

MATLABを使用した HDL コシミュレーション用のSystem objectを作成するには、次のようにします。

  1. コシミュレーション ウィザードを使用して、カスタマイズされたオブジェクトを作成します。hdlverifier.VivadoHDLCosimulation

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

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

System object の動作の詳細については、 What Are System Objects?を参照してください。

作成

hdlverifier.VivadoHDLCosimulation System objectを作成するには、まずコシミュレーション ウィザードを使用して、カスタマイズされたVivadoHDLCosimulation System objectを生成する必要があります。コシミュレーション ウィザードの出力は、 hdlcosim_toplevel.mというファイルです。ここで、 toplevelはトップレベル HDL モジュールの名前です。その後、 System object をローカル変数に代入して作成できます。

説明

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

hdlcosim_toplevelは、コシミュレーション ウィザードを使用して作成および構成されます。これは、使用する推奨構文です。

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

hdlc = hdlcosim_myTopLevel;
hdlc.OutputFractionLengths = 10;

コシミュレーション ウィザードは、既存の HDL コードと HDL 起動スクリプトを使用してhdlverifier.VivadoHDLCosimulation System objectを作成します。コシミュレーション ウィザードを使用すると、簡単に起動できます。

プロパティ

すべて展開する

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

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

プロパティ値の変更の詳細については、 「 System Design in MATLAB Using System Objects 」を参照してください。

次のプロパティのみを変更できることに注意してください: OutputSignedOutputDataTypesOutputFractionLengthsClockResetTypesClockResetTimesPreRunTimeSampleTime。他のプロパティは、コシミュレーション ウィザードでのみ設定する必要があります。

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

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

例: 'data_in'

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

データ型: char | cell | string

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

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

例: 'out1'

例: {'out1','out2'}

データ型: char | cell | string

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

データ型を 1 つだけ指定した場合、各出力は同じデータ型になります。各出力に異なるデータ型を割り当てるには、出力の数と同じサイズの cell 配列を指定します。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'}} は2 つのクロックを指定します。1 つは 10 ナノ秒の持続時間、もう 1 つは 8 ピコ秒の持続時間です。

データ型: cell

協調シミュレーションが開始されるまでの HDL シミュレーターの遅延。2 つの要素を含む cell 配列として指定します。

  • 最初の要素は HDL プレシミュレーション遅延であり、非負の整数として指定します。

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

例: {10,'fs'}

データ型: cell

System objectへの各呼び出し間の HDL シミュレーターでの経過時間。2 つの要素を含む cell 配列として指定します。

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

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

例: {10,'ns'}

データ型: cell

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

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

  • ProductName'EDA Simulator Link VS'

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

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

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

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

  • ResetInfo — リセット信号の名前、初期値、期間を含む構造体

メモ

この構造体の情報は読み取り専用です。この構造体のいずれかのフィールドを変更するには、コシミュレーション ウィザード ツールを再実行します。

例: 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) を指定します。 in1およびinput2からin2まで。

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

出力引数

すべて展開する

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

例: 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 の内部状態のリセット

すべて折りたたむ

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

1. コシミュレーションウィザードの起動

MATLABでこのコマンドを実行して、コシミュレーション ウィザード ツールを起動します。

cosimWizard

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

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

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

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

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

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

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

「d.」 「次へ」をクリックします。

3.HDL ファイルの選択

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

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

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

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

「b.」 「次へ」をクリックします。

4.HDL コンパイル コマンドの指定

コシミュレーション ウィザードの [コンパイル コマンド] ウィンドウにデフォルトのコマンドがリストされます。この例では、これらのコマンドを変更する必要はありません。

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

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

5.コシミュレーション用の HDL モジュールの選択

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

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

≪ModelSimまたはXceliumの場合≫

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

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

《Vivado シミュレータの場合》

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

「b.」 「次へ」をクリックします。コシミュレーション ウィザードは、指定された 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を使用する場合、Sample Time は変更できず、常に 1 に固定されることに注意してください。

「b.」両方の出力のData TypeFixedpointに設定します。

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

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

「e.」 「次へ」をクリックします。

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

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

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

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

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

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

「次へ」をクリックします。

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

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

「次へ」をクリックします。

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

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

「完了」をクリックしてコシミュレーション・ウィザードのセッションを完了します。

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.m および hdlcosim_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 で導入