微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > system verilog 采用modelsim编译类问题

system verilog 采用modelsim编译类问题

时间:10-02 整理:3721RD 点击:
一共定义了两个类A和B,类A引用了类B,A和B分开放在两个文件中,而且在A的开头写了typedef class B,但是采用modelsim 10.2c时编译报A文件错误,总是说“Forward declaration for type 'B' was not defined.”请问这是怎么回事?把A和B写在一个文件中就好了。刚学SV,求解答,多谢!

没有人解答吗?

没有人解答吗?



   估计是你文件的编译顺序有关系,其实不用typedef class B的,把B文件放到A之前编译就好了。没用过modelsim编译,你检查一下,是不是可以把B放到A之前编译,包括(不限于)在工程里面用鼠标把B文件拖到A前面。

需要写一个文件,将a,b的文件include一下就好了



   编译顺序我调过,还是报错。

   您好,能否说的详细一些?谢谢!



   这倒是一个解决的办法,在class A这个 .sv 文件的前面加上`include "B.sv"

使用typedef class B其实是个解决办法,但是前提是你使用callback的形式来使用B,如果直接调用B中的函数,那是会出问题的
编译文件其实也是一门技巧,需要对软件的编译指令有全面的了解,可以使用这样几种方式:
1. 直接指定编译文件,但是要注意编译顺序;
2. 指定编译文件所在的目录,用库的方式进行编译


同问,确实在A.sv中加入“include “B.sv” ”可以解决这个问题,但机理还有些不清楚,v代码或vhd代码,针对调用的例化的模块提前编译下即可,但是对已sv中的对象而言,就需要放在一起,学习uvm过程中,是将所有的类文件,放在一个pkg.sv中,统一进行编译。如果有c++或者sv清楚地可以详细说下。



    这个可以参考UVM等,他们都是最后定义一个文件,在这个文件中把其他所有的文件都include进来;

System Verilog 标准有如下内容:
The actual data type definition of a forward  typedef declaration shall be resolved within the same local scope or generate block. ...



   采用您的方法目前已经解决。我自己搭了一个简单的平台,在每一个需要include的文件前都加了include,编译的时候又出来一个新的问题,Modelsim总是报ERROR,说我有的类multiply defined。请问您之前遇到过吗?

進來學習學習

先mark一下

小编 啊我和你的问题一模一样啊,说packet 重复定义,请问你解决了吗?留个联系方式交流一下

小编求加qq  649604193

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top