主要内容

更改UVM测试台中计分板的参数

这个例子展示了如何控制由Simulink®生成的UVM测试台中响应检查器的参数。万博1manbetx这样的参数化帮助设计验证工程师在不同的测试场景下重用记分牌。万博1manbetx检查器的Simulink参数将产生一个配置对象,其值可以在派生的测试类中设置(随机与否),也可以直接通过命令行加参数设置。

简介

参见示例从Simulink生成参数化UVM测试台架万博1manbetx介绍UVM测试台的设计和背景。要为这个例子生成默认的测试平台,执行:

生成一个UVM测试平台设计=“prm_uvmtb / PulseDetector”序列=“prm_uvmtb / GenPulse”记分板=“prm_uvmtb / CheckDetection”Uvmbuild(设计、序列、记分牌)

计分板的参数化

在该模型中,响应检查由断言检查块中使用的错误阈值变量参数化。它被指定为使用Simulink保留在SystemVerilog中的参数。万博1manbetx参数,pErrorThreshold.在该规范中,它的默认值为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

使用加号参数更新错误阈值

测试计划最初要求公差为1.95%。如果后来设计规范被收紧,以反映更安全的关键需求到0.50%,这可以使用命令行完成。在我们的支持脚万博1manbetx本中,我们使用一个环境变量来影响SystemVerilog命令行加上参数。

清除影响UVM模拟的环境变量setenvEXTRA_UVM_SIM_ARGSsetenvEXTRA_UVM_COMP_ARGSsetenvUVM_TOP_MODULE
使用plusarg覆盖模拟UVM测试台cduvm_build prm_uvmtb_uvm_testbench /setenvEXTRA_UVM_SIM_ARGS“+ SNR_default_inp_val = 01000000 + RTWStructParam_pErrorThreshold = 0.50”!Vsim -do run_tb_mq。做% ModelSim/QuestaSim (gui)!Vsim -c -do run_tb_mq.使用实例做% ModelSim/QuestaSim(控制台)!./run_tb_xcelium.sh % Xcelium (console)!./run_tb_vcs.sh % VCS (console)cd. . / . . / . .

观察一下,当信噪比为1.0时,设计有时会违反0.50%的误差阈值。

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

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

看到mw_PulseDetector_SCRPRM_param_overrides.sv

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

使用随机配置对象设置模拟UVM试验台cduvm_build prm_uvmtb_uvm_testbench /setenvEXTRA_UVM_COMP_ARGS“- f  ../../../ overrides_SCRPRM / extra_comp_args.f 'setenvEXTRA_UVM_SIM_ARGS' + SNR_default_inp_val = 01000000 + UVM_TESTNAME = mw_PulseDetector_test_SCRPRM '!Vsim -do run_tb_mq。做% ModelSim/QuestaSim (gui)!Vsim -c -do run_tb_mq.使用实例做% ModelSim/QuestaSim(控制台)!./run_tb_xcelium.sh % Xcelium (console)!./run_tb_vcs.sh % VCS (console)cd. . / . . / . .

注意,在此运行中,选择了0.150%的阈值,并且有几个帧最终违反了该阈值。

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

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

看到mw_PulseDetector_SCRPRM_param_overrides.sv

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

  • 添加一个声明为randc的threshold_bucket成员

  • 使用threshold_bucket成员来暗示阈值范围

  • 将随机值打印出来,以便模拟时检查

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

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

使用随机衍生的配置对象模拟UVM试验台cduvm_build prm_uvmtb_uvm_testbench /setenvEXTRA_UVM_COMP_ARGS“- f  ../../../ overrides_SCRPRM / extra_comp_args.f 'setenvEXTRA_UVM_SIM_ARGS' + SNR_default_inp_val = 01000000 + UVM_TESTNAME = mw_PulseDetector_test_SCRPRM2 '!Vsim -do run_tb_mq。做% ModelSim/QuestaSim (gui)!Vsim -c -do run_tb_mq.使用实例做% ModelSim/QuestaSim(控制台)!./run_tb_xcelium.sh % Xcelium (console)!./run_tb_vcs.sh % VCS (console)cd. . / . . / . .

注意,对于这次运行,选择了1.01%的阈值,并且所有帧都在这个阈值之下。

结论和下一步

在一个完整的UVM环境中,无论何时引入随机化,通常都必须包括覆盖范围,并确保环境的不同部分知道生成了哪些随机值。在这些例子中,随机值被简单地打印出来。为生成的误差阈值添加覆盖率,并分析大量模拟运行的实际信号误差,这是留给读者的练习。

另请参阅

uvmbuild

相关的话题

从Simulink生成参数化UVM测试台架万博1manbetx

用基于轴的RTL DUT代替UVM试验台的行为DUT