生成的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验证UVM生成功能,这个传递过程是自动化的。DV工程师获得一个经过验证的UVM测试环境,该环境与在Simulink中执行的测试相匹配,并且可以轻松地更新该环境,以满足下游的验证需求。金宝app

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

编写您的算法并向其添加一个测试工作台。该模型由刺激生成、待测设计和响应检测等典型的测试子系统组成。

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

通过对模型的仿真,验证了在5个产生的脉冲中,有5个被检测到。一个三窗格的图显示了一个Tx信号(原始脉冲),一个Rx信号(嵌入到噪声中的脉冲),以及一个参考实现的滤波输出,它显示了在何处检测到峰值。输出信号延迟一帧。

= 2163.000000 (FrameNum = 0)峰值位置,mag-squared = 0.280使用全球马克斯(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使用全球马克斯(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使用全球马克斯(FrameNum = 2)峰值检测impl = 2163错误(abs) = 0 (FrameNum = 2)峰值mag-squared impl = 0.223,误差(abs) = 0.000误差(pct) = 0.183 = 2163.000000 (FrameNum = 3)峰值位置,mag-squared = 0.200使用全局马克斯(FrameNum = 3)峰值检测从impl = 2163错误(abs) = 0 (FrameNum = 3)峰值mag-squared impl = 0.200,误差(abs) = 0.000误差(pct) = 0.043 = 2163.000000 (FrameNum = 4)峰值位置,mag-squared = 0.255利用全球最大(FrameNum = 4)峰值检测从impl = 2163错误(abs) = 0 (FrameNum = 4)峰值mag-squared impl = 0.255,误差(abs) = 0.000误差(pct) = 0.031 = 2163.000000 (FrameNum = 5)峰值位置,mag-squared = 0.241使用全球马克斯(FrameNum = 5)峰值检测impl = 2163错误(abs) = 0 (FrameNum = 5)峰值mag-squared impl = 0.241,误差(abs) = 0.000误差(pct) = 0.187 = 2163.000000 (FrameNum = 6)峰值位置,mag-squared = 0.241使用全球马克斯(FrameNum = 6)峰值检测impl = 2163错误(abs) = 0 (FrameNum = 6)峰值mag-squared impl = 0.241,误差(abs) = 0.000误差(pct) = 0.019 = 2163.000000 (FrameNum = 7)峰值位置,mag-squared = 0.225使用全球马克斯(FrameNum = 7)峰值检测impl = 2163错误(abs) = 0 (FrameNum = 7)峰值mag-squared impl = 0.225,误差(abs) = 0.000误差(pct) = 0.032 = 2163.000000 (FrameNum = 8)峰值位置,mag-squared = 0.239使用全球马克斯(FrameNum = 8)峰值检测impl = 2163错误(abs) = 0 (FrameNum = 8)峰值mag-squared impl = 0.239,误差(abs) = 0.000误差(pct) = 0.037 (FrameNum = 9)峰值位置= 2163.000000,mag-squared = 0.225使用全球马克斯(FrameNum = 9)峰值检测impl = 2163错误(abs) = 0 (FrameNum = 9)峰值mag-squared impl = 0.225,误差(abs) = 0.000误差(pct) = 0.146 = 2163.000000 (FrameNum = 10)峰值位置,使用全局max [FrameNum= 10]峰值检测得到的impl=2163误差(abs)=0 [FrameNum= 10]峰值检测得到的impl=0.207误差(abs)=0.000误差(pct)=0.134

生成可执行UVM试验台

使用uvmbuild功能设计导​​出到UVM环境。该UVM测试台提供结构的HDL验证流程,并允许所有Simulink的测试工作台部件和测试用例由执行核查小组被重用。金宝app标准组件定义通过其在模拟角色分开环境的碎片。对于这个例子:

  • PulseDetector是否映射到DUT SystemVerilog模块

  • GenPulse子系统被映射到sequence_item为排序器UVM组件创建

  • CheckDetection子系统映射到记分牌UVM组件。

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

生成一个UVM测试工作台设计=“prm_uvmtb / PulseDetector”序列=“prm_uvmtb / GenPulse”记分板='prm_uvmtb / CheckDetection'uvmbuild(设计、序列、记分板)

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

SystemVerilog/UVM代码确定DPI调用的时间。例如,在脉冲检波器SystemVerilog模块中:

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

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

  • “复位”DPI调用由一个活动复位信号触发。

  • “输出”和“更新”DPI调用是由一个上升的时钟边缘触发的,其中重置不是活动的,而时钟启用是活动的。

运行UVM测试工作台

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

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

  • 节奏®门齿™:run_tb_incisive.sh

  • 节奏®Xcelium™: run_tb_xcelium.sh

  • Synopsys®VCS®:run_tb_vcs.sh

所生成的ModelSim脚本如下所示。

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

%清除影响UVM仿真的环境变量'setenvEXTRA_UVM_SIM_ARGSsetenvEXTRA_UVM_COMP_ARGSsetenvUVM_TOP_MODULE
%使用2.0的信噪比模拟UVM测试平台cdprm_uvmtb_uvmbuild / uvm_testbench /顶setenvEXTRA_UVM_SIM_ARGS+ SNR_default_inp_val =千万!vsim - run_tb_mq。做% 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(控制台)cd../../ ..

仿真日志显示相同的诊断消息:

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