D:.
├─run
│ clean.sh
│ compile.sh
│ filelist.f
└─tb
│ case_List.txt
│ monitor.sv
│ tb_top.sv
└─case
tc001.sv
tc002.sv
tc003.sv
run下面保存的是仿真相关的脚本或者makefile,tb下是case列表,tb的顶层,激励driver,monitor等模块。仿真时,在run目录下执行make vcs或者bash compile.sh等命令启动仿真,make clean或者执行clean.sh清空run下仿真生成的中间文件。
rm wave.vcd
vlib work
vmap work work
vlog -f filelist.f -work work
if [ $# -ge 1 ];then
vsim -gui -novopt work.tb_top -do “run -all”
else
vsim -c -novopt work.tb_top -do “run -all”
fi
大多数前端设计或者FPGA开发都不需要用uvm,但可以借鉴uvm的思路。
还没详细看过questasim的手册,不知道questasim如何支持filelist的相对路径嵌套。synopsis的工具都支持用-F调用相对路径的filelist,用-f调用绝对路径。我比较推荐使用相对路径,拷贝时可以不用做修改。
例如如下的filelist.f
+define+SIM
+incdir+../../../src/include
../../../src/include/BUS_DEFINE.sv
../../../src/1553b_app/1553b_app.sv
../../../src/1553b_app/APP_rx.sv
../../../src/1553b_app/APP_tx.sv
../../../src/1553b_app/AXIS_pack.sv
filelist中最重要的就是3种定义:
compile脚本需要修改,加入work.top和work.glbl,一定要加work.glbl,不然仿真会报找不到glbl,哪怕你编译到work里了。
vsim -c -novopt work.tb_top work.glbl -do “run -all”
filelist.f中要加入以下库文件:
+libext+.v
-y /opt/Xilinx/Vivado/2019.2/data/verilog/src/retarget
-y /opt/Xilinx/Vivado/2019.2/data/verilog/src/unisims
-y /opt/Xilinx/Vivado/2019.2/data/verilog/src/unimacro
-y /opt/Xilinx/Vivado/2019.2/data/verilog/src/retarget
-f filelist2.f
设计文件可以写到filelist2.f里,也可以直接追加到filelist.f的内容后面。filelist2.f中加入ip目录下的xxx_sim_netlist.v,该文件下有所有这个ip要用到的模块。该模块只能仿真用,是行为级的代码。有的ip核仿真用这个文件会有功能问题。ddr4仿真,就会出现init_done一直不拉高。需要导出questasim仿真脚本,用脚本中添加的源文件来仿真。
-y 是指编译这个文件夹下面的文件,+libext+指识别.v的扩展文件
要特别注意,vhdl和verilog混合仿真时,vhdl和verilog代码中会调用同一个组件,但是他们分别来自不同的library,如unisim和unisim_ver,它们相互并不通用,及verilog不能调用unisim_ver的组件,会造成组件找到却没办法绑定的错误,如:“Port ‘Q’ not found in the connected module”?所以当仿真时,由于vhdl代码中会指定从那个库文件里面提取,而verilog代码中没有,所以使用vsim命令时,把verilog所需的库放在第一个,而后放vhdl所需的库,这样,verilog会从unisim_ver代码开始查询组件。引用自MODELISM 仿真遇到glbl问题。
如果要仿真加密的ip核,还需要根据仿真报告加入缺少的库,例如仿真gtp时还要加入以下几个源文件。
/opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_common/gtpe2_common_001.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_common/gtpe2_common_002.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_channel/gtpe2_channel_001.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/gtpe2_channel/gtpe2_channel_002.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_common/gtxe2_common_001.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_common/gtxe2_common_002.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_channel/gtxe2_channel_001.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/gtxe2_channel/gtxe2_channel_002.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/pcie_2_1/pcie_2_1_001.vp
/opt/Xilinx/Vivado/2019.2/data/secureip/pcie_2_1/pcie_2_1_002.vp