入vivado坑之联合modelsim仿真

最近跟着调PCIE接口,要用Xilinx高端大气上档次的vivado开发环境,然而新入就是坑啊,泪目。

首先背景是,已有在其他电脑上可编译可仿真的工程,在我电脑2016.2版本vivado上可综合通过,但是联合modelsim仿真卡在compiling一步, 于是放弃2016.2版本,装了其他电脑一样的2014.4版本,结果就是漫无止境的填坑过程…

问题是,联合modelsim进行仿真时,始终会出现错误(vlog-2155) Global declarations are illegal in Verilog 2001 syntax.,根据理解和网上搜索结果,是因为对应的function.vh文件里有function函数,但functiontask不能定义在module之外,而调用文件中\`include "function.vh"module之外,导致出错。若改为vivado自带的仿真器,则会有错误Root Scope Declartion Not Allowed In Verilog 95/2k,应该也是同样的错误。

神奇的地方在于,按照语法标准来说这确实会出错,但在之前的调试人员电脑上居然能够正常通过,于是找寻各种方法想在不修改源文件的情况下能编译通过。其中搜到的有价值的信息中,有提到过单独定义functiontask.vh后缀文件不加入modelsim仿真编译,但如何才能让其不编译这个文件就是个迷了。

经过两天的苦苦尝试,换了modelsim版本,重装了vivado2016.4,最后还是采用的修改源文件的解决方法,把调用的function全都集中在function.vh文件中,再把\`include "function.vh"命令放在module定义里面,而包括了\`define`命令的`.vh文件则保持放在module定义之外。

最终结论,单独定义functiontask的头文件要放在module中调用,而至于为什么之前的电脑上没这么做却通过了,未知…

仿真卡在compiling的问题

最开始提到的仿真卡在Executing compiling,我遇到的情况是同时装了vivado2014和vivado2016,但是之前设置的modelsim库是用vivado2014编译的,当我在用2016版本的时候设置ModelSim Compiled Library path是用的14版本的库,导致在16版本中仿真不能正常运行。

而解决方法当时就是…重新用vivado2016编译个仿真库就行了,真是浪费了我好多时间。
注意modelsim.ini中仿真库的路径(但是在vivado中设置了仿真库路径好像就不用改这个了)。