【Verilog】parameter

parameter用来定义常量,不允许在运行时修改它的值,即不能在组合逻辑或者时序逻辑中对其进行赋值。

parameter声明

parameter可以写在模块头部,也可以写在模块内部:

module fifo
#(parameter MSB = 3, LSB = 0, DEPTH = 4)
(port_list);
item;
endmodule
module fifo
(port_list);
parameter MSB = 3, LSB = 0, DEPTH = 4;

但是如果端口列表中用到了parameter,则必须将parameter写在模块头部,否则会报错在声明前使用:

module _mm_complex_multi
#(parameter WIDTH = 512, CELL_WIDTH = 16)
(
    input [WIDTH-1:0] in_a,
    input [WIDTH-1:0] in_b,
    output [WIDTH-1:0] out
)

parameter重写

写在头部和写在内部,均可以在模块实例化时被重写。但是一旦有参数被写在模块头部,则出现在模块内部的参数被视为本地参数,不能被重写。

上层模块重写参数的方式:

F1.MSB = 4;
F1.LSB = 2;
fifo F1;
fifo #(4,2) F1(port_list);    // 只重写前两个参数
fifo #(.LSB(2),.MSB(4)) fifo(port_list);

你可能感兴趣的:(Verilog,verilog)