设计实例02-加法器设计

区别

半加器:不接受低位进位信号
全加器:全加器接受来自低位的进位信号并参与运算

半加器

两个加数,一个和输出位,一个进位输出,真值表如下:
在这里插入图片描述
由真值表得知:sum = in1 ^ in2; cout = in1 & in2;

采用行为描述的N位半加器:

module half_add #(
  parameter N = 1
)
(
  input [N-1:0] in1, 
  input [N-1:0] in2,
  output reg [N-1:0] sum, 
  output reg [N-1:0] cout
);
  always @(in1 or in2) begin
    sum = in1 ^ in2;
    cout = in1 & in2;
    //或者 {sum, cout}= in1 + in2;
  end
endmodule

采用数据流描述的N位半加器:

module half_add #(
  parameter N = 1
)
(
  input [N-1:0] in1, 
  input [N-1:0] in2,
  output [N-1:0] sum, 
  output cout
);
  assign {sum, cout}= in1 + in2;
endmodule

全加器

两个加数,一个进位加数,一个和输出位,一个进位输出,真值表如下:
在这里插入图片描述
由真值表得知:sum = (a ^ b) ^ cin;cout = ((a & b) | (b & cin) ) | (a & cin);

采用行为描述的N位全加器:

module full_add #(
  parameter N = 1
)
(
  input [N-1:0] in1, 
  input [N-1:0] in2,
  input cin;
  output reg [N-1:0] sum, 
  output reg cout
); 
  always @(in1 or in2 or cin) begin
    sum = (in1 ^ in2) ^ cin;
    cout = ((in1 & in2) | (in2 & cin)) | (in1 & cin); 
    //或者 {cout, sum} = in1 + in2 + sin;
  end
endmodule

采用数据流描述的N位全加器:

module full_add #(
  parameter N = 1
)
(
  input [N-1:0] in1, 
  input [N-1:0] in2,
  input cin;
  output [N-1:0] sum, 
  output cout
); 
  assign {cout, sum} = in1 + in2 + sin; 
endmodule

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值