数字电路基础知识(四) 加法器-半加器、全加器与超前进位加法器

数字电路基础知识(四) 加法器-半加器、全加器与超前进位加法器
半加器+半加法和全加法是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路。

一、半加器

半加器不考虑低位进位来的进位值,只有两个输入,两个输出。由一个与门和异或门构成.
真值表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. verilog 数据流级描述:
//半加器模块
module adder_half(  input		wire	a,
					input		wire	b,
					output	    reg		sum,
					output	    reg		cout);
	always @(*)
	begin
		sum = a ^ b;
		cout = a & b;
	end
endmodule
  1. RTL电路
    在这里插入图片描述
二、全加器

当多位数相加时,半加器可用于最低位求和,并给出进位数。第二位的相加有两个待加数和,还有一个来自前面低位送来的进位数。这三个数相加,得出本位和数(全加和数)和进位数。这种就是“全加"
真值表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者Ci=AiBi+(Ai+Bi)Ci-1![在这里插入图片描述](https://img-blog.csdnimg.cn/20190615163154326.png

这两种表达式的电路图对应如下,功能一样:
在这里插入图片描述

  1. verilog代码实现一(用两个半加器和一个或门实现一个全加器)结构性描述
//full_adder
module adder_full(a,b,cin,,cout,sum);
input a,b,cin;
output cout,sum;

wire w1,w2,w3;
    adder_half u1(.a(a),.b(b),.sum(w1),.cout(w2));
    adder_half u2(.a(cin),.b(w1),.sum(sum),.cout(w3));
assign cout = w2 | w3;
endmodule
  1. verilog代码实现二行为级描述
//full_adder
module adder_full(a,b,cin,,cout,sum);
input a,b,cin;
output cout,sum;

	assign {cout,sum} = a+b+cin;
 
endmodule
  1. 结构性描述的RTL电路
    在这里插入图片描述
    行为级描述的RTL电路
    在这里插入图片描述
  2. 对于多位输入的全加器
    例如八位全加器用verilog实现:
//8bit_full_adder
module adder_full(a,b,cin,,cout,sum);
input [7:0]a,b;
input cin;
output [7:0]sum;
output cout;

	assign {cout,sum} = a+b+cin;
 
endmodule

RTL电路图:
在这里插入图片描述

之前用八位全加器实现了八位串行的全加器,缺点相当明显,即加法器的延时过高,电路的工作频率低。 此类进位输出,像波浪一样,依次从低位到高位传递, 最终产生结果的加法器,也因此得名为行波进位加法器(Ripple-Carry Adder,RCA)。
如下面的四位全加器
在这里插入图片描述
其关键路径如图中红线所示:则其延迟时间为(T+T)*4+T=9T。假设经过一个门电路的延迟时间为T。
对于一个n bit的行波加法器,其延时为(T+T)*n+T=(2n+1)T。

三、超前进位加法器
  1. 超前进位加法器 (Carry-Lookahead Adder,CLA)是高速加法器,每一级进位有附加的组合电路产生。高位的运算不需要地位的等待,因此速度很高。
    考虑每一级的进位:
    在这里插入图片描述
    则对于4 bit的加法器,每个进位如下,可以看出,每个进位都不需要等待地位,直接计算可以得到。由此我们得到了提前计算进位输出的方法, 用这样的方法实现了加法器就被称为超前进位加法器
    在这里插入图片描述
  2. 其组合电路如下:
    在这里插入图片描述
    进位延时只有三个门的延时,加上最后一级全加器的延时,最多四个延时时间。
    在这里插入图片描述
四、行波进位加法器与超前进位加法器比较

在这里插入图片描述
对于较大位数的加法器,如32位的加法器。如果采用行波进位的方式,我们已经分析过需要(32*2+1)= 65级的门延迟, 那如果采用超前进位的方式,理想情况下也只需要四级的门延迟,但可惜的是, 这也只是一个理想。因为要实现32位的完全的超前进位,电路就会变得非常的复杂。 因此通常的实现方法, 是采用多个小规模的超前进位加法器拼接而成一个较大的加法器,例如,用4个8-bit的超前进位加法器连接成32-bit加法器。

参考资料:https://www.jianshu.com/p/6ce9cad8b467

  • 108
    点赞
  • 615
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
要使用Logisim搭建一个8位加法器,需要使用8个全加器全加器是一种电路,可以将两个二进制数相加并输出它们的和。每个全加器有三个输入:两个二进制数位和一个进位位。它们的输出是一个二进制数位和一个进位位。将多个全加器连接在一起,可以实现更大的二进制数的加法。 以下是搭建8位加法器的步骤: 1. 打开Logisim并创建一个新的电路。 2. 从左侧工具栏中选择“基本门”选项卡,并将8个全加器拖到电路中。 3. 将全加器连接起来。将第一个全加器的A输入连接到第一个二进制数的最低位,将第一个全加器的B输入连接到第二个二进制数的最低位。将第一个全加器进位输入连接到电路的电源(VCC)。将第一个全加器的和输出连接到第一个七段数码管的最低位。 4. 将第二个全加器的A输入连接到第一个全加器进位输出,将第二个全加器的B输入连接到第三个二进制数的最低位。将第二个全加器的和输出连接到第二个七段数码管的最低位。 5. 重复步骤4,将所有的全加器连接起来,直到第八个全加器的和输出连接到第八个七段数码管的最高位。 6. 将所有的进位输出连接到下一个全加器进位输入,除了最后一个全加器进位输出不需要连接。 7. 将所有的二进制数输入连接到电路的开关或者输入端口。 8. 将所有的七段数码管连接到电路的输出端口。 9. 保存并模拟电路,测试它是否可以正确地将两个8位二进制数相加。 ```logisim // Logisim代码块 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摆渡沧桑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值