行波进位(Ripple Carry)与超前进位(Loodahead Carry)

本来是想研究CPU硬件设计中的中断控制器,找到了magic1的电路图,在分析ALU部分时发现以下电路:

行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第1张图片

 

查了一下74F382的芯片资料,比较简单,就是进行4位算术/逻辑运算,并输出进位标志C和溢出标志V:

行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第2张图片    行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第3张图片

74F381也是ALU,S0~S2所选择的功能跟74F382一样,但它的输出就复杂了一点,多了P和G信号。

行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第4张图片    行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第5张图片

原来,它是为了构建“超前进位”运算单元:

行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第6张图片

与之相比,使用74F382只能构建“行波进位”:

行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第7张图片

 

那么,为什么要使用381配合182来产生“超前进位”呢?74F182又是什么呢?它叫“Carry Lookahead Generator”

行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第8张图片    行波进位(Ripple Carry)与超前进位(Loodahead Carry)_第9张图片

超前进位有什么好处呢?就是为了减少传输延时。不再需要等到低位的计算结果出来后才知道是否进位,才能计算高位的结果。

具体原理为:计算某一位的进位标志 C为输入(A、B、Cin)的三选二表决结果。即:

由此来表示4个全加器的进位输出为:

最终我们需要得到的是C4,经过换算,C4=G3+P3·G2+P3·P2·G1+P3·P2·P1·G0+P3·P2·P1·P0·C0

具体请参考附录的文献1.

 

再回过头来看magic1的电路。

如果只是需要计算16位的结果,只需要三个74381(U1,U2,U3)加一个74382(U5),再配合74182(U6)即可。而U4(74382)的作用是,为了得到低8位的结果标志C和V。

U6右边的一堆或非门和与非门是为了得到低8位和全16位的零标志Z。

 

 

 

参考文献:

1- 加法器的优化——超前进位加法器(Carry-Lookahead Adder,CLA)

https://www.jianshu.com/p/6ce9cad8b467

 

2-Magic1 Homebrew CPU电路原理图

http://www.homebrewcpu.com/Magic1.pdf

 

你可能感兴趣的:(行波进位(Ripple Carry)与超前进位(Loodahead Carry))