乐于分享
好东西不私藏

Verdi 调试工具使用指南

Verdi 调试工具使用指南

从环境配置到波形分析,EDA 工程师必备技能全解析

#Verdi  #EDA  #仿真调试  #SystemVerilog  #IC验证  

 一、Verdi 环境配置基础

Verdi(原 Novas Debussy)是业界主流的硬件设计调试工具,支持波形查看、原理图追踪、代码高亮等功能。在 Linux 环境下使用 Verdi 前,需要正确配置以下三个环境变量。

1.1 三个关键环境变量

环境变量

作用

说明

VERDI_HOME / NOVAS_HOME

指定 Verdi 安装目录

告知仿真器默认路径,为设置 PATH 做准备

PATH

让系统找到 Verdi 可执行文件

执行 verdinWave 等命令的前提

LD_LIBRARY_PATH

让系统找到 Verdi 所需库文件

包含 *.so(共享对象)、*.a(静态库)等

1.2 三个常用验证命令

命令

用途

示例

echo $VAR

查询环境变量内容

echo $LD_LIBRARY_PATH | sed ‘s/:/\n/g’

which verdi

验证 Verdi 是否已在 PATH 

成功则显示可执行文件路径

uname -m

查询系统硬件平台

返回 x86_64 等信息,用于选择 PLI 库版本

�� LD_LIBRARY_PATH 的搜索机制:依次搜索各目录,匹配到库文件后停止。可用 echo $LD_LIBRARY_PATH | sed ‘s/:/\n/g’ 按行打印各路径,方便排查配置问题。

二、Dump 波形的两大方法

Verdi 支持两种主流的波形 Dump 方式,各有优劣,工程实践中通常推荐使用 ucli/TCL 接口。

2.1 方法对比

方法

原理

优点

缺点

系统函数

 Verilog/SV 代码中插入 $fsdbDumpfile/$fsdbDumpvars 

工程师熟悉 Verilog,上手快

需重新编译;不支持正则;灵活性差

ucli/TCL 接口

通过外部 TCL 脚本控制仿真器行为

无需重编译;支持正则;可动态调整 dump 范围;交互式控制

需要掌握 TCL 语言

2.2 常用 ucli/TCL 函数速查

函数名

功能

fsdbDumpvars 0 “tb_top”

 tb_top 开始 dump 所有层次(0=全部层次)

fsdbDumpMDA

Dump 多维数组(MDA

fsdbDumpSVA

Dump SVASystem Verilog Assertions

fsdbDumpon / fsdbDumpoff

运行中动态开启/关闭 dump

fsdbSwitchDumpfile

切换 dump 文件

fsdbAutoSwitchDumpfile

按大小自动切换 dump 文件

fsdbDumpFinish

结束 dump,关闭文件

fsdbDumpflush

强制刷新 dump 到磁盘

2.3 典型 TCL dump 脚本

以下为标准的 dump_fsdb_vcs.tcl 脚本结构(VCS 版):

global env

fsdbDumpfile  “$env(demo_name).fsdb”    ;# 波形文件名受环境变量控制

fsdbDumpvars  0  “tb_top”               ;# 0 = dump 所有层次

run                                      ;# 启动仿真(仿真器由 ucli 接管)

�� fsdbDumpvars 的第一个参数 表示所有层次,而非最大层次数为0″,这是一个常见误解。

三、三大仿真器与 Verdi 集成

Verdi 支持 Synopsys VCSCadence IRUNIncisive)、Mentor Questa 三大主流仿真器。各仿真器的集成方式略有差异,核心思路相同:编译时加载 PLI 库,执行时通过 ucli/TCL 脚本控制波形 dump

3.1 VCS + Verdi

▌ 编译脚本关键参数:

VCS \

  -sverilog \

  -debug_pp \                            # 使能 ucli 调试接口

  -LDFLAGS -rdynamic \                   # 传递给 linker,与 PLI 加载配合

  -P ${VERDI_HOME}/share/PLI/VCS/${PLATFORM}/novas.tab \   # 加载表格文件

     ${VERDI_HOME}/share/PLI/VCS/${PLATFORM}/pli.a \       # 加载静态库

  ./${demo_name}/tb_top.f \

  +vcs+lic+wait \

  -l compile.log

▌ 执行脚本关键参数:

./simv \

  -ucli -i ./scripts/dump_fsdb_vcs.tcl \  # -i 指定 ucli 输入脚本

  +fsdb+autoflush \                        # 边仿真边 dump,防止断电丢数据

  -l sim.log

3.2 IRUNCadence Incisive+ Verdi

▌ 编译脚本关键参数:

irun \

  -elaborate \

  -access +r \                   # 必须:赋予信号读权限,否则 PLI 无法访问

  ./${demo_name}/tb_top.f \

  -top tb_top \

  -licqueue \

  -l elaborate.log

▌ 执行脚本关键参数:

irun \

  -input ./scripts/dump_fsdb_irun.tcl \  # -input 指定 ucli 脚本(非 -i

  +fsdb+autoflush \

  -licqueue \

  -l sim.log

▌ IRUN TCL 脚本与 VCS 的差异:

global env

call fsdbDumpfile  “$env(demo_name).fsdb”  ;# IRUN 需要加 call 命令前缀

call fsdbDumpvars  0  “tb_top”

run

quit                                        ;# IRUN 不会自动结束,必须加 quit

�� IRUN 与 VCS 的两个关键区别:①TCL 函数调用需加 call 前缀;仿真结束后需手动执行 quit 命令,否则进程不会退出。

3.3 QuestaMentor+ Verdi

▌ 编译脚本关键参数:

vlib work && vmap work work

vlog \

  -64 \

  +acc \                        # 必须:使 PLI 加载有效

  ./${demo_name}/tb_top.f \

  -l compile.log

▌ 执行脚本关键参数:

vsim \

  -64 -batch -novopt \

  -pli ${VERDI_HOME}/share/PLI/MODELSIM/${PLATFORM}/novas_fli.so \  # 加载共享库

  work.tb_top \

  -do ./scripts/dump_fsdb_questa.tcl \    # -do 指定 TCL 脚本(非 -input

  +fsdb+autoflush \

  -l sim.log

▌ Questa TCL 脚本:

global env

sdbDumpfile  “$env(demo_name).fsdb”

sdbDumpvars  0  “tb_top”

run -all                           ;# 运行到仿真结束

quit -sim                          ;# 退出仿真

3.4 三大仿真器集成对比

仿真器

公司

PLI 库类型

ucli 脚本参数

特殊注意

VCS

Synopsys

pli.a(静态库)

-i

-debug_pp 使能调试

IRUN

Cadence

novas_pli.so

-input

TCL 函数需加 call;需 quit

Questa

Mentor

novas_fli.so(共享库)

-do

+acc 编译选项必须

四、Dump 波形的工程策略

合理控制 dump 的空间范围和时间范围,可显著减小 FSDB 文件体积,提升仿真和调试效率。

4.1 不同验证场景的 Dump 策略

场景

空间范围

时间范围

说明

Block 验证

顶层→ 最底层(全层次)

0 → 仿真结束

单模块调试,需看所有信号

全芯片验证

顶层→ 中间层(底层已验证)

仿真结束

底层已充分验证,只关注模块间接口

接口时序分析

仅接口部分 Block

根据用例选择

关注 Block 间接口时序,再逐步深入

初始化用例

按需设置

 0 时刻开始

覆盖完整初始化流程

功能测试用例

按需设置

初始化完成后开始

跳过初始化,节省文件空间

�� dumpon/dumpoff 的黄金用法:在 TCL 脚本中结合仿真时间动态控制 dump 范围,例如:run 100ns → fsdbDumpoff → run 200ns → fsdbDumpon → run,可精准捕获感兴趣的时间段。

五、Verdi 加载设计与波形

5.1 加载设计脚本

Verdi 的设计加载参数与 VCS 类似,支持同一套文件列表(.f 文件):

verdi \

  -sverilog \

  -f ./${demo_name}/tb_top.f \      # 设计文件列表

  -top tb_top \                     # 指定顶层模块

  -nologo \                         # 关闭欢迎界面

其他常用参数:

# +incdir+<dir>    设置 include 文件目录

# +libext+.v       设置库文件后缀

# -v <file>        指定可搜索的设计文件

# -y <dir>         设置可搜索设计的目录

5.2 加载波形

方式

操作

说明

手动加载

nWave 菜单 → File → Open

适合临时查看单个波形文件

自动加载

dbg 脚本中加 -ssf ${waveform}

启动 Verdi 时直接加载指定 FSDB

重新加载设计

nTrace → File → Reload Design

代码修改后无需重启 Verdi

重新加载波形

nWave → File → Reload

仿真完成后刷新波形,无需重开窗口

��善用重新加载功能,可以避免频繁开关 Verdi 界面和重复申请 License,在 License 紧张的团队中尤为重要。

六、nWave 波形查看技巧

6.1 选择信号的两种方式

界面

操作方式

说明

nTrace(层级树)

鼠标左键拖拽选框 / Ctrl+W

从原理图层级选取信号,拖到 nWave

nWave(波形)

支持通配符 * 批量匹配

可输入 tb_top.u0.* 批量选择信号

6.2 波形操作快捷键速查

快捷键

功能

说明

Z

放大波形(推荐)

以当前鼠标位置为中心放大

Shift+Z

缩小波形

鼠标中键按住拖动

平移波形(推荐)

快速横向移动查看不同时刻

Ctrl+P

复制选中信号

配合 Ctrl+V 在不同层添加同一信号

Del

删除选中信号

清理 nWave 中不需要的信号行

M

添加 Marker 标记

在当前时刻点添加标记,方便定位

(竖线)

跳到下一个 ns

快速步进时间

点击 1% 符号

左侧放大

6.3 时间线与 Marker

元素

触发方式

用途

黄色时间线

鼠标左键单击

主游标,显示当前时刻信号值

白色时间线

鼠标中键单击

辅游标,与黄色线配合显示时间差

时间差显示

两条线之间

直接读取时间差,也可换算成频率

Marker

快捷键 M

标记关键时间点,方便在长波形中定位

6.4 信号值查找(Search

搜索类型

应用场景

特点

任意值变化

组合逻辑指示信号

捕获信号任何变化时刻

信号上升沿/下降沿

时钟使能、握手信号

精确定位上升沿或下降沿

总线值

数据总线查找特定值

支持 2/8/10/16 进制,支持部分匹配

模拟值

数字采样正弦波、ADC数据

适用于模拟量信号

进制显示

查看字符型数据

支持 ASCII 显示,方便看字符串

有符号/无符号

有符号运算结果

推荐使用 2’s 补码有符号显示

状态机状态

FSM 调试

直接显示状态名,而非编码值

写在最后

本文内容涵盖从环境搭建到实际波形分析的完整工作流。核心要点如下:

·① 环境变量配置是基础:VERDI_HOME → PATH → LD_LIBRARY_PATH,三者缺一不可

·② 优先使用 ucli/TCL 接口 Dump 波形,灵活性远超系统函数方式

·③ 三大仿真器集成原理相同,关键差异在于:PLI 库类型、脚本参数名、TCL 语法细节

·④ 合理规划 Dump 的空间+时间范围,避免生成 GB 级 FSDB 文件拖慢调试效率

·⑤ 善用 Reload(重新加载)功能,减少反复申请 License 的时间浪费

·⑥ 熟练掌握 Z/Shift+Z/鼠标中键 等快捷键,波形分析效率至少提升 

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Verdi 调试工具使用指南

猜你喜欢

  • 暂无文章