在Verilog中用parameter来定义常量,即用parameter定义一个标识符表示一个常量,提高可读性。
module 模块名1
parameter 参数名1 = 数据1; //用关键字 parameter 声明,只能赋值一次。
#(
parameter 参数名 = 默认值; //有多个时
参数名 = 默认值;
)
endmodule
//可以用在源文件,不能用在仿真之中
模块名1 例化名1(
.a(A)
);
//可以用在源文件,不能用在仿真之中
模块名1 例化名1(
.a(A)
);
defparam 例化名1.参数名1 = 数据2;
//或者
//可以用在仿真之中或源文件
模块名1
#(
.参数名1(数据2)
)
例化名1(
.a(A)
);
举例 参数加法器
module adder_carry_para_parameter
#(parameter N = 4) // parameter N = 4 也可以
(
input [N-1:0]a, b,
input [N-1:0]sum,
output cout
);
//常数声明
localparam N1 = N-1;
wire [N:0]sum_ext;
assign sum_ext = {1'b0,a}+{1'b0,b};
assign sum = sum_ext[N1:0];
assign cout = sum_ext[N];
endmodule
//例化
module adder_insta(
input [3:0]a4, b4
input [3:0]sum4,
output c4,
input [7:0]a, b,
input [7:0]sum,
output c8
);
//实例化8位加法器
adder_carry_para_parameter #(.N(8))unit1 //覆盖原本默认值
(.a(a8), .b(b8), .sum(sum8), .cout(c8)); //和端口连接一样有顺序和命名端口连接
//实例化4位加法器
adder_carry_para_parameter unit2 //与默认值一样
(.a(a4), .b(b4), .sum(sum4), .cout(c4));
endmodule
``