主要内容

UVM测试台中记分牌的参数

此示例显示了如何在Simulink®生成的UVM测试台中控制响应检查器的参数。金宝app此类参数化有助于设计验证工程师在不同的测试场景下重用记分牌。金宝appSimulink参数到Checker将导致配置对象,其值可以在派生的测试类(随机或不随机)中或通过命令行加上arg中设置。

介绍

看到这个例子从Simulink生成参数化的UVM测试台金宝app用于描述设计和背景上产生UVM测试台的背景。要为此示例生成默认的测试台,请执行:

%生成UVM测试台设计='prm_uvmtb / pulsedetector'序列='prm_uvmtb / genpulse'记分牌='prm_uvmtb / checkdetection'UVMBuild(设计,序列,记分牌)

记分牌的参数化

在模型中,响应检查由断言检查块中使用的错误阈值变量进行参数化。它被指定为通过使用simulink.parameter保留在SystemVerilog中的参数,金宝appperrorthreshold.。在该规范中,默认值为1.95%,这反映了金色参考和实际DUT之间的误差差的容差。(在该试验台中,差异是由于双精度与检测逻辑的固定点实现。)

在生成的UVM代码中,参数放在配置对象中,mw_pulsedetector_scoreboard_cfg_obj.

mw_pulsedetector_scoreboard_cfg_obj.sv.

在测试的Build_Phase中实例化,mw_pulsedetector_test.

mw_pulsedetector_test.sv.

通过UVM_CONFIG_DB.在记分牌中,mw_pulsedetector_scoreboard.,在它的start_of_simulation_phase中:

mw_pulsedetector_scoreboard.sv.

使用plus参数更新错误阈值

测试计划最初呼吁公差为1.95%。如果以后,将拧紧设计规范以反映更安全的关键要求至0.50%,这可以使用命令行进行。在我们的支持脚金宝app本中,我们使用环境变量来影响SystemVerilog命令行加参数。

%清除环境变量,影响UVM模拟setenv.extra_uvm_sim_args.setenv.extra_uvm_comp_args.setenv.UVM_TOP_MODULE.
%使用PlueRG覆盖模拟UVM测试台光盘UVM_BUILD / PRM_UVMTB_UVM_TESTBENCH / TOPsetenv.extra_uvm_sim_args.'+ snr_default_inp_val = 01000000 + RTWStructParam_PerrorthReshold = 0.50'!vsim -do run_tb_mq.do%modelsim / questasim(gui)!vsim -c -do run_tb_mq.do%modelsim / questasim(控制台)!./run_tb_incisive.sh%incisive(控制台)!./run_tb_xcelium.sh%xcelium(控制台)!./run_tb_vcs.sh%vcs(控制台)光盘../../ ..

观察到1.0的SNR,设计有时违反0.50%的错误阈值。

使用测试中的默认配置对象随机化错误阈值

您可以直接从测试生成和设置值,因为记分板配置对象是成员。在这里,我们随机化范围内的阈值[0.050,0.500]百分比。请注意,阈值是类型的真实的因此不能直接随机分配。

mw_pulsedetector_scrprm_param_overrides.sv.

要使用这些新类运行UVM模拟,我们可以使用通过环境变量给出的额外参数使用原始脚本。

%使用随机配置对象设置模拟UVM测试台光盘UVM_BUILD / PRM_UVMTB_UVM_TESTBENCH / TOPsetenv.extra_uvm_comp_args.'-f ../../../OverRides_scrprm/extra_comp_args.f'setenv.extra_uvm_sim_args.'+ snr_default_inp_val = 01000000 + uvm_testname = mw_pulsedetector_test_scrprm'!vsim -do run_tb_mq.do%modelsim / questasim(gui)!vsim -c -do run_tb_mq.do%modelsim / questasim(控制台)!./run_tb_incisive.sh%incisive(控制台)!./run_tb_xcelium.sh%xcelium(控制台)!./run_tb_vcs.sh%vcs(控制台)光盘../../ ..

观察到,在这次运行中,选择0.150%的阈值,并且几个帧最终违反此阈值。

使用派生配置对象随机化错误阈值

您还可以通过创建派生记分板配置对象来创建更复杂的配置设置随机化。在该示例中,测试计划要求阈值落入反映检测器的不同操作环境的不同有趣范围内。

mw_pulsedetector_scrprm_param_overrides.sv.

为实现此目标,派生的配置对象具有以下额外行为:

  • 添加“阈值_bucket”成员声明为Randc

  • 使用该阈值_bucket成员暗示阈值范围

  • 在仿真期间打印出随机化值进行检查

创建一个新测试,它告诉UVM工厂使用新配置对象并在Build_Phase期间随机化其设置。

要使用这些新类运行UVM模拟,我们可以使用通过环境变量给出的额外参数使用原始脚本。

%使用随机派生配置对象模拟UVM测试台光盘UVM_BUILD / PRM_UVMTB_UVM_TESTBENCH / TOPsetenv.extra_uvm_comp_args.'-f ../../../OverRides_scrprm/extra_comp_args.f'setenv.extra_uvm_sim_args.'+ snr_default_inp_val = 01000000 + uvm_testname = mw_pulsedetector_test_scrprm2'!vsim -do run_tb_mq.do%modelsim / questasim(gui)!vsim -c -do run_tb_mq.do%modelsim / questasim(控制台)!./run_tb_incisive.sh%incisive(控制台)!./run_tb_xcelium.sh%xcelium(控制台)!./run_tb_vcs.sh%vcs(控制台)光盘../../ ..

观察到,对于此运行,选择1.01%的阈值,并且所有帧都在此阈值下进行。

结论和下一步

在完整的UVM环境中,每当介绍随机化时,通常必须包括覆盖范围,并确保环境的不同部分了解生成的随机值。在这些实施例中,简单地印刷出随机化值。为生成的错误阈值添加覆盖范围并在许多模拟运行的粗糙上分析实际信号误差是留给读者的练习。