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

目录

背景

NoVopt错误问题

1.Vivado与Modelsim的版本适配问题

2.Modelsim 2020.4编译源代码文件,报告“-novopt”相关错误;

3.Modelsim 2020.4仿真之前成熟的modelsim工程,报告“-novopt”相关错误,或者仿真开始后“sim”界面无功能模块;

Xilinx原语调用问题

1.添加glbl.v文件

2.添加原语库文件

3.仿真文件选择

结语


背景

做FPGA项目开发,编写完成的代码或新搭建的工程一般都会先放到Modelsim中仿真,测试功能是否满足要求。之前因为FPGA开发软件版本的原因,仿真时用到的Modelsim版本也一直是10.6e。在对Modelsim破解时,只需要将modelsim.ini中的VoptFlow参数从1改为0,后续就可以正常使用。

最近有项目用到Xilinx的芯片,开发软件也统一到了Vivado 2021.2,恰好又有一些对Xilinx官方ip的仿真需求。因为头几年也做过X家芯片和A家芯片,用Vivado或Quartus自带的仿真程序做仿真测试效率过于低下。就想着把Xilinx官方ip仿真库编译后导入到Modelsim,再在Modelsim中建立仿真工程进行代码测试。

接着,问题出现了!!!

NoVopt错误问题

1.Vivado与Modelsim的版本适配问题

首先把X家的ip仿真库导出到Modelsim,详细步骤可参考C站大佬的文章:

Modelsim独立仿真带有vivado IP核的文件-CSDN博客

在Vivado中选择好仿真软件类型、仿真库导出目录及执行文件目录后,点击开始编译,报告Modelsim版本与Vivado版本不适配。

为了保证Vivado软件的版本统一,只有取消重新找与Vivado 2021.2适配的Modelsim版本,安装上后再导出仿真文件。

在Xilinx官网找到文档UG973有关于各个Vivado版本对应的Modelsim版本说明。

所以,下个Modelsim 2020.4吧!!!

https://zhuanlan.zhihu.com/p/646172508

上述链接有大佬关于Modelsim 2020.4安装及破解的一切流程。

注:如果平台之前有安装其他版本的Modelsim,切记先卸载其他版本的Modelsim,并清除卸载残留。

安装破解完成后,重新导出仿真文件。文件导出完毕后Vivado会生成一个仿真报告,可以看一看。

2.Modelsim 2020.4编译源代码文件,报告“-novopt”相关错误;

软件安装破解完成了,自然需要试一试。

随便找之前的一个已经经过验证的Modelsim项目打开,先试一试源代码文件编译。

报错了!?研究研究咋回事。

网上有很多关于这个问题的描述,个人觉得C站大佬的这篇文章讲得比较详细:

Modelsim编译Vivado仿真库报错(vlog-12110)_novopt-CSDN博客

个人理解根本原因是Modelsim 10.7后不再支持novopt(即“关闭优化”),后续所有版本在编译、仿真时都会存在信号优化。

在10.7之前的版本中,我们破解时将VoptFlow这个参数从1改为了0,即关闭了Modelsim的信号优化功能,仿真时源代码中所有信号和参数都可以添加在波形图中显示,不管该信号和参数是否参与源代码的功能实现。

但在10.7后面的版本中,不管是源代码文件的编译还是工程的仿真都需要经过优化这个过程。如果像之前那般通过声明novopt来编译或仿真工程,modelsim软件会自动报错!!!

那么我的疑问来了?你M家不支持就不支持了呗,自己软件内部迭代搞定不就行了?在这儿给我报告一个错误是个什么鬼?难道我哪步操作还在继续声明novopt吗?检查一下。

①首先,确认之前版本破解Modelsim时都需要修改的Modelsim.ini文件里面的VoptFlow参数。

没问题。

②其次,确认软件的编译配置。右键选中一个源代码文件,在properties中找到verilog&sysetem verilog页面。

嗯,在这儿,把它勾选上,重新编译看看。

OK,成了!!!

但一个工程那么多源代码文件,难道后面每一个源代码文件都需要这样手动勾选上?这个版本的软件既然不再支持novopt,那么不应该在工程层面就自动把这个选项勾选上?或者说在工程层面,是不是有一个选项可以一步搞定?

咦?等等!!!工程层面!!!

“随便找之前的一个已经经过验证的Modelsim项目打开”!!!

“难道我哪步操作还在继续声明novopt吗”!!!

这个工程是我用10.6e版本生成的,10.6e的版本破解时是修改了VoptFlow参数的,即这个工程应该是基于VoptFlow=0建立的,那么自然就与新安装的2020.4不适配。那如果在2020.4上建立一个全新的工程,将代码移植到新工程里面来是不是可以直接编译成功?

果然,而且编译配置里面的”use vopt flow“也是勾选上的。

所以,只要保证modelsim.ini文件里面的VoptFlow=1,且软件工程是在2020.4版本的Modelsim上建立的,源代码文件的编译一般不会报错。

可能有的同仁会发现自己Modelsim安装目录下的modelsim.ini文件明明已经确认过没问题了,但为什么“use vopt flow”这个选项还是未默认勾选,编译时还是通过“-novopt”编译而不是“-vopt”。如果你的电脑之前有安装过10.7版本之前的Modelsim,建议查看一下之前版本的卸载是否存在文件残留,特别是modelsim.ini文件,可能存在调用之前版本的modelsim.ini文件的情况。

ps:那么有没有一种一步到位的方法可以让之前版本的工程在新版本的Modelsim上也能顺利编译呢?有的。

a.找到工程目录下的.mpf文件,用记事本打开;

b.找到voptflow参数,没错,将它修改为1;

c.保存.mpf文件,重新用新版本Modelsim打开工程;

d.全编译源代码文件。

如果有的同仁平时都是通过cmd跑Modelsim,而不是GUI,那么这个问题对他来说是很直观的,因为编译指令就不同。

3.Modelsim 2020.4仿真之前成熟的modelsim工程,报告“-novopt”相关错误,或者仿真开始后“sim”界面无功能模块;

源代码文件编译完成后,自然开始工程的仿真。

10.7版本之前的Modelsim,“start simulation”界面中的“optimization”选项默认是未勾选的,选中工程的testbench文件后,就可以直接开始工程仿真。

但在10.7之后的版本中,如果该选项未勾选,便会报告“-novopt”错误。

但如果你的工程仿真是在10.7之后的版本上建立的,该选项也是默认勾选的,无需特别关注。

那么我们把该选项勾选上,开始工程仿真。

发现“sim”界面没有工程模块,“objects”界面也没有信号、参数。

还是“optimization”的问题,退回到仿真之前。

“simulate”目录→“design optimization”选项→“visibility”页面,将“design object visibility”参数从默认的第一个选项“no design object visibility”切换到第二个选项“full debug mode”。

也可以通过“simulate”目录→“start simulation”选项→“design”页面→“optimization options”选项进入“visibility”页面。

我们切换到“full debug mode”,重新开始仿真。

OK,问题解决。

同样,上述所有操作过程都是通过GUI实现,网上很多大佬解释这个问题时会站在cmd的角度,因为cmd的角度更加直观,但却会让对cmd不够熟悉的人有一些懵,在这里简单说明一下。

“no design object visibility”选项下的指令:

“full debug mode”选项下的指令:

Xilinx原语调用问题

单独使用Modelsim进行verilog工程仿真,源代码里面调用有X家的原语,直接选中testbench开始仿真,报告找不到调用的原语。

这是因为当前的verilog工程库里面没有所调用的原语的声明。

在前文中,我们已经将X家的ip仿真库导入到Modelsim,这里我们需要把相关的原语文件加入到我们的verilog工程。

1.添加glbl.v文件

在Vivado的安装目录下,......\Xilinx\Vivado\2021.2\data\verilog\src,找到glbl.v文件,将它copy到当前的verilog仿真工程目录下,然后将verilog仿真工程目录下的glbl.v文件添加到仿真工程。当然,也可以直接将Vivado安装目录下的glbl.v文件添加到仿真工程。

2.添加原语库文件

打开verilog仿真工程,依次点击“simulate”目录→“design optimization”选项→“libraries”页面,在“search libraries”栏添加Vivado原语仿真库,地址为之前导出的Vivado IP仿真库存储目录下的"unisims_ver"。如果你的源代码是VHDL,那么则选择目录下的“unisim”。

这里的vivado_lib是我的Vivado IP仿真文件的存储地址。

ps:如果verilog仿真工程里面调用不是原语,而是其他的ip,则需要将ip对应的仿真库加入到工程中。同样,如果工程里调用了多个ip或原语,且这些ip和原语的仿真库不为同一个,在这里则需要将这些ip和原语对应的仿真库都添加到工程中。

3.仿真文件选择

依次点击“simulate”目录→“start simulation”选项。在不调用原语或ip的仿真中,我们只需要选择work目录下的testbench文件(激励文件),就可以直接开始工程仿真。但如果调用了原语或ip,则需要同时选择work目录下的testbench文件和步骤1中添加的glbl.v文件,才能顺利开始仿真。

选中的两个文件会呈现在“design unit”栏。

如果只选择了testbench文件。

那么仿真时则会报告glbl相关错误。

结语

至此,Modelsim 2020.4编译、仿真时报告novopt错误的问题已解决。后续可能会继续更新一些Vivado和Modelsim联合仿真的事项。

当然,上述所有内容仅代表个人理解,如有错误恳请指正。

  • 28
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值