【数字IC验证】VCS+UVM使用vdp文件产生波形

本文介绍了如何在VCS环境下使用UVM进行仿真,并详细说明了如何修改UVM库和自定义Makefile以生成vpd文件,实现波形显示和自动化测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、引言

  在上一篇《Linux中UVM环境搭建》中,我们已经介绍了如何搭建UVM平台,本章将继续深入,在VCS上跑通UVM并显示仿真波形;


二、仿真文件修改

  如果要使仿真时产生vpd文件,则需要在仿真程序中(顶层)添加如下代码:

initial  begin
    $vcdpluson;
  end 

$vcdpluson;表示从此处记录波形生成vpd文件,默认文件名为vcdplus.vpd

三、修改UVM库中的Makefile文件

  需要修改的Makefile文件在uvm-1.1d文件夹的example文件夹下
在这里插入图片描述  在《Linux中UVM环境搭建》中第四节添加的指令基础上,再添加如下配置:

-debug_access+all 

保存退出
在这里插入图片描述  只有添加了这条语句后,才能正常产生vpd文件,否则程序代码会报错;


四、修改自定义Makefile文件

  在《Linux中UVM环境搭建》中第五节,我们设计了自己的Makefile文件,在此基础上我们对其修改,增加如下两条命令,这样我们每次在调用Makefile文件时就不需要删除上次仿真产生的文件,另一方面我们可以直接从终端跳转到仿真界面,无需再手动输入dev &打开可视化界面再添加波形文件了;
在这里插入图片描述  其中clean命令会在每次启动vcs进行编译前,将上一次产生的相关文件删除;
  run_dve命令则在生成vpd波形后,直接跳转至仿真界面;

UVM_HOME    = /home/ICer/uvm-1.1d

include /home/ICer/uvm-1.1d/examples/Makefile.vcs

all:clean comp run run_dve

comp:
    $(VCS) +incdir+../sv \
        run_test.sv

run:
    $(SIMV) +UVM_TESTNAME=uart_test
    $(CHECK)

clean:
    rm -rf *.vpd csrc *.log *.key *.vpd simv* DVE*

run_dve:
    dve -full64 -vpd vcdplus.vpd & 

五、启动VCS

  编写完Makefile文件后,我们在其目录下输入命令:

make -f Makefile.vcs

在这里插入图片描述
  我们可以看到,界面直接跳转到了VCS的仿真可视化界面;
在这里插入图片描述我们将需要观察的波形添加进来
在这里插入图片描述即可看到仿真的波形;
在这里插入图片描述


测试源码

链接:https://pan.baidu.com/s/1zHOFH_PcCa8e_Tjy51RYbA?pwd=zvbq
提取码:zvbq

<think>好的,我现在需要帮助用户解决如何使用VCSUVM和Verdi单独仿真由Vivado生成的FIFO IP示例的问题。首先,我要理清用户的需求。用户希望脱离Vivado环境,使用VCS作为仿真器,结合UVM验证方法学和Verdi进行调试。这可能涉及到如何提取必要的文件,配置仿真环境,处理IP核的仿真模型,以及正确设置编译和运行参数。 首先,我应该回顾用户提供的引用内容。引用[1]提到之前尝试用ModelSim单独仿真Vivado IP核时遇到的问题,比如依赖Vivado环境,某些情况下会出错。用户现在想用VCS,可能需要类似的方法,但需要确保彻底脱离Vivado。引用[2]中的岗位要求提到需要熟悉Verilog、SV,以及验证工具的使用,这可能提示用户具备一定的背景知识,但需要具体步骤指导。 接下来,我需要考虑Vivado生成的FIFO IP示例包含哪些文件。通常会有HDL文件(如.v或.vhd)、仿真模型(如xxx_sim_netlist.v或编译后的库),以及可能的UVM测试文件。用户需要将这些文件整合到VCS环境中。 第一步是提取必要的仿真文件。Vivado生成的IP核通常会有一个.xci文件,但仿真时需要的是生成的HDL和网表。用户可能需要将IP核生成后的输出目录中的文件复制出来,包括仿真用的网表文件或预编译的库。例如,Vivado可能会生成一个sim文件夹,里面包含仿真所需的.v文件。 第二步是处理仿真模型。Vivado IP核可能依赖Xilinx的unisim库或其他预编译库。用户需要确保这些库被编译到VCS的库路径中。可以使用VCS的-y和+libext+选项来指定库目录和文件扩展名。此外,如果IP核使用了加密或编译后的模型,可能需要使用-Xilinx提供的仿真库,比如在Vivado安装目录下的data/verilog/src目录中找到的库文件。 第三步是搭建UVM测试环境。用户需要编写或生成UVM测试用例,连接到FIFO IP的接口。这里可能需要编写一个顶层测试模块(testbench),实例化FIFO IP,并连接UVM的virtual interface。同时,UVM的测试用例需要通过配置文件(如uvm_config_db)设置virtual interface,以便驱动和监控DUT。 第四步是配置VCS编译选项。需要包含UVM的源文件路径,通常使用-ntb_opts uvm选项。同时,需要将Xilinx的仿真库路径加入编译参数,可能使用-v指定库文件,-y指定库目录,+incdir+指定包含目录。此外,确保所有RTL文件和仿真模型都被正确编译。 第五步是运行仿真并调用Verdi进行调试。使用VCS编译生成的可执行文件后,运行仿真生成波形文件(如fsdb),然后使用Verdi加载波形和源代码进行调试。可能需要使用ucli或脚本在仿真过程中dump波形,或者通过UVM的report机制生成日志。 需要注意的问题包括:确保IP核的仿真模型与VCS兼容,处理可能的加密文件,正确设置timescale以避免编译错误,以及处理Xilinx仿真库的依赖。如果用户遇到编译错误,可能是由于缺少库文件或路径设置不正确。此外,UVM测试环境的结构需要正确,特别是virtual interface的连接,避免出现悬空接口导致驱动失败的情况。 可能用户还会遇到如何将UVM集成到现有FIFO IP测试中的问题。例如,FIFO的测试通常涉及写入和读取数据,检查空满标志等。UVM测试用例需要生成这些事务,并通过scoreboard验证数据的正确性。用户可能需要编写sequence、driver、monitor和scoreboard组件,并连接到FIFO的接口。 另外,Verdi的使用需要生成fsdb波形,这可能在VCS仿真时通过添加-fsdb选项,并在testbench中调用相应的系统任务,如$fsdbDumpfile和$fsdbDumpvars。还需要在VCS编译时链接Verdi的库,可能需要使用-kdb选项生成知识数据库,以便Verdi能够解析设计结构。 最后,用户可能需要一个Makefile或脚本来自动化整个过程,包括编译Xilinx库、编译设计文件、运行仿真和启动Verdi。这可以提高效率并减少手动错误。 总结步骤大致如下: 1. 提取Vivado生成的FIFO IP相关文件和仿真模型。 2. 编译Xilinx仿真库到VCS可访问的位置。 3. 搭建UVM测试环境,编写testbench和测试用例。 4. 配置VCS编译选项,包含UVM和Xilinx库路径。 5. 运行仿真并生成波形使用Verdi进行调试。 6. 验证功能正确性,调试可能的问题。 需要确保每一步都正确无误,特别是路径和文件引用的正确性。可能还需要参考VCS和Verdi的文档,确认具体选项和命令的正确用法。此外,处理Vivado IP核可能需要的特定编译选项或宏定义,例如全局时钟复位信号的定义,或者特定的仿真参数。</think>### 分步解决方案:使用VCS/UVM/Verdi仿真Vivado FIFO IP #### **步骤1:提取仿真文件** 1. 在Vivado工程中生成FIFO IP核后,进入生成目录(通常为`*.srcs/sources_1/ip`),找到FIFO IP对应的文件夹 2. 复制以下关键文件到独立仿真目录: - FIFO实例化代码(如`fifo_generator_0.xci`生成的`fifo_generator_0.v`) - 仿真网表文件(`fifo_generator_0_sim_netlist.v`) - Xilinx仿真库文件(位于`Vivado安装路径/data/verilog/src`下的`unisims`目录) #### **步骤2:编译Xilinx仿真库** ```bash # 创建库编译目录 mkdir -p xilinx_lib/unisim # 使用VCS编译Xilinx原语库 vcs -sverilog +lint=all -timescale=1ns/1ps \ -y ${XILINX_VIVADO}/data/verilog/src/unisims \ +libext+.v+.V -cfgfile xilinx_lib.cfg -Mdir xilinx_lib/compile \ -debug_access+all -o xilinx_lib/simv ``` 需编写`xilinx_lib.cfg`配置文件指定需编译的原语模块[^1]。 #### **步骤3:搭建UVM测试环境** ```systemverilog // 示例:UVM测试平台顶层结构 module top_tb; import uvm_pkg::*; `include "uvm_macros.svh" // 时钟生成 bit clk; always #5 clk = ~clk; // FIFO接口定义 fifo_if fifo_intf(clk); // DUT实例化 fifo_generator_0 dut ( .clk (clk), .din (fifo_intf.din), .wr_en(fifo_intf.wr_en), .rd_en(fifo_intf.rd_en), .dout (fifo_intf.dout), .full (fifo_intf.full), .empty(fifo_intf.empty) ); // UVM初始化 initial begin uvm_config_db#(virtual fifo_if)::set(null, "*", "fifo_vif", fifo_intf); run_test("fifo_base_test"); end endmodule ``` #### **步骤4:配置VCS编译脚本** ```bash # vcs_compile.sh vcs -full64 -sverilog -debug_access+all \ -ntb_opts uvm \ -timescale=1ns/1ps \ -y ${XILINX_VIVADO}/data/verilog/src/unisims \ +libext+.v+.V \ -top top_tb \ -f filelist.f \ -l compile.log \ -kdb # 生成Verdi知识库 ``` 文件列表`filelist.f`需包含: ``` # UVM基础库 ${VCS_HOME}/etc/uvm-1.2/src/uvm.sv # 用户测试文件 top_tb.sv fifo_if.sv fifo_generator_0_sim_netlist.v ``` #### **步骤5:运行仿真与调试** ```bash # 启动仿真 ./simv +UVM_TESTNAME=fifo_write_read_test -ucli -do "fsdbDumpfile wave.fsdb; fsdbDumpvars 0 top_tb; run" # 启动Verdi调试 verdi -sv -ntb_opts uvm \ -ssf wave.fsdb \ -nologo \ -top top_tb \ -f filelist.f & ``` #### **关键问题处理技巧** 1. **仿真库冲突**:若出现`xilinx_vivado`库未定义错误,需在编译时添加`-L xilinx_lib/simv`指定预编译库路径 2. **时序检查**:添加`+notimingchecks`可跳过Xilinx原语的时序检查,加快仿真速度 3. **信号追踪**:在Verdi中使用`Signal->Get Signal`直接抓取FIFO内部状态信号(需编译时保留层次结构)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPRAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值