1、paramete和localparam的区别
parameter:用于顶层模块与底层模块之间的参数传递,并行例化的模块也可以使用,相当与全局常量;
localparam:仅限于本module内部使用,并行例化的模块不可调用,相当于局部常量。
注意:模块例化时,无论parameter还是localparam都只能赋值一次,例化之后,其值不再发生改变,所以赋值式子右边不能是变量。
2、parameter参数的重写
(1)例化时修改
module add #(
parameter A = 8'h01,
parameter B = 8'h02
)
(
output [8:0] C;
);
assign C = A + B;
endmodule
// 例化
add #(
.A(8'h08),
.B(8'h08)
)U0(
.C(C)
);
(2)修改后再例化——defparam
defparam的语法结构:defparam path_name = value ;
其中,path_name为模块层次的路径,如:
// defparam重写
defparam U0.A = 8'h16;
defparam U0.B = 8'h16;
add U0();
3、小结
parameter和localparam的使用类似于C语言中的constant,一般用来定义模块中不需要改变的数值,如Rom表的值等。parameter虽然能够在模块之间传递参数,但不能传递变量,需要传递变量时还是得通过input和output端口,使用时需要注意。