可重用设计--使用符号常量和parameter

可重用设计--使用符号常量和parameter


好的设计习惯会在HDL代码中避免使用“魔鬼数字”,而是尽量采用符号常量。Verilog HDL中,使用关键字localparam声明符号常量
4位全加器的Verilog HDL描述

module adder_carry_hard_lit
(
input wire [3:0] a, b,
output wire [3:0] sum,
output wire cout //进位输出
);
// signal declaration
wire [4:0] sum_ext;
//body
assign sum_ext = {1'b0, a} + {1'b0, b};
assign sum = sum_ext[3:0];
assign cout= sum_ext[4];
endmodule


参数化的全加器描述


module adder_carry_local_par
(
input wire [3:0] a, b,
output wire [3:0] sum,
output wire cout // carry-out


);
// constant declaration
localparam N = 4, //定义总线位宽为N
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

Verilog HDL提供了一种叫做parameter的机制,可以在模块实例时传递信息给模块。这种机制可以提高模块的通用性和可重用性。通过parameter模块内部参数值可以被修改,大大简化设计过程。通过使用参数,设计者可以设计出通用性更高的模块,提高设计的可重用性。


Verilog 2001,参数声明语法如下
module module_name
#(
parameter parameter_name1 = parameter_value1,//参数声明使用关键字parameter,
… //多个参数声明使用逗号(,)分隔
parameter_namen = parameter_valuen;
)
(
//端口声明
);


参数化的全加器电路
module adder_carry_para
#(parameter N=4)
(
input wire [N-1:0] a, b,
output wire [N-1:0] sum,
output wire cout // carry-out
);
// constant declaration
localparam N1 = N-1;
// signal declaration
wire [N:0] sum_ext;
//body
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 wire [3:0] a4, b4,
output wire [3:0] sum4,
output wire c4,
input wire [7:0] a8, b8,
output wire [7:0] sum8,
output wire c8
);
//实例一个8位宽的加法器
adder_carry_para #(.N(8)) unit1
(.a(a8), .b(b8), .sum(sum8), .cout(c8));
//实例一个4位宽的加法器
adder_carry_para unit2
(.a(a4), .b(b4), .sum(sum4), .cout(c4));
endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值