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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

最终我们需要得到的是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

 

相关文章:

  • 2021-10-16
  • 2022-12-23
  • 2021-05-31
  • 2021-09-23
  • 2021-07-02
  • 2021-12-10
  • 2021-07-05
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2022-02-16
  • 2021-11-11
  • 2022-01-02
相关资源
相似解决方案