VCS常用操作

主要参考:

1、VCS User Guide 2020

2、知乎专栏

1 VCS简介

VCS全称为 verilog compiled simulator ,是编译型Verilog模拟器,它完全支持OVI标准的Verilog HDL语言、PLI和SDF。 VCS具有目前行业中最高的模拟性能,其出色的内存管理能力足以支持千万门级的ASIC设计,而其模拟精度也完全满足深亚微米ASIC Sign-Off的要求。

vcs用于编译Verilog/SystemVerilog、生成仿真波形覆盖率等。

仿真波形有VCD+和fsdb( Fast Signal DataBase )两种,其中fsdb需要结合Verdi产生及使用。

VCS_MX为mixed hdl仿真器,支持vhdl+verilog+sv的混合仿真。vcs则是纯verilog的。当然,目前vcs也是有sv支持的。它们在feature上唯一的区别在于对vhdl的支持。
当然,如果没有vhdl的设计或者验证还是VCS好些,速度略好。

2 VCS Flow

VCS有两种flow,两步式(Two-step Flow )和三步式(Three-step Flow)。平时两步式用的多。

1)两步式:

只适用于Verilog/sv,包括编译、仿真两个流程。

  • 编译:

编译生成二进制可执行文件simv(可用编译指定name,一般不会改name),用于第二步的仿真。

编译又有debug mode和optimized mode两种模式(也对应叫作Interactive mode和Batch mode)。debug mode适用于开发周期中使用,optimized mode适用于回归时使用,这是vcs会给出最优的编译时间。

编译指令: vcs [compile options] Verilog_files

具体编译参数介绍:(vcs -h),详见编译章节。

  • 仿真:

对应编译的两种模式(debug/optimized),仿真时又对应有交互模式(Interactive mode)和批处理模式(Batch mode)。

Interactive mode仿真:仿真可以使用VCS的GUI(DVE)、Verdi、统一命令行接口(UCLI)三种。编译时需要加选项: -debug_access(+<option>)

Batch mode仿真:仿真指令是 simv

仿真设计命令: executable [runtime_options]

-gui:启动Verdi(前提是设置了环境变量VERDI_HOME)
-ucli:用UCLI模式启动simv仿真

还有其他参数,可以看userguide,也可在网上找找看。

2)三步式

三步式包括分析(Analysis)、细化(Elaboration)和仿真(Simulation)三个流程,分析+细化=编译?。

  • 分析:

分析过程会检查语法错误,并生成中间件文件用于评估过程。

  • 细化:

编译生成二进制可执行文件simv用于第三步的仿真。

  • 仿真:

同两步式

3 VCS编译

编译过程: VCS先将verilog/systemverilog文件转化为C文件,在linux下编译链接生成可执行文件,在linux下运行simv即可得到仿真结果。

第一步sv到c的过程是怎么做的?

编译:c到o是将多个c语言编译成汇编代码, 汇编器会将汇编代码翻译成机器码,也就是将汇编代码转换成CPU可以直接执行的指令。汇编器的输出是一个目标文件,包含了可执行代码和数据,但还不能直接运行。

链接:链接器会将多个目标文件合并成一个可执行文件,它会将所有的函数和数据段放到一个地址空间中,并解析函数之间的调用关系,使得程序可以正确地执行。

img

1)编译命令

编译的基本指令是:vcs [compile options] verilog_files

VCS编译命令中+ -区别
-:一般是编译时用的,编译工具自带的。
+:是插件,环境,验证语言,等等加的,可扩展的,自定义的。

options 解释 备注
-R 编译后立即运行,即编译完成后立即执行 ./simv
-Mupdate 源文件有修改时,只重新编译有改动的.v文件,节约编译时间。 Modify update
-sverilog 打开对Systemverilog的支持,编译Systemverilog文件时使用。
-timescale=1ns/1ns 设置仿真精度 全局,大于sv文件内的?
-o simv_file 编译默认产生的可执行文件为simv,可以使用 -o 更改可执行文件名。
-f filelist.f 编译文件列表
-gui 仿真时打开DVE gui界面
-verdi 使用verdi图形界面
-l filename 编译时产生的Log信息写到文件filename中
-ntb_opts $(UVM_VER) 指定本次编译的UVM库,这里是用的是VCS安装自带库
-full64 匹配64位服务器系统
-debug_all 打开debug开关,使能UCLI命令行
-fsdb 仿真过程同时生成 fsdb格式的波形
+v2k 支持verilog2001标准 version 2k?
+libext+extension+ 拓展文件,e.g. +libext+a.v+b.v+,添加a.v和b.v库文件添加到编译。
+incdir+directory+ include文件,e.g. +incdir+dirA+dirB+,把dirA和dirB加入include搜索路径。
+define+VCS 定义全局的VCS,编译器在编译时如果源文件有类似`ifdef VCS等字样,那么会执行定义之后的代码。 常用

暂不涉及覆盖率统计。

2)filelist.f

filelist.f这个文件是sv文件的列表,列出所需参与编译的sv文件名。编译时给出filelist.f文件即可。

使用命令find -name *.sv > filelist.f可以将所有sv文件名写入filelist.f中 。

1690075325169

3)Makefile

VCS的编译时开关选项很多,所以借助Makefile进行编译。Makefile的指令是make [target],其中target是我们自己设定的,每个target对应一条编译指令,默认是执行第一个target。

格式:target首行对齐,后跟“:”,后可跟其他target。命令换行后输入,需要一个tab对齐,命令太长使用“\”分行。也会使用一些环境变量,如${UVM_HOME}

示例:如图,make all执行等于执行make vcs verdi,make vcs等于执行vcs -f file_list -timescale=1ns/1ns ...

1690074661401

给出模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#-------------------------------------------------------------------------------------------------------
all: \
vcs \
verdi

#-------------------------------------------------------------------------------------------------------
# VCS
vcs :
vcs \
-f file_list \
-timescale=1ns/1ns \
-full64 -R +vc +v2k -sverilog -debug_access+all \
|tee vcs.log
#-------------------------------------------------------------------------------------------------------
# questasim

questasim: com sim
com:
vlib work
vmap work work
vlog -64 -sv +acc \
-f file_list \
-l com_questa.log

sim:
vsim \
-64 -batch -pli $(VERDI_HOME)/share/PLI/MODELSIM/linux64/novas_fli.so \
-t 1ns \
work.tb \
-do "run -all"

#-------------------------------------------------------------------------------------------------------
# verdi

verdi :
verdi -sv -f file_list -ssf tb.fsdb &

#-------------------------------------------------------------------------------------------------------
clean :
rm -rf *~ core csrc simv* vc_hdrs.h ucli.key urg* *.log novas.* *.fsdb* verdiLog 64* DVEfiles *.vpd
rm -rf INCA_libs irun*
rm -rf modelsim.ini transcript work
#-------------------------------------------------------------------------------------------------------

4)

4 VCS仿真

编译或进行仿真,主要看具体的波形,debug。

仿真基本指令: executable [runtime_options]

1)仿真

仿真开关: 作用:
-s 什么时候结束仿真
+userswitch $plusargs() switches,接收一些参数
-E echo
-I logfile 仿真信息写到logfile中
-gui 仿真时打开DVE gui界面(user guide说在设置verdi环境变量后是打开verdi的)
./simv -gui & 后台执行,不要把当前界面锁住。 第一行数字是进程号。

2)debug

暂未学习

5 实例

VCS+Verdi

需重新整理,笔记太乱