发布时间:2023-04-23 16:00
VCS的常用操作
VCS是synopsys的仿真器,基于Linux系统,有命令行模式和图形化模式,图像化模式是dve。
vcs要使用图形化界面dve,必须先编译得到vpd文件。
1、编译
shell>vcs file.v 编译.v文件,得到可执行的simv文件
shell>vcs file1.v file2.v -o test1 编译.v文件,得到一个名称为test1的可执行的simv文件
shell>vcs file1.v file2.v -l readme.log +v2k -debug_all
-l readme.log 用于将编译产生的信息放在log文件内;
+v2k 是使VCS兼容verilog2001以前的标准;
-debug_all 用于产生debug所需的文件同时打开全部debug相关的开关。
shell>vcs addertb.v add8.v –y …/…/lib +libext+.v -R
-y 搜索路径,指定编译的verilog代码在什么路径下;lib+libext+.v 是指该路径下所有的.v文件;-R 表示编译后立即执行
shell>vcs –f adder.f -R
-f 通过使用-f编译时开关简化命令行条目。编译设计时,使用-f开关引用该文件。adder.f文件通过编辑器创建,内容包括:file1.v file2.v -y …/…/lib _libext+.v -R
shell>vcs -h 该命令将为您提供一个常用的vcs编译时和运行时开关的列表,以及它们的功能的简要说明。
静态开关(编译):
+incdir+inc+.v 在指定的文件夹内搜索指定类型文件
-Mupdate 源文件有修改时,只重新编译有改动的.v文件,节约编译时间
-sverilog 打开对System verilog的支持,编译System verilog文件使用。
-debug 用于产生debug所需的文件同时打开一些debug相关的开关。
-debug_pp 用于产生debug所需的文件同时打开不影响仿真速度的debug相关开关。
-timescale=1ns/1ns 设置仿真精度
VCS编译时导入UVM库
1)、test_top.sv引入类,在test_top.sv文件里
`include "uvm_macros.svh"
import uvm_pkg::*;
2)vcs命令里添加 -ntb_opts uvm 参数
shell> vcs -ntb_opts uvm my_files.sv
VCS编译注意问题:
使用VCS编译时,必须先将含有`timescale或者宏定义的文档放在前面,不然会报错误。
2、仿真执行
shell>./simv 执行simv文件
shell>./test1 执行名为test1的simv文件
shell>./simv -gui 命令打开图形化界面DVE
shell>./simv -l run.log -l run.log 记录终端上产生的信息
动态开关:
-s 什么时候结束仿真
3、Debug三种方法
1)UCLI
使用UCLI进行debug非常低效,使仿真在错误的地方停止,用命令打开一个一个“黑盒子”并查看内部信号与预期是否一致。
shell> simv +monitoroff 用" monitoroff " +参数重新模拟。这将告诉VCS跳过测试台上的$monitor行。
shell> vcs –f adder.f –R –debug_all -ucli
-ucli 是启用UCLI调试器.
ucli% help 可用的UCLI命令,获取UCLI命令的快速摘要。
ucli% scope 查看当前module名
ucli% show 查看信号列表
ucli% get sum_test -radix hex 查看当前某个信号的值
2)使用系统函数
3)使用DVE
在tb文件中新增加一个initial块
initial begin
`ifdef DUMP_VPD
$vcdpluson();
`endif
end
表示如果在编译时,定义了DUMP_VPD这个宏,那么在仿真时,打开$ vcdpluson这个开关选项。
shell>vcs -f file.f -R -debug_all +define+DUMP_VPD
使用上面的命令编码以后仿真,+define+DUMP_VPD 表示在编译时定义了DUMP_VPD这个宏,即在仿真时,打开了$vcdpluson()这个开关选项。
在仿真完成后,生成了vcdplus.vpd文件,这个文件记录了仿真过程中所有的信号的波形,可以使用dve打开。
shell> dve & 打开dve,& 用途是后台打开dve,以免终端被占用。
相关选项
+vpdfile+filename 可以更改生成VPD文件的文件名,默认为vpdplus.vpd
打开生成VPD文件的功能,关掉UCLI的功能,节约编译时间。
+race 报告竞争冒险存在的情况
调用 $vcdpluson()可以加入一些参数,如果什么都不加,则默认记录顶层模块下所有子模块的信号波形。
参数格式 $vcdpluson(level number,module_instance,…,…)。level number表示查看module_instance下子模块多少层的波形。module_instance表示从哪个module开始记录波形。
VCD/VPD 是用VCS的DVE可以打开的波形文件,VPD是VCD的压缩版;FSDB是用Verdi打开的波形文件。
在系统函数display( )打印的信息中,在最后加入下面两个宏,可以显示该语句属于哪个模块,第几行。
$display( "hello world!", `__FILE__ , `__LINE__ );
4、覆盖率收集
VCS在统计代码覆盖率的过程中,我们通常在编译和仿真命令上添加对应的开关选项,生成一个.vdb文件巨鹿覆盖率的情况,在使用DVE打开该文件查看。
shell> -cm < coveragetype >
lin+tgl+cond+fsm+path
行+翻转+条件+状态机+路径
shell> -cm_name cov1 设置记录有覆盖率信息文件的名字cov1。
shell> -cm_dir 指定生成文件的目录
以上三个选项在编译仿真过程都要加上。
shell> dve -covdir *.vdb & 使用DVE查看覆盖率收集文件
shell> -cm_nocasedef 排除对在case块中default语句的统计
shell> -cm_log +filename.log .log文件记录仿真过程中统计覆盖率的信息。用的比较少。
shell> -cm_nocasedef 在统计case语句的条件覆盖率时,不考虑default条件未达到的情况。
shell> -cm_hier vcs_cov1.cfg 通过.cfg 文件选择要查看的覆盖率模块/文件。
+表示查看;-表示不查看;tree代表查看某个模块调用的子模块。
在文件内部可以使用特殊的注释打开和关闭代码覆盖率的统计
// VCS coverage off
......
// VCS coverage on
在文件内部可以使用特殊注释打开和关闭覆盖率与综合的范围
// synossys translate off
......
// synossys translata on