计算机系统要素的笔记

最近一直在读 《计算机系统要素:从零开始构造现代计算机》,昨天晚上把前两章读完了,做完了一个简单的 ALU(算数逻辑单元)。这本书感觉还不错,讲的通俗易懂,当然只是我读完前两章的感觉。

写这篇文章的目的是,在写这个 ALU 的时候感觉之前的部分逻辑门有点忘记了,并且基础的逻辑门比较重要,所以做个笔记整理一下前两章出现的所有的基础的逻辑门。

基础的逻辑门

1. Nand 门: 首先是所有的逻辑门的基础,

Nand 门

这个图很清楚了,这个门的内部实现跟它的名字一样,先 And 所有 a 与 b,再将结果取反。之后所有的门构建都从而且仅从这个逻辑门开始

2. Not 门:这个门我不就放图了,取反而已

实现思路:Nand(a,a) = ~(And(a,a)) = ~a,把 Not 门的输入同时输入 Nand 门就行了

3. And 门:与门

实现思路:And = Not (Nand), 这样应该都能懂,Not 门前面已经实现了,直接用就行了

4. Or 门:或门

实现思路:~a = Not(a), ~b = Not(b), Or(a,b) = Nand(~a, ~b)

5. Xor 门:异或门

实现思路:Xor(a, b) = And(  Nand(a, b), And(a, b)   )

6. Mux 门:Multiplexor,数据选择器或者多路复用器

Mux 门

可以看到有三个输入,两个数据位和选择位,由选择位来选择输出是哪个数据位。计算机么所有的数都是二进制的,可以看出如果有个 n 个输入位,则应该 log2n 个选择位

实现思路: Mux = And(~sel, a) or And(sel, b)

7.  DMux 门:Demultiplexor,分路器或者解多用器,我也不知道该怎么翻译

DMux 门

这个逻辑门跟上面的那个门是一个相对的过程。两个输入,一个数据位和一个选择位。

实现思路:a = And(~sel, in)    b = And(sel, b)


上述的都是处理一位的门,现在的计算机都是 32 或者 64 位,所以逻辑的门肯定也要能处理多位的。但是一位的会处理了,多位的本质还是一样的。书上是以16位为例子

8. Not16 门:输入是 16 位的 Not 门

Chip name: Not16

Inputs: in[16]

outputs; out[16]

Function: For i=0..15 out[i] = Not(in[i])

实现思路:用我们上面实现的 Not 门,手动的把 把每一位取反,没有循环,要手动写16次

9. And16 门

Chip name: And16

Inputs: a[16], b[16]

outputs; out[16]

Function: For i=0..15 out[i] = And(a[i], b[i])

实现思路:用 And 门把每一位 and 一下,挺麻烦的

10. Or16 门

Chip name: Or16

Inputs: a[16], b[16]

outputs; out[16]

Function: For i=.0.15 out[i] = Or(a[i], b[i])

实现思路:这个也是同样道理

11. Mux16 门

实现思路:跟 Mux 是一样的

12. Or8Way 门

这个逻辑门当时没注意,导致在实现 ALU 的时候遇到了一点麻烦

Chip name: Or8Way

Inputs: in[8]

outputs; out[8]

Function: out = Or(in[0], in[1],...in[7])

8 位的输入经过 Or 门 输出一位。

13. Mux4Way16 门

Mux4way16 门

这里的 4 Way 指有多少输入,不包括选择位。16代表每个输入的位数

实现思路:a 和 b, c 和 d 之间的选择是由 sel[0] 决定的,sel[1]决定了 选择 ab 集合还是 cd 集合。所以就是个多次利用 Mux16 做选择的过程

14. Mux8Way16 门

这个跟 Mux4Way16 门是同样的道理,只是输入位和选择位增加了

15. DMux4Way 门

DMux4Way 门

了解过了 DMux 门与 Mux 门,这个应该不难理解,只是输入输出和选择位的变化。

实现思路:sel[1] 决定了 in 在 ab 输出位还是 cd 输出位,sel[0]在分别确定  a b c d 的值。多次调用 DMux16.

15. DMux8Way 门

这个跟 DMux4Way 门是一样的,只是输出变成8个了,选择位增加一个。

有了这些门就可以具体去做些东西了。因为要利用这些逻辑门做些算数运算,这里涉及到有符号的数表示方法,补码,二进制加法等等。这些知识本篇文章不做介绍,自己去看书或者搜一下。

加法器

加法器有四种,HalfAdder,  Full-Adder,  Add16,  Incrementer。

(1)HalfAdder: 一位的与一位相加

HalfAdder

实现思路:这就是一个异或门阿,Xor,carry 位其实就是 And 的结果

(2)Full-Adder: 三个一位的相加

Full-Adder

加法需要记录进位,这个就是为有进为的加法做准备

实现思路:调用两次 Half-Adder

(3) Add16:两个16位的输入相加

Add16

实现过了 Half-Adder 与 Full-Adder  这个就很简单了

实现思路:先一次 Half-Adder,剩下的就是重复调用 Full-Adder

(4)Inc16: 16位的输入,然后执行 + 1,这种操作蛮多的到后面,所以为了方便弄了个自增器,这个是16位的

实现思路:用下 Add16 只是一个输入是b[0]=1,b[1..15]=0。

最后就是实现一个简单的 ALU 了

ALU(算数逻辑单元)


ALU

有上面那些逻辑门,加法器,这个大家自己解决吧。

PS:

所有都是以 Nand 门为基础的,你也可以以其他门为基础,一直扩展(我还没这么做,等看完这本书在说)。每个逻辑门的实现都有不同的方法,最优的方法就是所用的逻辑门越少越好。

这门课所有的资料,包括工具阿,书本阿,测试脚本阿都在

The Elements of Computing Systems / Nisan & Schocken

你可以自己去了解详细资料。

我自己写的 Code,我放在了 github 上:

GitHub - xxx50236/The-Elements-of-Computing-Systems: Just Some note

如果某个逻辑门你有更好的方案,欢迎提 PR

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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,703评论 0 9
  • ​​​本文主要介绍嵌入式系统的一些基础知识,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:...
    OpenJetson阅读 3,302评论 0 13
  • 我很开心 跨年前几天他问我跨年要怎么过,我说不知道啊,然后我反问他,他说他也不知道,于是我们就这样不了了之了。30...
    四月四日见阅读 172评论 0 1
  • 一湾浅浅的海峡, 隔绝了诗人的梦。 如果有来生, 等你在雨中造虹。 七层塔檐上的风铃, 斑驳起金属的孔洞。 千尺白...
    0538d64591d8阅读 189评论 1 3
  • 1.手臂划圈正反各20圈
    serena2017阅读 214评论 0 1