本文
主要介绍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:
|
|
- License File:
|
|
添加符号库
- 为什么使用符号库:
符号库提供了源代码到逻辑单元的映射,没有符号库,原理图将仅显示正方形而不是逻辑单元。
- 创建符号库:
- syn2SymDB:适用于 ASCII格式的Synopsys logic library(.lib)
- map2SymDB:适用于已有的map file
- 参考<verdi_install>/doc/Symbol_Library.pdf
- 设置符号库环境变量:
|
|
- 通过GUI设置符号库:
- 菜单栏点击Tools–>Preferences
- 在打开的子窗口中 Find一栏 查找 Schematic –>Symbol Library
- 填写Symbol Library Name
- 填写Symbol Library Path
- 保存,然后设置将被保存到novas.rc 源文件中。
使用Setup文件 novas.rc
- 指定路径:
- setenv NOVAS_RC
/novas.rc - 直接通过命令行命令 -rcFile
来进行设置
- setenv NOVAS_RC
- 搜索顺序:
- -rcFile
命令行选项 - NOVAS_RC环境变量
- ./novas.rc
- $HOME/novas.rc
/etc/novas.rc
- -rcFile
首选项
通过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文件
- 创建环境变量:
|
|
FSDB文件处理
- vfast: 将VCD文件转化为FSDB文件。
- fsdb2vcd: 将FSDB文件转化为VCD文件。
- fsdbextract: 在已经存在的fsdb文件中提取信号,范围,时间周期,而不用重新进行仿真。
- fsdbmerge: 将多个文件进行合并。
- fsdbreport: 针对一个特定的信号,将值得变化情况生成report。
- 提示: 使用 “
-h” 查找帮助,或参阅《 Verdi Command Reference》。
Import Design
命令行导入设计
|
|
推荐使用命令: “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。