使用vcs仿真带vivado的IP的设计的时候,经常需要联合编译,vivado的库有的是VHDL文件,这时又需要vcs进行三步编译。
文中命令均手打,可能有错,记得注意一下
若对编译选项的含义有疑问,可以参考我的另一篇文章VCS编译参数说明
vivado+vcs+verdi 仿真 - 知乎 (zhihu.com)
可以使用图形化界面,在vivado中直接调用vcs编译。该部分可以参考vivado+vcs+verdi 仿真 - 知乎 (zhihu.com)的第一节。
编译完成后主要得到下面几个文件:
VCS三步编译分为:
VCS三步编译是将两步编译的第一步,拆分成了Analysis+Elaboration,这样做的好处是可以编译VHDL文件。
通常也只会在需要编译VHDL文件的时候,才会使用三步编译
我们刚才使用vivaod生成了一个synopsys_sim.setup文件,该文件主要指定了Xilinx的库。
现在我们需要新建一个synopsys_sim.setup文件,告诉vcs具体的库配置。
所以一共有两个synopsys_sim.setup文件:
WORK > DEFAULT
DEFAULT : vcs/xil_defaultlib
OTHERS=../../../XilinxSimlib/synopsys_sim.setup
WORK > DEFAULT
:设置vcs使用默认库DEFAULT
DEFAULT : vcs/xil_defaultlib
:指定DEFAULT
的存储路径,所以vcs/xil_defaultlib
可以随意修改成你自己的路径OTHERS
指向Vivado生成的第一个synopsys_sim.setup文件路径特别注意:我们自己写的第二个synopsys_sim.setup文件,必须放在simv
仿真可执行文件的同一个目录,否则不生效。
使用vlogan
编译verilog和systemverilog文件,若使用的是UVM环境,需要首先编译UVM环境。
若使用一条命令编译源文件和uvm环境,则uvm环境会默认在最后开始编译,这就导致前面编译源文件的时候会报错,所以必须先编译UVM环境。
编译UVM
vlogan -full64 +no_notifier +v2k -v2k_generate -sverilog -ntb_opts uvm-1.2 +lint=TFIPC-L,PCWM +warn=noPISB,noPHNE,noTMR,noOBSV2G -override_timescale=1ns/100fs +cov +FSDB -V
编译verilog
源文件
在编译UVM参数的基础上,加上verilog文件列表和testbench文件列表
注意需要手动在文件列表中加上glbl.v这个文件,该文件在vivado的库中。
vlogan -full64 +no_notifier +v2k -v2k_generate -sverilog -ntb_opts uvm-1.2 +lint=TFIPC-L,PCWM +warn=noPISB,noPHNE,noTMR,noOBSV2G -override_timescale=1ns/100fs +cov +FSDB -V -f ./$VLOG_FLIST -f ./$TB_FLIST
使用vhdlan
编译vhdl文件,
注意不能使用
-V
选项,该选项会导致vhdlan
不输出任何文件,导致后面的Elaboration
出错。-vhdl87 指定的是vhdl语言版本,根据需要指定
vhdlan -full64 -vhdl87 -f ./$VHDL_FLIST
使用vcs
命令生成可执行仿真文件simv
。
必须指定两个top,除设计top外,必须有glbl
vcs -full64 +no_notifier +notimingcheck +nospecify -sverilog -ntb_opts nvm-1.2 -xprop=xmerge -debug_access+all -debug_region=cell+lib +lint=TFIPC-L,PCWM +warn=noPISB,noPHNE,noTMR,noOBSV2G +cli+3 -lca -j4 -override_timescale=1ns/100fs -P $VERDI_ARG -cc gcc -cpp g++ -assert enable_diag -top $TOP glbl
$SIM_ARGS表示仿真参数,自己根据需要添加
./simv $SIM_ARGS
若需要断点调试,可以在仿真参数中加上-gui
,可以调用DVE界面进行交互DEBUG。调试操作方法类似C语言的调试方法。