我在设计中需要使用使用VHDL写的test bench, 模块代码中有verilog,也有VHDL。我对VHDL不太熟悉,这是第一次使用VHDL的test bench进行仿真。出现了好几个问题,记录一下:

1. 使用dumpfile

process 

     begin 

     fsdbDumpfile("vhdl.fsdb"); 

     fsdbDumpvars(0,"counter_tb");    --“2是层次,counter_tb是要dump波形的模块 “

     wait  

   end process;

这里需要注意的是在VHDL的test bench里面的fsdbDumpfile和fsdbDumpvars前面是没有$的。其次fsdbDumpvars后面的参数是要加的,否则出现错误:Type error resolving procedure call "fsdbDumpvars".。 注意第二个参数是要dump波形的模块,通常就是最顶层,这样就可以存下来所有的波形。

2. 在VHDL代码中增加novas引用库

library novas;

use novas.pkg.all;

3. 编译novas库

这里需要注意,如果test bench是verilog,我们使用如下的do文件

vlib work

vmap work

vlog -work work /opt/Novas/share/PLI/modelsim_pli_latest/LINUX64/novas_vlog.v

vlog -work work $env(XILINX)/verilog/src/glbl.v -f board.f              

vcom -explicit -93 -work work -f aes_vhdl.f     

vsim -voptargs="+acc" +notimingchecks -t 1ps -pli /opt/Novas/share/PLI/modelsim_pli_latest/LINUX64/libpli.so \

       -L work -L secureip -L unisims_ver -L xilinxcorelib_ver work.board gl      

run -all  

当然大家可以根据自己的需要修改这个文件,但是需要注意的是需要编译novas_vlog.v文件,以及库libpli.so。

但是如果使用vhdl的test bench,采用如下do文件。

vlib novas   

vmap novas novas

vcom -work novas /opt/Novas/share/PLI/modelsim_fli64/LINUX64/novas.vhd

vlib work

vmap work

vlog -work work $env(XILINX)/verilog/src/glbl.v -f sha_verilog.f              

vcom -explicit -93 -work work -f sha_vhdl.f     

vsim -voptargs="+acc" +notimingchecks -t 1ps -pli /opt/Novas/share/PLI/modelsim_fli64/LINUX64/novas_fli.so \

      -L work -L secureip -L unisims_ver -L xilinxcorelib_ver -L novas work.testbench_SHA256_complete glbl      

run -all   

这里需要注意的是差别,我们需要增加一个novas库

vlib novas   

vmap novas novas

vcom -work novas /opt/Novas/share/PLI/modelsim_fli64/LINUX64/novas.vhd

而且要使用novas_fli.so 库。