自制计算机

本专栏的灵感来自一本很有名的书——《编码,隐匿在计算机软件硬件背后的语言》:

这本书从最简单的串、并联电路谈起,逐步讲解逻辑门、加法器、振荡器、存储器的实现原理,最后拼成一副完整的计算机运行画面。还记得那一幅幅插图引人入胜,将计算机神秘面纱一一揭开,令我豁然开朗。

不得不说,相见恨晚!

某一天,笔者突然萌发一个新想法——何不将这经典进一步演绎,让它变得更加有趣!

  • 将静态的插图用动画来演绎,让它变得更将生动!
  • 挑选一些硬件材料,根据书中的理论,自己制造一台最小化的计算机!

动画

动画方面,笔者已选好技术方案,主要采用 ReactSVG 来实现,效果大致如下:

这是一个最简单的例子,通过串联电路来实现 布尔与运算 :两个开关要同时闭合,灯泡才会亮。动画中的开关可通过鼠标点击控制开闭,动手点点看吧!

硬件

硬件方面,思路还没完全确定。初步想法是先买面包板、继电器和一些线缆来制造逻辑门:

然后通过组合逻辑门来实现更复杂的电路,比如加法器。为了保持简单,这时不会使用原始的继电器逻辑门,我会选择一些逻辑门芯片来完成:

引入成熟的集成电路芯片,一方面可以大大降低器件体积,另一方面也可以降低制作难度,同时提高可靠性。我们的目的只是为了在实验中体会计算机的工作原理,没必要事事躬亲。

同理,加法器也只是计算机中的一个最基本元器件,后续也会选用一个成熟的芯片,来替代逻辑门电路。这有点像编程中的函数调用,同样的逻辑实现过一遍就行了,后续需要时直接调用!

笔者并非硬件出身,对这些其实不太熟悉。小伙伴们如果有什么好建议,请不吝赐教!

逻辑门

串、并联电路只是一个引子,并不适合用来制作 逻辑门 ,使用继电器更合适:

这个动画是 与门 电路,由两个串联的继电器来实现。除了与门,我们还会实现:

  • 或门
  • 异或门
  • 与非门
  • 或非门
  • 异或非门
  • 非门

加法器

通过组合若干逻辑门,我们可以实现更复杂的运算电路。例如,计算两个二进制位的和:

通过一个异或门和一个与门,我们实现了一个计算两个二进制位和的电路,称为 一位半加器 。它接受两个二进制位作为输入,输出它们的和,以及进位输出。

进行二进制加法运算时,结果还得加上更低一位的进位,这超出半加器的能力。不过我们可以组合两个半加器,来实现一位全加器。全加器比半加器多一个输入,也就是前一位的进位输入。

随后,我们又可以通过串联 n 个一位全加器,来实现 n 位加法器。编程语言中的加法运算符 + ,便可以由我们的加法器来负责运算,想想都兴奋呢!

最后,我们还会研究负数的表示方法,特别是二的补码。这种表示方法虽然不好理解,却有一个特别突出的好处:它可以让减法转换成加法,并由加法器来执行。

$a - b$ 等价于 $a + (-b)$ ,即先将 b 取负,再加起来算两者之和。

存储器

借助反馈思想,将输出连回输入,我们可以设计一个很神奇的电路:

这个电路由两个 或非门 构成,有两个输入和两个输出,其中两个输出的值永远相反。

  • 当输入端 S1 时,输出端 $Q$ 为 1 ,$\overline{Q}$ 为 0
  • 当输入端 R1 时,输出端 $Q$ 变为 0 ,而 $\overline{Q}$ 变为 1
  • 当输入端同时为 0 时,输出维持不变;
  • 另外,输入端不能同时为 1

这个电路的神奇之处在于:它可以记住当前的状态。因此,我们是不是可以用它来保存数据呢?

未完待续

小菜自制计算机】系列文章首发于公众号【小菜学编程】,敬请关注:

【自制计算机】系列文章首发于公众号【小菜学编程】,敬请关注: