从与非门到俄罗斯方块(From Nand to Tetris)
哈佛版本 CS 101:) (http://www.nand2tetris.org/)
(CS 101: Stanford 的计算机公开课 https://lagunita.stanford.edu/courses/Engineering/CS101/Summer2014/about#video-modal)
课程配套的教材中文译本是: 《计算机系统要素》(https://book.douban.com/subject/1998341/)
在作者的视频介绍中提及,CS涵盖的主要内容是:
1 | OS, Hardware, Programming Language, Architecture, Data Structures, Compilers, Algorithm, Software Engineering, etc. |
现有很多课程主要专注于上述的某一方面的内容,缺少了对整个计算机系统介绍的big picture,这正式这门课程想要解决的问题。
课程从 Nand 逻辑门开始讲起,涉及机器语言、汇编器、OS等内容,全面介绍了计算机系统,但是因为涉及面比较广,介绍的不是很深入,比较适合入门,另外课程配套了一些project, 可以在网站上面找到相应的软件以及text。
这里主要介绍第一个 project
布尔逻辑
两输入的真值表,一共由16个,这些逻辑元器件可以使用 与非门作为基础元件进行构建。这里涉及到一个问题: 为什么与非门可以作为basic building block 用来构建其余的逻辑元器件? 参考 [1, 2, 3] 的内容, 这里不展开说明, 其实我也不是很懂。
Pro 1 中的作业
使用 Nand 构建以下的逻辑门。
非门
非门的真值表:
| in | out |
|---|---|
| 0 | 1 |
| 1 | 0 |
逻辑图:

代码:
1 | CHIP Not { |
与门
真值表:
| a | b | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
逻辑图:

1 | CHIP And { |
或门
真值表:
| a | b | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
逻辑图:

1 | CHIP Or { |
异或门
真值表:
| a | b | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
逻辑图:

1 | CHIP Xor { |
数据选择器
真值表:
| a | b | sel | out |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
逻辑图:

1 | CHIP Mux { |
参考引用
[1] https://en.wikipedia.org/wiki/NAND_logic
[2] https://en.wikipedia.org/wiki/Functional_completeness
[3] https://www.quora.com/Why-do-we-use-NAND-and-NOR-Gate-for-implementing-any-logic-design