PDS联合Modelsim仿真中的-novopt报错问题 (vsim-12110)

现象描述

本人在使用 MES22GP_v1 开发板,也就是 Pangu 的 FPGA,尝试通过 PDS 调用 Modelsim 进行仿真。库编译正常,但是无法仿真,出现 vsim-12110 报错

1
2
3
4
5
6
7
8
# do {run_behav_simulate.tcl}
# vsim -novopt -L work -L usim -L adc -L ddrc -L ddrphy -L hsst_e2 -L iolhr_dft -L ipal_e1 -L pciegen2 tb_led_test usim.GTP_GRS
# Start time: 11:14:14 on Feb 27,2024
# ** Error (suppressible): (vsim-12110) All optimizations are disabled because the -novopt option is in effect. This will cause your simulation to run very slowly. If you are using this switch to preserve visibility for Debug or PLI features, please see the User's Manual section on Preserving Object Visibility with vopt. -novopt option is now deprecated and will be removed in future releases.
# Error loading design
# Error: Error loading design
# Pausing macro execution
# MACRO ./run_behav_simulate.tcl PAUSED at line 6

原因分析

根据报错,不难发现是工程目录下的 .\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 SettingsTiming Simulation Settings 其中的 ModelSim Script,删除其中的 -novopt

其他相关文章

Modelsim编译、仿真报告关于novopt的错误(vlog-12110)_-novopt-CSDN博客