Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

HDL Coder での HDL Verifier コシミュレーション モデルの生成

この例では、HDL Coder™ でコシミュレーション モデルを生成し、生成された HDL コードを HDL Verifier™ ワークフローに統合する方法を示します。コシミュレーション モデルの自動生成により、生成されたハードウェア設計のシームレスな検証が可能です。

はじめに

コシミュレーションは難しい作業であり、自動生成されたコードでは特に難しくなります。コード生成時に使用されたサンプル レート、フィードフォワード/フィードスルー システム、その他各種のパラメーターや設定など、ソース モデルのさまざまな側面について同期を維持しながら、HDL Verifier ブロックとターゲットの EDA シミュレーターを設定することが重要です。

コシミュレーション モデルの自動生成では、コンパイル済みモデルとコード生成のすべての情報を解読することで、HDL Cosimulation ブロックとシミュレーターの設定から当て推量が排除されます。自動設定された内容は、生成されたスクリプトにすべて記録されます。最終的に、生成されたコードの検証にすぐに使用できるコシミュレーション モデルとなります。

% >> docsearch('Code Generation for HDL Cosimulation Model')

コシミュレーション モデルの生成

Simulink での簡単なアキュムレータの設計について、そのコシミュレーション モデルをテスト ベンチの生成の一環として自動的に生成します。

Simulink での乗算アキュムレータの設計

ソース設計/モデルを開きます。

bdclose all;
load_system('hdl_cosim_demo1')
open_system('hdl_cosim_demo1/MAC')

% Now generate vhdl code for the device under test 'MAC' in that
% model in the source Simulink model.
makehdl('hdl_cosim_demo1/MAC', 'targetlang', 'vh')
### Generating HDL for 'hdl_cosim_demo1/MAC'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdl_cosim_demo1', { 'HDL Code Generation' } )">hdl_cosim_demo1</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdl_cosim_demo1'.
### Begin compilation of the model 'hdl_cosim_demo1'...
### Applying HDL optimizations on the model 'hdl_cosim_demo1'...
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdl_cosim_demo1'.
### Working on hdl_cosim_demo1/MAC as hdlsrc\hdl_cosim_demo1\MAC.vhd.
### Code Generation for 'hdl_cosim_demo1' completed.
### Creating HDL Code Generation Check Report file://C:\Users\clewis\OneDrive - MathWorks\Documents\MATLAB\Examples\hdlcoder-ex48550583\hdlsrc\hdl_cosim_demo1\MAC_report.html
### HDL check for 'hdl_cosim_demo1' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

コシミュレーション モデルを含む HDL テスト ベンチの生成

HDL Coder は、Mentor Graphics Modelsim または Cadence Incisive の HDL Verifier ブロックを使用したコシミュレーション モデルの生成をサポートしています。

% Now as a part of test bench generation specify that in addition to the
% textual based test bench a cosimulation model needs to be generated. Use
% the makehdl parameter |GenerateCosimModel| with value |ModelSim| or
% |Incisive| to choose between the two HDL Verifier blocks to generate the
% cosimulation model.
makehdltb('hdl_cosim_demo1/MAC', 'targetlang', 'vh', 'GenerateCosimModel', 'ModelSim')
delete(findall(0))
### Begin TestBench generation.
### Generating HDL TestBench for 'hdl_cosim_demo1/MAC'.
### Begin compilation of the model 'hdl_cosim_demo1'...
### Begin compilation of the model 'gm_hdl_cosim_demo1'...
### Generating new cosimulation model: <a href="matlab:open_system('gm_hdl_cosim_demo1_mq')">gm_hdl_cosim_demo1_mq</a>.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo1\gm_hdl_cosim_demo1_mq_tcl.m.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo1\gm_hdl_cosim_demo1_mq_batch_tcl.m.
### Note: Option 'Allow Direct Feedthrough' has been set to 'on' on 'gm_hdl_cosim_demo1_mq/MAC_mq'
### Begin simulation of the model 'gm_hdl_cosim_demo1'...

### Collecting data...
### Generating test bench data file: hdlsrc\hdl_cosim_demo1\In1.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo1\In2.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo1\Out1_expected.dat.
### Working on MAC_tb as hdlsrc\hdl_cosim_demo1\MAC_tb.vhd.
### Generating package file hdlsrc\hdl_cosim_demo1\MAC_tb_pkg.vhd.
### HDL TestBench generation complete.
 

(オプション) HDL コード カバレッジ レポートとデータベースの生成

HDL シミュレーターをインストルメント化してコード カバレッジ データベースを生成するには、以下のいずれかを行います。

a.) [HDL コード生成]、[テスト ベンチ] ペインで、[HDL コード カバレッジ] というラベルのチェック ボックスをオンにします。

b.) makehdltb を呼び出すときに、HDLCodeCoverageon に設定します。以下に例を示します。

makehdltb('hdl_cosim_demo1/MAC', 'targetlang', 'vh', 'GenerateCosimModel', 'ModelSim','HDLCodeCoverage','on');

テスト ベンチのシミュレーション後に、ソース ディレクトリに HDL コード カバレッジのアーティファクトが生成されます。

新規コード生成メッセージ

コマンド ウィンドウに表示される追加のコード生成メッセージからわかるように、コシミュレーション モデル gm_hdl_cosim_demo1_mq が生成されます。Simulink とのコシミュレーションに使用するターゲット シミュレーターの準備として、ターゲット ディレクトリ hdlsrc に生成されるコードに加え、追加のコシミュレーション スクリプト gm_hdl_cosim_demo1_mq_tcl.m が生成されています。

### Generating new cosimulation model: gm_hdl_cosim_demo1_mq
### Generating new cosimulation tcl script: hdlsrc/gm_hdl_cosim_demo1_mq_tcl.m
### Cosimulation Model Generation Complete.

コシミュレーション モデルのスティミュラスと応答の取得

コシミュレーション モデルからわかるように、元のテスト対象デバイス (DUT) は 2 つのサブシステム ToCosimSrcToCosimSink によってインターセプトされます。これらの 2 つのサブシステムの目的は、DUT のスティミュラスと応答を取得し、Goto ブロックを使用したコシミュレーションの駆動に使用することです。次の各サブシステム内の Goto ブロックの数は、DUT の入力および出力の数と一致します。

open_system('gm_hdl_cosim_demo1_mq/ToCosimSrc')
open_system('gm_hdl_cosim_demo1_mq/ToCosimSink')

HDL Cosimulation ブロックのスティミュラス

最初に DUT を駆動するスティミュラスは、以下に示すように、完全に構成された HDL Cosimulation ブロックに From ブロックを使用して送られます。場合によっては、入力スティミュラス信号を HDL Cosimulation ブロックに直接送れないことがあります。たとえば、HDL Cosimulation ブロックで複素信号やベクトル信号が許可されていない場合です。そのような場合は、入力スティミュラス信号の追加のメッセージングが自動的に実行されます。現在のモデルでは、From ブロックから対応する Goto ブロックの内容が直接送られています。

open_system('gm_hdl_cosim_demo1_mq/FromCosimSrc')

結果の比較

応答データの可視化用に Simulink で提供されている Sink ブロックを使用して、元の DUT からの応答が HDL Verifier での HDL Cosimulation ブロックからの応答と比較されます。

open_system('gm_hdl_cosim_demo1_mq/Compare')

生成されたモデルでのアサーションのチェック

テスト対象デバイス サブシステムの各出力について、次のアサーションチェック モデルが生成されます。このモデルは、元の出力 (dut ref) をコシミュレーションの出力 (cosim) と照合し、Assertion ブロックへの入力で不一致を検出するとアサーション メッセージを生成します。

open_system('gm_hdl_cosim_demo1_mq/Compare/Assert_Out1')

Assertion ブロックの使用

アサーションは Assertion ブロックで有効になっていますが、シミュレーションは停止しません。コシミュレーションの一環として次のブロックからのアサーションがある場合は、Assertion ブロックからの警告を確認してください。

Warning: Assertion detected in 'gm_hdl_cosim_demo1_mq/Compare/Assert_Out1/AssertEq' at time 1.000000
open_system('gm_hdl_cosim_demo1_mq/Compare/Assert_Out1/AssertEq')

HDL Cosimulation ブロックの設定

HDL Cosimulation ブロックには、DUT のコンパイル済みの入出力インターフェイスが自動的に取り込まれます。[Ports] パネルの [Full HDL Name][Sample Time]、および [Data type] の情報がすべて取り込まれます。同様に、HDL Cosimulation ブロックの各種のセットアップ パラメーター ([Timescale] ペインや [tcl port] ペインなど) も自動的に取り込まれます。コシミュレーション モデルの [Connection method] は常に Shared Memory と設定されることに注意してください。

open_system('gm_hdl_cosim_demo1_mq/MAC_mq')

ターゲット シミュレーターの起動と設定

次に、ターゲット シミュレーター (ModelSim または Incisive) の起動と設定に関連する自動化について確認します。生成されたモデルの最上位レベルを確認すると、以下のコールバック関数をもつ |Start Simulator| という名前のサブシステムが生成されていることがわかります。このサブシステムを使用して、いずれかのターゲット シミュレーターが起動されます。

get_param('gm_hdl_cosim_demo1_mq/Start Simulator', 'OpenFcn')
ans =

    'try
        cosimDirName = pwd;
        cd 'hdlsrc\hdl_cosim_demo1';
        vsim('tclstart',gm_hdl_cosim_demo1_mq_tcl);
        cd (cosimDirName);
        clear cosimDirName;
     catch me
        disp('Failed to launch cosimulator with "vsim"');
        disp (me.message);
        cd (cosimDirName);
        clear cosimDirName;
     end'

コシミュレーション モデルのシミュレーション

起動時に次のスクリプトが実行されます。

vsim('tclstart',gm_hdl_cosim_demo1_mq_tcl)

ModelSim 用の MATLAB コマンド vsim (Incisive の場合は hdlsimulink) は、ターゲット シミュレーターをコシミュレーション用の必要な設定と共に MATLAB 環境内から起動します。vsim コマンドは、シミュレーターを起動時に設定する tcl 文字列を受け入れる tclstart オプションを指定して呼び出されます。HDL Coder によって、コシミュレーション モデルと一緒にファイル gm_hdl_cosim_demo1_mq_tcl も自動的に生成されます。

生成される tclstart コマンド ファイルの内容

生成された tclstart ファイルには、起動したシミュレーターを設定するためのコマンドに加え、コシミュレーション モデルの各種設定の生成方法に関するコメントが含まれています。

type hdlsrc/hdl_cosim_demo1/gm_hdl_cosim_demo1_mq_tcl
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Auto generated cosimulation 'tclstart' script 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Source Model         : hdl_cosim_demo1
%  Generated Model      : gm_hdl_cosim_demo1
%  Cosimulation Model   : gm_hdl_cosim_demo1_mq
%
%  Source DUT           : gm_hdl_cosim_demo1_mq/MAC
%  Cosimulation DUT     : gm_hdl_cosim_demo1_mq/MAC_mq
%
%  File Location        : hdlsrc\hdl_cosim_demo1\gm_hdl_cosim_demo1_mq_tcl.m
%  Created              : 2021-10-12 15:33:02
%
%  Generated by MATLAB 9.12 and HDL Coder 3.19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ClockName           : clk
%  ResetName           : reset
%  ClockEnableName     : clk_enable
%
%  ClockLowTime        : 5ns
%  ClockHighTime       : 5ns
%  ClockPeriod         : 10ns
%
%  ResetLength         : 20ns
%  ClockEnableDelay    : 10ns
%  HoldTime            : 2ns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ModelBaseSampleTime   : 1
%  DutBaseSampleTime     : 1
%  OverClockFactor     : 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Mapping of DutBaseSampleTime to ClockPeriod
%
%  N = (ClockPeriod / DutBaseSampleTime) * OverClockFactor
%  1 sec in Simulink corresponds to 10ns in the HDL Simulator(N = 10)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ResetHighAt          : (ClockLowTime + ResetLength + HoldTime)
%  ResetRiseEdge        : 27ns
%  ResetType            : async
%  ResetAssertedLevel   : 1
%
%  ClockEnableHighAt    : (ClockLowTime + ResetLength + ClockEnableDelay + HoldTime)
%  ClockEnableRiseEdge  : 37ns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function tclCmds = gm_hdl_cosim_demo1_mq_tcl
tclCmds = {
    'do MAC_compile.do',...% Compile the generated code
    'vsimulink -voptargs=+acc  work.MAC',...% Initiate cosimulation
    'add wave  /MAC/clk',...% Add wave commands for chip input signals
    'add wave  /MAC/reset',...
    'add wave  /MAC/clk_enable',...
    'add wave  /MAC/In1',...
    'add wave  /MAC/In2',...
    'add wave  /MAC/ce_out',...% Add wave commands for chip output signals
    'add wave  /MAC/Out1',...
    'set UserTimeUnit ns',...% Set simulation time unit
    'puts ""',...
    'puts "Ready for cosimulation..."',...
};
end

tclstart ファイルのヘッダー コメント

tclstart ファイルのコメントに、ソース モデル、生成されたモデル、コシミュレーション モデル、およびソースとコシミュレーションの DUT サブシステムが記載されています。コシミュレーションの DUT は、生成された HDL コードとソース モデルの DUT の相違点を取得するために、コシミュレーション モデルにソース モデルの DUT と並べて配置されます。コシミュレーション モデルは、生成されたコードのサイクル アキュレートでビットトゥルーな動作を検証します。

コシミュレーション モデルの生成に影響するテスト ベンチ オプション

tclstart スクリプト ファイルの次の部分には、HDL Coder でサポートされるすべての makehdltb テスト ベンチ パラメーターと、コシミュレーション スクリプトで使用されるそれらの初期値が示されます。

ClockName, ResetName, ClockEnableName
ClockLowTime, ClockHighTime, ClockPeriod
ResetLength, ClockEnableDelay, HoldTime

モデルのサンプル時間と DutBaseSampleTime の ClockPeriod へのマッピング

コメント セクションの次の部分には、モデルのサンプル時間と、それらが HDL Verifier での HDL Cosimulation ブロックのクロックにどのように影響したかが示されます。

  N = (ClockPeriod / DutBaseSampleTime) * OverClockFactor
  1 sec in Simulink corresponds to 10ns in the HDL Simulator(N = 10)

生成される tclstart スクリプトの出力

gm_hdl_cosim_demo1_mq_tcl の関数により、必要な tcl コマンド文字列 (tclCmds) が生成されます。

EDAScriptGeneration オプションを on にして、makehdl の一環として ModelSim のコンパイル用の do ファイルを生成する場合、単一の do コマンドが生成されます。EDAScriptGeneration オプションを off にした場合は、DUT の生成された HDL コードをコンパイルするための明示的なコンパイル コマンドが追加されます。

最上位のすべてのインターフェイス信号に対して wave コマンドが追加されます。

シミュレーション前のコマンド

HDL Cosimulation ブロックには、[Pre-simulation Tcl commands] パラメーターにクロック バンドル (クロック、クロックイネーブル、リセット) を駆動する force コマンドが含まれています。[Time to run HDL simulator before cosimulation starts] パラメーターは、チップをリセットから復旧するのに必要な実行時間を設定してシミュレーションを開始します。

get_param('gm_hdl_cosim_demo1_mq/MAC_mq','TclPreSimCommand')
ans =

    'puts "Running Simulink Cosimulation block.";
      puts "Chip Name: --> hdl_cosim_demo1/MAC";
      puts "Target language: --> vhdl";
      puts "Target directory: --> hdlsrc\hdl_cosim_demo1";
      puts [clock format [clock seconds]];
     # Clock force command;
     force /MAC/clk 0 0ns, 1 5ns -r 10ns;
     # Clock enable force command;
     force /MAC/clk_enable 0 0ns, 1 37ns;
     # Reset force command;
     force /MAC/reset 1 0ns, 0 27ns;
     
     '

シミュレーターの起動

Start Simulator をダブルクリックすると、生成された tclstart MATLAB スクリプトの tcl コマンドを使用してシミュレーターが起動されます。シミュレーターが起動すると、すべての生成されたコードがコンパイルされ、HDL Cosimulation ブロックのシミュレーションの準備が整います。

複素信号のサポート

モデル hdl_cosim_demo2 に複素数の MAC サブシステムが含まれています。

bdclose all;
load_system('hdl_cosim_demo2');
open_system('hdl_cosim_demo2/Complex MAC');
makehdl('hdl_cosim_demo2/Complex MAC', 'targetlang', 'vh');
### Generating HDL for 'hdl_cosim_demo2/Complex MAC'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdl_cosim_demo2', { 'HDL Code Generation' } )">hdl_cosim_demo2</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdl_cosim_demo2'.
### Begin compilation of the model 'hdl_cosim_demo2'...
### Applying HDL optimizations on the model 'hdl_cosim_demo2'...
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdl_cosim_demo2'.
### Working on hdl_cosim_demo2/Complex MAC as hdlsrc\hdl_cosim_demo2\Complex_MAC.vhd.
### Code Generation for 'hdl_cosim_demo2' completed.
### Creating HDL Code Generation Check Report file://C:\Users\clewis\OneDrive - MathWorks\Documents\MATLAB\Examples\hdlcoder-ex48550583\hdlsrc\hdl_cosim_demo2\Complex_MAC_report.html
### HDL check for 'hdl_cosim_demo2' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

複素数の MAC のコシミュレーション モデル

テスト ベンチの生成の一環としてコシミュレーション モデルを生成し、コシミュレーション モデルのスティミュラスの部分を確認します。

makehdltb('hdl_cosim_demo2/Complex MAC', 'targetlang', 'vh', 'GenerateCosimModel', 'ModelSim')
delete(findall(0))
### Begin TestBench generation.
### Generating HDL TestBench for 'hdl_cosim_demo2/Complex MAC'.
### Begin compilation of the model 'hdl_cosim_demo2'...
### Begin compilation of the model 'gm_hdl_cosim_demo2'...
### Generating new cosimulation model: <a href="matlab:open_system('gm_hdl_cosim_demo2_mq')">gm_hdl_cosim_demo2_mq</a>.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo2\gm_hdl_cosim_demo2_mq_tcl.m.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo2\gm_hdl_cosim_demo2_mq_batch_tcl.m.
### Note: Option 'Allow Direct Feedthrough' has been set to 'on' on 'gm_hdl_cosim_demo2_mq/Complex MAC_mq'
### Begin simulation of the model 'gm_hdl_cosim_demo2'...

### Collecting data...
### Generating test bench data file: hdlsrc\hdl_cosim_demo2\In1_re.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo2\In1_im.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo2\Out1_im_expected.dat.
### Working on Complex_MAC_tb as hdlsrc\hdl_cosim_demo2\Complex_MAC_tb.vhd.
### Generating package file hdlsrc\hdl_cosim_demo2\Complex_MAC_tb_pkg.vhd.
### HDL TestBench generation complete.
 

生成される複素数の FromCosimSrc サブシステム

HDL Cosimulation ブロックを駆動する前に、入力複素信号が実数部と虚数部に自動的に分けられます。

open_system('gm_hdl_cosim_demo2_mq/FromCosimSrc')

生成される複素数の Compare サブシステム

比較セクションで、複素数出力の実数部と虚数部の結果が別々に確認されます。

open_system('gm_hdl_cosim_demo2_mq/Compare/Assert_Out1')

ベクトル信号のサポート

モデル hdl_cosim_demo3 にベクトルの MAC サブシステムが含まれています。

bdclose all;
load_system('hdl_cosim_demo3');
open_system('hdl_cosim_demo3/Vector MAC');
makehdl('hdl_cosim_demo3/Vector MAC', 'targetlang', 've');
### Generating HDL for 'hdl_cosim_demo3/Vector MAC'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdl_cosim_demo3', { 'HDL Code Generation' } )">hdl_cosim_demo3</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdl_cosim_demo3'.
### Begin compilation of the model 'hdl_cosim_demo3'...
### Applying HDL optimizations on the model 'hdl_cosim_demo3'...
### Begin model generation.
### Model generation complete.
### Begin Verilog Code Generation for 'hdl_cosim_demo3'.
### Working on hdl_cosim_demo3/Vector MAC as hdlsrc\hdl_cosim_demo3\Vector_MAC.v.
### Code Generation for 'hdl_cosim_demo3' completed.
### Creating HDL Code Generation Check Report file://C:\Users\clewis\OneDrive - MathWorks\Documents\MATLAB\Examples\hdlcoder-ex48550583\hdlsrc\hdl_cosim_demo3\Vector_MAC_report.html
### HDL check for 'hdl_cosim_demo3' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

ベクトルの MAC のコシミュレーション モデル

テスト ベンチの生成の一環としてコシミュレーション モデルを生成し、コシミュレーション モデルのスティミュラスの部分で、コード生成用にベクトル信号を平坦化する Verilog のベクトル信号を確認します。

makehdltb('hdl_cosim_demo3/Vector MAC', 'targetlang', 've', 'GenerateCosimModel', 'ModelSim')
delete(findall(0))
### Begin TestBench generation.
### Generating HDL TestBench for 'hdl_cosim_demo3/Vector MAC'.
### Begin compilation of the model 'hdl_cosim_demo3'...
### Begin compilation of the model 'gm_hdl_cosim_demo3'...
### Generating new cosimulation model: <a href="matlab:open_system('gm_hdl_cosim_demo3_mq')">gm_hdl_cosim_demo3_mq</a>.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo3\gm_hdl_cosim_demo3_mq_tcl.m.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo3\gm_hdl_cosim_demo3_mq_batch_tcl.m.
### Note: Option 'Allow Direct Feedthrough' has been set to 'on' on 'gm_hdl_cosim_demo3_mq/Vector MAC_mq'
### Begin simulation of the model 'gm_hdl_cosim_demo3'...

### Collecting data...
### Generating test bench data file: hdlsrc\hdl_cosim_demo3\In1_0.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo3\In1_1.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo3\Out1_0_0_expected.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo3\Out1_0_1_expected.dat.
### Working on Vector_MAC_tb as hdlsrc\hdl_cosim_demo3\Vector_MAC_tb.v.
### HDL TestBench generation complete.
 

生成されるベクトルの FromCosimSrc サブシステム

open_system('gm_hdl_cosim_demo3_mq/FromCosimSrc')

生成されるベクトルの Compare サブシステム

open_system('gm_hdl_cosim_demo3_mq/Compare')

ローカル マルチレートのサポート

モデル hdl_cosim_demo4 に、Sum of Elements ブロックをもつ MAC サブシステムが含まれています。このブロックは、コード生成メッセージからわかるように、カスケード実装で構成されていて、オーバークロックを必要とします。

bdclose all;
load_system('hdl_cosim_demo4');
open_system('hdl_cosim_demo4/LocalMR MAC');
makehdl('hdl_cosim_demo4/LocalMR MAC', 'targetlang', 'vh');
makehdltb('hdl_cosim_demo4/LocalMR MAC', 'targetlang', 'vh', 'GenerateCosimModel', 'ModelSim');
delete(findall(0))
### Generating HDL for 'hdl_cosim_demo4/LocalMR MAC'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdl_cosim_demo4', { 'HDL Code Generation' } )">hdl_cosim_demo4</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdl_cosim_demo4'.
### Begin compilation of the model 'hdl_cosim_demo4'...
### Applying HDL optimizations on the model 'hdl_cosim_demo4'...
### The code generation and optimization options you have chosen have introduced additional pipeline delays.
### The delay balancing feature has automatically inserted matching delays for compensation.
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 1: 1 cycles.
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdl_cosim_demo4'.
### MESSAGE: The design requires 5 times faster clock with respect to the base rate = 1.
### Working on hdl_cosim_demo4/LocalMR MAC/Sum of Elements/serial_sum_operation as hdlsrc\hdl_cosim_demo4\serial_sum_operation.vhd.
### Working on hdl_cosim_demo4/LocalMR MAC/Sum of Elements as hdlsrc\hdl_cosim_demo4\Sum_of_Elements.vhd.
### Working on LocalMR MAC_tc as hdlsrc\hdl_cosim_demo4\LocalMR_MAC_tc.vhd.
### Working on hdl_cosim_demo4/LocalMR MAC as hdlsrc\hdl_cosim_demo4\LocalMR_MAC.vhd.
### Generating package file hdlsrc\hdl_cosim_demo4\LocalMR_MAC_pkg.vhd.
### Code Generation for 'hdl_cosim_demo4' completed.
### Creating HDL Code Generation Check Report file://C:\Users\clewis\OneDrive - MathWorks\Documents\MATLAB\Examples\hdlcoder-ex48550583\hdlsrc\hdl_cosim_demo4\LocalMR_MAC_report.html
### HDL check for 'hdl_cosim_demo4' complete with 0 errors, 0 warnings, and 3 messages.
### HDL code generation complete.
### Begin TestBench generation.
### Generating HDL TestBench for 'hdl_cosim_demo4/LocalMR MAC'.
### Begin compilation of the model 'hdl_cosim_demo4'...
### Begin compilation of the model 'gm_hdl_cosim_demo4'...
### Generating new cosimulation model: <a href="matlab:open_system('gm_hdl_cosim_demo4_mq')">gm_hdl_cosim_demo4_mq</a>.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo4\gm_hdl_cosim_demo4_mq_tcl.m.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo4\gm_hdl_cosim_demo4_mq_batch_tcl.m.
### Note: Option 'Allow Direct Feedthrough' has been set to 'on' on 'gm_hdl_cosim_demo4_mq/LocalMR MAC_mq'
### Begin simulation of the model 'gm_hdl_cosim_demo4'...

### Collecting data...
### Generating test bench data file: hdlsrc\hdl_cosim_demo4\In1.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo4\Out1_expected.dat.
### Working on LocalMR_MAC_tb as hdlsrc\hdl_cosim_demo4\LocalMR_MAC_tb.vhd.
### Generating package file hdlsrc\hdl_cosim_demo4\LocalMR_MAC_tb_pkg.vhd.
### HDL TestBench generation complete.
 

オーバークロックをオフセットするための時間スケール設定の更新

コード生成メッセージに、モデルの基本レートの 5 倍の速さのクロックを必要とするオーバークロックが示されています。この情報は、次のメッセージに示されるように、コシミュレーション モデルでは時間スケール設定の一部としてカプセル化されています。

N = (ClockPeriod / DutBaseSampleTime) * OverClockFactor
1 sec in Simulink corresponds to 50ns in the HDL Simulator(N = 50)

Incisive のサポート

bdclose all;
load_system('hdl_cosim_demo1')
makehdl('hdl_cosim_demo1/MAC', 'targetlang', 'vh')
makehdltb('hdl_cosim_demo1/MAC', 'targetlang', 'vh', 'GenerateCosimModel', 'Incisive')
type hdlsrc/hdl_cosim_demo1/gm_hdl_cosim_demo1_in_tcl
bdclose all;

% close Modelsim
%tclHdlSim('after 1000 quit -f');
### Generating HDL for 'hdl_cosim_demo1/MAC'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdl_cosim_demo1', { 'HDL Code Generation' } )">hdl_cosim_demo1</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdl_cosim_demo1'.
### Begin compilation of the model 'hdl_cosim_demo1'...
### Applying HDL optimizations on the model 'hdl_cosim_demo1'...
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdl_cosim_demo1'.
### Working on hdl_cosim_demo1/MAC as hdlsrc\hdl_cosim_demo1\MAC.vhd.
### Code Generation for 'hdl_cosim_demo1' completed.
### Creating HDL Code Generation Check Report file://C:\Users\clewis\OneDrive - MathWorks\Documents\MATLAB\Examples\hdlcoder-ex48550583\hdlsrc\hdl_cosim_demo1\MAC_report.html
### HDL check for 'hdl_cosim_demo1' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.
### Begin TestBench generation.
### Generating HDL TestBench for 'hdl_cosim_demo1/MAC'.
### Begin compilation of the model 'hdl_cosim_demo1'...
### Begin compilation of the model 'gm_hdl_cosim_demo1'...
### Generating new cosimulation model: <a href="matlab:open_system('gm_hdl_cosim_demo1_in')">gm_hdl_cosim_demo1_in</a>.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo1\gm_hdl_cosim_demo1_in_tcl.m.
### Generating new cosimulation tcl script: hdlsrc\hdl_cosim_demo1\gm_hdl_cosim_demo1_in_batch_tcl.m.
### Note: Option 'Allow Direct Feedthrough' has been set to 'on' on 'gm_hdl_cosim_demo1_in/MAC_in'
### Begin simulation of the model 'gm_hdl_cosim_demo1'...

### Collecting data...
### Generating test bench data file: hdlsrc\hdl_cosim_demo1\In1.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo1\In2.dat.
### Generating test bench data file: hdlsrc\hdl_cosim_demo1\Out1_expected.dat.
### Working on MAC_tb as hdlsrc\hdl_cosim_demo1\MAC_tb.vhd.
### Generating package file hdlsrc\hdl_cosim_demo1\MAC_tb_pkg.vhd.
### HDL TestBench generation complete.
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Auto generated cosimulation 'tclstart' script 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Source Model         : hdl_cosim_demo1
%  Generated Model      : gm_hdl_cosim_demo1
%  Cosimulation Model   : gm_hdl_cosim_demo1_in
%
%  Source DUT           : gm_hdl_cosim_demo1_in/MAC
%  Cosimulation DUT     : gm_hdl_cosim_demo1_in/MAC_in
%
%  File Location        : hdlsrc\hdl_cosim_demo1\gm_hdl_cosim_demo1_in_tcl.m
%  Created              : 2021-10-12 15:34:22
%
%  Generated by MATLAB 9.12 and HDL Coder 3.19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ClockName           : clk
%  ResetName           : reset
%  ClockEnableName     : clk_enable
%
%  ClockLowTime        : 5ns
%  ClockHighTime       : 5ns
%  ClockPeriod         : 10ns
%
%  ResetLength         : 20ns
%  ClockEnableDelay    : 10ns
%  HoldTime            : 2ns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ModelBaseSampleTime   : 1
%  DutBaseSampleTime     : 1
%  OverClockFactor     : 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Mapping of DutBaseSampleTime to ClockPeriod
%
%  N = (ClockPeriod / DutBaseSampleTime) * OverClockFactor
%  1 sec in Simulink corresponds to 10ns in the HDL Simulator(N = 10)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ResetHighAt          : (ClockLowTime + ResetLength + HoldTime)
%  ResetRiseEdge        : 27ns
%  ResetType            : async
%  ResetAssertedLevel   : 1
%
%  ClockEnableHighAt    : (ClockLowTime + ResetLength + ClockEnableDelay + HoldTime)
%  ClockEnableRiseEdge  : 37ns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function tclCmds = gm_hdl_cosim_demo1_in_tcl
tclCmds = {
    'exec ncvhdl -64bit -v93 MAC.vhd',...% Compile the generated code
    'exec ncelab -64bit -access +wc MAC',...
    ['hdlsimulink -gui MAC',...%Comment: Initiate cosimulation
    ' -input "{@simvision  {set w \[waveform new\]}}"',...% Add wave commands for chip input signals
    ' -input "{@simvision {waveform add -using \$w -signals :clk}}"',...
    ' -input "{@probe -create -shm clk }"',...
    ' -input "{@simvision {waveform add -using \$w -signals :reset}}"',...
    ' -input "{@probe -create -shm reset }"',...
    ' -input "{@simvision {waveform add -using \$w -signals :clk_enable}}"',...
    ' -input "{@probe -create -shm clk_enable }"',...
    ' -input "{@simvision {waveform add -using \$w -signals :In1}}"',...
    ' -input "{@probe -create -shm In1 }"',...
    ' -input "{@simvision {waveform add -using \$w -signals :In2}}"',...
    ' -input "{@probe -create -shm In2 }"',...
    ' -input "{@simvision {waveform add -using \$w -signals :ce_out}}"',...% Add wave commands for chip output signals
    ' -input "{@probe -create -shm ce_out }"',...
    ' -input "{@simvision {waveform add -using \$w -signals :Out1}}"',...
    ' -input "{@probe -create -shm Out1 }"',...
    ' -input "{@database -open waves -into waves.shm -default}"',...
    ' -input "{@puts \"\"}"',...
    ' -input "{@puts \"Ready for cosimulation...\"}"',...
   ]
};
end