最近跟着调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
函数,但function
和task
不能定义在module
之外,而调用文件中\`include "function.vh"
在module
之外,导致出错。若改为vivado自带的仿真器,则会有错误Root Scope Declartion Not Allowed In Verilog 95/2k
,应该也是同样的错误。
神奇的地方在于,按照语法标准来说这确实会出错,但在之前的调试人员电脑上居然能够正常通过,于是找寻各种方法想在不修改源文件的情况下能编译通过。其中搜到的有价值的信息中,有提到过单独定义function
和task
的.vh
后缀文件不加入modelsim仿真编译,但如何才能让其不编译这个文件就是个迷了。
经过两天的苦苦尝试,换了modelsim版本,重装了vivado2016.4,最后还是采用的修改源文件的解决方法,把调用的function
全都集中在function.vh
文件中,再把\`include "function.vh"
命令放在module
定义里面,而包括了\`define`命令的`.vh
文件则保持放在module
定义之外。
最终结论,单独定义function
和task
的头文件要放在module
中调用,而至于为什么之前的电脑上没这么做却通过了,未知…
仿真卡在compiling的问题
最开始提到的仿真卡在Executing compiling,我遇到的情况是同时装了vivado2014和vivado2016,但是之前设置的modelsim库是用vivado2014编译的,当我在用2016版本的时候设置ModelSim Compiled Library path是用的14版本的库,导致在16版本中仿真不能正常运行。
而解决方法当时就是…重新用vivado2016编译个仿真库就行了,真是浪费了我好多时间。
注意modelsim.ini中仿真库的路径(但是在vivado中设置了仿真库路径好像就不用改这个了)。