快速搭建VCS仿真
来源:     阅读:2
易浩激活码
发布于 2025-11-06 22:16
查看主页

仿真工具

Cadence: 仿真工具Insicive(irun),Xcelium(xrun) (xrun是irun的升级版本);看波形使用Simvision

Synopsys:仿真工具VCS ,看波形使用Verdi

VCS仿真环境搭建

数字Designer常常需要快速搭建一套VCS仿真环境来对自己写的rtl进行初步的仿真。

对于一个要设计的module,其常见的文件结构如下(这里只是举例,不同的项目文件结构是不同的):

module_name

--> rtl

        --> top.v

        --> sub_module.v

--> tb

        --> tb.sv

--> sim

        --> run.sh/Makefile

        --> tc

                --> case1

                        --> test.sv

                --> case2_name

                        --> test.sv

需要注意的只有一点: TB和TC分开放置

TB-TestBench:在搭建好之后一般不会去改动。一个test-bench例子如下:

这里各种外围设备可能是公司已经开发好的VIP,只需要将其例化并与DUT相连。
 
TC-Testcase:对应不同的测试场景。TC不是一个专门的模块,它的作用是产生激励并接收响应做检查(比如:调用VIP,比如使用SPI发送指令并接受DUT返回的数据进行检查;Foce某个信号;对DUT中的信号添加一些断言,当断言命中后,打印log...)

TC实际上是与TB共同工作的,完全可以将TC融合到TB中。
 
但是对于一个模块,有非常多的测试场景,不可能每个TC中都例化一遍TB,最好是将TB和TC分开放置,每个TC对应一个文件夹,TB尽量保持不动。

每次仿真时,只需要选择不同TC的路径即可。
 

搭建好TB和TC后,接下来就是仿真
VCS仿真过程包括编译(命令是vcs )和执行(命令是simv ),编译会产生可执行文件,默认名simv。

仿真后可以利用Verdi工具查看波形(命令是verdi )。

建立一个shell文件run.sh
run.sh



vcs -sverilog				 #支持sv特性,注意是-sverilog不是-sv
	-full64   				 #支持64位操作系统
	+v2k                     #支持Verilog-2001语法
	-debug_access+all        #提供所有的调试权限,包括对内部信号的读写比如force、强制操作等
	-timescale=1ns/1ps       #设置统一的仿真精度(如果tb中没有定义或需要进行覆盖)
	-R                       #编译后立刻运行simv可执行文件进行仿真
	-gui=verdi               #打开verdi界面
    -f asic.f                #存储所有需要编译的.v .sv文件
	-o simv                  #生成可执行文件simv (optional)
	-l sim.log &              #log文件保存到sim.log
 
	#其他可选设置
	# +vcs+lic+wait         # 用于等待license
	# +lint=all,noVCDE 		# 报告lint检查
	# -kdb                  # 生成verdi的知识数据库,利用fsdb调试时使用
	# +notimingcheck		# 编译时不做时序检查(前仿必备)
	# +nospecify      		# 仿真时忽略库文件中指定的延时(前仿必备)
 
verdi -sv 
	  -f asic.f 
	  -ssf tb.fsdb & 		  #打开tb中自定义的波形文件

asic.f



+indir+文件夹名称  #帮助工具找到verilog代码中include文件的位置
 
../rtl/*.v
./tb/tb.sv
./tc/case_x/test.sv
 
-f #其他f文件

建议将compile与execute分开,因为更常见的情况是设计人员写完代码后还来不及搭建testbech,但是需要快速检查一下语法,此时只需要VCS编译通过即可(后续可以开发一套makefile来分别管理):

编译

vcs -sverilog -full64 +v2k

        +vcs+lic+wait

        -debug_access+all

        -timescale=1ns/1ps

        -f asic.f

        -o simv

        +notimgcheck, +nospecify

        -l compile.log

执行仿真

simv +vcs+lic+wiat

        | tee exec.log

VCS统计代码覆盖率



vcs -cm line+cond_fsm+tgl+branch 	 #行,条件,状态机,翻转,分支覆盖率
	-cm_dir cm						 #覆盖率数据存储在名为cm.vdb文件夹下
	-cm_hier cm_cfg                 & #指定文件cm_cfg,里面标出统计的模块和没有统计的模块

比如用户只关心DUT内部的覆盖率,cm_cfg文件可以写成



-tree tb 
+tree tb.u_DUT

仿真完成后,会在当前目录下生成一个cm.vdb文件夹,可以将该文件夹剪切到对应的TC下,所有的TC运行完,及回归完成时,每个TC都会有一个cm.vdb文件夹,里面存放着对应TC下DUT的覆盖率数据。
 
覆盖率的检查与merge


urg -dir tc/*/*.vdb -dbname merge.vdb -report cm_report

生成的报告是html格式,保存在自定义的cm_report(不定义就是usgReport)文件夹下。

覆盖率报告也可以用DVE打开:


dve -covdir merge.cdb
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境
相关推荐
首页
搜索
订单
购物车
我的