主要内容

在UVM测试台上用基于AXI的RTL DUT替换行为DUT

这个例子展示了如何从简单的行为DUT接口转移到使用AXI Lite和AXI流总线协议的RTL DUT接口。一些UVM组件必须更改,例如驾驶员和监视器,但原始测试台结构以及序列和记分板组件可以在不进行修改的情况下重新使用。

介绍

看这个例子从Simulink生成参数化UVM测试台金宝app有关生成UVM测试台的设计和背景说明。要生成本示例的默认测试台,请执行:

%生成UVM测试台设计=“prm_uvmtb / PulseDetector”序列=“prm_uvmtb/GenPulse”记分牌=“prm_uvmtb/检查检测”uvmbuild(设计、顺序、记分板)

Simulink中的D金宝appUT代表了脉冲检测器的功能行为,不使用任何硬件协议接口,这是HDL IP核的典型特征。UVM测试台使用Simulink设计代替实际的HDL实现金宝app。验证工作流的下一步是将使用基于axis协议的实际HDL实现集成到同一个生成的UVM测试台中。

要使用RTL DUT,必须替换UVM测试台的部分,如蓝色部分所示:

映射端口到AXI接口

对于这个RTL DUT多项式系数端口映射到处理器接口AXI4 Lite数据输入端口映射到AXI4流从接口,并且数据输出端口映射到一个AXI4-Stream主接口,如下所示。

您可以手动编写此RTL或使用HDL编码器的IP核心生成工作流来创建它。该模型有一个变体算法,可以使用HDL编码器产品生成HDL IP核。

在Simulink中模拟HDL变量金宝app

要使用此变量进行模拟,请执行:

%模拟RTL可生成算法变量设置参数(“prm_uvmtb / PulseDetector”“LabelModeActiveChoice”“HDL”) set_param (“prm_uvmtb / CheckDetection / ExpectsDelay”“LabelModeActiveChoice”帧的延迟) sim卡(“prm_uvmtb”

[FrameNum= 0]在Ref或Impl中未发现峰值。[FrameNum= 1] Peak location=2163.000000, magu -squared=0.280 using global max [FrameNum= 1] Peak detected from impl=2170 error(abs)=7 [FrameNum= 1] Peak location=2163.000000, error(abs)=0.000 error(pct)=0.017 [FrameNum= 2] Peak location=2163.000000,Peak magu -squared from impl=2170 error(abs)=7 [FrameNum= 2] Peak location=2163.000000, error(abs)=0.000 error(pct)=0.190 [FrameNum= 3]Peak magu -squared from impl=2170 error(abs)=7 [FrameNum= 3] Peak location=2163.000000, error(abs)=0.000 error(pct)=0.183 [FrameNum= 4] Peak location=2163.000000,[FrameNum= 4] Peak magu -squared from impl=2170 error(abs)=7 [FrameNum= 4] Peak location=2163.000000, error(abs)=0.000 error(pct)=0.043 [FrameNum= 5] Peak location=2163.000000,[FrameNum= 5] Peak magu -squared from impl=0.255, error(abs)=0.000 error(pct)=0.031 [FrameNum= 6] Peak location=2163.000000,Peak magu -squared from impl=2170 error(abs)=7 [FrameNum= 6] Peak location=2163.000000, error(abs)=0.000 error(pct)=0.187 [FrameNum= 7] Peak location=2163.000000,Peak magu -squared from impl=2170 error(abs)=7 [FrameNum= 7] Peak location=2163.000000, error(abs)=0.000 error(pct)=0.019 [FrameNum= 8] Peak location=2163.000000,[FrameNum= 8] Peak magu -squared from impl=2170 error(abs)=7 [FrameNum= 8] Peak location=2163.000000, error(abs)=0.000 error(pct)=0.032 [FrameNum= 9] Peak location=2163.000000,[FrameNum= 9] Peak magu -squared from impl=0.239, error(abs)=0.001 error(pct)=0.241 [FrameNum= 10] Peak location=2163.000000, mag-squared=0.225 using global max [FrameNum= 10] Peak detected from impl=2170 error(abs)=7 [FrameNum= 10] Peak mag-squared from impl=0.225, error(abs)=0.000 error(pct)=0.146

生成高密度脂蛋白

如果您有HDL编码器,您可以设置刀具路径并为该变体生成RTL。例如,要创建与Xilinx Vivado兼容的IP,请插入刀具路径并执行以下操作:

%生成基于AXI的RTL HDL IP(需要HDL编码器)刀具轨迹(“工具名”“Xilinx Vivado”“刀具路径”“/tools/Vivado/2018.3/bin/Vivado”)prm_uvmtb_HDL工作流

这将把生成的HDL IP文件放入HDL_prj/hdlsrc/prm_uvmtb。但是,RTL实现已包含在位于overrides_AXIDUT/AxipSource的演示中,因此不需要HDL编码器许可证。

覆盖必要的UVM组件

用于替换原始DUT的UVM文件位于overrides_AXIDUT中。不需要修改从原始文件生成的任何文件紫外线照射调用。

模拟UVM测试台

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

我们有许多新的RTL文件要编译,我们必须重写顶层设计单元。我们通过环境变量将这些更新传递给脚本。

%清除影响UVM模拟的环境变量环境变量EXTRA_UVM_SIM_ARGS;塞滕夫额外费用;塞滕夫UVM_顶部_模块%使用AXI RTL DUT模拟UVM测试台cdprm_uvmtb_uvmbuild/uvm_测试台/顶部环境变量额外费用“-f../../../overrides_AXIDUT/extra_comp_args.f”环境变量EXTRA_UVM_SIM_ARGS“+SNR\u默认值\u输入值=10000000+UVM\u测试名称=mw\u脉冲检测器\u轴向测试”环境变量UVM_顶部_模块中波脉冲检波器!vsim - run_tb_mq。do % ModelSim/QuestaSim (gui)! vsim-c-do run_tb_mq.do%ModelSim/QuestaSim(控制台)!./运行\u tb\u incisive.sh%incisive(控制台)!./run_tb_xcelium.sh%xcelium(控制台)!./run_tb_vcs.sh % VCS (console)cd../../..

模拟日志和波形片段如下所示。请注意,日志显示与之前相同的结果,检测到5个脉冲。但是,也请注意,波形显示了不同的设计时间。对于5000个信号样本的每一帧,64个系数首先通过处理器接口编程,然后5000个样本流化,而不是始终有效的稳定数据流。

结论和下一步

此示例演示了如何使用Simulink中开发的设计和测试平台生成完全可执行的UVM测试平台金宝app紫外线照射命令自动生成、编译关键组件,并将其集成到UVM框架中。

HDL验证工程师可以确认Simulink的总体覆盖范围,并使用他们自己的原生UVM序列库扩大覆盖范围。金宝app

他们还可以用RTL设计代替Simulink的行为设计,RTL设计封装在硬件协议(如AXI4)中,不改金宝app变原始序列生成器和响应检查器。