相比于Vivado自带的仿真器,我一直很推崇用Modelsim进行独立仿真。对于复杂工程,Modelsim在编译和仿真速度上都是Vivado不能比拟的。本文结合几个关键博客(仅供学习),梳理一下如何用Modelsim进行独立仿真,同时如何仿真Vivado自带的IP核。
1. 软件准备
安装Modelsim软件,版本是Modelsim 2020.4 SE,安装教程:modelsim 2020.4SE安装教程超详细(仅供学习使用)_modelsim安装教程-CSDN博客。注意,教程中需要添加一条环境变量LM_LICENSE_FILE。
安装Vivado软件,相关的安装教程网上很多,各个版本的安装大致相同。作者安装了一个最新的版本Vivado 2026.1,选择了必要的器件后大小约为80G左右。作者在网络上也找到了2026.1版本的License:【新提醒】vivado 2026.1许可license文件 - EDA资源使用讨论 - EETOP 创芯网论坛 (原名:电子顶级开发网) - Powered by Discuz!。获得Vivado的License后,按照下图指定License文件位置即可,不要修改LM_LICENSE_FILE的值,最后点击Set即可。
2. 编译Vivado的IP核
Modelsim之所以能够仿真Vivado的IP核,需要基于IP核的仿真库文件。打开任意的Vivado工程,点击Tools->Compile Simulation Libraries
图中Family选择自己常用的器件类型,如果选择默认的All,后续的编译时间会比较长,生成的仿真库文件也比较大。其余的Simulator、Language和Library和我选择一样即可。
红色框中Compiled library location是生成的仿真库文件的位置,大家可以在Vivado安装目录下新建文件夹放进去。Simulator executable path选择到Modelsim安装路径下的win64文件夹。最后,点击Compile等待一段时间,生成相应的仿真库,如下图所示。
生成的仿真库中有一个modelsim.ini文件,复制该文件中的有关IP核的所有路径信息,部分路径如下图所示。
进入Modelsim的安装目录D:\modeltech64_2020.4,目录下也有一个同名文件modelsim.ini,属性取消勾选只读,将复制的路径信息粘贴到modelsim_lib = xxx下方,保存后并重新勾选只读。
打开Modelsim软件,可以看到Library中显示了Vivado IP核的相关内容。
3. 独立仿真过程
先明确Modelsim的作用是进行功能仿真,而设计的Synthesis和Implementation则由Vivado来完成。所以,大部分情况下Modelsim和Vivado往往是同时使用的。
新建一个文件夹,用于放置Modelsim的工程。打开Modelsim软件,在主界面上依次点击File->New->Project,指定工程名和路径,并点击OK完成。
添加设计和激励文件,在Project空白处点击鼠标右键,点击添加Existing File,将Vivado工程中的文件添加到Modelsim中来。
将Vivado工程xxx.srcs目录下涉及到的设计和激励文件全部添加到Modelsim工程中。此外,将Vivado工程xxx.gen\sources_1\ip\xxx\sim\xxx.v等IP仿真文件也添加到Modelsim工程中。同时,选择Reference from current location,这样ModelSim会直接引用原始源文件,无需维护两份代码。在Vivado中对设计和激励文件进行修改,保存后Modelsim中的文件同步被修改。
添加完文件后,点击Compile All对所有的文件进行编译检查,保证所有文件不存在报错,如下图所示。
下面进行仿真,在主界面上点击Simulate->Start Simulation。如下图所示,勾选Enable optimization,点击Optimization Options并选择Apply full visibility to all modules(full debug mode)。在work中选择要进行仿真的顶层tb文件,并点击OK开始仿真。
如果使用到了IP核,正常情况下肯定会报错,报错信息就是Module fifo_generator_v13_2_15 is not defined。因为之前添加的xxx.gen下的IP核仿真文件会例化仿真库文件。
我们回到上一步,在主界面上点击Simulate->Start Simulation。如下图所示,在Libraries部分中点击Add,在Select Library框中输入上面报错的模块名fifo_generator_v13_2_15来添加对应的仿真库。最后回到Design部分,在work中选择顶层tb文件,并点击最下方的OK进行仿真。
一般情况下,能够进行正常仿真。在sim中可以选择对应的模块,并在右侧选择想要查看的信号右键Add Wave添加到波形窗口。
在波形窗口点击Restart,接着点击Run -All跑出仿真波形,如下图所示。
后续的仿真操作变得更加容易,不需要关闭当前的仿真界面和窗口。修改代码并保存后,在Modelsim端重新Compile All,并在波形窗口点击Restart,然后点击Run -All即可查看新的波形。
4. 总结
上文就是Modelsim独立仿真的步骤。工欲善其事必先利其器,希望Modelsim能加快每一个工程师的仿真速度!