别再为UVM实战例子头疼了!手把手教你用VCS 2023.12和Verdi 2023.12在Ubuntu 22.04上跑通第一个测试

张开发
2026/4/18 16:41:54 15 分钟阅读

分享文章

别再为UVM实战例子头疼了!手把手教你用VCS 2023.12和Verdi 2023.12在Ubuntu 22.04上跑通第一个测试
UVM实战零基础通关指南VCS 2023.12与Verdi 2023.12全流程解析第一次接触UVM验证方法学就像学习一门新语言——语法规则、工具链、调试技巧全都陌生得让人头皮发麻。特别是当你在Ubuntu终端里反复输入命令却只收获满屏红色报错时那种挫败感足以让任何初学者怀疑人生。本文将带你用最新发布的VCS 2023.12和Verdi 2023.12工具链在Ubuntu 22.04系统上完成《UVM实战》第一个例子的完整通关流程。不同于网上零散的教程片段这里提供的是一套经过完整验证的开箱即用方案包含工具配置、代码修改、波形调试的全套解决方案。1. 环境准备与工具配置1.1 系统与工具版本锁定版本兼容性是导致90%UVM环境问题的罪魁祸首。经过实测验证的稳定组合如下组件推荐版本备注操作系统Ubuntu 22.04.3需启用multiverse软件源VCS2023.12必须包含UVM 1.2库Verdi2023.12需与VCS同期版本GCC11.3.0避免使用太新的编译器版本UVM实战示例代码v1.2华章官网提供的最新版本安装完成后在终端执行以下命令验证基础环境vcs -id # 应输出VCS version P-2023.12 verdi -version # 应输出Verdi3 version P-2023.121.2 环境变量精准配置大多数教程会告诉你设置$VCS_HOME和$VERDI_HOME但实际还需要以下关键配置export UVM_HOME$VCS_HOME/etc/uvm export PATH$PATH:$VCS_HOME/linux64/bin:$VERDI_HOME/bin export LD_LIBRARY_PATH$LD_LIBRARY_PATH:$VERDI_HOME/share/PLI/VCS/LINUX64将这些配置加入~/.bashrc后执行source ~/.bashrc立即生效。验证UVM库是否可访问ls $UVM_HOME/src/uvm_pkg.sv # 应显示UVM核心库文件路径2. 示例工程初始化2.1 获取与解压源码从华章官网下载《UVM实战》配套代码后建议按以下结构组织工程目录uvm_lab/ ├── original_code/ # 原始示例代码 ├── work/ # 修改后的工作目录 └── sim/ # 仿真输出目录使用rsync保持原始代码纯净的同时创建工作副本rsync -av original_code/2.2.1/ work/ --exclude*.fsdb2.2 关键文件修改清单在top_tb.sv中需要做三处必要修改时间精度调整// 原代码timescale 1ns/1ps timescale 1ns/100ps // 更宽松的精度要求添加DUT包含路径include dut.svFSDB波形记录在initial块中添加initial begin $fsdbDumpfile(wave.fsdb); $fsdbDumpvars(0, top_tb); // 其他初始化代码... end注意Verdi 2023.12要求FSDB文件名不带路径否则可能无法正确加载波形3. 编译与仿真全流程3.1 VCS编译命令详解使用以下优化过的编译命令组合vcs -full64 -R -sverilog v2k \ -debug_accessall \ -ntb_opts uvm-1.2 \ defineUVM_NO_DEPRECATED \ incdir$UVM_HOME/src \ -timescale1ns/100ps \ -fsdb -kdb -lca \ -top top_tb \ -f filelist.f \ -l compile.log关键参数说明-debug_accessall开启所有调试功能-ntb_opts uvm-1.2指定UVM版本defineUVM_NO_DEPRECATED禁用过期API-fsdb -kdb同时生成Verdi和VCS调试数据库3.2 常见编译错误解决方案错误1UVM宏定义冲突Error: UVM_FATAL already defined解决方案添加defineUVM_NO_DEPRECATED编译选项错误2FSDB无法生成Cannot open FSDB dump file解决方案确认$LD_LIBRARY_PATH包含Verdi的PLI库路径检查文件名不含特殊字符错误3时间精度不匹配Timescale precision mismatch解决方案统一所有文件的时间精度声明4. 波形调试双剑合璧4.1 VCS GUI基础操作启动图形界面./simv -guidx 实用快捷键组合CtrlW添加选中信号到波形窗口F3运行仿真F8单步执行CtrlR重新加载设计4.2 Verdi深度调试技巧启动Verdi加载FSDB波形verdi -ssf wave.fsdb -nologo 高效调试操作流在Hierarchy窗口按f键过滤信号使用Ctrl鼠标左键多选信号后按CtrlW添加波形在波形窗口使用/键搜索信号名右键信号选择Trace Driver/Load追踪信号驱动关系专业提示Verdi 2023.12新增Smart Debug功能可自动标记UVM phase转换点4.3 双工具协同工作流在VCS中定位大致问题时间段记录关键时间点如transaction开始/结束在Verdi中跳转到对应时间CtrlG输入时间值使用Verdi的UVM Debug模式分析组件交互# Verdi TCL命令示例 fsdbDumpvars 0 top_tb # 重新dump指定层次信号 addWave -r /top_tb # 递归添加所有信号5. 进阶调试与性能优化5.1 UVM调试参数配置在测试用例中添加以下调试配置initial begin uvm_top.set_report_verbosity_level(UVM_HIGH); uvm_top.set_timeout(100ns); // 启用事务记录 uvm_config_db#(int)::set(null, *, recording_detail, 1); end5.2 仿真性能优化技巧编译选项优化组合vcs -override_timescale1ns/100ps \ -notice \ -sim_res1ps \ -lca \ -kdb \ -fsdb \ rad \ vcslicwait \ memcbk \ vcsdumpvarsonVerdi波形记录优化initial begin $fsdbDumpvars(0, top_tb.dut); // 只记录DUT层次 $fsdbDumpMDA(0, top_tb); // 存储多维数组 $fsdbDumpSVA(0, top_tb); // 存储断言信息 end5.3 自动化脚本模板创建run.sh自动化脚本#!/bin/bash # 清理旧文件 rm -rf csrc simv* *.fsdb *.log *.vdb # 编译阶段 vcs -full64 -sverilog -debug_accessall \ -ntb_opts uvm-1.2 \ defineUVM_NO_DEPRECATED \ -fsdb -kdb -lca \ -top top_tb \ -f filelist.f \ -l compile.log || exit 1 # 仿真阶段 ./simv UVM_TESTNAMEbase_test \ UVM_VERBOSITYUVM_HIGH \ -l simulation.log # 自动启动Verdi verdi -ssf wave.fsdb -nologo 在实际项目中使用这套工具链组合调试复杂UVM环境时发现Verdi 2023.12的UVM Transaction Graph功能特别适合分析sequence的并行执行情况而VCS 2023.12改进的coverage收集效率比上一版本提升了约40%。遇到波形加载缓慢的情况可以尝试在Verdi中使用fsdb2saif命令转换格式后再分析。

更多文章