Verdi环境配置、生成波形的方法

电子说

1.2w人已加入

描述

Verdi是一个功能强大的debug工具,可以配合不同的仿真软件进行debug,很多企业常用的就是VCS+Verdi或或者Xcelium(xrun)+Verdi的方式进行代码的仿真与检查,Verdi使用情形主要是IC验证工程师(Debug),IC设计工程师(Review)。总之,Verdi很重要,作为一名ICer要是不会用Verdi,确实说不过去。      

  一、Verdi环境配置

(一)公司 - 一般拿来直接用

1. 在芯片设计公司中,九成公司应该都配备了Verdi,一般都会放在公司服务器目录的Tools目录下,我们可以通过which命令查看任何公司购买的EDA Tools所在路径,查看各种版本/对应文档/配置等:

VCS

2. 有些时候,我们需要切换Verdi版本,来满足不同项目或其他需求,在.cshrc中配置 或  直接module load 对应Verdi版本,最后module list查看是否load成功。

VCS

(二)其他 - 需自己摸索配置再用 (考虑排版+代码风格,直接上图)

VCS    

二、配置波形文件“三方法”“八奇技”

FSDB(FastSignal Database)是Verdi支持的文件格式,用于保存仿真产生的信号波形。 据Verdi文档说明,FSDB比标准的VCD格式节省磁盘空间,处理速度更快。

(一)常用“三方法”:

1. (最常用) 一般是在testbench(验证环境,简称tb)中的top.sv文件里,创建个initial块结合$fsdbDumpxxx()命令来配置:

VCS

提醒:使用这种方法,vcs编译前需要添加-debug_access选项。

2. (不常用) VCS添加编译选项"+vcs+fsdbon":

这样指定仿真过程生成.fsdb格式的波形,默认则保存成名为novas.fsdb的波形文件;

意的是,仿真过程会将整个design给dump下来,同时会自动添加 -debug_access 选项。

另外,配置过程中若出错,首先检查一下LD_LIBRARY_PATH是否配置对,目录下有没有Verdi需要的库文件xxx.so(静态库),pli.a(动态库),xxx.tab(表文件 for VCS)等,一般都是这里没配对导致没生成波形而报错;

提醒:vcs+fsdbon和tb中用$fsdbdumpvar()选一种方式即可;

3. (不常用) 使用UCLI命令: UCLI:Unified Command Line Interface

UCLI其实就是vcs的命令交互模式,需要在编译时加入参数 (-ucli) 以开启ucli,否则ucli交互时只能使用简单的'run'、'dump'、'quit'命令。

启动方式例如:./simv -ucli

该方法与方法1基本一样,均是使用fsdbDumpvars/fsdbDumpfile等命令,不同之处在于使用的方式和便捷程度,与方法1相比,该方法可以在不重新编译的情况下,通过修改.ucli.cmd文件中的命令,来指定需要dump波形的模块和层级,从而节省编译带来的资源消耗。

得注意的是,使用fsdbDumpvars/fsdbDumpfile等命令时,不需要像方法1使用时,前方使用符号: $。

执行仿真的过程中,通过./simv -ucli -i.ucli.cmd方式给入,.ucli.cmd(名字随便取,但格式不能变)中存放命令举例如下:

VCS

提醒:使用这种方法,vcs编译前需要添加-debug_access选项。

(二)常用命令“八奇技”(结合例子看容易理解):

1. $fsdbDumpon - 打开 FSDB dumping;

2. $fsdbDumpoff - 关闭 FSDB dumping; 上述两个命令,一般搭配wait()函数使用,更加灵活,eg:

VCS

表示之前未dump波形,直到等到o_xxx_cnt==1024时,才开始dump波形;

3. $fsdbDumpfile("fsdb_name", limit_size) - 指定dump文件;

fsdb_name - 表示指定的fsdb文件名,如"ip.fsdb"
limit_size - 表示dump波形的最大size(多少MB)- 可不配置

4. $fsdbDumpvars(depth,instance, "option=") - dump指定模块的信号; 这个命令可以多次使用,但一般不使用多次,使用多次目的是:想用来dump不同instance的波形,想达到相同目的其实有更加灵活的方法 ——“建立dump_scope.list + $fsdbDumpvarsToFile()” (后面会介绍);

depth - 0 表示dump instance以下所有层级的信号(常用) - 1 表示只dump instance这一层的信号
instance - 指定dump的hierarchy,如 dut.top.xxx
option - dump时可以选择的一些选项:- 可不配置
"+mda"  - 表示dump memory或者MDA(多维数据)的数据;
"+packedmda"  - 表示dump 压缩的memory数据;
"+functions" - 表示dump function和task里的信号;
"+all"  -表示dump all;
"+Reg_Only"  - 表示只dump reg类型的数据;
"+strength" - 表示开启强力dump开关;
"+struct"  - 表示dump struct数据(默认开);
"+power" - 表示dump power相关信号的数据(默认开);
"+fsdbfile"  - 表示直接dump指定的hierarchy的fsdb文件名字,eg: VCS

5. $fsdbDumpMDA(depth, instance,"options")  - dump指定模块中的多维数组,内部参数含义同上; eg_1:如果想更方便,可直接什么参数都不配,即默认都dump

VCS

6. $fsdbDumpSVA(depth, instance, "option") - dump指定模块中的assertion,内部参数含义同上; eg_1:将该instance (top)下所有assert全部dump到SVA.fsdb中

VCS

eg_2:如果想更方便,可直接什么参数都不配,即默认都dump

VCS

7.$fsdbAutoSwitchDumpfile(file_size,"fsdb_name",number_of_files,"log_file_name", "+fsdb+no_overwrite") - 波形过大/资源紧张情况,灵活使用拆分Dump波形很有用

file_size 波形文件大小限制,单位为MB,最小为10M,若值小于10MB则默认10MB;
"fsdb_name" 波形文件的名字,在实际加载波形时,文件名为fsdb_name_000.fsdb, fsdb_name_001.fsdb …;
number_of_files 最多可以加载多少个fsdb_size这么大的波形文件,如果写为0,则默认没有限制;
"log_file_name" 指定log文件的名字,log文件中会记录每段波形的起始和中止时间; - 可不配置
"+fsdb+no_overwrite" 当number_of_files限制的个数达到时停止dump波形,反之,一旦超出限制,会从头dump,这样会一定程度上覆盖掉起初的波形文件;- 可不配置

eg_1:单个波形文件为500MB,最大可以加载10个这么大的文件,每段波形的起始和中止时间记录在fsdb.log中,并具备防overwrite的限制;

VCS

8. $fsdbDumpvarsToFile("./dump_scope.list"); - 将需要dump的hierarchy以及depth放到一个文件里吃进来,波形过大/资源紧张情况,灵活使用选取必要波形Debug; ./ - 表示当前路径,也就是dump_scope.list要与top.sv在同一路径,当然也可以灵活改变路径; eg_1:dump_scope.list (0/1代表深度,用法通上述函数一致;#用于注释)

VCS





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分