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