PDS联合Modelsim仿真中的-novopt报错问题 (vsim-12110)
现象描述
本人在使用 MES22GP_v1 开发板,也就是 Pangu 的 FPGA,尝试通过 PDS 调用 Modelsim 进行仿真。库编译正常,但是无法仿真,出现 vsim-12110 报错
1 | # do {run_behav_simulate.tcl} |
原因分析
根据报错,不难发现是工程目录下的 .\2_Demo\01_led_test\sim\behav\run_behav_simulate.tcl
文件中出现了 -novopt
选项所导致的
查阅资料可发现,该问题是由于 Modelsim 版本更新导致的。据说在 10.7 版本之前,Modelsim 支持 -novopt
选项,该选项可关闭 Modelsim 对于仿真文件的优化,防止错误的优化,导致端口丢失等问题。但从 10.7 版本开始,Modelsim 就不再支持该选项,仿真中一旦出现该选项将会产生报错,也就是 vsim-12110
。新版本的 Modelsim 使用 -voptargs="+acc"
选项代替 -novopt
选项
解决方案
虽然看上去只需要把 .\2_Demo\01_led_test\sim\behav\run_behav_simulate.tcl
文件中的 -novopt
选项删除或者改为 -novopt
选项即可,但实际上每次从 PDS 启动仿真时都会重新生成这个文件,所以改了也白改
而 PDS 内我并未找到相关设置,只能作罢
有些地方说,可以把 Modelsim 安装目录下的 Modelsim.ini
中的 VoptFlow=1
改为 VoptFlow=0
,亲测无效
方案一
直接无脑卸载 Modelsim 后安装低版本的 Modelsim
方案二
在 PDS 中,从 TB 文件上右键启动 Modelsim 仿真,Modelsim 仿真会报错。先不管报错,在 Modelsim 的 Library
选项卡内找到 work
库
库的名称是根据 .\2_Demo\01_led_test\sim\behav\run_behav_compile.tcl
文件内 vlib work
语句确定的
展开 work
库,可发现 TB 文件的顶层模块,右键,选择 Simulate with full Optimization
,待结束后切换回 Library
界面,再次在 TB 文件的顶层模块上右键,选择 Simulate
待仿真结束后,Object
窗口内就会出现各个信号,选中需要的信号,然后右键,选择 Add Wave
,添加需要的信号到 Wave
窗口
但此时 Wave
窗口内的信号并没有数据,显示 No-Data
接着在 Transcript
窗口内输入 run <run_sim_time>
,比如仿真 50ms,为 run 50ms
,待仿真结束后,Wave
窗口内就会出现信号的波形,这一步也可以由菜单栏或者工具栏的 Simulate->Run All
完成
这个步骤还是比较复杂,应该可以写成一个 TCL 文件自动化处理,不过这个就得留待以后研究了
方案三
手动修改 run_behav_simulate.tcl
文件,不从 PDS 启动仿真,而是手动从 2_Demo\01_led_test\sim\behav
启动仿真
首先从 PDS 启动一次仿真,会报错终止仿真,直接关闭即可。此处只是利用 PDS 创建 TCL 与批处理文件
然后手动修改 run_behav_simulate.tcl
文件,将其中 -novopt
的参数替换为 -voptargs="+acc"
最后双击 run_behav.bat
启动仿真即可
Quartus 中的解决方案
对于 Quartus,可以在 Simulation Waveform Editor
中的 Simulation -> Simulation Settings
,选择对应语言 (S or SV
),编辑 Functional Simulation Settings
和 Timing Simulation Settings
其中的 ModelSim Script
,删除其中的 -novopt