1.前言
vivado内自带仿真器,或者可以通过vivado启动第三方仿真工具,联合仿真。但是很多时候,我们希望脱离vivado,利用modelsim或者vcs等第三方仿真工具,高效地仿真。本文介绍如何利用modelsim独立仿真vivado 的IP核(以一个同步fifo为例)
2.准备工作
vivado的ip核仿真相对于altera的ip核仿真较为复杂。altera只需要在仿真的filelist中,添加altera_mf.v以及altera220_model.v,就可以方便地仿真IP核(但是比较新的quartus II 生成的IP核,比如17.0及以后,好像仿真IP核也变麻烦了)
第三方工具仿真vivado IP核,需要先在vivado中将目标器件的所有仿真库,编译到你指定的路径下,然后在modelsim仿真脚本中指定仿真库到该路径。
在A位置选择modelsim工具,B位置选择你想把编译好的仿真库放在什么路径下,C位置指定modelsim的安装路径。如果你不想编译所有器件的仿真库,可以在Family选项中选择自己想要编译的器件。编译时间较长。
3.仿真
准备好自己写的逻辑代码,代码中例化了fifo ip,准备好testbench以及modelsim仿真tcl脚本.需要注意一下三点
1.testbench中需要添加如下一行代码
glbl是xilinx的全局复位的原语,不加这一行代码,ip网表文件编译时无法调用该全局复位模块。
2.filelist中需要添加fifo的网表文件,提供fifo的底层原语,描述fifo的行为。
3.vsim指令需指定fifo ip的仿真库文件夹路径
xilinx_sim_lib就是准备工作中,编译好的仿真库所在的路径。unisims_ver是功能仿真的常用的仿真库,时序仿真可以添加simprims_ver文件夹
简单的tcl脚本如下,供参考
#退出当前仿真
quit -sim
vlib work
vmap work ./work
#编译修改后的文件,我这里把设计文件和仿真文件分开放了,所以写两个。
vlog "../rtl/*.v"
vlog "../tb/*.v"
vlog "F:/prj/prj.srcs/sources_1/ip/sync_fifo/sync_fifo_sim_netlist.v"
#开始仿真
vsim -novopt -L E:/modelsim_install/xilinx_sim_lib/unisims_ver work.fifo_tb
#添加指定信号
add wave \
sim:/fifo_tb/sync_fifo_wr_rd_top_inst/wr_en \
sim:/fifo_tb/sync_fifo_wr_rd_top_inst/rst_n \
sim:/fifo_tb/sync_fifo_wr_rd_top_inst/rd_en \
sim:/fifo_tb/sync_fifo_wr_rd_top_inst/fifo_data \
sim:/fifo_tb/sync_fifo_wr_rd_top_inst/cnt \
sim:/fifo_tb/sync_fifo_wr_rd_top_inst/led \
sim:/fifo_tb/sync_fifo_wr_rd_top_inst/clk
#添加顶层所有的信号
# 打开波形窗口
view wave
view structure
# 打开信号窗口
view signals
#运行xxms
run 10us
打开modelsim,更改路径到当前的仿真文件夹下,do xxx.tcl就会自动完成编译以及仿真运行