module top;
m m1();
m m2();
endmodule
module m;
reg r;
initial begin
$display("%b", r);
end
endmodule
我想要top.m1.r
和top.m2.r
的不同值。我们可以通过使用一个参数,然后在其上添加defparams来实现。但是还有其他方法吗?
答案 0 :(得分:1)
您不能使用`define
来执行此操作,因此不建议使用defparam
。你可以做
module top;
m #(0) m1();
m #(1) m2();
endmodule
module m #(bit P);
reg r = P;
initial begin
$display("%b", r);
end
endmodule
答案 1 :(得分:0)
我认为使用描述为@ dave_59的参数是首选方法。但是,也可以在运行时使用带有分层引用的赋值语句:
module top;
m m1();
m m2();
initial
begin
m1.r = 0;
m2.r = 1;
end
endmodule
module m;
reg r;
initial begin
#0;
$display("%b", r);
end
endmodule
存在争用条件,因为由于initial
语句,初始化和打印语句都在时间0发生。这就是为什么我不得不在打印之前先行#0
延迟。