关于Carry-lookahead Adder(CLA) 超前进位加法器:
首先,不超前是什么,不超前就是按顺序,从低位到高位的加。高位要等低位先做,低位做完把结果给高位,高位再接着做。这就是由全加器(Full adder)组成的ripple-carry adder。那么Sequential的缺点是什么,就是要等,等就有delay。比如下图的全加器,从右到左是一个低位到高位,A1和B1虽然已经准备好了,但是要计算的话还需要等A0和B0把C1算出来。
No. | A | B | Ci | S | Ci+1 |
---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 1 | 1 | 0 |
3 | 0 | 1 | 0 | 1 | 0 |
4 | 0 | 1 | 1 | 0 | 1 |
5 | 1 | 0 | 0 | 1 | 0 |
6 | 1 | 0 | 1 | 0 | 1 |
7 | 1 | 1 | 0 | 0 | 1 |
8 | 1 | 1 | 1 | 1 | 1 |
那怎么改善呢。大佬们就把加法器的真指标拿出来研究。我们可以发现,第1行和第2行,当A、B都是0的时候,Ci+1 一定是0,这种情况就叫进位取消 Delete 。第二种情况,第7、8行,当A和B都为1的时候,Ci+1一定是1, 这个叫进位产生Generate 。剩下3-6行,看Ci+1一直都和Ci保持一致。推荐这个b站视频
这个地方笨想也行。什么时候要进位(C)呢,一种情况就是A和B都是1的时候,还有一种就是A和B至少有一个是1,然后carry还是1。
因为每一位的Ai和Bi都是已知的,所以我们希望能用A和B来表示C和S。所以就有了
然后带入到上面的表达式里
然后如果C0知道了,后面的全部Ci和Si通过套娃就都可以得到。