本来是想研究CPU硬件设计中的中断控制器,找到了magic1的电路图,在分析ALU部分时发现以下电路:
查了一下74F382的芯片资料,比较简单,就是进行4位算术/逻辑运算,并输出进位标志C和溢出标志V:
74F381也是ALU,S0~S2所选择的功能跟74F382一样,但它的输出就复杂了一点,多了P和G信号。
原来,它是为了构建“超前进位”运算单元:
与之相比,使用74F382只能构建“行波进位”:
那么,为什么要使用381配合182来产生“超前进位”呢?74F182又是什么呢?它叫“Carry Lookahead Generator”
超前进位有什么好处呢?就是为了减少传输延时。不再需要等到低位的计算结果出来后才知道是否进位,才能计算高位的结果。
具体原理为:计算某一位的进位标志 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电路原理图