主要内容

从Simulink生成参数化UVM测试台架金宝app

这个例子展示了如何在Simulink®中开发设计和测试平台,并为通用验证方法(UVM)环境生成等效的模拟金宝appuvmbuild.相关示例展示了如何使用特定于协议的驱动程序、约束随机序列和参数化记分牌来扩展这个测试平台,以改进验证。

简介

这个示例将引导您完成一个HDL实现的自顶向下的设计开发过程。在这样的工作流程中,您将在Simulink中设计一个行为算法,并使用周围的块对其进行测试,以生成刺激并检查结果。金宝app一旦模拟确认设计满足其需求,您就可以向下游HDL实现团队交付所需的任何附属品。您需要重新验证HDL实现是否满足在Simulink中模拟的要求,以及设计的任何其他独特方面,例如没有在Simulink中建模的协议接口。金宝app

通常情况下,交接过程可能是乏味的,并且是许多错误的来源。HDL实现和HDL设计验证(DV)工程师必须:

  • 将书面规范转换为HDL和测试环境。

  • 了解Simulink仿真环境的运行时行为,例如如何创建、处理和检查刺激。金宝app

  • 将运行时行为转换为SystemVerilog实现。

  • 将刺激、设计和响应检查集成到一个可运行的SystemVerilog中,以确认转换的行为与原始的Simulink模拟行为相同。金宝app

  • 将这些主要的SystemVerilog组件集成到UVM上下文中,以允许使用dv编写的验证扩展Simulink测试。金宝app这种扩展的测试可能包括随机测试、SystemVerilog断言、功能覆盖和代码覆盖。

使用HDL Verifier™UVM生成功能,这个移交过程是自动化的。DV工程师得到一个经过验证的UVM测试环境,该环境与在Simulink中执行的测试相匹配,并且可以轻松地更新该环境以满足他们的下游验证需求。金宝app

在Simulink中进行设计和测试金宝app

编写你的算法并添加一个测试平台。该模型由刺激生成、待测设计(DUT)和响应检查等试验台典型子系统组成。

在这个设计中,源子系统创建了一个随机脉冲,64个样本信息嵌入在5000个样本噪声帧的随机位置。它还生成一组64个最优匹配的滤波器系数用于检测脉冲。输入同时馈送给设计和响应检查器。响应检查器验证脉冲在噪声波形中的正确位置被检测到。通过控制台输出确认操作正确。如果检测到的信号的预期功率不在一定范围内,则触发断言。

模拟模型证实,在产生的5个脉冲中,有5个被检测到。一个由三个面板组成的图显示了Tx信号(原始脉冲)、Rx信号(嵌入噪声中的脉冲)以及一个参考实现的滤波输出,该输出显示了检测到峰值的位置。输出信号延迟一帧。

[FrameNum= 0]峰值位置=2163.000000,mag-squared=0.280使用全局max [FrameNum= 0]峰值从impl=2163错误(abs)=0 [FrameNum= 0]峰值mag-squared从impl=0.280,错误(abs)=0.000错误(pct)=0.017 [FrameNum= 1]峰值位置=2163.000000,mag-squared=0.200使用全局max [FrameNum= 1]峰值检测从impl=2163错误(abs)=0 [FrameNum= 1]峰值mag-squared从impl=0.199,错误(abs)=0.000错误(pct)=0.190 [FrameNum= 2]峰值位置=2163.000000,mag-squared=0.224使用全局max [FrameNum= 2]峰值检测从impl=2163错误(abs)=0 [FrameNum= 2]峰值mag-squared从impl=0.223,错误(abs)=0.000错误(pct)=0.183 [FrameNum= 3]峰值位置=2163.000000,mag-squared=0.200使用全局max [FrameNum= 3]峰值检测从impl=2163错误(abs)=0 [FrameNum= 3]峰值mag-squared从impl=0.200,错误(abs)=0.000错误(pct)=0.043 [FrameNum= 4]峰值位置=2163.000000,使用全局max [FrameNum= 4]从impl=2163 error(abs)=0检测到的峰值[FrameNum= 4]从impl=0.255检测到的峰值mag-squared,错误(abs)=0.000错误(pct)=0.031 [FrameNum= 5]从impl=2163检测到的峰值mag-squared,错误(abs)=0 [FrameNum= 5]从impl=0.241检测到的峰值mag-squared,错误(abs)=0.000错误(pct)=0.187 [FrameNum= 6]峰值位置=2163.000000,使用全局max [FrameNum= 6]从impl=2163 error(abs)=0检测到的峰值[FrameNum= 6]从impl检测到的峰值mag-squared=0.241,错误(abs)=0.000错误(pct)=0.019 [FrameNum= 7]从impl检测到的峰值mag-squared= 2163.000000错误(abs)=0 [FrameNum= 7]从impl检测到的峰值mag-squared=0.225,错误(abs)=0.000错误(pct)=0.032 [FrameNum= 8]峰值位置=2163.000000,使用全局max [FrameNum= 8]从impl=2163错误(abs)=0检测到的峰值[FrameNum= 8]从impl=0.239检测到的峰值mag-squared,错误(abs)=0.000错误(pct)=0.037 [FrameNum= 9]从impl=2163错误(abs)=0检测到的峰值mag-squared [FrameNum= 10]从impl=0.225检测到的峰值mag-squared,错误(abs)=0.000错误(pct)=0.146 [FrameNum= 10]峰值位置=2163.000000,mag-squared=0.207 using global max [FrameNum= 10] Peak detected from impl=2163 error(abs)=0 [FrameNum= 10] Peak mag-squared from impl=0.207, error(abs)=0.000 error(pct)=0.134

生成一个可执行的UVM测试平台

使用uvmbuild函数将您的设计导出到UVM环境。UVM测试平台为HDL验证过程提供了结构,并允许实现验证团队重用所有Simulink测试平台组件和测试用例。金宝app标准组件定义根据环境在模拟中的角色将它们分开。对于这个例子:

  • PulseDetector映射到DUT SystemVerilog模块

  • GenPulse子系统映射到sequence_itemSequencer UVM组件的创建

  • CheckDetection子系统被映射到计分板UVM组件。

生成的UVM测试台如下图所示:

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

UVM测试台中每个突出显示的部分都是通过包装Simulink子系统生成的c代码并使用DPI调用其入口点来实现的。金宝app下图显示了PulseDetector子系统的两个函数声明。

SystemVerilog/UVM代码决定DPI调用的时间。例如,在PulseDetector SystemVerilog模块中:

  • “初始化”DPI调用由“初始化”代码块触发。

  • “终止”DPI调用由“最终”代码块触发。

  • “reset”DPI调用由激活的复位信号触发。

  • “output”和“update”DPI调用由上升时钟边触发,其中复位不激活,时钟使能激活。

运行UVM测试平台

uvmbuild进程还生成一个脚本来运行UVM测试的模拟。为以下模拟器生成脚本:

  • Mentor Graphics®Modelsim®和Questa®:run_tb_mq.do

  • Cadence®Xcelium™:run_tb_xcelium.sh

  • Synopsys®VCS®:run_tb_vcs.sh

显示了为ModelSim生成的脚本。

执行生成的脚本以验证UVM执行与Simulink执行是否匹配。金宝app因为序列是用信噪比输入端口参数化的,所以在UVM中它的默认值是0.0。为了正确地比较模拟运行,我们需要将其默认值更改为2.0(其位值为0b10_000000),以匹配Simulink;金宝app这可以通过一个plusarg完成,我们通过一个环境变量传递给脚本。

%清除影响UVM模拟的环境变量'setenvEXTRA_UVM_SIM_ARGSsetenvEXTRA_UVM_COMP_ARGSsetenvUVM_TOP_MODULE
使用信噪比2.0模拟UVM测试台架cduvm_build prm_uvmtb_uvm_testbench /setenvEXTRA_UVM_SIM_ARGS+ SNR_default_inp_val = 10000000!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. . / . . / . .

模拟日志显示了相同的诊断消息:

波形显示了DUT接口信号的时序。光标放置在帧边界,并显示匹配滤波器系数的瞬时更新。