第六章:算术逻辑单元

复习

  • 第一章:希望造出一台计算机。
  • 第二章:这台计算机需要供能,输入,输出和处理过程。
  • 第三章:利用电能和布尔代数,造出了一个加法器。
  • 第四章:引入有符号数,介绍原码、反码和补码,使计算机可以表示负数和运算减法。
  • 第五章:介绍乘法与除法,并尝试从原理上优化效率过慢的问题。

正文

组成

  回想一下,现在有了什么:加法,减法,乘法,除法。可以做一些基础的运算了。除此之外,还有一些逻辑操作:与,或,非,异或,移位等等。

  注意,花十秒钟想一下,上面那些东西是怎么来的。如果不能清楚明白地了解其组成和原理,说明还没有学懂,建议回头再看一次。 这里简单提示一下:

  1. 晶体管组成逻辑门(与,或,非,异或等);
  2. 部分逻辑门的计算逻辑与加法一致,所以组成加法器;
  3. 分出一位作为符号,在逻辑上弥补二进制减法的问题,使用 诱骗加法器在形式上做减法,形成减法器;
  4. 用加法器和减法器,组成乘法器和除法器,如果愿意,其中可以有移位器。

  利用上面的模块,一个简单的 ALU(Arithmetic Logic Unit,算术逻辑单元)就产生了。

  对,只有这么简单了。 可以把加法器、减法器、乘法器、除法器、逻辑门和移位器,封在一个更大的模块里面。这,就是 ALU。

  在《第三章:简单逻辑门》里,我们造出了一个简单的 8 位串行加法器:

  因为连线过于复杂,所以我们简化为这样:

  我们将以上面的图作为基础。

功能

  一个典型的 ALU,起码有以下的基础功能:

  • 加法
  • 带进位加法
  • 减法
  • 带借位减法
  • 取相反数
    • 实现:用一个减法器,用 0 减去操作数即可。
  • 增量器
    • 功能:将一个数值 +1。
    • 实现:用一个加法器固定 +1 即可。
  • 减量器
    • 功能:将一个数值 -1。
    • 实现:用一个减法器固定 -1 即可。
  • 不做任何操作

  所有上面的操作,我们可以实现。所以,在计算机的世界中,有了加法器,几乎等于有了一切。

  图上有几点需要注意:

  • Overflow,溢出,表示两个操作数的运算结果已经超出了计算机能表示的上限
  • Zero,零位,计算结果为零则为真
  • Navigate,负位,计算结果为负则为真

  是不是发现没有乘法器和除法器? 对,实际上在简单的 ALU 中,根本就没有专用的乘除法模块,因为造价太高。替代方案是,乘法拆成多次加法,除法拆成多次减法。

  这个事实可以让人感受到: 工科并不都是一板一眼,可以根据现实情况灵活选择。 我们是这台计算机的制造者,完完全全掌握着所有细节——可以根据实际情况,酌情选择最恰当的方案。

优化

  上面那张图的 ALU,简单,但是太笨了。接下来一步一步复用模块,尝试去优化。

  因为减法器实际上里面包含有加法器,所以,这两个模块可以合并,添加额外的逻辑门进行控制即可。

  而减法器里面又包含有增量器,所以也可以合并。

  接下来几张图,就表示了其优化过程。

思考题

  如果我们把所有的功能,都优化到了一个加法器上,会不会产生性能问题?毕竟所有的计算都堆到了它身上。

小结

知识点

  • ALU(Arithmetic Logic Unit,算术逻辑单元)
    • 组成
    • 功能
    • 优化

参考资料

推荐

思考题答案(仅供参考)

  答案是肯定会产生性能问题。如果那唯一的一个加法器出现故障(如晶体管短路、开路、击穿或电平失真),整个 ALU 不说性能问题,功能都会产生问题。

  还是那句话,怎样平衡取决于设计者自己的选择。 就像第一张图,虽然成本高昂,但是其中一个功能模块损坏并不会引起整个 ALU 的瘫痪。

  记住,你是这台计算机的设计者,怎样平衡完完全全取决于你自己的选择。

协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。