计算机要素--第一章 布尔逻辑

计算机系统要素,从零开始构建现代计算机(nand2tetris)
如果完成了本书所有的项目 你将会获得以下成就

  • 构建出一台计算机(在模拟器上运行)
  • 实现一门语言和相应的语言标准库
  • 实现一个简单的编译器

而且,这本书的门槛非常低,只要你能熟练运用一门编程语言即可。本课程综合了数字电路,计算机组成原理,计算机体系架构,操作系统,编译原理,数据结构等的主要内容,搭建了计算机平台的构建的框架,并未深入细节,如果需要了解细节,可由本书作为主线,逐步完善的知识体系。

QQ交流群(含资料):289682057
课程连接
项目地址Github


本章要实现的逻辑门电路

  • and and16 (与门,16位按位与)
  • or or16 or8way (或门,16位按位或,8位全或)
  • not not16 (非门,16位按位非)
  • xor (异或)
  • mux mux16 mux4way16 mux8way16 (2选1选择器,16位2选1选择器,16位4选1选择器,16位8选1选择器)
  • dmux dmux4way dmux8way (解复用器,解4路复用,解8路复用)

实现总结

项目从最原始的Nand门出发,其他的门电路能够通过这个门电路构建得到。所以本章中所有的门电路都是基于Nand门来实现的,需要具备的基础是根据真值表设计门电路,需要会进行公式化简,当然这并不是必须的。

and门

输入管脚:a,b
输出管脚:out
公式如下:out=ab1out=\overline{\overline{ab}1}从公式来看使用两个与非门即可实现,其中一个输入是常量true。

and16

这个门是16位按位与门,对每个位执行与操作即可
输入管脚:a[16], b[16]
输出管脚:out[16];
伪码:

for i = 0..15:
    out[i] = (a[i] and b[i])

not

非门,利用与非门实现
输入管脚:in
输出管脚:out
公式:out=in1out=\overline{\overline{in}1}

not16

16位按位非门,利用已经实现的非门对每位取非即可
输入管脚:in[16]
输出管脚:out[16]
伪码:

for i= 0..15:
	out[i] = not in[i]

or

或门,利用与非门和已经实现的非门来实现
输入管脚:a[16], b[16]
输出管脚:out[16]
公式:out=about=\overline{\overline{a}\overline{b}}

or16

16位按位或
输入管脚:a[16], b[16]
输出管脚:out[16]
伪码:

for i = 0..15:
	out[i] = (a[i] or b[i])

or8way

8位全或
输入管脚:in[8]
输出管脚:out
伪码:

out = (in[0] or in[1] or ... or in[7])

xor

异或门,使用非门,与门,或门来实现,到最底层都是通过与非门实现的
输入管脚:a, b
输出管脚:out
公式:out=ab+about=\overline{a}b+a\overline{b}

mux

数据选择器,又称多路选择器,根据选择位,确定输出那个值
输入管脚:a, b, sel
输出管脚:out
公式:(根据真值表得到公式)out=asel+bselout=a\overline{sel}+bsel

mux16

16位按位选择,只需对每一位分别进行选择即可
输入管脚:a[16], b[16],sel
输出管脚:out[16]
伪码:

for i = 0..15:
	if sel == 0
		out[i] = a[i]
	if sel == 1
        out[i] = b[i]

mux4way16

16为四选一选择器,类似分治的方法,先两两进行选择,然后再从选出的内容中进行选择
输入管脚:a[16], b[16], c[16], d[16], sel[2];
输出管脚:out[16]
伪码:
先根据,sel[0]进行选择,再根据sel[1]进行选择即可

out = a if sel == 00
	  b if sel == 01
	  c if sel == 10
	  d if sel == 11

mux8way16

16为八选一选择器,类似分治的方法,先四四进行选择,然后再从选出的两个中进行选择
输入管脚:a[16], b[16], c[16], d[16], e[16], f[16], g[16], h[16], sel[3]
输出管脚:out[16]
伪码:
先根据,sel[0…1]进行选择,再根据sel[2]进行选择即可

out = a if sel == 000
	  b if sel == 001
	  etc.
	  h if sel == 111

dmux

真值表

in sel a b
0 0 0 0
0 1 0 0
1 0 1 0
1 1 0 1

输入管脚:in, sel
输出管脚:a, b
公式:a=insel,b=insela=in·\overline{sel},b=in·sel

dmux4way

解4路复用,先根据sel的第一位进行解复用,然后根据剩余的sel位,进行解复用
输入管脚:in, sel[2]
输出管脚:a, b, c, d

dmux8way

解8路复用,先根据sel的前两位进行解4路复用,然后根据剩余的sel位,进行解复用
输入管脚:in, sel[3]
输出管脚:a, b, c, d, e, f, g, h
实际上:解复用器,就相当于由sel指定信号的输出路,由其中两路能确定4划分,每种划分中还包含两路,所以,根据剩余的sel位进行指定确定的路。


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