我是verilog的新手,我得到了一个问题。
我可以在全局范围内初始化参数并重新初始化模块范围。
parameter GLOB_FOO = 5;
module mod2 (in1,clk,out1);
parameter GLOB_FOO = 7;
input in1,clk;
output out1;
assign out1 = in1;
endmodule
在这段代码中,我在全局范围和模块范围内初始化了参数GLOB_FOO
twise。
我也查看了语言参考手册。但由于有很多细节,因此无法找到答案。
这种参数重新初始化在verilog中是否有效?
答案 0 :(得分:2)
您已在模块GLOB_FOO
内重新声明 mod2
,而不是重新初始化它。这意味着您有两个参数,一个在编译单元范围内,值为5,另一个在mod2
中,值为7. mod2
内的声明隐藏了外部编译单元的声明。 $unit::
可用于访问外部声明。
parameter GLOB_FOO = 5;
module mod2 (input in1,clk, output out1);
parameter GLOB_FOO = 7;
initial begin
$display(GLOB_FOO); // displays 7
$display($unit::GLOB_FOO); // displays 5
end
endmodule
您可以在实例化时覆盖模块内声明的参数值。
parameter GLOB_FOO = 5;
module mod2 (input in1,clk, output out1);
parameter GLOB_FOO = 7;
initial begin
$display("%m %d %d", GLOB_FOO, $unit::GLOB_FOO);
endmodule
module top;
bit A,B, C, CLK;
mod2 #(3) inst1 (A,CLK,B);
mod2 #(.GLOB_FOO(4)) inst2 (A,CLK,C);
endmodule
显示
#top.inst1 3 5
#top.inst2 4 5