Main Content

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

cosimulationConfiguration

HDLコシミュレーションワークフローを構成する

R2022b 以降

説明

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

作成

説明

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

このワークフローは、HDL Cosimulation ブロックまたは hdlverifier.HDLCosimulation System object を作成するために Cosimulation Wizard を使用する代わりに使用するコマンドラインです。

cosimObj = cosimulationConfiguration(MATfile) は、Cosimulation Wizard またはコマンドライン ワークフローの以前の実行の結果に基づいて 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 パラメータまたはジェネリックのデフォルト以外の値を指定するには、パラメータ ファイルを含めます。ファイルを編集してデフォルト値を上書きし、パラメータ値を有効にするために runWorkflow 関数を実行します。次のいずれかのオプションを入力できます。

  • ''parameter_HDLTopLevelName.cfg という名前のデフォルトのパラメータ ファイルを生成します。ここで、HDLTopLevelName は最上位 HDL モジュールまたはエンティティの名前です。ファイルには各 HDL パラメータの行が含まれており、すべての行がコメント化されています。runWorkflow 関数を実行すると、関数はデフォルトのファイルを生成し、ワークフロー全体にわたって実行を続けます。

  • GENERATE_AND_EDIT — デフォルトのファイル名 parameter_HDLTopLevelName.cfg で新しいパラメータ ファイルを生成します。runWorkflow 関数を実行すると、パラメータ設定ファイルが生成された後に実行が停止します。ファイルを編集して、関連するパラメータを含む行のコメントを解除し、その値を変更してデフォルト値を上書きします。次に、コマンドラインで runworkflow(c) を実行してワークフローを再起動します。

  • filename — ワークフローを実行するときに、指定されたパラメータ ファイルを使用します。

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

ヒント

Vivado シミュレータを使用するときに HDL パラメータを設定するには、HDLCompilationCommand プロパティを使用します。詳細については、Vivado シミュレーションの HDL パラメータを設定するを参照してください。

データ型: 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 時間を指定するため、秒単位になります。

シミュレーションを開始する前に HDL シミュレーターを実行する時間 (Simulink または MATLAB、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 に設定します。

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

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

依存関係

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

HDLシミュレータ接続

MATLAB または Simulink を HDL シミュレータに接続するためのチャネル タイプ。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 コシミュレーション ブロックと付随するファイルを生成します。

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 コシミュレーション ブロックと、コンパイルおよび HDL シミュレータとの通信用の 2 つの追加ブロックが含まれています。

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

open_system('rcosflt_tb.slx')

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

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

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

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

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

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

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

バージョン履歴

R2022b で導入

すべて展開する