计算机全加器简单实现

概述

用了这么久计算机, 都知道计算机有一个核心部件叫 CPU, 而 CPU中有一个小部件叫做全加器. 它是用来做什么的呢? 看名字就知道了, 做加法运算用的. 那么如何实现一个全加器呢?

你以为这又是一篇计算机内部原理的文章? 不, 放开那个女孩, 和我一起走进中学物理的课堂.

问题

先把问题抛出来, 我们的全加器大概就长这样.

image-20200519201933365

输入端放进来两个数字, 然后输出端返回两个数字的和.

抛开全加器不说, 首要问题是: 用什么来标识输入和输出的数字呢?

输入输出

当然了, 输出输出端都是导线, 要通过电流来表示. 那就使用电的特征咯.

方案一

简单粗暴, 使用电压. 数字1表示为1V, 数字10就是10V.

但是, 这个时候如果来了一个数字是10万呢? 整个10万 V 的电压, 别闹, 那还怎么抱在手里愉快的玩耍, 难道你不想玩手游了?

方案二

既然电压太高不可取. 人体的安全电压是36V, 也就是只要电压不高于36V 就可以了. 我们可以用一根导线来表示十进制的一位, 这样就可以将电压控制在0-9V 之间了. 嗯, 安全.

但是, 电压是不稳定的. 但是可以规定 8.6-9.5V=9. 嗯, 这个方案确实可行, 至少咱没有看出什么问题来. (据说现在已经有十进制的了??) 但是别着急, 看下一个方案.

方案三

想一下, 除了电压, 电还有什么特征呢? 电流? 功率? 开闭? 就是开闭. 一个电路要么连通, 要么断开, 简单明了没有歧义.

用电路的开闭如何表示数呢? 表示不了十进制, 还表示不了二进制么..

好, 就是它了, 实现简单方便.

输入输出的问题解决了, 剩下的就是全加器的构造了, 二进制的运算就不说了. 现在, 全加器应该长这样:

image-20200519204133623

为什么是三个输入数字呢? c是进位. 那为什么是两个输出呢? y 是进位.

电路的逻辑运算

在开始全加器之前, 先来复习一下高中的物理知识.

还记得这个东西么?

image-20200519204953181

画的丑了一些, 凑合看. 他可以将电场转换为磁场. 好, 下面的实现都是基于它的. 电磁感应. 继电器就是基于它实现的.

逻辑电路

看下面电路:

image-20200519210128849

这是一个简单的并联电路, 实现了逻辑或, 只要有一个电路接通, 整体就是通路. 当然了, 串联电路就是逻辑与了. 那逻辑非如何处理呢? 这就要用到上面提到的继电器了.

逻辑非

image-20200519210646531

图中的 J 表示继电器.

右侧电路的开关正常情况处于连通状态, 当左侧通电后, 会将右侧开关吸附起来, 令其断开. 这就实现了逻辑非. 当然, 的实现也可以通过继电器来传递.

逻辑与

image-20200519211705586

这就是一个通过继电器实现的与门.

当然了, 或门也是一样的, 只是将右侧的串联电路改成并联电路就成了.

逻辑异或

有了与或非, 把他们三拼一拼, 异或就有了.

A xor B = (!A && B) || (A && !B)

来来来, 看图了.

image-20200519212842567

这就是一个异或了. 有没有发现什么? 可以将电路参与到逻辑运算中.

好啦, 足够了. 开始着手实现全加器.

全加器

到这, 想必各位看官也知道为什么在全加器之前要先说逻辑电路了吧. 没错, 就是要把01的加法运算, 转换成逻辑运算.

列一张真值表:

image-20200519213341345

真值表在此, 请运用你们数值计算的知识, 把逻辑表达式推出来吧. 请原谅我, 下面表达式是我嫖来的, 直接把化简后的逻辑表达式拿来了.

x = a xor b xor c

y = c && (a xor b) || (a && b)

算一算一个全加器一共用到了多少继电器? 其中: 与(2个), 或(2个), 亦或(8个).

x 需要2个亦或, 共16个继电器. y 需要2个与,1个亦或,1个或, 共14个继电器. 整个全加器共需30个继电器. 又因为 x 和 y 的计算在同一个全加器中, a xor b的操作, xy 可以公用同一个, 所以减少一个亦或, 共22个继电器. 据说还能少, 嗯, 咱也不知道.

以上, 一个超级简陋的全加器横空出世. 将上面的逻辑表达式放到电路里, 就能返回输入结果相加后的结果.


既然有全加器, 那是不是也有半加器? 嗯, 有. 半加器就是将两个位相加, 产生进位, 不考虑上一个来的进位. 简单说, 全加器有3个运算数, 半加器只有两个.


有了全加器, 是不是还得有全减器? 偷偷告诉你, 减法运算就是补码的加法运算.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章