数字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中的各种问题和编译选项的解析。
2777

被折叠的 条评论
为什么被折叠?



