自制计算机

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

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

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

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

动画

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

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

硬件

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

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

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

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

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

逻辑门

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

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

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

加法器

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

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

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

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

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

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

未完待续

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

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