如何用VCS+Verdi仿真Xilinx IP

如何用VCS+Verdi仿真Xilinx IP

1. VCS以及Vivado的版本问题

工欲善其事必先利其器,我们第一步要做的事情就是安装相关的工具,关于具体怎么安装vivado以及vcs、verdi的,请自行google解决。
笔者在此使用的是vivado2019.2+vcs_mx 2018.09版本。关于某一vivado版本所能支持的第三方的仿真工具,需要查阅xilinx官方文档ug973。笔者在此附上相关截图:
在这里插入图片描述
可以看到该版本的vivado只支持vcs以及vcs_mx 2018.09版本的。在这里千万要注意版本要匹配,要不然在第二步编译IP库的时候会一直报错的。

2. 使用VCS编译Vivado的IP库

在安装完vivado、vcs、verdi以后,就需要预先将xilinx的ip用vcs编译好。打开vivado,选择tools,再选择compile simulation library,会出现如下界面:
在这里插入图片描述

  • simulator:选择vcs仿真器
  • compiled library location:选择一个路径存储编译后的库
  • simulator executable path:选择vcs的bin目录

随后点击compile即可,耐心等待编译完成会花费几分钟到几十分钟不等,具体看电脑的配置。

编译完成以后会生成一个synopsys_sim.setup文件,这个文件比较重要,我们稍后再谈。

3. 使用Vivado工具调用VCS进行仿真

1.新建带有IP的工程

首先我们需要新建一个带有IP的vivado工程,在这里我已xbip_multadd 这个IP为例进行说明。
在这里插入图片描述
首先配置IP的相关参数,在这里我们只需要注意以下几个信号即可:

  • A:输入信号,位宽为4
  • B:输入信号,位宽为4
  • C:输入信号,位宽为4
  • P:输出信号,位宽为16
  • SUBTRACT:当为0时,首先P=A*B + C;当为1时,首先P=A*B - C

配置好了以后我们需要新建一个testbench对其进行例化并仿真,testbench如下所示:

`timescale 1ns / 1ps

module multadd_tb(

    );
    reg CLK;
    reg [3:0]A;
    reg [3:0]B;
    reg [3:0]C;
    
    wire [15:0]P;
    
    initial begin
        CLK = 1'b0;
        #50
        A = 4'h3;
        B = 4'h5;
        C = 4'b1;
        #50
        $finish;
    end
     
    always #5 CLK = ~CLK;
    
    xbip_multadd_1 u_xbip_multadd_1(
        .CLK(CLK),
        .CE(1'b1),
        .SCLR(1'b0),
        .A(A),
        .B(B),
        .C(C),
        .SUBTRACT(1'b0),
        .P(P),
        .PCOUT()
    );
     
    initial begin
        $fsdbDumpfile("top.fsdb");
        $fsdbDumpvars;
        $display("********************wave dump start**********************");
    end
    
endmodule

2.从vivado工具中调用VCS进行仿真

新建完工程以后我们就可以调用VCS进行仿真了。首先我们需要对simulation进行设置:

  • 点击project manage下的settings:在这里插入图片描述
  • 点击simulation选项进行设置:
    在这里插入图片描述
    设置好方框中的三个选项即可。然后点击run simulation即可。运行完成后会直接调起DVE
    在这里插入图片描述
    上面展示的就是VCS的仿真结果。

4. 从Vivado中导出VCS的仿真脚本

当然,除了调用图形界面调出VCS仿真以外,还可以通过脚本的方式来进行VCS仿真。当然,这里的脚本指的是vivado工具自动导出的脚本。
点击File选项卡,选择export——>export simulation:
在这里插入图片描述
方框中的两个选项建议都勾选上,然后点击ok即可。打开生成的仿真脚本,文件结构如下:
在这里插入图片描述
其中,multadd_tb.sh就是仿真脚本,直接运行即可开始仿真。

5. 编写Makefile脚本仿真

鉴于笔者之前一直使用的都是makefile脚本去进行vcs仿真的,所以笔者在此根据vivado导出的shell脚本改写了一版makefile脚本。

NOVAS_HOME=$(VERDI_HOME)
DEBUSSY_PLI=-P $(NOVAS_HOME)/share/PLI/VCS/linux64/novas.tab $(NOVAS_HOME)/share/PLI/VCS/linux64/pli.a

SIM_PATH = /home/lcy/projects/vcs_projects/multadd

VLOGAN_OPTS = -work xil_defaultlib -full64 +v2k -l $(SIM_PATH)/com.log +define+SIMULATION_EN
VHDLAN_OPTS = -work xil_defaultlib -full64 


.PHONY:analysis elabroate simulate verdi
all:analysis elaborate simulate verdi

analysis:
	vlogan $(VLOGAN_OPTS) -f top_verilog.F

elaborate:
	vcs \
	-full64 \
	-debug_pp \
	-t ps \
	-licqueue \
	-l elaborate.log \
	xil_defaultlib.multadd_tb \
	xil_defaultlib.glbl \
	$(DEBUSSY_PLI) \
	-o $(SIM_PATH)/simv

simulate:
	$(SIM_PATH)/simv -l $(SIM_PATH)/sim.log +notimingcheck +nospecify

verdi:
	verdi \
	-f top_verilog.F \
	-ssf top.fsdb
 
clean:
	rm -rf ./64 ./csrc ./verdiLog ./*.log ./top.fsdb ./ucli.key ./inter.vpd ./novas* ./DVEfiles ./simv ./simv.daidir

在笔者之前碰到的VCS仿真脚本中,整个仿真的过程是分为两步的,分别是编译和仿真:

  • 编译:使用vcs命令编译源文件
  • 仿真:运行编译阐述的可执行文件

但是请注意,两步走只适用于verilog和system verilog,含有vhdl源文件的只能采用下面的三步走仿真流程,而xilinx的大部分IP都是采用vhdl编写的,因此在这采用三步走的仿真流程。

  • analysis: 用vlogan工具编译含有verilog或者system verilog源文件,用vhdlan分析带有vhdl源文件
  • elaborate: 使用vcs命令,指定top module就可以生成仿真需要的可执行文件啦
  • simulate: 运行编译阐述的可执行文件

最后有一点比较重要,我们来重点关注以下-work选项以及synopsys_sim_setup文件:

VCS参考手册对synopsys_sim_setup文件的功能做出了如下解释:
在这里插入图片描述
VCS编译工具在运行时会依照先后顺序从以下三个路径查找synopsys_sim_setup文件:

  • $VCS_HOME/bin目录
  • Home目录
  • 当前运行目录

我们先来看下synopsys_sim_setup文件的格式:
在这里插入图片描述
在上面的例子中,xil_defaultlib是我们指定的逻辑库(名字可以随便取),它被映射到了vcs_lib/xil_defaultlib/路径下的物理库,语法如下:
Logical_library: Physical_library
当然,我们也可以在这个setup(A)文件中引用另外的setup(B)文件。在上面,我们用vivado编译库文件时生成了一个setup(B)文件,我们需要在仿真的时候引用B这个文件,通过以下语法:
OTHERS = [filename]

所以,我们在运行目录下的synopsys_sim.setup文件中指定了xil_defaultlib这个逻辑库,所以我们在makefile脚本中通过-work xil_defaultlib 这个编译选项指定我们的源文件编译到哪个逻辑库(在这里就是xil_defaultlib )。同时,我们也引用了另一个synopsys_sim.setup文件,也就是我们编译IP库的时候生成的,里面指定了各种IP核的逻辑库和物理库。

到此,我们就可以愉快的用VCS仿真xilinx的IP了。


reference:
使用VCS+Verdi对Xilinx IP仿真
基于makefile脚本的VCS仿真平台
VCS仿真流程
VCS - 三步仿真


写在最后:如果大家对于上面的博客有何疑问的话,欢迎在评论区批评指正!

  • 14
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值