包的通配符导出未能使变量可用
我试图创建一个可以导出其他包的 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
解决方案
代码1 确实会产生错误。由于 P2 没有引用 a 或 b,它们没有被导出,因此在模块中不可用。
请参阅IEEE Std 1800-2023,第26.6节 从包中导出导入的名称。示例代码展示了以下解释:
// p1::x and q are made available from p3. Although p1::y
// is a candidate for import, it is not actually imported
// since it is not referenced. Since p1::y is not imported,
// it is not made available by the export.
在代码2 中,你显式地导出了 a 和 b,从而使它们可用。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。