如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真

如何在QuestaSim/ModelSim中使用Vivado IP进行仿真

1. 在Vivado中编译仿真库

在Vivado中,依次点击 Tools -> Compile Simulation Libraries:
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
之后弹出:
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
根据需要,选择仿真器(我这里选择的是QuestaSim)。
自行设置一个路径,用于放置编译出来的库文件,并设置为Compiled library location。下面的Simulator executable path一般会自动识别(如果电脑上已经安装了相应的仿真器)。
之后点击“Compile”,等待一段时间,便可编译完成。

完成后,在QuestaSim/ModelSim的安装路径下,新建一个Vivado_libs的子文件夹,并把生成的库文件全部复制+粘贴进去

2. 修改modelsim.ini(非必须)

上面的库编译完成后,会生成一个modelsim.ini文件:
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
而在QuestaSim/ModelSim的安装路径下,也有一个同名文件。打开Vivado生成的那个modelsim.ini,可以看见下面这些库文件(包含路径):
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
将这些库文件的路径信息,全部复制+粘贴到QuestaSim/ModelSim原有的那个modelsim.ini之中(稍微阅读一下,粘贴到原有的那些库文件之后),然后保存(Ctrl+S)。如果在不同的电脑间迁移,注意路径是否匹配。

3. 使用IP的.v文件进行仿真

3.1 建立工程 & RTL文件

在Vivado工程的路径下,找到srcs文件夹里面的IP文件夹,其中有IP对应的.v文件:
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
将 xxx_sim_netlist.v 这个文件用于建立QuestaSim/ModelSim仿真工程。

仿真工程的建立步骤和一般的仿真工程一样,在Testbench里面直接例化(调用)IP的模块即可。
由于IP需要全局初始化(消耗100ns的时间),所以,在Testbench中,也需要例化一下glbl模块(这个模块内嵌在了xxx_sim_netlist.v这个文件中):
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
还有一点,xxx_sim_netlist.v 中包含 timescale 预设,注意这个是否与Testbench一致。

RTL编写完成、编译通过后,便可以开始仿真。

3.2 启动仿真

点击 Simulate -> Start Simulation。
在 Library 栏,添加下面这些库:
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
然后在 Design 栏,选择自己编写的Testbench,并且 取消 Enable optimization
如何在QuestaSim或ModelSim中使用Vivado的IP进行仿真
点击OK,仿真开始。之后,添加需要观察的信号到波形窗口,即可进行仿真。