在systemverilog中,驻留在包中的类是否引用全局范围内定义的另一个类?
class global_cls;
int gv =4;
endclass
package my_pkg;
class pkg_cls;
global_cls g; //refer to the global class
endclass
endpackage
module tb();
my_pkg::pkg_cls a;
endmodule
我用vcs编译了上面的代码片段并得到了错误消息:
Error-[SE] Syntax error
Following verilog source has syntax error:
token 'global_cls’ should be a valid type. Please declare it virtual if tis is an Interface.
"tb.sv", 18: taoke is ';'
global_cls g;
首先,SystemVerilog 中没有 globals。对于您编译的每个文件或一组文件的每个编译步骤,都有独立的编译单元范围。您在设计实体(模块/接口/包)之外声明的任何声明都存在于编译单元范围中。无法从另一个编译单元引用一个编译单元中声明的标识符。
其次,
package
只能引用在该包中声明的标识符,或从另一个包导入的标识符(虚拟接口变量有一个例外)
所以我建议你创建一个
package globals
并将 global_cls
放入该包中。然后就可以import globals::*;