13 | 加法器:如何像搭乐高一样搭电路(上)?

如何通过电路,在硬件层面设计最基本单元:门电路,做简单的 “与(AND)”“或(OR)”“NOT(非)”和“异或(XOR)”,下面这些门电路标识组合起后续的电路

计算机硬件端最基本“积木”,包含十亿级别晶体管CPU,都是由这样一个个的门电路组合成的。

一、异或门和半加器

基础门电路,输入、出都是两个单独的 bit。对 2 个 8 位(bit)数,与、或、非这样的简单逻辑运算,连续摆放 8 个开关代表一个 8 位数)。两组开关,从左到右,上下单个用“与门”或者“或门”连起,两个 8 位数的 AND 或者 OR 运算

整数加法电路稍微复杂,8 位无符号(不需用补码表示负数、“0”或“1”都是正数)整数的加法

8 位数整数用 8 个 bit,2 个 8 位整数加法,就是 2 排 8 个开关。结果也是一个 8 位的整数,什么样的门电路,能够连接起加数和被加数,得到最后期望的和。

加法器:把这三排开关电路连起来

列竖式计算。从左到右,一位位逢 2 进 1计算。输入4 种组合,00、01、10、11就是我在上一讲留给你的思考题里面的“异或门(XOR)”。

讲与、或、非门,很容易就能和程序里的“AND( & )”“ OR( | )”和“ NOT( ! )”对应。为什么需要“异或(XOR)”,逻辑运算里面没有,作为一个基本电路。异或门就是最简单的整数加法,所需要使用的基本门电路

有且仅有输入两位都是 11 时(进位才会是 1),还需向更左侧一位进位。对应与门。

通过异或门计算出个位,一个与门计算出是否进位,通过电路算出一个一位数的加法两个门电路打包,就叫作半加器(Half Adder)。

半加器的电路演示

二、全加器

半加器解决个位加法,放到二位上就不够用。竖式是二进制加法,从右往左数,第二列(是二位)不是十位。往左,四位、八位。

二位还需加上进位信号(来自个位),一共三个数(加数和被加数)相加。目前组合而成半加器,输入都只能两个 bit,就是两个开关。怎么办?

解决方案:两个半加器 + 或门 = 全加器输出:

(1)第一个半加器,我们用和个位的加法一样的方式,得到是否进位 X加后结果 Y

(2)结果 Y,和个位数相加后输出的进位信息 U,再连接到半加器上,拿到是否进位信号 V 和对应加和后结果 W

W 是二位上留下结果。两个半加器进位输出,作为一个或门的输入连接起来,只要两次加法中任何一次需要进位,二位上,就会向左侧的四位进一位。三个 bit 相加,即都是 1,也会进一位。

全加器,两个 8 bit 数的加法很容易了。只要把 8 个全加器串联个位的全加器的进位信号作为二位全加器的输入信号二位作为四位进位信号。串接八层就得到支持 8 位数加法算术单元扩展只要串联输入位和全加器

8 位加法器可以由 8 个全加器串联而成

个位只需一个半加器,或全加器进位输入始终是 0。个位没有来自更右侧的进位。左侧的一位输出的进位信号,而是加法是否溢出(并不是再进一位)。

int 16 位整数加法,结果是16 位数,怎么知道是否溢出?并没有留下第 17 位来记录。

加法器结果,电路信号标识是否溢出,把这个信号输出给到硬件其他标志位里,让计算机知道结果是否溢出。这就是为什么写程序时,知道计算结果是否溢出硬件层面得到支持

三、总结延伸

门电路计算小功能,像搭乐高。

两个门电路,搭一个半加器,计算机中,软、硬件中重要的设计思想,分层

简单到复杂,上面的一层,只需考虑怎么用下一层组件搭建出自己的功能,不需要下沉到更低层的其他组件。就像你并没有深入学习过计算机组成原理,可直接通过高级语言撰写代码。

硬件层面,通过门电路、半加器、全加器搭出加法器。用来算术逻辑计算的组件叫作 算术逻辑单元ALU,。打造强大CPU 时,只需把门电路组合成ALU,不关注最细颗粒门电路(当成完成基础计算黑盒子)

CPU 设计和数据通路时,以 ALU 为一个基础单元来解释问题,就够了。

补充阅读

出于性能考虑,实际 CPU 里面使用的加法器,比起我们今天讲解的电路还有些差别,会更复杂一些。真实的加法器,使用的是一种叫作超前进位加法器的东西。北京大学在 Coursera 上开设的《计算机组成》课程中的 Video-306 “加法器优化”一节,了解一下超前进位加法器的实现原理为什么要使用它

课后思考

这一讲,讲解了无符号数加法器是怎么通过电路搭建。如果是有符号数(补码表示),这个加法器是否可以实现正数加负数运算呢?如果不行,我们应该怎么搭建对应的电路呢?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容