メインコンテンツ

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

svdpiConfiguration

MATLAB から UVM およびSystemVerilogコンポーネントを生成するためのワークフローを設定します。

R2023a 以降

    説明

    Add-On Required: この機能にはが必要です。

    svdpiConfiguration オブジェクトは、MATLAB® 関数からユニバーサル検証手法 (UVM) コンポーネントまたはSystemVerilog DPIコンポーネントを作成するかどうかを制御します。

    作成

    説明

    svdpiObj = svdpiConfiguration() は、シーケンシャルモジュール用の svdpiConfiguration オブジェクトを作成します。

    svdpiObj = svdpiConfiguration(ComponentKind) は、ComponentKind で指定されたSystemVerilogモジュールまたは UVM コンポーネント用の svdpiConfiguration オブジェクトを作成します。

    プロパティ

    すべて展開する

    コード生成

    coder.config('dll') を使用してカスタム構成オブジェクトを指定します。構成オブジェクトのビルドタイプは、ダイナミックライブラリに設定する必要があります。coder.config (MATLAB Coder)を参照してください。

    MATLAB 関数に structcomplex などの複合データ型のポートが含まれている場合に、 SystemVerilogポートがどのように生成されるかを選択します。

    • 1 — 新しいSystemVerilog型を定義することで構造体を保持します。

    • 0 — SystemVerilogで複合データ型を個々のメンバーにフラット化します。

    データ型: logical

    MATLAB 関数にベクトルまたは行列データ型のポートが含まれる場合に、 SystemVerilogポートがどのように生成されるかを選択します。

    • 1 — 配列または行列の各要素は、生成されたSystemVerilogコードにスカラー ポートを作成します。

    • 0 — 生成されたSystemVerilogポートは、MATLAB で定義されている array または matrix を保持します。

    データ型: logical

    DPI コンポーネントを生成する MATLAB 関数の名前。文字ベクトルまたは文字列として指定します。

    これはオプションのプロパティです。uvmfTestBenchConfiguration オブジェクトを使用する場合、このオブジェクトに関連付けられた MATLAB 関数名を指定できるのはこの方法だけです。

    例: "funcName"

    データ型: char | string

    ポートのSystemVerilogデータ型として、以下のいずれかの値を選択してください。

    • CompatibleCType – ポートと互換性のあるCタイプのインターフェースを生成します。

    • BitVector – ポート用のビットベクトル型インターフェースを生成します。

    • LogicVector – ポート用のロジックベクトル型インターフェースを生成します。

    この物件に関する詳細については、-PortsDataType を参照してください。

    依存関係

    このプロパティを有効にするには、ComponentKind プロパティを 'uvmf-predictor''uvmf-sequence'、または 'uvmf-custom' に設定します。

    MATLAB関数の入力のデータ型とサイズ。セル配列として指定します。生成されるDPIコンポーネントが受け入れる入力タイプを指定します。InputArgsは、各関数引数のタイプを指定するセル配列です。要素はcoder.typeofを使用して型に変換されます。

    このプロパティは、codegen (MATLAB Coder) 関数の引数 args と同じ機能を持ちます。

    例: {double(0),int8(0)}

    依存関係

    このプロパティを有効にするには、ComponentKind プロパティを 'uvmf-predictor''uvmf-sequence'、または 'uvmf-custom' に設定します。

    コンポーネントの情報

    SystemVerilog DPIまたは UVM コンポーネント生成用の組み込みテンプレートを 'template-name' として選択します。カスタマイズされたテンプレートの場合は、'custom' を指定してください。

    この設定オブジェクトを使用すると、組み込みテンプレート変数の値を上書きできます。オーバーライドの一般的な用途は、型名の競合を回避することで、生成されたコードと既存のテストベンチまたはコンポーネントライブラリとの互換性を確保することです。

    すべてのテンプレートに共通するオーバーライドは以下のとおりです。

    • ComponentTypeNameTestBenchTypeNamesvdpiConfiguration オブジェクトの ComponentTypeName および TestBenchTypeName プロパティを設定することで、デフォルト値を上書きします。

    • ComponentPackageTypeNamesvdpiConfiguration オブジェクトの TemplateDictionary プロパティを設定することで、デフォルト値を上書きします。

    オプションのテンプレート固有のオーバーライド:

    • UVMシーケンス:

      • SequenceTransTypeNameSequencerTypeNameSequenceCountSequenceFlushCountConfigObjTypeNamesvdpiConfiguration オブジェクトの TemplateDictionary プロパティを設定することで、デフォルト値を上書きします。

    • UVM予測ツール:

      • InputTransTypeNameOutputTransTypeNameConfigObjTypeNamesvdpiConfiguration オブジェクトの TemplateDictionary プロパティを設定することで、デフォルト値を上書きします。

    • UVMスコアボード:

      • InputTransTypeNameOutputTransTypeNameConfigObjTypeNamesvdpiConfiguration オブジェクトの TemplateDictionary プロパティを設定することで、デフォルト値を上書きします。

    • PREDICTOR_INPUTSMONITOR_INPUTSCONFIG_OBJECT_INPUTSsvdpiConfiguration オブジェクトで addPortGroup オブジェクト関数を使用して、HDL ポートをグループにマッピングします。

    テンプレートエンジンの詳細については、SystemVerilog と UVM テンプレート エンジンを参照してください。

    コンポーネントの型名。文字列または文字ベクトルとして指定します。dpigen 関数は、この引数を使用して、生成されるコンポーネントとSystemVerilogパッケージファイルに名前を付けます。コンポーネントタイプ名を指定しない場合、コンポーネントタイプ名はMATLAB関数名になります。

    テストベンチのタイプ名。文字列または文字ベクトルとして指定します。dpigen 関数は、この引数を使用して、生成されるSystemVerilogテストベンチとその関連ファイルに名前を付けます。コンポーネントタイプ名を指定しない場合、テストベンチタイプ名にはMATLABテストベンチ関数の名前が使用されます。

    以下のコードでは、dpigen 関数が予測コンポーネントを生成し、指定されたテストベンチ関数名 (my_tb) を使用して、そのコンポーネントのテストベンチモジュールを作成します。

    c = svdpiConfiguration('uvm-predictor');
    dpigen fooBar -testbench my_tb -config c;

    そのテストベンチ名を上書きするには、目的のSystemVerilog名を指定してください。この例では、pulse_framed_tb と指定されています。

    c = svdpiConfiguration('uvm-predictor');
    c.TestBenchTypeName = 'pulse_framed_tb';
    dpigen fooBar -testbench my_tb -config c;

    テンプレート

    各テンプレートはテンプレート辞書を定義し、その中でテンプレート固有の変数を宣言します。これらの変数には、変数名とその後に続く値をセル配列として割り当ててください。

    テンプレートファイルは、%<gtd.Name> の形式のトークンを Value に展開します。GTDはグローバルテンプレート辞書の略で、設定オブジェクトで定義する変数に加えて、あらかじめ定義された組み込み値を保持します。名前と値は文字列または文字配列である必要があります。

    UVMコンポーネントのトランザクションタイプ名やUVMシーケンスコンポーネントのシーケンス数など、デフォルトのテンプレート値をここで上書きします。例を見るには、テンプレート変数の値を上書き にアクセスしてください。

    例:

    c = svdpiConfiguration('uvm-sequence');
    c.TemplateDictionary = {
         'SequenceCount',      '15',
         'SequenceFlushCount', '2',
       };

    テンプレートファイル内の次の行:

    repeat (%<gtd.SequenceCount>)

    以下に置き換えられます:

    repeat (15)

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

    ポートグループとは、生成されたインターフェースの中で、論理的に互いに関連し合う部分を表すものです。以下に例を示します。

    • モジュールへのすべての入力は、組み込みテンプレートのALL_INPUTSポートグループに属します。

    • モニターから発生するUVMスコアボードモジュールへのすべての入力は、UVMスコアボードテンプレートのMONITOR_INPUTSポートグループに属します。

    • スコアボード、シーケンス、または予測器への設定入力は、CONFIG_OBJECT_INPUTS インターフェースに属します。

    ALL_INPUTSALL_OUTPUTSなど、いくつかの組み込みグループが存在します。テンプレートはポートグループを利用して、そのグループに特化したラッパーコードを生成します。

    ポートグループは、それぞれaddPortGroup関数またはremovePortGroup関数を使用して変更できます。

    例えば、スコアボードにポートグループを追加するには、次のようにします。

    c = svdpiConfiguration('uvm-scoreboard');
         addPortGroup(c, 'PREDICTOR_INPUTS', {'PeakSq','Location','FilterOut_re','FilterOut_im'});
         addPortGroup(c, 'MONITOR_INPUTS', {'PeakSqImplIn','LocationImplIn',...
                         'FilterOutImpl_re','FilterOutImpl_im'}); 
         addPortGroup(c, 'CONFIG_OBJECT_INPUTS', 'pErrorPercentThreshold'); 

    テンプレートファイルでは、構成オブジェクト定義に以下のコードを含めることで、変数のランダム化が可能になります。

    %foreach io = ptd.CONFIG_OBJECT_INPUTS_size
        %<ptd.CONFIG_OBJECT_INPUTS[io].PORT_RAND_VAR_DECL>
    %endforeach

    ptd.CONFIG_OBJECT_INPUTS_size において、ptd はポートテンプレート辞書を表すことに注意してください。

    モジュールまたはコンポーネントを処理する際に使用するテンプレートファイルへのパス。1つ以上のテンプレートを含むセル配列として指定します。

    テンプレートファイルは、コンポーネントごとに複数のファイルを生成できます。テンプレートファイルの場所と名前には、絶対パスまたは相対パスを使用できます。相対パスは絶対パスに変換されます。

    依存関係

    このプロパティを書き込むには、ComponentKind プロパティを 'custom' に設定します。それ以外の場合、このプロパティは読み取り専用です。

    コンポーネントのテストベンチを処理する際に使用するテンプレートファイルへのパス。文字列として指定するか、複数のテンプレートを指定する場合はセル配列として指定します。

    テンプレートファイルは、コンポーネントごとに複数のファイルを生成できます。ファイル名には絶対パスまたは相対パスを使用できます。相対パスは絶対パスに変換されます。

    依存関係

    このプロパティを書き込むには、ComponentKind プロパティを 'custom' に設定します。それ以外の場合、このプロパティは読み取り専用です。

    オブジェクト関数

    addPortGroupsvdpiConfiguration オブジェクトにポート グループ マッピングを追加する
    removePortGroupsvdpiConfiguration オブジェクトからポート グループ マッピングを削除します

    すべて折りたたむ

    この例では、HDL Verifier™ のデフォルトテンプレートを使用して、sineWaveGen 関数からSystemVerilog DPI (SVDPI) コンポーネントを生成する方法を示します。

    デフォルトテンプレートを使用してSVDPIモジュールを作成します

    デフォルトテンプレートを使用して設定オブジェクトを作成し、それをdpigen関数で使用します。生成されたSystemVerilogファイルに注目してください。

    • sineWaveGen.sv

    • sineWaveGen_pkg.sv

    c=svdpiConfiguration();
    dpigen -config c -args {0,0} sineWaveGen
    ### Generating DPI-C Wrapper sineWaveGen_dpi.c
    ### Generating DPI-C Wrapper header file sineWaveGen_dpi.h
    ### Generating file sineWaveGen_pkg.sv
    ### Generating file sineWaveGen.sv
    ### Generating makefiles for: sineWaveGen_dpi
    Code generation successful.
    

    生成されたモジュールの名前をmyDutに変更してください。生成されたSystemVerilogファイルに注目してください。

    • myDut .sv

    • myDut _pkg.sv

    c.ComponentTypeName = 'myDut';
    dpigen -config c -args {0,0} sineWaveGen
    ### Generating DPI-C Wrapper sineWaveGen_dpi.c
    ### Generating DPI-C Wrapper header file sineWaveGen_dpi.h
    ### Generating file myDut_pkg.sv
    ### Generating file myDut.sv
    ### Generating makefiles for: sineWaveGen_dpi
    Code generation successful.
    

    テンプレートを使用してUVM予測ツールを作成する

    UVM予測テンプレートを使用して構成オブジェクトを作成し、それをdpigen関数で使用します。生成されたSystemVerilogファイルに注目してください。

    • predictor_input_trans.sv

    • predictor_output_trans.sv

    • sinWave_predictor_pkg.sv

    • sinWave_predictor.sv

    c = svdpiConfiguration('uvm-predictor');
    c.ComponentTypeName = 'sinWave_predictor';
    dpigen sineWaveGen -config c -args {0,0}
    ### Generating DPI-C Wrapper sineWaveGen_dpi.c
    ### Generating DPI-C Wrapper header file sineWaveGen_dpi.h
    ### Generating file sinWave_predictor_pkg.sv
    ### Generating file sineWaveGen_predictor_input_trans.sv
    ### Generating file sineWaveGen_predictor_output_trans.sv
    ### Generating file sineWaveGen_predictor_cfgobj.sv
    ### Generating file sinWave_predictor.sv
    ### Generating makefiles for: sineWaveGen_dpi
    Code generation successful.
    

    テンプレート変数の値を上書きする

    次に、生成されたSystemVerilogトランザクション名を変更します。

    • デフォルトのpredictor_input_transを上書きして、sineWaveTransに名前を変更します。

    • デフォルトのpredictor_output_transを上書きして、sineWaveOutに名前を変更します。

    テンプレート辞書内の変数 InputTransTypeNameOutputTransTypeName に新しい値を割り当てるには、TemplateDictionary プロパティを設定します。

    c.TemplateDictionary = {
        'InputTransTypeName','sineWaveTrans',
        'OutputTransTypeName','sineWaveOut'
    };
    dpigen sineWaveGen -config c -args {0,0}
    ### Generating DPI-C Wrapper sineWaveGen_dpi.c
    ### Generating DPI-C Wrapper header file sineWaveGen_dpi.h
    ### Generating file sinWave_predictor_pkg.sv
    ### Generating file sineWaveTrans.sv
    ### Generating file sineWaveOut.sv
    ### Generating file sineWaveGen_predictor_cfgobj.sv
    ### Generating file sinWave_predictor.sv
    ### Generating makefiles for: sineWaveGen_dpi
    Code generation successful.
    

    バージョン履歴

    R2023a で導入

    すべて展開する