背景
最近在做基于FPGA的CT图像重建算法仿真方面的工作,需要用Modelsim对算法部分的RTL代码进行功能仿真测试。
在用modelsim进行仿真时,发现仿真速度较慢,modelsim仿真1.2us的RTL代码逻辑,就消耗了物理时间约1S。我的一帧图像数据大概需要3S的代码逻辑,那么算下来对应的物理时间就是N天(没细算),顿时心凉凉了!
于是,在网上查了半天,发现现成的解决方案帖子不多,于是在一通学习和尝试后(有些方法自己现在还没有琢磨透),把经过自己测试后,能有效提高modelsim仿真速度的两种方法如下文详述。
方法一: 修改代码的仿真精度,精度越高,modelsim的仿真效率越低。
举例说明:如果RTL的testbench代码设置的初始仿真精度为1ns / 1ps(ISE默认的仿真精度),则可以修改为1ns / 1ns。
通过降低仿真精度,modelsim的仿真效率就会得到相应的提高。
个人实测: 优化前 — 1.2us的代码逻辑需要约1S的物理时间; 优化后 — 2.4us的代码逻辑需要约1S的物理时间;
优化效果:仿真速率提升了近1倍; (注:RTL代码的复杂程度也会影响测试结果)
参考文章说明: 方法一参考“ 加快modelsim仿真速度的方法(原创)” 一文!
原文链接地址:https://www.cnblogs.com/hfyfpga/p/4281579.html
方法二: 不打开波形实时显示(如需要观察结果,可以用文件输出或者保存波形的Tcl指令(脚本指令我自己尚未试过))
具体方法是:在Modelsim脚本输入栏(Transcript)输入对应的指令。
(备注:无论你是用FPGA软件与modelsim联调,还是Modelsim编译对应FPGA库文件后进行的单独仿真)
输入的脚本指令为:
vsim -L xilinxcorelib_ver -L unisims_ver -L unimacro_ver -L secureip -lib work -voptargs=\"+noacc\" -t 1ns work.projdata_512_testb glbl
1. “-L xilinxcorelib_ver -L unisims_ver -L unimacro_ver -L secureip -lib”是我使用的库文件
2. “work.projdata_512_testb glbl”是我的testbench文件,glbl是Xilinx的全局初始化文件
关键点是: -voptargs=\"+noacc\" ,解释为:vopt是进行仿真优化,对应GUI界面的enable optimization,
"+noacc"是 args的具体参数,其含义是在仿真过程中,GUI界面不显示所有波形及相关变量信息,详细解释参见下图。
因为波形的显示和刷新是需要占用内存的,故关闭波形显示后,能够提高modelsim的仿真速度;
个人实测:优化前 — 2.4us的代码逻辑需要约1S的物理时间; 优化后 — 3.7us的代码逻辑需要约1S的物理时间;
优化效果:modelsim的仿真速率提高了约0.5倍;
后记
上述是我个人的摸索,虽然modelsim的仿真速度有了一定的优化和提高,但是相较于我实际算法仿真需求,还是远远不够的,非常希望相关前辈和大牛能传道解惑,谢谢!
(为了减少仿真时间,我现在只能对图像重建规模和循环次数做减法,相当于从代码源头这边修改,还是有些遗憾吧。
如果能从仿真工具这边能直接解决问题,那就更好了!)