Main Content

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

テンプレートエンジン言語構文

テンプレート ファイルは、さまざまな種類の SystemVerilog DPI コンポーネントと UVM アーティファクトを生成するためにパラメーター化された SystemVerilog コードです。テンプレートは、テンプレート ディレクティブとテンプレート変数を使用して、特定の変数値のコンポーネントを生成します。svdpiConfiguration オブジェクトのプロパティ、ローカル テンプレート ディクショナリ、およびデザイン固有の情報から変数値を割り当てることができます。

組み込みテンプレート ファイルを使用できないアプリケーションの場合は、ComponentKind プロパティを custom に設定した構成を作成し、カスタム テンプレート ファイルを書き込むことができます。

メモ

この機能には ASIC Testbench for HDL Verifier アドオンが必要です。

テンプレートの構造

テンプレートは、まずローカル辞書にテンプレート固有の変数を定義します。また、SystemVerilogTemplateLibrary.svt などの他のファイルで定義されたテンプレート変数も含まれる場合があります。次に例を示します。

%<BEGIN_LOCAL_DICTIONARY>
ComponentPackageTypeName=%<ComponentTypeName>_pkg
InputTransTypeName=my_input_trans
OutputTransTypeName=my_output_trans
%<END_LOCAL_DICTIONARY>
%<INCLUDE SystemVerilogTemplateLibrary.svt>

必要なテンプレート変数を定義または含めた後、テンプレートは BEGIN_FILE ディレクティブと END_FILE ディレクティブの間に生成される SystemVerilog 成果物の内容を指定します。コンテンツは、ローカル辞書で定義されているかファイルに含まれている SystemVerilog コードとテンプレート変数で構成されます。実行時に、テンプレート エンジンはこれらのテンプレート変数に値を割り当て、SystemVerilog テキストに置き換えます。たとえば、組み合わせモジュール テンプレートの上部の構造は次のようになります。

%<BEGIN_FILE %<ComponentTypeName>.sv>
// -------------------------------------------
// File:    %<ComponentTypeName>.sv
%<SVTLCommonHeader>    // this can be a common company header
`timescale 1ns/1ns     // SV timescale directive
import %<ComponentPackageTypeName>::*; // Importing component SV package

module %<ComponentTypeName> (          // Module interface declaration 
  %<BEGIN_FOREACH_PORT_CHOP ALL_INS_AND_OUTS>
    %<PORT_DECL> 
  %<END_FOREACH_PORT_CHOP>
);

.
.
.
endmodule

%<END_FILE>

ComponentTypeNamesineWaveGen の場合、エンジンは BEGIN_FILE および BEGIN_FILE ディレクティブで示されているように、sineWaveGen.sv という名前のファイルに出力を生成します。

例については、MATLAB 関数から SystemVerilog DPI コンポーネントを生成するを参照してください。

// -------------------------------------------
// File:    sineWaveGen.sv

// -------------------------------------------
// Created: 03-Jan-2023 19:04:05
// Tools  : Generated by MATLAB 9.14 and HDL Verifier 7.1

// -------------------------------------------

`timescale 1ns/1ns
import sineWaveGen_pkg::*;

module sineWaveGen (
  input real amp  ,
  input real freq  ,
  output real y [0:99]
);
.
.
.
endmodule

テンプレートディレクティブ

テンプレート ディレクティブは、テンプレート エンジンにファイルの生成、ポート グループの反復処理、変数の定義と使用、SystemVerilog コードの出力を行うための指示を提供します。

テンプレート機能テンプレート ディレクティブ演算

テンプレートコメント

%</*  
…  
*/> 

テンプレート エンジンは、テンプレートを処理するときに、これらのコメント マーカー内のテキストを無視します。

結果の出力ファイルの開始と終了をマークする

%<BEGIN_FILE filename>  
… 
%<END_FILE>  

HDL Verifier™ は、これらのディレクティブ間の処理されたコンテンツを filename に書き込みます。filename 自体はテンプレート変数を使用できます。次に例を示します。

%<ComponentTypeName>.sv

テンプレートを含める
%<INCLUDE filename>  

親テンプレート ファイルに別のテンプレート ファイルを含めます。

このディレクティブは、テンプレート ファイル内の filename の内容をインライン化します。filename 自体はテンプレート変数を使用できます。

ローカルテンプレート変数
%<BEGIN_LOCAL_DICTIONARY>  
…  
%<END_LOCAL_DICTIONARY>   

このテンプレート ファイルにローカルなテンプレート変数を定義します。

辞書エントリを variable=value の形式で指定します。テンプレート コードでは、%<Var> トークンを使用して変数を利用できます。%<BEGIN_VARIABLE_DEFINITION> ディレクティブと %<END_VARIABLE_DEFINITION> ディレクティブの間に複数行の変数定義を指定します。

svdpiConfiguration オブジェクトの TemplateDictionary プロパティを設定することで変数値をオーバーライドできます。変数ルックアップには階層があります。詳細については、%<VAR_NAME> ディレクティブを参照してください。

テンプレート変数の定義
%<BEGIN_VARIABLE_DEFINITION>  
…  
%<END_VARIABLE_DEFINITION> 

辞書内に複数行のテンプレート変数を定義します。

任意の行数にわたってテンプレート変数を定義します。内容は変数展開されず、参照時にそのままテンプレートに配置されます。

ポートグループを反復処理してコードを発行する
%<BEGIN_FOREACH_PORT PortGroup> 
… 
%<END_FOREACH_PORT>

PortGroup 内の各ポートに対して、これらのディレクティブ間のテンプレート コードを展開します。次のポート グループが組み込まれています:

  • ALL_PORTS, ALL_INPUTS, ALL_OUTPUTS, ALL_SEQ_CONTROL, ALL_INS_AND_OUTS

  • ALL_FIELD_MACRO_INPUTS, ALL_FIELD_MACRO_OUTPUTS

  • ALL_VARSIZE_OUTPUTS, ALL_NONVARSIZE_OUTPUTS

svdpiConfiguration オブジェクトの PortGroups プロパティを設定することで、カスタム グループを定義できます。各反復で、HDL Verifier はローカルのポート固有の辞書を作成します。

ポートグループを反復処理してコードを発行する
%<BEGIN_FOREACH_PORT_CHOP PortGroup> 
… 
%<END_FOREACH_PORT_CHOP>

PortGroup を反復処理してコードを出力し、展開の最後の文字を削除します。

%<BEGIN/END_FOREACH_PORT> と同じように動作しますが、最後の文字も削除されます。このディレクティブは、引数の間にコンマ (‘,’) が必要で、最後の引数の後にはコンマが不要な関数引数リストなどの構造に対応するために使用します。

変数名
%<VAR_NAME>

テンプレート変数を展開します。

コードを生成するとき、HDL Verifier は %<VAR_NAME> を割り当てられた値に置き換えます。テンプレート変数の値を次の順序で検索します。HDL Verifier が値を見つけると、検索は停止します。

  1. svdpiConfiguration オブジェクトからの辞書

  2. 現在の PortGroup ポートのローカル ポート辞書

  3. INCLUDE ディレクティブからの辞書、例えば SystemVerilogTemplateLibrary

  4. このテンプレートファイルにローカルな辞書

  5. 組み込み変数

テンプレート変数

テンプレートを処理するとき、HDL Verifier はテンプレート変数を値に置き換えます。ほとんどの変数値は、グローバル辞書とローカル辞書のエントリの結果です。この表は、システム内の定義済み変数を検索順に示します。カスタム辞書を使用して、独自の変数定義ライブラリを構築できます。

変数ソース 変数

グローバル辞書

この辞書は svdpiConfiguration オブジェクトで定義されています。これは、TemplateDictionary プロパティによって定義された辞書に加えて設定したプロパティ値を反映します。グローバル ディクショナリには、PortGroups プロパティで定義されたポート リストも含まれます。

  • ComponentKind

  • ComponentTypeName

  • TestBenchTypeName

  • ComponentTemplateFiles

  • TestBenchTemplateFiles

  • MATLABTestBenchFunctionName

  • MATLABFunctionName

  • DLLOutputName

  • TemplateDictionary コンテンツ

  • PortGroupName1

  • PortGroupName2

ポート辞書

いくつかの組み込みポート グループがあり、svdpiConfiguration オブジェクトの PortGroups プロパティを使用して独自のグループを定義することもできます。

%<BEGIN/END_FOREACH_PORT> テンプレート ブロックでは、各反復のポートに固有の複数のテンプレート変数を定義できます。

  • PORT_NAME

  • PORT_DIRECTION

  • PORT_DATATYPE

  • PORT_DIMENSIONS

  • PORT_RAND_QUALIFIER

  • PORT_FIELD_MACRO_TYPE

宣言用の便利な変数:

  • PORT_DECL

  • PORT_VAR_DECL

  • PORT_RAND_VAR_DECL

  • PORT_FIELD_MACRO_DECL

ローカル辞書

テンプレート ファイルでは、%<BEGIN_LOCAL_DICTIONARY> を使用して辞書を定義できます。直接または INCLUDE を通じて複数の辞書が存在する場合、ローカル辞書はそれらすべてを連結したものになります。変数が異なる辞書で複数回指定されている場合、その定義は以前のすべての定義に優先します。

HDL Verifier は特別な辞書 SystemVerilogTemplateLibrary を提供しており、これを次のようにテンプレートに含めることができます。

%<INCLUDE SystemVerilogTemplateLibrary.svt>

  • テンプレートファイルで定義された変数

SystemVerilogTemplateLibraryより:

一般的な変数:

  • SVTLCommonHeader

  • SVTLDPIPackageDefinition

  • SVTLAllModuleScripts

  • SVTLAllUVMScripts

Questa® シミュレータ固有の変数:

  • SVTLQuestaDoFileStart

  • SVTLQuestaDoFileWaves

  • SVTLQuestaModuleDoFile

  • SVTLQuestaModuleToolchainDoFile

  • SVTLQuestaUVMDoFile

  • SVTLQuestaUVMToolchainDoFile

Xcelium™ シミュレータ固有の変数:

  • SVTLXceliumScriptFileStart

  • SVTLXceliumModuleScript

  • SVTLXceliumModuleToolchainScript

  • SVTLXceliumUVMScript

  • SVTLXceliumUVMToolchainScript

VCS® シミュレータ固有の変数:

  • SVTLVCSScriptFileStart

  • SVTLVCSModuleScript

  • SVTLVCSModuleToolchainScript

  • SVTLVCSUVMScript

  • SVTLVCSUVMToolchainScript

Vivado® シミュレータ固有の変数:

  • SVTLVivadoScriptFileStart

  • SVTLVivadoModuleScript

  • SVTLVivadoModuleToolchainScript

  • SVTLVivadoUVMScript

  • SVTLVivadoUVMToolchainScript

  • SVTLVivadoScriptFileStartWin

  • SVTLVivadoModuleScriptWin

  • SVTLVivadoModuleToolchainScriptWin

  • SVTLVivadoUVMScriptWin

  • SVTLVivadoUVMToolchainScriptWin

組み込み変数

これらの変数は組み込みです。

  • HasVarSizeInputs

  • HasVarSizeOutputs

  • TimeStamp

  • ToolVersions

  • IsUsingHDLToolchain

  • IsCrossPlatformWorkflow

  • IsQuestaSimToolchain

  • IsXceliumToolchain

  • IsVCSToolchain

  • IsVivadoToolchain

  • DPIObjectHandleDecl

  • ResetFcnCallStart

  • OutputFcnCallStart

  • CalcAndSizesFcnCallStart

  • VarSizeOutputFcnCallStart

  • TestBenchVectorGetAndCheck

参考

|

関連するトピック