在systemverilog中,驻留在包中的类引用全局范围内定义的另一个类

问题描述 投票:0回答:1

在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;
system-verilog
1个回答
0
投票

首先,SystemVerilog 中没有 globals。对于您编译的每个文件或一组文件的每个编译步骤,都有独立的编译单元范围。您在设计实体(模块/接口/包)之外声明的任何声明都存在于编译单元范围中。无法从另一个编译单元引用一个编译单元中声明的标识符。

其次,

package
只能引用在该包中声明的标识符,或从另一个包导入的标识符(虚拟接口变量有一个例外)

所以我建议你创建一个

package globals
并将
global_cls
放入该包中。然后就可以
import globals::*;

© www.soinside.com 2019 - 2024. All rights reserved.