vcs与verdi学习

linux命令生成filelist
(1)find -name “*.v” > filelist.f

会将当前目录下及子目录中所有.v的文件及路径写到文件filelist.f中。

(2)find dir -name “*.v” > filelist.f

其中,dir:文件夹名。会将dir中的所有.v的文件都写到filelist.f中。

Reference

file_list的注释方式
// 注释的内容

工程中,编译文件时,经常采用filelist列出所有需要编译的文件及路径。

文件少的时候,可以直接手写/xx/xxx/a.c

但是文件多了,手写效率低,易错。

采用命令:

(1)
find -name “*.v” > filelist.f

会将当前目录下及子目录中所有.v的文件及路径写到文件filelist.f中。

(2)
find dir -name “*.v” > filelist.f

其中,dir:文件夹名。
会将dir中的所有.v的文件都写到filelist.f中。

filelist中常用到的vcs 编译命令
1、+incdir+
+incdir+ `include文件的搜索目录。
-incdir 在指定目录下搜索include文件
方便在
2、-v filename
-v 指定一个.v格式的库文件,VCS会来这个文件中找源代码中例化的但在源代码中找不到的module,这里一个文件可以里面包含很多module。
filelist列表中 -v xxx/xxx/fifo.v 表示该文件里面只有一个module,且module名为fifo。
filelist列表中直接引用 xxx/xxx/fifo.v 则对文件中的module名没有限制。
3、-y directory
-y 指定一个库文件目录,目录下的文件名和module名要一致,且要用+libext+来指定文件类型,这里的.v文件里面就只能放一个和文件名同名的module,VCS会来这个目录下找源代码中例化的但在源代码中找不到的module。
4、+libext+
+libext+ .v+ .vg+ .sv 指定文件类型。
5、-f filename
指定文件类型为.f。
1、+incdir+
+incdir+ `include文件的搜索目录。
-incdir <directory> 在指定目录下搜索include文件
方便在
2、-v filename
-v 指定一个.v格式的库文件,VCS会来这个文件中找源代码中例化的但在源代码中找不到的module,这里一个文件可以里面包含很多module。
filelist列表中 -v xxx/xxx/fifo.v 表示该文件里面只有一个module,且module名为fifo。
filelist列表中直接引用 xxx/xxx/fifo.v 则对文件中的module名没有限制。
3、-y directory
-y 指定一个库文件目录,目录下的文件名和module名要一致,且要用+libext+来指定文件类型,这里的.v文件里面就只能放一个和文件名同名的module,VCS会来这个目录下找源代码中例化的但在源代码中找不到的module。
4、+libext+
+libext+ .v+ .vg+ .sv 指定文件类型。
5、-f filename
指定文件类型为.f。

//宏定义
+define+COUNTER_FREE
//带有值的宏定义
+define+CNT_FREE=9
//指定库文件,建议包含路径,可指定多个
//-v
//指定库文件、IP 等 Verilog 模型的路径,可指定多个
//-y
//指定`include 指令使用的包含文件的目录,可指定多个
//+incdir+

Reference

生成 Verdi 可识别的波形文件 *.fsdb
创建 wave_gen.tcl 文件内容如下:

call {$fsdbDumpfile(“dump.fsdb”)}
call {$fsdbDumpvars(0, test, “+all”)}
run
1
2
3
创建仿真执行命令的脚本 run_simv.sh,内容如下:

ln -sf ../vcs/simv* .
./simv -ucli -i wave_gen.tcl -l sim.log
1
2
运行 run_simv.sh 脚本

也可以在TB文件中添加响应语句
Reference

Verdi的相关参数
verdi -f ../vcs/file.list -f ../vcs/macro.list \
-top test -ssf dump.fsdb -nologo &
1
2
(1) verdi 表示启动 Verdi 工具的命令;
(2) -f …/vcs/file.list -f …/vcs/macro.list 表示指定 Verilog 设计文件列表;
(3) -top test 表示指定仿真顶层模块为 top;
(4) -ssf dump.fsdb 表示指定 Verdi 可识别的波形文件 dump.fsdb,该文件可由 -ucli 接口命令生成,详见 《3.2 VCS 仿真接口 UCLI》;
(5) -nologo 表示启动 Verdi 时不加载欢迎界面;
(6) & 表示 Verdi 启动时新打开一个进程,不占用当前的 shell 环境进程

选中信号后,按键 Ctrl + W,即可完成信号在波形窗口的显示
Reference

原理图追踪
原理图中,按下键盘x,可以配合工具栏

也可以结合波形图一起使用

Reference

原理图的view窗口显示各种信息
代码追踪中右键的作用

(1) Drag & Drop,在代码窗口对信号进行 Drag 与 Drop ,可追踪信号的连接性信息,包含所有的驱动 (Driver) 和负载 ( Load) 信息;在代码窗口对信号进行 Drag,在波形窗口进行 Drop,可将信号添加到波形窗口中;在波形窗口对信号进行 Drag,在代码窗口进行 Drop,可实现波形信号在代码窗口中的定位。
(2) 复制层次访问路径,可获取信号或模块的具体层次访问路径信息,多用于波形打印参数、Memory 初始化参数等。例如此操作可获取 u_cnt 模块端口 cout 的层次路径为: test.u_cnt.cout 。
(3) 上一级层次调用(例化)信息与下一级模块设计信息。

(4) 追踪功能,包含 3 个常用的选项功能:Driver、Load、Connectivity,分别对应追踪驱动、追踪负载、追踪连接性(即驱动和负载都包含在内)信息。同时追踪信息也会显示在 Message 窗口中。
(5) 使能信号变量的数值标记功能,快捷键为 x。(可以直接在代码上看到数值)
(6) 添加信号至波形窗口等操作,该功能常常使用快捷键 Ctrl+W 代替。
(7) 信号显示功能,常选择选项 Show Signal Definition,查看信号的定义信息。

Reference

波形
nWave 快捷键总结
快捷键
操作说明
A
Set Active, 当一个波形窗口打开多个波形文件时,可以选择当前需要显示的波形文件
C
Color/Pattern,设置信号与波形的颜色、线的类型与粗细
F
Zoom All (Full Screen),显示全部波形
G
Get Signlas,点击后会显示且可以添加至时序波形窗口中的信号
H
Hierarchical Name,显示信号的层次访问路径
K
Create Bus,创建重组信号
L
Last View,上一次缩放视图
M
Move,移动信号至黄线位置
N
Search Forward,向右搜素信号符合变化类型的时刻
R
Restore Signal,恢复波形信号列表及相关设置
T
自动设置信号颜色
X
Fix Cursor/Marker Delta Time,移动光标时,保持黄、白光标之间的时间差为定值
Y
Keep Cursor at Centor,将黄色光标移至中央并保持居中,再按取消固定居中
Z
Zoom Out,缩小波形
Shift + C
Close Window,关闭波形窗口
Shift + H
Highlight Selected Signals,是否高亮显示选择的信号波形
Shift + L
Reload,重新加载波形
Shift + M
Marker,添加标记时刻
Shift + N
Search Backward,向左搜素信号符合变化类型的时刻
Shift + P
Change to Primary,将当前波形窗口设置为基础波形窗口
Shift + S
Save Signal,保存信号列表及设置至 rc 文件中
Shift + Z
Zoom In,放大波形
Ctrl + D
删除所有信号
Ctrl + ←
向左移动波形
Ctrl + →
向右移动波形
Delete
删除所选信号

Reference

常用的 VCS 编译命令
vcs -full64 -notice -debug_all -j8 -timescale=1ns/1ps
+plusarg_save +libext+.v+.V+.sv+.svh -sverilog +memcbk
-P ${Verdi_HOME}/share/PLI/VCS/LINUX64/novas.tab
${Verdi_HOME}/share/PLI/VCS/LINUX64/pli.a
-cpp /usr/bin/g+±4.4 -cc /usr/bin/gcc-4.4
-f file.list -f macro.list -top test
-l compile.log

◆ 首先对此脚本中涉及到的基本常用参数进行说明。
-full64
在 64-bit 模式下编译、仿真,用于 64 位操作系统
-notice
详细的显示编译信息
-debug_all
仿真时可以使用 UCLI 接口,可以设置 value、time 断点。可以输出 fsdb/vpd 波形,可以使用 Verdi 和 DVE 波形查看工具。
未来版本中将会被下列参数选项替代:
-debug_acc+all -debug_region+cell+encrypt
-j8
指定编译器可并行编译的进程数为 8
-timescale=1ns/1ps
指定仿真时间单位与精度,RTL 设计中没有指定 timescale 时,使用此设置
+plusarg_save
使能传参功能。
simv 仿真时可将具体数值传递给设计中的相关变量
+libext+.v+.V+.sv+.svh
识别 .v、.sv 等多种格式的设计文件
-sverilog
支持 SystemVerilog 编译
+memcbk
使能多维数组变量 (Memory 类型) 的回调。配合 UCLI 接口,设置波形打印的信号范围时,指定 “+all” 选项,可以查看多维数组变量的波形
-P <path/novas.tab>
<path/pli.a>
指定使用的 PLI 表文件与库文件 pli.a 。其中 .tab 文件可以理解为 PLI 接口说明,pli.a 可以理解为系统函数库。
当然也可以指定用户自定义的 table 文件和自定义的函数库,具体可参考《Verilog 教程高级篇》的《8.1 Verilog PLI 简介》章节。
-cpp /usr/bin/g+±4.4
指定 VCS 可识别的 g++ 版本
-cc /usr/bin/gcc-4.4
指定 VCS 可识别的 gcc 版本
-f file.list -f macro.list
指定包含所有设计文件列表的文件名,文件中可包括源代码文件的路径名称,和编译选项参数等。
建议 file.list 中存放设计文件列表,macro.list 存放编译参数等内容
-top test
设置顶层模块为 test。因为仿真包括 testbench,所以要设置最顶层的 testbench 为 top design。
-l compile.log
输出 VCS 编译的 log 至文件 compile.log 中

◆ 其他也经常使用的参数说明如下。
+define+MACRO
定义一个宏变量 MACRO,可作用到 Verilog 设计中
+define+MACRO=10
为定义的宏变量 MACRO 指定具体值为 10
-v
指定库文件,建议包含路径,可指定多个
-y
指定库文件、IP 等 Verilog 模型的路径,可指定多个
+incdir+
指定 `include 指令使用的包含文件的目录,可指定多个
注:以上参数设置建议写在另一个文件 macro.list 中
-override_timescale=1ns/1ps
覆盖掉之前的 timescale 设置,重新设置时间单位与精度
+nospecify
忽略 specify 语句块中描述的延时。
specify 块具体可参考《Verilog 教程高级篇》的《3.2 specify 块语句》章节
+notimingcheck
禁止进行时序检查,s e t u p 、 setup、setup、recovery 等系统函数将无效。
时序检查具体可参考《Verilog 教程高级篇》的《3.4 时序检查》章节
+maxdelays
网表仿真时使用 SDF 文件中的 max 值。
SDF 相关知识可参考《Verilog 教程高级篇》的《3.5 延迟反标注》章节
+mindelays
网表仿真时使用 SDF 文件中的 min 值
+typdelays
网表仿真时使用 SDF 文件中的 typ 值
-o simv_ps
输出仿真可执行文件的名字为 simv_ps
未指定时默认输出的可执行文件名为 simv
-M
使能增量编译,即编译时只对修改的文件进行重新编译
-R
编译完成后立即执行 simv 命令进行仿真
建议编译和仿真分开进行,便于清晰的调试。
+warn=noTFIPC
忽略 TFIPC 的 Warning,不予显示
+warn=none
忽略所有 Warning,不予显示
+warn=all
显示所有 Warning
-ntb
使能 OpenVera 语言描述的测试文件:Native TestBench
+error+100
编译时最多支持 100 个 NTB error。此命令不是限制一般的 VCS 编译错误的数量。这里只是简单提及,避免混淆。

Reference

3.2 VCS 仿真接口 UCLI
Reference

3.3 VCS 混合分步编译
Reference

发表评论