Package通配符导出变量失效,指定导出正常的问题咨询
Verilog Package导出问题:
export P1::*编译失败,显式导出单个标识符正常 我尝试创建一个能导出其他package内容的package时遇到编译错误,export的行为看起来和LRM描述不一致。试了两种写法,结果完全不同:
代码1(编译错误)
//---------(1)-------------- package P1; int a = 1; int b = 4; endpackage : P1 package P2; import P1::*; export P1::*; int c = 2; endpackage : P2 module TRY1( ); import P2 :: *; initial begin $display("top : P1::a = %0d", a); $display("top : P1::b = %0d", b); $display("top : P2::c = %0d", c); end endmodule : TRY1
代码2(无编译错误)
//---------(2)-------------- package P1; int a = 1; int b = 4; endpackage : P1 package P2; import P1::*; export P1::a; export P1::b; int c = 2; endpackage : P2 module TRY1( ); import P2 :: *; initial begin $display("top : P1::a = %0d", a); $display("top : P1::b = %0d", b); $display("top : P2::c = %0d", c); end endmodule : TRY1
问题原因
Verilog LRM对export语句的通配符使用有明确限制:export不支持用::*通配符一次性导出整个package的所有内容,必须显式列出每个要导出的标识符。
虽然import可以用::*批量导入,但export不支持这种写法,必须逐个指定要导出的成员,这就是两种写法结果不同的核心原因。
内容的提问来源于stack exchange,提问作者Keyuri Sorathiya
相关产品推荐
相关产品推荐

