数字IC设计之EDA工具使用篇---VCS和Verdi的使用

数字IC设计之EDA工具使用篇—如何进行芯片前仿真?

计划更新自己的学习感悟将分为数字电路基础篇、verilog和sv语法篇、EDA工具使用篇、数字IC设计实例篇、数字IC技能篇。
同步计划更新读书笔记和模拟电路学习笔记。


前言

本文会持续更新解决数字芯片设计中的第一步,当有了设计文件以后如何编译和进行前仿真,包括了VCS和Verdi的使用技巧,以及在工作和学习中遇到的所有问题与bug;


一、VCS和Verdi在数字前端起到什么作用?

如果需要进行芯片前仿真必须要有以下文件:

1. 已有设计文件(DUT.v)
2. 已有验证环境(DUT_tb.sv)

此时可以使用VCS编译生成可执行仿真文件(simv),然后执行simv文件,产生波形文件。最后使用verdi debug波形,查看设计是否符合预期;

二、数字IC设计中几种不同的Makefile文件

1.几种可用的Makefile脚本

Makefile文件中需要包括两个步骤:第一步是使用VCS命令来编译文件,第二步是使用simv可执行文件进行仿真;最后即可使用verdi查看生成的fsdb文件,或者DVE查看生成的vpd文件。目前来说DVE已经很少用到,使用Verdi查看波形和debug已经成为主流。

所以Makefile脚本需要完成的主要功能有两个:1. 编译;2. 运行仿真文件。

在实际过程中仿真过程可能耗时更久,编译过程会比较快。编译同时会检查基本的RTL语法错误(VCS没有XRun和DC查的严格,有一些错误类型VCS可能只是warning或者lint型错误,但是XRun和DC会报Error,导致不过。建议在编译结束后打开com.log文件查看有无语法错误,最好也要把lint型和warning全部清除)

Malefile脚本1示例如下:

RTL  := your_design.v
TB   += you_design_TB.v
SEED ?= ${shell date +%s}

all : compile simulate
compile:
	vcs -sverilog -debug_all -timescale=1ns/1ps timescale.v ${RTL} ${TB} -l com.log
simulate:
	./simv +ntb_random_seed=$(SEED) -l sim.log
run_dve:
	dve -vpd vcdplus.vpd &

脚本1中的命令解析:首先指定变量 RTL (文件位置)TB(测试文件位置) SEED(随机数种子设置);
all目标包含了 compile和simulate两个目标,make all = make compile + make simulate
这里使用了VCS进行编译,命令解析如下:

VCS中的编译命令含义
-sverilog支持system verilog语法
-debug_all开启所有调试选项
-timescale=1ns/1ps设置时间尺度位为ns和1ps
timescale.v也可以在这个文件中设置时间尺度
${RTL} ${TB}这是之前定义的rtl文件和测试tb文件的位置 (在此读入你的设计文件)

-l cmp.log 将编译过程输出到文件中去,方便查看(在这里可以查看代码是否有语法问题)

下面解析simulate目标,直接执行了simv文件

simv后用到的命令含义
+ntb_random_seed使用随机数来仿真(如果你的TB里用到随机数的话)

-l sim.log将仿真过程输出到sim.log文件中去。方便查看

Makefile脚本2示例如下:

PLATFORM       =  LINUX64
VPD_OPTION     += +define+VPD_ON
TIMING_OPTION  =  +notimingcheck

all: run_rtl_verdi open_verdi
run_rtl_verdi:
	vcs -sverilog -debug_pp -LDFLAFS -rdynamic\
	-P ${VERDI_HOME}/share/PLI/VCS/${PLATFORM}/novas.tb \
	${VERDI_HOME}/share/PLI/VCS/${PLATFORM}/pli.a \
	-ucli -i dump_fsdb_vcs.tcl \
	+vcs+lic+wait \
	-f model.list -f rtl.list -f tb.list -timescale=1ns/1ps \
	-v2005 +v2k ${VPD_OPTION} ${TIMING_OPTION} -Mupdate -R -l sim.log

open_verdi:
	verdi_uvm -f flist.f &
	
//////以下不是Makefile中的内容////////////////////
//////补充一下 dump_fsdb_vcs.tcl中的内容//////////
global env
fsdbDunpfile “your_design.fsdb”
fsdbDumpvars 0 "your_top_module_name"
run
//////其实设置dump fsdb还有很多详细的选项,不过一般也可以在TB文件里定义dump选项///////
//////使用单独的一个initial块
initial
	begin
		$fsdbDumpfile ("your_design.fsdb");
		$fasbDumpSVA();
		$fsdbDumpvars(0,system,"+all");
		#12500 $finish;
	end

脚本2中的命令解析:
可以发现脚本2中只有VCS一条命令,看似并没有执行simv的过程。但其实这只是另一种写法,命令解析如下:
run_rtl_verdi该目标是为了使用VCS和Verdi进行联合仿真,包括了编译和仿真过程。

VCS中的命令解析含义
-debug_pp开启详细调试模式
-LPDI -ldynamic用于动态链接相关设置
-P +路径指定与Verdi工具联合仿真所需的PLI(Programming Language Interference)库文件路径,用于在VCS和Verdi间建立连接。
-uccli -I XXX.tcl使用uccli命令,执行XXX.tcl文件,在本例中是制定了一些fsdb的细节
-f XXX.list从XXX.list中读取model文件,设计文件,测试文件
-v2005 +v2k支持Verilog2005和Verilog2001标准
+define+VPD_ON启用VPD功能,记录仿真中的信号变化
+notimingcheck禁用时序检查,在仿真时不进行时序相关的检查
-Mupdate让VCS检查文件的修改时间戳,重新编译那些由于源文件修改而需要更新的模块和模型,提高编译效率‌
-R编译后立即开始仿真

2. 使用Run脚本进行仿真

Run脚本示例如下:(待更新)


3.前仿真脚本使用总结

这三个脚本文件方式不尽相同,但是都通过Makefile脚本实现自动编译和运行仿真的作用。只要在脚本中指定design文件,test文件,model文件(如果有比如sram),支持的语法,timescale,生成的波形文件的位置和是否全部dump即可,形式不一而同。这些工作可以是一条指令完成,也可以是多条指令完成。搞定这些就可以完成自己的第一个设计的方针和查看波形工作。


总结

后续会持续更新VCS中的各种问题和编译选项的解析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这里不是麦当劳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值