Verdi使用总结

本文

主要介绍debug工具Verdi的使用,并对自己使用过程中的经验进行总结。

版本 说明
0.1 初版发布

参考

  • Verdi and Siloti Command Reference
  • Verdi (Premier) Training

百度网盘分享资源 链接:https://pan.baidu.com/s/1h5xm8-poxOwjL14MzBH4pw 密码:4kb6

专业术语与缩略语

缩略语 全称 含义
RMB Right Mouse Button 鼠标右键
MMB Middle Mouse Button 鼠标中键
LMB Left Mouse Button 鼠标左键
DC Double-click 双击
D&D Drag and Drop 拖拽
KDB Knowledge Database 知识数据库
FSDB Fast Signal Database 快速信号数据库
TFV Temporal Flow View 时序界面
BA Behavior Analysis 行为分析

Set Up the Environment

指定路径和环境变量

  • Binary File:
1
2
setenv NOVAS_INST_DIR <Path to Novas installation>
set path = ($NOVAS_INST_DIR/bin $path)
  • License File:
1
2
setenv NOVAS_LICENSE_FILE
<license_file>:$NOVAS_LICENSE_FILE

添加符号库

  • 为什么使用符号库:

符号库提供了源代码到逻辑单元的映射,没有符号库,原理图将仅显示正方形而不是逻辑单元。

  • 创建符号库:
    • syn2SymDB:适用于 ASCII格式的Synopsys logic library(.lib)
    • map2SymDB:适用于已有的map file
    • 参考<verdi_install>/doc/Symbol_Library.pdf
  • 设置符号库环境变量:
1
2
setenv NOVAS_LIBS"LIB ROOT#1><LIB ROOT#>…"
setenv NOVAS_LIBPATHS"<Directory#1><Directory#2>…"
  • 通过GUI设置符号库:
    1. 菜单栏点击Tools–>Preferences
    2. 在打开的子窗口中 Find一栏 查找 Schematic –>Symbol Library
    3. 填写Symbol Library Name
    4. 填写Symbol Library Path
    5. 保存,然后设置将被保存到novas.rc 源文件中。

使用Setup文件 novas.rc

  • 指定路径:
    • setenv NOVAS_RC /novas.rc
    • 直接通过命令行命令 -rcFile 来进行设置
  • 搜索顺序:
    1. -rcFile 命令行选项
    2. NOVAS_RC环境变量
    3. ./novas.rc
    4. $HOME/novas.rc
    5. /etc/novas.rc

首选项

通过Tools–>Preferences打开窗口,所有设置将被保存在novas.rc文件中,在Find窗口栏中根据关键字搜索。比如设置字体大小和颜色,在find栏搜索font,找到相关项,设置完毕后保存为novas.rc,可添加为Verdi的Setup文件,一劳永逸。

FSDB

  • 什么是FSDB文件:

    • 压缩的二进制文件格式,包含仿真信号数据。
    • 开放文件格式,其他的供应商工具可以dump波形,比如Verisity,Vera,Ikos,etc.
    • 利用System Task来帮助dump。
  • 常用的系统任务:

    • fsdbDumpfile: 指定FSDB文件名和限制文件大小(单位MB,若超出限制只保留最新,也可不限制大小),如 “$fsdbDumpfile(“top.fsdb, 500”);” 。
    • fsdbDumpvars: Dump指定变量,可以指定dump特定的实例和层次深度,可以指定FSDB文件名,以及指定其他option参数,如 “$fsdbDumpvars(0, top.dut1.u1, “+fsdbfile+u1.fsdb”, “+all”);”,也可以使用“$fsdbDumpvarsToFile(“dump.list”);”。
    • fsdbDumpon/fsdbDumpoff: 打开和关闭fsdb Dumping,如 “#0; #50000 $fsdbDumpvars; #50000 $fsdbDumpoff; #50000 $fsdbDumpon; #50000 $finish;”,指保存50000~100000和150000~200000时间段波形。
    • 提示:更多信息请查看文档linking_dumping.pdf。

为FSDB dumping 链接Novas Object文件

  • 创建环境变量:
1
2
3
4
5
6
7
8
#Setup license file for simulator
setenv LM_LICENSE_FILE <simulator_license_file>
#Setup path for simulator
setenv <Simulator>_INST_DIR <simulator_tool_install>
#Setup path for Novas tool
setenv NOVAS_INST_DIR <Novas_install_path>
#Setup LD_LIBRARY_PATH to specify the appropriate shared object files
setenv LD_LIBRARY_PATH ${NOVAS_INST_DIR}/share/PLI/<simulator>/<platform>

FSDB文件处理

  • vfast: 将VCD文件转化为FSDB文件。
  • fsdb2vcd: 将FSDB文件转化为VCD文件。
  • fsdbextract: 在已经存在的fsdb文件中提取信号,范围,时间周期,而不用重新进行仿真。
  • fsdbmerge: 将多个文件进行合并。
  • fsdbreport: 针对一个特定的信号,将值得变化情况生成report。
  • 提示: 使用 “ -h” 查找帮助,或参阅《 Verdi Command Reference》。

Import Design

命令行导入设计

1
2
3
4
verdi -f <file_list> +define+GETTHEMOSTOUTOFYOURTIME
verdi -f <file_list> -top TopBlock
verdi <source_file1.v> -sv <source_file2.sv>…
verdi system.v ... alu.v -v lib.v -y ../special -ssv -ssy

推荐使用命令: “verdi -f run.f -ssv -ssy” ,其中run.f内容如下:

+define+VCS_DUMPON=1

+incdir+$PROJ_ENV/include_dir1
+incdir+$PROJ_ENV/include_dir2

$PROJ_ENV/test_top_tb.v

+libext+.v
+libext+.sv

-v $PROJ_ENV/lib_path/lib1.v
-v $PROJ_ENV/lib_path/lib2.v
-y $PROJ_ENV/design_sub_dir1
-y $PROJ_ENV/design_sub_dir2
-y $PROJ_ENV/design_sub_dir3
-y $PROJ_ENV/design_top_dir

$PROJ_ENV/other_design_path/other_design1.v
$PROJ_ENV/other_design_path/other_design2.v
.............

说明如下:

  • -f代表读取flist文件。
  • -ssv和-ssy是对-v导入的库文件和-y指定的路径中的模块被视为普通模块,而不是库单元,如果库单元的话会无法显示Hierarchy。
  • -y指定文件目录的导入方式,无需关心具体模块的依赖关系。
  • +incdir+是指定include文件的路径。
  • “+libext+.v”是指定文件后缀,若文件为sv格式,则指定为sv。
  • +define+是传入define参数。

图形化界面上导入设计

  • 命令行输入verdi ,打开verdi 图形化界面。
  • 菜单栏File->Import Design 或 菜单栏上的Import Design符号 导入设计。
  • 选择language、run file或源文件,不建议使用VHDL。

Debug in Source Code View

Open nTrace Window

  • 导入设计后,Verdi会自动打开nTrace窗口。
  • nTrace窗口包含三个可调整大小的子窗口:左侧Hierarchy Browser Pane,右侧Source Code Pane,下方Message Pane。

Search and Collapse Hierarchy Browser

  • 折叠全部区域: 在hierarchy browser pane,点击鼠标右键选择Collapse All Scopes
  • 折叠和展开选中项: 在hierarchy browser pane,点击所选项的“+”即展开,“-”即折叠。
  • 搜索: 在hierarchy browser pane,点击鼠标右键选择Show Navigation TextField(快捷键Ctrl+s)。
    • 在搜索框输入通配符字符串并回车即可,如CH*,可匹配CHILD1、CHILD2、CHILD3… 搜索框右侧提供了prev和next操作,并且可以选择搜索记录。
    • 在Filter搜索框输入通配符字符串,选择匹配项(模块、函数、任务、类…),回车显示所有匹配结果
  • 所选项(一般指module)鼠标双击,即可显示Source Code
  • 所选项鼠标右键可选择Copy Full Path(或快捷键Ctrl-H),这对验证环境中需要引用信号需要全路径时非常有用。
  • 所选项鼠标右键可选择Set/Unset Bookmark,可设置和取消书签,在在hierarchy browser pane右键选择Manage Bookmarks可快速回到书签标记项。
  • Instance显示层级关系,也可以选择Declaration,将所有模块平铺显示,搜索功能与上文描述相同。
  • 快捷键Shift-S打开Find Scope窗口,可以查找模块、任务、函数等,列出模块名和例化列表(全路径), 查找模块推荐使用此方法

Traverse Source Code

  • 快速搜索信号、实例或实例端口: 使用快捷键Shift-A打开Find窗口,编辑框内显示当前打开的Source Code模块全路径,如果此模块内查找则保留全路径,在最后编辑通配符字符串,如果全设计中搜索,则删除全路径,直接编辑通配符字符串, 查找信号推荐使用此方法
  • 查找字符串: Source Code窗口上方工具栏有搜索框,编辑通配符字符串即可全文搜索,支持Prev和Next,以及历史记录(注:通配符为*,可代表任意字符串)。
  • 使用书签: Source Code窗口上方工具栏有书签图形,点击可将当前Source Code的当前行设置/取消书签(也可使用快捷键Ctrl-F2),在菜单栏Source选中Manage Bookmarks打开Source书签管理窗口,可快速跳转至某书签位置。 多文件调试时推荐使用此方法
  • 模块的层次跳转: Source Code窗口上方工具栏有向上直角箭头和向下直角箭头两个图标,向上箭头代表跳转到当前模块的例化语句,向下箭头代表进入此例化模块(选中例化名)/双击亦可。
  • 双击模块名: 双击Source Code窗口打开的模块名,跳转到上层模块例化当前模块的语句,并且在message窗口列出例化此模块的文件全路径、文件名以及行号,双击message信息可跳转至该模块被例化语句。
  • 撤销操作: Source Code窗口上方工具栏有向左箭头和向右箭头两个图标,代表操作的回退和前进。

Operate on Signals

  • 信号的Driver and Loads: Source Code窗口上方工具栏有“D”和“L”图标和向上箭头和向下箭头图标,选中信号,D代表查看driver,L代表查看load,箭头代表Prev和Next,双击信号也可以达到查看Driver效果。
  • 选中信号并右键可选择Copy Signal’s Full Path,这对验证环境中需要引用信号需要全路径时非常有用。
  • Load Simulation Results: 菜单栏File -> Load Simulation Results 加载FSDB文件,也可以在打开verdi时命令行添加参数-ssf nova.fsdb。
  • Source Code窗口显示信号值: 当加载FSDB文件后,光标停留在Source Code窗口,使用快捷键x,可以在代码中显示信号值,当前仿真时间在上方工具栏显示,且可调整,可选择信号下/上一个值变化(沿)来跳转模拟时间,注意信号值与波形窗口光标所在模拟时间保持一致,建议通过波形窗口来控制模拟时间的跳转。
  • 将信号添加到波形窗口: 选中信号(按住Ctrl可选择多个信号),鼠标右键选择Add Signal(s) to Waveform, 建议使用快捷键Ctrl+w
  • 选中信号鼠标右键选择Signal,可以设置Radix,默认十六进制。

Debug in Waveform View

Open nWave Window

  • 选择Tools -> New Waveform 或者 点击菜单栏波形窗口图标。
  • 加载FSDB文件后,选中信号,使用快捷键Ctrl+w,将信号添加到波形窗口,工具会自动打开波形窗口。
  • 使用命令行如“verdi –f run.f –ssf nova.fsdb”启动verdi时,会自动打开波形窗口。
  • 在波形窗口也可以加载FSDB文件,波形窗口菜单栏File -> Open 或 使用工具栏打开文件图标。

Add Signals

  • Source Code窗口选中信号使用快捷键Ctrl+w可以添加信号到波形窗口。
  • 波形窗口菜单栏Signal选择Get Signals 或 使用工具栏信号图标,将打开添加信号窗口,可以选择当前模块的输入、输出、寄存器、线网等信号,或搜索信号,添加至波形窗口。
  • 提示: debug时往往边分析代码边查看波形,使用场景更多是一个个添加追踪,所以大多使用Ctrl+w; 而波形窗口菜单栏添加信号,往往在查看输入输出信号x态时使用,统一添加所有输入输出端口信号,而无需一一添加。

Organize Signals

  • 创建信号组: RMB -> Group Operations -> Add Group to add groups; RMB -> Group Operations -> Insert Subgroup。
  • 修改组名: 选中组,RMB -> Rename。
  • 跳转至信号组: RMB -> Go To, 菜单栏也可操作。
  • 折叠与展开组: 双击"+”/"-"。
  • 添加空白分隔行: RMB -> Add Blank。

Operate on Signals

  • 信号移动: 信号列表中金色标线代表移动至此,可通过鼠标中键调整金色标线位置,选中对应信号后,使用快捷键m,即可将信号移动至金色标线位置,并且金色标线移动至添加信号的下方(按住Ctrl或下拉可选择多个信号,按选择顺序添加)。
  • 信号复制: RMB -> Copy, 快捷键Ctrl+P。
  • 信号粘贴: RMB -> Paste, 快捷键Insert(粘贴至金色标线位置)。
  • 删除信号: 选中信号按delet键(选中可以使用按住Ctrl或下拉选中多个信号)。
  • 右键可复制信号全路径。
  • bus总线可以双击展开单bit信号显示,也可双击折叠。
  • bus总线可以分组显示,RMB -> Bus Operation -> Expand as Sub-bus, 可以设置每组bit数。
  • 可将多个单比特信号组合为bus显示: RMB -> Bus Operation -> Create Bus。
  • 可以添加注释: RMB -> Add Comment,添加注释行,在波形注释行右键可选择添加注释文本框,且文本框箭头可拖拽指向位置(个人觉得debug时使用不多,在做PPT展示讲解时很有必要)。
  • 信号沿追踪和搜索信号值: 菜单栏有沿选择(任何变化、上升沿、下降沿、总线值等),左右操作图标(可向前跳转和向后跳转),当选择总线值时,左即向前搜索,右即向后搜索。
  • 保存信号列表: 菜单栏File -> Save Signal,或快捷键Shift+s,打开Save Signal窗口,在默认路径后输入文件名(路径可修改),无需写文件后缀,默认后缀为“.rc”。注意:如果信号中有使用参数化表示范围,请在Options选项取消Events的选择,这样当参数变化时波形信号保持一致。
  • 加载信号列表: 菜单栏File -> Restore Signal,如果在命令行则使用“–sswr .rc”。

Manipulate Waveform Display

  • 设置标记: 菜单栏Waveform -> Marker 或 快捷键Shift+m,打开Marker窗口,可设置名称、时间、颜色、线的形状等,可对标记进行添加、删除、修改(标记也会保存至Signal文件),在debug时对信号的追踪使用标记很有用,可标记关键节点。
  • 修改信号值显示进制: 在中间当前信号值显示窗口,光标停留在对应信号位置,RMB -> Radix,可更改显示进制。
  • 设置信号值显示别名: 在中间当前信号值显示窗口,光标停留在对应信号位置,RMB -> Edit Alias,打开Alias Editor窗口,可为数值设置别名,以及颜色(这对状态机State信号显示特别有用), 使用apply可应用已设置的alias。
  • 显示毛刺: View -> Display Glitch。
  • event报告: 选中信号,View -> Signal Event Report,可以显示信号信息,包括上升沿数量、下降沿数量、翻转频率,可选择统计起始和结束时间,这对统计某时间段clk(或其他信号)翻转数很有用,好像只能统计单比特信号。
  • 添加网格: View -> Grid Options 打开Grid Options窗口,可以根据所选信号的上升/下降沿添加网格,也可以自定义周期在特定时间范围内添加网格,当波形窗口信号较多时添加参考网格非常有用。
  • 选择一段时间: 鼠标中间设置起始位置, 鼠标左键设置终止位置。
  • 选择无翻转信号: 首先选择一段时间,然后快捷键Ctrl+s,快速选择选择时间内无翻转信号。
  • 波形显示窗口: Ctrl+鼠标滚轮,缩放窗口;鼠标拖拽选中区域填充整个窗口;Shift+鼠标滚轮,波形左右移动(时间前后)。

Debug in Schematic View

待补充

Debug in FSM View

待补充

Debug in Temporal Flow View

待补充

Frequently Used Preferences

打开TCL命令窗口

  • Preferences -> General -> Enable TCL Command Entry Form(将其切换为选中状态)。
  • 可以在TCL Command窗口输入TCL命令来执行,同时在Verdi中执行的任何操作,其对应TCL命令都将记录在此处(换句话说,你可以通过图形化操作来找到对应的TCL命令)。

Source Code 相关

  • 关于Source Code窗口,最常用的设置无非是字体的大小,可以在这里找到,或直接搜索Font,找到Source Code的Font设置选项。

Waveform 相关

  • General: 可以设置以不同的颜色显示输入/输出信号。、
  • View Options: 可以设置进制、信号值与别名等。
  • Color / Font / Pattern: 可以设置外观和字体颜色大小等。

其他

关于首选项,可设置参数挺多的,不过一般不会使用到,也不建议做太多更改,我使用最多的就是对字符大小的更改,方便浏览代码。

其他使用记录

  • 快速添加模块端口信号以确认输入无x态:在源代码窗口上方工具栏右键 -> Signal List(打开信号列表窗口) -> 选择Input -> 右键选择 Select All in Current Page -> 右键 Add Signals to Waveform (Ctrl-W)

文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。