vivado----simulation上

    今天说的vivado的仿真是指用vivado自带的仿真工具进行仿真,主要内容集中在如何运用脚本对代码进行仿真。

    1,vivado自带工具的图形界面仿真很简单,这里不做过多介绍,但是在图形界面仿真的时候有一点值得注意,就是如何产生设计中所有信号的波形,因为一般vivado是默认产生顶层模块的IO波形,而如果想产生其他信号的波形,还要在仿真之前添加进去,而如果仿真期间还要加信号的话,就只能重新添加信号,然后重新仿真。所以这里我们利用verilog中的dumpvars系统调用来dump出所有的波形。做法就是在仿真设置下面加一条命令-testplusarg dump_all。这个命令会被代码中的

    if ($test$plusargs ("dump_all")) begin

捕捉到,从而会执行

    $dumpfile("board.vcd");
    $dumpvars(0, board);

系统调用函数来dump出所有的波形。

    2,下面主要说一下怎么在命令行界面进行仿真:

    在命令行界面进行仿真就必须了解vivado的仿真机理,例如,

    ----源代码是如何被编译,然后执行的;

    ----如果设计中包含ip核,仿真的过程有事怎样的;

    ----有些ip核对应的有源码,而有些ip核实没有源码的,这个时候该利用什么队ip核进行仿真;

    首先,vivado的命令行仿真是可以脱离vivado环境来实现的,就想第三方仿真工具仿真一样。在vivado中,用于仿真的工具有三个:xvlog, xelab, xsim。分别对应compile, elaboration和simulation。下面我们就从这三个方面对应vivado的命令行仿真就行介绍。

    xvlog: 在仿真之前,我们要对源代码进行analyze, 关于xvlog这一段究竟做了什么,我现在还不是很清楚。因为从vivado的user guide和实际的命令行仿真来看,编译是在xelab下完成的,所以xvlog具体做了什么,我也很模糊。

    xvlog有几个重要的命令参数,-i:只include文件,用于代码中的·include语句的文件查找;-f:是对应源码文件的集合,即可以看代码的路径卸载一个文件里,然后用-f进行连接。xvlog最后会输出一个work文件夹,作为后面xelab编译时的模块的查找,work文件夹其实就是用户代码转换成的一个lib库。

    这里就要说明一下,如果设计中包含没有源码的ip核,该怎么办,其实ip核本身没有源码,不代表仿真的时候没有源码可以参考,在生成ip的过程中,一般也会生成的用于仿真的verilog模型文件,我们仿真的时候只需把这个文件加到我们的源代码中即可,即把这个verilog模型文件就看做是我们的源码文件。

    xelab: 这是对代码进行编译和解析,最后生成可执行文件。xelab也有很多地方需要说,首先就是xelab是怎么利用xvlog产生的work库的,这就涉及到xelab时怎么进行模块的查找的,xelab会默认查找work文件夹,这个不要我们指定,但是如果代码中用到了vivado软件中自带的其他的库,那么我们就要指定了,指定的方式就是利用-L参数,可以利用多个-L参数来指定多个lib;

    然后,在xelab中,我们必须指定顶层的模块,如果顶层模块指定错误,我们的仿真就会出现很难察觉的错误,我就是经历过这样的教训,还有如果设计中包含ip核,我们就要同时指定glbl为顶层模块,关于glbl的作用,这里暂且不说,以后会有总结;

    最后,我们需要为利用-s参数生成一个snapshot文件,即仿真阶段的可执行文件。

    xsim:这就是真正进行仿真的工具了,在这里我们利用利用-testplusarg dump_all来dump所有的波形,同时也可以利用-t参数指定某个tcl脚本来运行,tcl脚本可以指定仿真运行的时间等。

    其实命令行的仿真和图形界面的过程是一样的,但是从命令行仿真我们更可以看出vivado仿真的具体流程,而不是只停留在鼠标点击某个botton的层面上,这就是命令行最大的好处吧,下面给出我的命令行的脚本作为参考:

# simulation script
#
rm -rf xsim.*
rm -f xsim_1*
rm -f xvhdl.*
rm -f xvlog.*
rm -f elaborate.*
rm -f *.log
#
# compile source and simulation file
#
echo "compile source and simulation file"
xvlog -m64 -i tests/ -i dsport/ -i functional/ -f xilinx_lib.f -f source-design-list.f -f source-ip-list.f -f source-simulation-list.f;
#
# elaborate the design-list
#
echo "elaborate the design"
xelab work.board work.glbl -m64 --debug typical --mt 8 -L xil_defaultLib -L xpm -L blk_mem_gen_v8_3_2 -L unisims_ver -L unimacro_ver -L secureip --snapshot board_behave -log elaborate.log;
# -L xil_defaultLib -L xpm -L blk_mem_gen_v8_3_2 -L unisims_ver -L unimacro_ver -L secureip
# start simulation the design
# -L xil_defaultLib -L xpm -L blk_mem_gen_v8_3_2 -L unisims_ver -L unimacro_ver -L secureip
#
echo "start simulation"
xsim board_behave -testplusarg dump_all -testplusarg sample_smoke_test0 -t simulation_control.tcl -log simulation.log 


你可能感兴趣的:(xilinx,pcie,software,using)