Project 1: Boolean Logic

Catalogue
  1. 1. Project 1 Goal (Unit 1.8)
  2. 2. Project 1 Overview
    1. 2.1. Multiplexor (多路器) or Mux
      1. 2.1.1. Example: AndMuxOr
    2. 2.2. Demultiplexor(分路器) or DeMux
    3. 2.3. And16
    4. 2.4. Mux4Way16
    5. 2.5. Some tips for this assignment
    6. 2.6. Some tips when doing it
  3. 3. 参考资料

Project 1 Goal (Unit 1.8)

Given a NAND, build all the gates.

上帝:“去造个计算机。”

课上给了Project 1的其中几个chips的讲解。讲了Mux, DMux, And16 和 Mux4Way16。


Project 1 Overview

Multiplexor (多路器) or Mux

1
2
3
4
5
6
7
IN a, b, sel  // "sel" means "selection bit".
OUT out

if (sel == 0)
out = a
else
out = b

Tip: You can build with AND, OR, NOT gates.

Example: AndMuxOr

1
2
3
4
5
6
7
IN a, b, sel
OUT out

if (sel == 0)
out = a AND b
else
out = a OR b

Tip: 这个可以很容易用Mux做出来。


Demultiplexor(分路器) or DeMux

It is like the “inverse” of Mux.

1
2
3
4
5
6
7
IN in, sel
OUT a, b

if (sel == 0)
(a, b) = (in, 0)
else
(a, b) = (0, in)

Note: 以上两个都在communication networks中经常使用。比如Mux和DMux之间就可能是一个海底光缆的单线信息流,两头分别进行汇总和分流。如下图:

Communication Networks

这里的sel就是oscillator(振荡器)。

这样做可以减少昂贵的物理传输费用,还可以做到encoding和decoding异步进行。


And16

Tip: 16个bit是无顺序可言的,就像同时放出来的一样。


Mux4Way16

1
2
3
IN a[16], b[16], c[16], d[16], sel[2];
OUT out[16];
// 'sel' has 2 bits to represent 4 ways.


Some tips for this assignment

  • 尽量按顺序完成,这样后面的就可以用到前面写好的helper chips。

  • 不按顺序也可以,但是当用到一个没写好的chip比如chip AND {},可以把文件名临时改成And.hdl233。这样系统会自动调用内建的chip。

  • chip不能调用自己。

  • 记得看HDL Survival Guide 和各种资源!

  • VSCode 居然有Nand2Tetris的专门编辑.hdl文件的插件。

Some tips when doing it

  • 变量名不要用下划线!(别问我怎么知道的……)

参考资料