Main Content

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

cosimulationConfiguration

HDL コシミュレーション ワークフローの構成

R2022b 以降

説明

cosimulationConfigurationオブジェクトは、指定された HDL モジュールの HDL Cosimulation ブロックまたはSystem object™の作成を制御します。

作成

説明

cosimObj = cosimulationConfiguration(HDLSimulator,SubWorkflow,HDLTopLevelName) は、指定されたHDLSimulatorSubWorkflow、およびHDLTopLevelNameを使用して cosimulationConfigurationオブジェクトを作成します$$の値。

このワークフローは、コシミュレーション ウィザードを使用してHDL Cosimulationブロックまたはhdlverifier.HDLCosimulation System objectを作成するコマンドラインの代替手段です。

cosimObj = cosimulationConfiguration(MATfile) は、コシミュレーション ウィザードまたはコマンド ライン ワークフローの前回の実行結果に基づいて、cosimulationConfigurationオブジェクトを作成します。

プロパティ

すべて展開する

ワークフロー

協調シミュレーションに使用する HDL シミュレーター。 'ModelSim''Xcelium'、または'Vivado Simulator'として指定します。

実行する協調シミュレーションの種類:

  • 'Simulink' — Simulink® HDL Cosimulationブロックを作成するワークフローを構成します。

  • 'MATLAB System Object' — MATLAB® 協調シミュレーションのhdlverifier.HDLCosimulation System objectを作成するワークフローを構成します。

最上位 HDL モジュールまたはエンティティの名前文字列または文字ベクトルとして指定します。

データ型: char | string

HDL コンパイル

HDL ディレクトリ、ファイル、または協調シミュレーションに必要なファイル。文字列またはセル配列として指定します。いずれかのファイルに既知の HDL ファイル拡張子がない場合、ツールはそれを無視します。

例: './hdlsrc' には、 hdlsrcディレクトリのすべてのファイルが含まれます

例: {'./hdlsrc','myModule.v'} には、 hdlsrcディレクトリのすべてのファイルとmyModule.vという名前のローカル ファイルが含まれます。

別のオプションは、各ファイルの後にファイル タイプが続くリストを指定することです。利用可能なファイル タイプはシミュレータによって異なります。

  • ModelSim®: Verilog (*.v, *.sv)、 VHDL (*.vhd)、 ModelSim macro file (*.do)

  • Xcelium™: Verilog (*.v, *.sv)、 VHDL (*.vhd)、 Shell script (*.sh)

  • Vivado®: Verilog (*.v, *.sv)、 VHDL (*.vhd)、 Vivado XCI file (*.xci)

例: {'mytop.v','Verilog','submod.v','Verilog'}

データ型: char | string | cell array

HDL シミュレーターの場所文字列または文字ベクトルとして指定します。システムPATHで指定されている場所とは異なる場所にあるシミュレーターを使用する場合は、このオプションを使用します。空の場合、システム パスが使用されます。

データ型: char | string

使用するコンパイル コマンド文字列または文字ベクトルとして指定します。コンパイル コマンドは、選択したシミュレーターとデザイン ファイル リストに基づいて自動的に生成されます。必要に応じて、たとえば特定のライブラリにコンパイルする必要がある場合など、別のコンパイル コマンドを指定できます。

ヒント

ワークフローを 1 回実行してcosimWizard_<TOP>.matファイルを生成すると便利です。その後、コンパイル コマンドを変更して、このプロパティを設定できます。

データ型: char | string

HDL エラボレーション ツールのオプション文字列または文字ベクトルとして指定します。

このプロパティは、 Xceliumとの協調シミュレーションで有効です。

データ型: char | string

HDL シミュレーション ツールのオプション文字列または文字ベクトルとして指定します。

Xceliumのデフォルト値では、64 ビット アプリの使用が強制されます。

ModelSim のデフォルト値には、HDL 時間精度を定義し、コシミュレーション用のポートの読み取り/書き込みアクセスを許可するために必要なフラグが含まれています。

このプロパティは、 XceliumまたはModelSimとのコシミュレーションでのみ有効です。

データ型: char | string

HDL タイミング

HDL シミュレーションの時間単位。このユニットは次の構成に影響します。

  • PreCosimulationRunTime プロパティ

  • SampleTimeプロパティ (MATLAB System objectサブワークフロー)

  • クロックポートの周期属性

  • リセットポートの継続時間属性

デフォルトの単位は、コンパイル中の HDL シミュレーターへの時間精度のクエリ (ModelSim、 Xcelium) またはHDLTimePrecisionによって動的に決定されます。 $$プロパティ (Vivado)。

メモ

出力ポートのSampleTime属性はSimulink時間を指定するため、秒単位になります。

SimulinkまたはMATLABでシミュレーションを開始する前に HDL シミュレーターを実行する時間(HDLTimeUnit単位)。この時間により、必要なリセットを通過し、クロック イネーブルをアサートできます。

ワークフローを実行すると、クロック、リセット、および協調シミュレーションの開始時間の視覚的なタイミング図がファイルhdlverifier_rstclk_waveform.jpgに作成されます。

最初のコシミュレーション時のSimulink時間と HDL 時間の比率を自動的に決定します。

Simulinkサンプル時間は、タイミング スケールを使用して HDL シミュレーション時間に関連付けられます。多くの場合、最良の選択は、基本的なSimulinkサンプル時間を HDL の最速のクロック周期と等しくすることです。このワークフローの実行時点では入力サンプル時間がすべて不明であるため、すべてのサンプル時間がわかっている場合、最初のシミュレーションでタイムスケールを自動的に決定するように選択できます。

このプロパティを有効にするには、 SubworkflowSimulinkに設定します。

タイムスケールを手動で設定します。スケール係数と時間単位として指定します: {factor, unit}

スケールはSimulinkの 1 秒を基準にしています。Simulinkの 1 秒は、HDL の{factor, unit}と同じです。因数は double で、単位は'fs','ps','ns','us','ms'または's'のいずれかです。デフォルト値は{1, 's'}で、 Simulink倍が HDL と同等であることを意味します。

回。

例: Simulinkサンプル時間 1 秒、HDL クロック 100 MHz で、 Simulinkの 1 秒が HDL の 10 ns に等しいタイムスケールを作成します: c.AutoTimeScale = false; c.TimeScale = {10, 'ns'};

依存関係

このプロパティを有効にするには、 SubworkflowSimulinkに設定します。

生成されたMATLABのSystem objectサンプル時間をHDLTimeUnit単位で設定します。すべての入力と出力はMATLABで同じサンプル時間を共有し、 stepメソッドの呼び出しごとにこの時間が経過します。

デフォルト値は、指定されたクロック周期と出力サンプル時間によって決まります。

依存関係

このプロパティを有効にするには、 SubworkflowMATLAB System Objectに設定します。

HDLシミュレータ接続

MATLABまたはSimulinkを HDL シミュレーターに接続するためのチャネルタイプ。TG SocketまたはShared Memoryとして指定します。 。

  • Socket: MATLABまたはSimulinkと HDL シミュレータは、指定された TCP/IP ソケットを通じて通信します。単一システム構成およびネットワーク構成に使用できます。このオプションは最大のスケーラビリティを提供します。TCP/IP ソケット通信の詳細については、 「TCP/IPソケットポート」を参照してください。

  • Shared memory: MATLABまたはSimulinkと HDL シミュレータは共有メモリを介して通信します。共有メモリ通信により最適なパフォーマンスが提供されます。

ポートインターフェイスのプロパティ

ポートをクロックに自動割り当てるための式。正規表現として指定します。MATLABの正規表現の詳細については、 「 正規表現 」を参照してください。

例: 'clk_in$' は、 「clk_in」で終わるすべてのポートをクロック ポートとして割り当てます。

ポートをリセットに自動割り当てるための式。正規表現として指定します。MATLABの正規表現の詳細については、 「 正規表現 」を参照してください。

例: c.ResetPortRegularExpression = [c.ResetPortRegularExpress 'rst[0-9]$'] は、リセット ポートのデフォルトの式に加えて、「rst」で終わるすべてのポートと数値をリセット ポートとして割り当てます。

ポートを未使用としてラベル付けするための式。正規表現として指定します。未使用として割り当てられたポートは、協調シミュレーションの一部ではありません。未使用のポートは協調シミュレーション インターフェイスに表示されず、駆動またはサンプリングされません。

仕様をクリアするには、信号名の後に空の引数を指定します。

MATLABの正規表現の詳細については、 「 正規表現 」を参照してください。

例: 'clk_out$' は、 「clk_out」で終わるポートが未使用であることを示します。

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

入力ポート。テーブルとして表示されます。テーブルの完全な内容を確認するには、 portInterfaceオブジェクト関数を呼び出します。

デフォルトは空のテーブルで、ワークフローによって入力データ ポートが決定されます。クロック、リセット、および未使用の正規表現と一致しない入力は、入力データ ポートとみなされます。

specifyInputオブジェクト関数を使用して、入力ポートを明示的に割り当てることができます。

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

出力ポート。テーブルとして表示されます。テーブルの各行には、出力ごとに次の情報が含まれます。

  • 出力ポートの名前

  • SampleTime

  • DataType

  • Signed

  • FractionLength

DUT 出力に加えて、テーブルにはdefault_output_definitionという名前の行が含まれており、出力に割り当てられたデフォルト値が含まれています。

specifyOutputオブジェクト関数を使用して、デフォルトの出力値を変更したり、出力ポートを手動で割り当てたりできます。

テーブルの完全な内容を確認するには、 portInterfaceオブジェクト関数を呼び出します。

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

クロック ポート。テーブルとして表示されます。テーブルの各行には、クロックごとに次の情報が含まれます。

  • クロックポートの名前

  • Edge

  • Period

このテーブルには、DUT クロックに加えて、デフォルトのクロック定義用にdefault_clock_definitionという名前の追加の行が含まれています。

specifyClockオブジェクト関数を使用して、デフォルトのクロック値を変更したり、手動でクロックを割り当てたりすることができます。

テーブルの完全な内容を確認するには、 portInterfaceオブジェクト関数を呼び出します。

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

ポートをリセットし、表として表示します。テーブルの各行には、リセットごとに次の情報が含まれます。

  • Name — リセットポートの名前

  • InitialValue — リセットの初期値

  • Duration — リセット信号の継続時間

DUT リセットに加えて、テーブルにはデフォルトのリセット定義用にdefault_reset_definitionという名前の追加の行が含まれています。

specifyResetオブジェクト関数を使用して、デフォルトのリセット値を変更したり、リセットを手動で割り当てることができます。

テーブルの完全な内容を確認するには、 portInterfaceオブジェクト関数を呼び出します。

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

未使用のポートが表として表示されます。テーブルの完全な内容を確認するには、 portInterfaceオブジェクト関数を呼び出します。

デフォルトは空のテーブルで、ワークフローによって未使用のポートが決定されます。未使用の正規表現に一致するポートは、未使用とみなされます。

specifyUnusedオブジェクト関数を使用すると、ポートに明示的に未使用のラベルを付けることができます。

オブジェクト関数

portInterfaceディスプレイポートの仕様
runWorkflowコシミュレーションワークフローを実行し、必要なアーティファクトを生成する
specifyClockクロック ポートを協調シミュレーション ブロックまたはSystem objectに割り当てます。
specifyInputHDL 入力ポートを協調シミュレーション ブロックまたはSystem objectに割り当てます
specifyOutputHDL 出力ポートを協調シミュレーション ブロックまたはSystem objectに割り当てます
specifyResetリセット ポートを協調シミュレーション ブロックまたはSystem objectに割り当てます
specifyUnusedHDL ポートに未使用ポートとしてラベルを付ける

すべて折りたたむ

この例では、コマンド ライン インターフェイスを使用してSimulink®でレイズド コサイン フィルターをコシミュレーションする方法を示します。Simulink HDL コシミュレーションを始めましょうと同じワークフローに従って協調シミュレーション アーティファクトを生成しますが、協調シミュレーション ウィザードの代わりにコマンド ラインを使用します。

コシミュレーションワークフローの構成

協調シミュレーション構成オブジェクトを作成します。

c =  cosimulationConfiguration('ModelSim','Simulink','rcosflt_rtl');

HDLファイルを設定します。

c.HDLFiles = {'./rcosflt_rtl.v','Verilog'};

filter_outポートを符号付き固定小数点データ型の出力として設定し、小数部の長さを 29 に設定します。

specifyOutput(c,'filter_out',Datatype='Fixedpoint',Signed=true,FractionLength=29)

クロックの周期を 20 ns に設定し、リセット期間を 15 ns に設定します。

specifyClock(c,'clk',Period=20)
specifyReset(c,'reset',Duration=15)

ポートテーブルを表示します。これには、出力、クロック、およびリセット属性に対して行った設定が反映されます。他のデザイン ポートはデフォルトの属性を持ちます。

portInterface(c);
----- Input Data Ports -----
  0×1 empty table


----- Output Data Ports -----
  2×5 table

                Name                 SampleTime       DataType       Signed    FractionLength
    _____________________________    __________    ______________    ______    ______________

    {'default_output_definition'}        1         {'Inherit'   }    true             0      
    {'filter_out'               }        1         {'Fixedpoint'}    true            29      


----- Clock Ports -----
  2×3 table

                Name                   Edge       Period
    ____________________________    __________    ______

    {'default_clock_definition'}    {'Rising'}      10  
    {'clk'                     }    {'Rising'}      20  


----- Reset Ports -----
  2×3 table

                Name                InitialValue    Duration
    ____________________________    ____________    ________

    {'default_reset_definition'}         1              8   
    {'reset'                   }         1             15   


----- Unused Ports -----
  0×1 empty table


HDL コシミュレーション ブロックの生成

ワークフローを実行して、HDL Cosimulation ブロックと付随ファイルを生成します。

runWorkflow(c);
-------------------- Step 1------------------
Select the type of cosimulation you want to do. If the HDL simulator executable you want to use is not on the system path in your environment, you must specify its location.
-------------------- Step 2------------------
Add all VHDL, Verilog, and/or script files to be used in cosimulation to the following table. If the file type cannot be automatically detected or the detection result is incorrect, specify the correct file type in the table. If possible, we will determine the compilation order automatically using HDL simulator provided functionality. Then the HDL files can be added in any order.
-------------------- Step 3------------------
HDL Verifier has automatically generated the following HDL compilation commands. You can customize these commands with optional parameters as specified in the HDL simulator documentation but they are sufficient as shown to compile your HDL code for cosimulation. The HDL files will be compiled when you click Next.
Compiling HDL files. Please wait ...
### Compiling HDL design
Reading pref.tcl 
 
# 2021.4 
 
# Create design library 
vlib work 
# Create and open project 
project new . compile_project 
# Loading project compile_project 
project open compile_project 
# Add source files to project 
set SRC1 "." 
# . 
project addfile "$SRC1/rcosflt_rtl.v" 
# Calculate compilation order 
project calculateorder 
# QuestaSim-64 vlog 2021.4 Compiler 2021.10 Oct 13 2021 
# Start time: 10:47:39 on Jul 21,2022 
# vlog -work work -vopt C:/Users/pmishra/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/pmishra.Bdoc22b.j2017378/hdlverifier-ex80882452/rcosflt_rtl.v  
# -- Compiling module rcosflt_rtl 
#  
# Top level modules: 
# 	rcosflt_rtl 
# End time: 10:47:42 on Jul 21,2022, Elapsed time: 0:00:03 
# Errors: 0, Warnings: 0 
# Compile of rcosflt_rtl.v was successful. 
# All compile dependencies have been resolved. 
set compcmd [project compileall -n] 
# vlog -work work -vopt -stats=none {C:/Users/pmishra/OneDrive - MathWorks/Documents/MATLAB/ExampleManager/pmishra.Bdoc22b.j2017378/hdlverifier-ex80882452/rcosflt_rtl.v} 
# Close project 
project close 
# reading modelsim.ini 
# Compile all files and report error 
if [catch {eval $compcmd}] { 
    exit -code 1 
} 
# QuestaSim-64 vlog 2021.4 Compiler 2021.10 Oct 13 2021 
# -- Compiling module rcosflt_rtl 
#  
# Top level modules: 
# 	rcosflt_rtl 
#  
# <EOF> 
...done
-------------------- Step 4------------------
Specify the name of the HDL module for cosimulation. The Cosimulation Wizard will launch the HDL simulator, load the specified module, and populate the port list of that HDL module before the next step. Use "Shared Memory" communication method if your firewall policy does not allow  TCP/IP socket communication.
Elaborating and Loading HDL simulation image. Please wait ...
Waiting for HDL Simulator to startup ...
120 seconds to time-out ...
To stop this process, press Ctrl+C in MATLAB console.
Waiting for HDL Simulator to startup ...
119 seconds to time-out ...
To stop this process, press Ctrl+C in MATLAB console.
Waiting for HDL Simulator to startup ...
118 seconds to time-out ...
To stop this process, press Ctrl+C in MATLAB console.
Waiting for HDL Simulator to startup ...
117 seconds to time-out ...
To stop this process, press Ctrl+C in MATLAB console.
Waiting for HDL Simulator to startup ...
116 seconds to time-out ...
To stop this process, press Ctrl+C in MATLAB console.
...done
-------------------- Step 5------------------
Specify all input and output port types. Input signals that are identified as 'Clock' and 'Reset' signals will be forced in the HDL simulator through Tcl commands. You can specify the timing parameters for forced 'Clock' and 'Reset' signals in the next step. If you want to drive your HDL clock and reset signals with Simulink signals, mark them as 'Input'.
-------------------- Step 6------------------
Set the sample time and data type for each output port. You can specify the sample time as -1, which means that it will be inherited via back propagation in the Simulink model. Back propagation may fail in certain circumstances; click Help for details.
-------------------- Step 7------------------
Set clock and reset parameters here. The time in these tables refers to time in the HDL simulator.
Please wait while generating waveforms.
...done
-------------------- Step 8------------------
The diagram below shows the current settings for forced 'Clock' and 'Reset' signals. The red line represents the time in the HDL simulation at which MATLAB/Simulink will start (i.e. cosimulation will start).

To change the MATLAB/Simulink start time relative to the HDL simulation time, enter the new start time below. To avoid a race condition, make sure the start time does not coincide with the active edge of any clock signal. You can do so by moving the start time or by changing the clock active edge in the previous step (click Back).
-------------------- Step 9------------------
When you click Finish, the Cosimulation Wizard performs the following actions:
 - Creates and opens a new Simulink model containing an HDL Cosimulation block configured to your specifications.
 - Generates the scripts to compile your HDL code and launch the HDL simulator according to the choices you made with this assistant.
 - (If you check the box below) Configures the HDL Cosimulation block to assist you in setting the simulation timescale when you cosimulate with the generated block for the first time. If you do not check the box below, the timescale is set to the default of 1 Simulink second = 1 second in the HDL simulator, or you may change it below.
Generating blocks ... Please wait.
...done

ワークフローはステップを実行し、 hdlverifier_wizard_rcosflt_rtl.slxという名前のSimulinkモデルを生成します。これには、HDL Cosimulation ブロックと、コンパイルおよび HDL シミュレーターとの通信用の 2 つの追加ブロックが含まれています。

提供されたテストベンチ モデルを開きます。

open_system('rcosflt_tb.slx')

生成された HDL Cosimulation ブロックをキャンバスにドラッグし、その入力と出力をテストベンチに接続します。モデルは次の図のようになります。

コシミュレーションの実行と HDL デザインの検証

  1. 「Launch HDL Simulator」というラベルの付いたブロックをダブルクリックして、HDL シミュレーターを起動します。

  2. HDL シミュレーターの準備ができたら、 Simulinkに戻ってシミュレーションを開始します。

  3. タイムスケールを決定します。AutoTimeScaleプロパティはシミュレーションの開始時にタイムスケールを自動的に決定するように設定されているため、 HDL Verifier はシミュレーションを開始する代わりに、タイムスケールの詳細グラフィカル インターフェイスを起動します。HDL シミュレーターとSimulink は両方とも、filter_infilter_outポートを 1 秒でサンプリングします。ただし、HDL シミュレータでのサンプル時間はクロック周期 (20 ns) と同じである必要があります。/rcosflt_rtl/clkのSimulinkサンプル時間を 1 (秒) に変更し、Enter を押します。次に、ウィザードはテーブルを更新します。次の図は、新しいタイムスケールを示しています。Simulinkの 1 秒は、HDL シミュレーターの 2e-008 に対応します。

4.「OK」をクリックして「タイムスケールの詳細」ダイアログボックスを閉じます。Simulinkシミュレーションを再起動し、テストベンチ モデルのスコープからの結果を確認します。

このスコープには、レイズド コサイン フィルターへの入力の遅延バージョンとそのフィルターの出力の両方が表示されます。このフィルターの出力を直接サンプリングすると、シンボル間干渉は発生しません。

バージョン履歴

R2022b で導入

参考