vcs\verdi三步编译VIVADO库

vcs\verdi 三步联合编译 vivado库

使用vcs仿真带vivado的IP的设计的时候,经常需要联合编译,vivado的库有的是VHDL文件,这时又需要vcs进行三步编译。

文中命令均手打,可能有错,记得注意一下
若对编译选项的含义有疑问,可以参考我的另一篇文章VCS编译参数说明

第一步:vcs编译vivado库

vivado+vcs+verdi 仿真 - 知乎 (zhihu.com)

可以使用图形化界面,在vivado中直接调用vcs编译。该部分可以参考vivado+vcs+verdi 仿真 - 知乎 (zhihu.com)的第一节。

编译完成后主要得到下面几个文件:

  • synopsys_sim.setup
    • 重要,该文件指定了xilinx各个器件库的位置,vcs仿真时使用该文件索引用到的器件库。
  • compile.sh
    • 用不到,可以参考一下,这是vivado生成的调用vcs的脚本文件。

第二步:vcs 三步编译

VCS三步编译分为:

  • Analysis
    • 命令:vlogan, vhdlan
  • Elaboration
    • 命令:vcs
  • Simulation
    • 命令:./simv

VCS三步编译是将两步编译的第一步,拆分成了Analysis+Elaboration,这样做的好处是可以编译VHDL文件。

通常也只会在需要编译VHDL文件的时候,才会使用三步编译

0.仿真库设置

我们刚才使用vivaod生成了一个synopsys_sim.setup文件,该文件主要指定了Xilinx的库。

现在我们需要新建一个synopsys_sim.setup文件,告诉vcs具体的库配置。

所以一共有两个synopsys_sim.setup文件:

  1. 第一个vivado生成的,可以放在vivaod生成的目录下,不用拷贝过来
  2. 第二个是我们自己写的。
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仿真可执行文件的同一个目录,否则不生效。

1. Analysis

使用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
2.Elaboration

使用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
3.Simulation

$SIM_ARGS表示仿真参数,自己根据需要添加

./simv $SIM_ARGS

若需要断点调试,可以在仿真参数中加上-gui,可以调用DVE界面进行交互DEBUG。调试操作方法类似C语言的调试方法。

猜你喜欢

转载自blog.csdn.net/weixin_44681954/article/details/132544331
今日推荐