Main Content

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

UVM フレームワークのカスタム予測子と DPI コンポーネントを統合する

この例では、DPI シーケンス コンポーネントをカスタム予測コンポーネントと統合し、完全に機能する UVM フレームワーク (UVMF) テスト ベンチを生成する方法を示します。シーケンス コンポーネントを MATLAB® で設計し、予測子コンポーネントを SystemVerilog で設計し、MATLAB から UVMF 準拠の YAML を生成します。次に、生成されたコンポーネントと互換性のある UVMF テストベンチ コードを生成し、Questa® シミュレータを使用してブロック レベルの RTL シミュレーションを実行します。

はじめに

設計の RTL 検証の特定のインスタンスでは、MATLAB 以外のさまざまなプログラミング言語を使用してカスタム予測子が開発されます。これらのカスタム予測子は、設計の動作または結果を予測する目的で使用されます。さらに、MATLAB は、DPI コンポーネントとして組み込まれるシーケンスを生成するためによく使用されます。これらのカスタム予測子と DPI ベースのシーケンスを UVMF テストベンチにシームレスに統合するには、カスタム YAML ファイルを作成する必要があります。

この例の主な目的は、カスタム YAML テンプレートを使用して UVMF テストベンチ YAML ファイルを生成する手順を段階的に提供することです。これらのテンプレートを使用すると、検証環境の特定の要件に合わせて UVMF テストベンチをカスタマイズできます。このプロセスに従うことで、カスタム予測子と DPI ベースのシーケンスを UVMF テストベンチに効率的に統合し、プロセスを合理化できます。

カスタム予測子用の MATLAB からの YAML 生成は、Windows® と Linux® の両方のプラットフォームでサポートされています。この例では、Linux でのプロセスを段階的に説明します。yaml_gen_custom_predictors_proj プロジェクトには、サポート スクリプトと HDL ファイルが含まれています。サンプルの作業フォルダーを exampleWorkingFolder 変数に保存し、プロジェクトを開きます。

exampleWorkingFolder = pwd;
project = openProject("yaml_gen_custom_predictors_proj");

デザイン概要

この例では、デジタル時計のデザインを使用します。設計の詳細については、UVM フレームワークのテストベンチ コンポーネントの生成と統合 サンプルの「設計の概要」セクションを参照してください。

ブロックレベルの検証

この図は、デジタル クロック チップの alarm ブロックのブロック レベルの UVMF 検証環境のアーキテクチャを示しています。

BlockEnvironmentUsingCustomPredictor.png

このブロックレベルの検証環境を構成するさまざまなコンポーネントは次のとおりです。

  • input_agent — テスト ベクトルを設計の入力インターフェイスに送り込むアクティブ エージェント。このエージェントは、刺激 MATLAB ファイルの DPI コンポーネントをシーケンスとして使用します。

  • custom_predictor — MATLAB の外部で開発されたコンポーネントは、alarm RTL ブロックの出力を予測します。このコンポーネントは、予測された出力をスコアボード コンポーネントに送信します。

  • output_agent — デザインの出力インターフェースを監視し、信号情報をスコアボード コンポーネントに転送するパッシブ エージェント。予測 DPI コンポーネントは MATLAB の外部で開発されているため、このエージェントのインターフェース情報を自動的に導出することはできません。したがって、このエージェントのインターフェースは、カスタム YAML テンプレートの一部である必要があります。

  • スコアボード — 出力エージェントと予測子からそれぞれ受信した実際の設計出力と予想される設計出力を比較するコンポーネント。このコンポーネントは、比較の不一致を検出すると uvm_error を生成します。

ブロックレベルの検証環境の生成

ブロックレベルの検証環境の生成には、このセクションで詳しく説明する複数の手順が含まれます。この図はエンドツーエンドのワークフローを示しています。

CustomPredictorExampleWorkflow.png

UVMFテストベンチコンポーネントの設計と構成

MATLAB で UVM シーケンス コンポーネントを設計する

前のセクションで示したブロックレベルの UVMF 検証環境で DPI コンポーネントが使用される MATLAB ファイルを開発します。この例のサポート スクリプトの一部であるデジタル クロック チップのいくつかのブロックのシーケンス コンポーネントを使用できます。

open(fullfile("dut_dpi","alarm","alarm_test.m"))

SystemVerilog でカスタム予測器を設計する

さまざまな言語で予測子を開発できます。この例では、alarm ブロックに SystemVerilog クラスベースの予測子を使用します。これを他のブロックのカスタム予測子を開発するための参考として考えることができます。

open(fullfile("dut_custom","alarm","alarm_predictor_component.sv"))

カスタム YAML テンプレートの設計

uvmfTestBenchConfiguration クラスは、DPI ベースの予測子とシーケンス コンポーネントを入力として想定するデフォルトの YAML テンプレートをサポートします。alarm ブロックにはカスタム予測子があるため、デフォルトのテンプレートは使用できません。したがって、前のセクションで説明したブロックレベルの検証環境を記述するには、カスタム YAML テンプレートが必要です。この例のサポート スクリプトの一部であるカスタム テンプレートを使用できます。

open(fullfile("yaml_custom","alarm_test_bench.svt"))

UVMF シーケンスと予測コンポーネントの作成と構成

svdpiConfiguration および uvmfTestBenchConfiguration オブジェクトを作成して構成するには、次の手順を実行します。

1. dut_dpi/alarm フォルダに移動します。

cd(fullfile("dut_dpi","alarm"))

2. uvmf-sequence ComponentKindsvdpiConfiguration オブジェクトを作成して設定します。

seq = svdpiConfiguration("uvmf-sequence");
seq.MATLABFunctionName = "alarm_test";

3. uvmfTestBenchConfiguration オブジェクトを作成して構成し、必要な DPI コンポーネント ファイルとともに UVMF テスト ベンチ YAML を生成します。

uvmfTestBenchKind = "custom";
uvmfObject = uvmfTestBenchConfiguration(uvmfTestBenchKind,{seq});

UVMFTestBenchYAMLTemplate プロパティをカスタム テンプレート ファイルに設定します。

pathToCustomYAMLTemplate = fullfile("..","..","yaml_custom","alarm_test_bench.svt");
uvmfObject.UVMFTestBenchYAMLTemplate = pathToCustomYAMLTemplate;

DPI_COMPONENT_NAME テンプレート変数を TemplateDictionary プロパティに追加します。

uvmfObject.TemplateDictionary = {
    'DPI_COMPONENT_NAME', 'alarm'
    };

シーケンス DPI コンポーネントと UVMF 準拠の YAML を生成する

シーケンスの DPI コンポーネントと対応する UVMF テストベンチ YAML を生成するには、generateYAMLforUVMFTestBench 関数を実行します。

generateYAMLforUVMFTestBench(uvmfObject);

UVMF テストベンチコードを生成する

次の環境変数を設定します。

  • UVMF_HOME – この環境変数を UVMF インストール パスに設定します。

  • MTI_VCO_MODE – UVMF テストベンチシミュレーションに 64 ビット Questa® 実行可能ファイルを使用するには、この環境変数を 64 に設定します。他のシミュレーターも互換性がある必要がありますが、この例ではワークフローは示されていません。

setenv("UVMF_HOME","/home/Documents/UVMF_2023.1")
setenv("MTI_VCO_MODE","64")

uvmfbuild/uvmf_testbench フォルダに移動します。

cd(fullfile("uvmfbuild","uvmf_testbench"))

UVMF テストベンチ YAML ファイルを yamluvmf スクリプトの引数として指定して、yaml2uvmf コマンドを実行します。

!$UVMF_HOME/scripts/yaml2uvmf.py uvmftb.yaml

この図は生成されたフォルダーの内容を示しています。

FolderContentsAfterCustomUVMF.png

環境の設定とRTLシミュレーションの実行

SHスクリプトを実行する

UVMF は、DPI コンポーネントを統合するための SystemVerilog ファイル (alarm_input_agent_DPI_stimgen_sequence_mtlb.svh など) と、ベース UVMF テストベンチ ファイルを DPI コンポーネント用に生成された SystemVerilog ファイルに置き換える対応する SH スクリプト (alarm_input_agent_interface_mtlb_prep.sh) を生成します。これらのスクリプトの実行を自動化するには、ヘルパー関数 hExecuteUVMFShellScripts を使用し、uvmf_template_output フォルダーへのパスを入力引数として渡します。

hExecuteUVMFShellScripts("uvmf_template_output")

プロジェクト フォルダーに戻ります。

cd(project.ProjectStartupFolder)

生成された予測ファイルにカスタム予測を追加する

予測子はカスタム手段を使用して開発されるため、UVMF から生成された予測子ファイルに手動で統合する必要があります。これを手動で作成する代わりに、この例では、alarm_predictor.svh ファイルを使用できます。

open(fullfile("dut_custom","alarm","alarm_predictor.svh"));

UVMF から生成された予測ファイルをこのファイルに置き換えます。

copyfile("dut_custom/alarm/alarm_predictor_component.sv","dut_dpi/alarm/uvmfbuild/uvmf_testbench/uvmf_template_output/verification_ip/environment_packages/alarm_env_pkg/src","f")
copyfile("dut_custom/alarm/alarm_predictor.svh","dut_dpi/alarm/uvmfbuild/uvmf_testbench/uvmf_template_output/verification_ip/environment_packages/alarm_env_pkg/src/alarm_predictor.svh","f");

生成されたセットアップスクリプトで環境変数を設定する

uvmf_template_output/project_benches/alarm/sim フォルダーで、.source 拡張子を持つ setup_mode_alarm_environment_variables スクリプトを見つけます。hUpdateEnvironmentVariables 関数を使用して、そのファイル内の環境変数を更新します。この関数は、MATLAB からの環境変数も設定します。

hUpdateEnvironmentVariables(fullfile("dut_dpi","alarm"));

このセットアップ スクリプトの詳細については、SystemVerilog DPI を UVM フレームワーク ワークフローに統合する の例の「生成されたセットアップ スクリプトで環境変数を設定する」セクションを参照してください。

RTLシミュレーションを使用してブロック機能を検証する

次の手順に従って、Questa ソフトウェアでブロックレベルのシミュレーションを実行します。

1. uvmf_template_output/project_benches/alarm/sim フォルダに移動します。

cd(fullfile("dut_dpi","alarm","uvmfbuild","uvmf_testbench","uvmf_template_output","project_benches","alarm","sim"))

2. makeコマンドを実行する

!make debug TEST_NAME=DPI_stimgen_test

Questa ウィンドウのトランスクリプト ウィンドウに「run -all 」と入力します。この図はQuestaでのシミュレーション結果を示しています。

QuestaSimAlarmBlockSimulation.png

サンプルの作業フォルダーに戻ります。

cd(exampleWorkingFolder);

まとめ

この例では、カスタム YAML テンプレートを開発して、MATLAB から必要な DPI コンポーネントとともに UVMF 準拠の YAML を生成し、yaml2uvmf ワークフローを使用してそれを UVMF に統合する方法を示します。このアプローチに従って、デジタル クロック設計内の他のブロックの UVMF 環境を生成できます。

参考

|

関連するトピック