我们从小到大经历过很多事,小的时候我们连简单的走路都不会,然后随着不断学习和不断长大我们不仅学会了走路还学会了跑步;而我们的上学阶段也是类似的,先是学习1+1这种最简单的加法,还有减法,然后是乘法和除法。而实际上计算机的发展也是类似的,先是做加法减法,然后慢慢地进步,就有了乘法和除法。
这里我先介绍下之后要介绍的几种类型的加法器:Carry Ripple Adder,Carry Look-ahead adder,Carry Select adder 和BK adder,这次只介绍第一种,也是最简单的加法器, 我们的目标是建立32-bit的加法器,尽可能的使它快速一点。
首先是1bit的情况,带进位的加法器:
然后是卡诺图:分别是当前和sum和进位cout:
具体怎么化简请参考数字电路逻辑,这是很简单的逻辑。
carry ripple adder其实就是串行进位加法器,前一位的输出进位是后一级输入进位是它的架构的核心思想,只要满足这点就算是它的架构;另外不同的门单元(与门,或门,非门,与非门,或非门,异或门,同或门等)延迟不同,尽量减少门(gate)的使用,使用延迟短的门才能使加法器尽可能的快;而决定一个加法器速度的是它的最慢的路径,就是整个通道上历时最久的路径,也被称为critical-path。对于32-bit Carry Ripple adder的优化(可进行加减法),主要是从最靠前的两个bit以及最后的overflow(溢出)和中间fulladder(全加器)的优化考虑。加法器中有两个定义,一个是generation,另一个是propagation,定义加法器中间路径信号的生成和传播。这一周先不讲具体架构,感兴趣可以查一下。