前言
无论是小数还是浮点数的加减乘除,最后都要转换为加法运算,也可以减少逻辑电路的实现,从而可以减少成本,这显得加法器显得格外重要。
全加器大家都会设计了,就是一位加法加上进位的一层抽象,
如上图所示为一位加法器,能运算1111+1101的倒数第2位1+0在加上倒数第1位1+1产生的进位1得0进1。我们将一位加法器抽象并拼接,就变成了多位加法器。
但是会有一个问题,根据式子我们也能看出来C2的结果依赖于C1的数据,而C3的结果又依赖于C2的结果,只有当前一位的一位加法器生成结果才能使得后一位的一位加法器生成生成正确结果。这使得结果依赖于进位的生成速度,从而造成延迟。我们称这种为串行进位的加法器。
如何优化?
优化
Ci=AiBi+(Ai⊕Bi)Ci-1,将Ci-1展开
Ci=AiBi+(Ai⊕Bi)(Ai-1Bi-1+(Ai-1⊕Bi-1)Ci-2),将Ci-2展开
ci=AiBi+(Ai⊕Bi)(Ai-1Bi-1+(Ai-1⊕Bi-1)(Ai-2Bi-2+(Ai-2⊕Bi-2)Ci-3))
......
最终展开到C0
最终式子里只剩下A0~Ai,B0~Bi,C0的因子,这些都是我们一开始就有的信息。
我们设Gi=AiBi,Pi=Ai⊕Bi
C1=G1+P1C0
C2=G2+P2C1=G2+P2G1+P2P1C0
C3=G3+P3C2=G3+P3G2+P3P2G1+P3P2P1C0
C4=G4+P4C3=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0
...
我们发现P1,G1的结果用于C2、C3、C4......的生成,P2,G2的结果依赖于C3、C4......的生成,我们可以将P1,G1的结果送到C2、C3、C4......的运算中,P2,G2的结果送到C3、C4......的运算中。
这样我们就可以直接得到Ci的值,但是有优点就会有缺点,当Ci的i值越大,式子变得越复杂,意味着电路变得越复杂。
我们选择4位之间形成一组,组内并行,组间串行,将4位加法器进行一组抽象
分组间还是会产生我们刚才提出的问题,那我们就再来一层嵌套。
我们设M1=G4+P4G3+P4P3G2+P4P3P2G1;N1=P4P3P2P1;
C4=M1+N1C0
C8=M2+N2C1=M2+N2M1+N2N1C0
C12=M3+N3C2=M3+N3M2+N3N2M1+N3N2M1C0
C16=M4+N4C3=M4+N4M3+N4N3M2+N4N3N2M1+N4N3N2M1C0
我们优化一下刚才的16位加法器电路
C4依赖于M1,N1,C0的值,C8依赖于M1,N1,M2,G2,C0的值......我们就可以快速得到结果。
74181芯片除了产生结果F4、F3、F2、F1外还产生G和p,也就是M和N,我们组成16位加法器。
.
![上传中...]()
总结
虽然时间减少了,但是增加了电路的复杂性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。