/nand2tetris

计算机一串: 从与非门到俄罗斯方块

Primary LanguageScilab

为什么要做这个课程

nand2tetris课程名头响亮,面向零基础的同学从一个与非门开始构建一个计算机系统。

理查德·费曼说:我不能创造的,我就无法理解。 尽管我已经学过数电、计组、汇编语言、操作系统,跟着 MIT6.828 课程实现了一个操作系统而且接触了 Linux 内核,但我一直觉得我还需要一个课程能将我学的这些知识再具象化并串接起来。我不是一个初学者,但我感觉我对 CPU 的理解仅仅停留在课本层级的理解上(取指译码这些我都知道,但我不明白在这些过程种哪些组件在工作以及是如何工作的),同时我不太熟悉编译器,不明白计算机系统中的很多很多知识,所以我决定跟完这个课程。希望这个课程能对我有帮助。如果你跟我是类似的情况,当我做完时,我会告诉你效果是否会很好。

对我帮助较大的章节为:02 ALU的实现 、03 回忆了部分锁存器的实现、04 指令集架构的设计部分

种一棵树最好的时间是十年前或现在。 所以我打算从今天开始。

nandgame是一个极好的实验可视化工具。

已完成

  • 环境配置
  • 基本门电路,数据选择器、数据分配器;多路基本门电路,多路数据选择/分配器
  • 布尔算术(Boolean arithmatic)
    • 半加器(HalfAdder)、 全加器(FullAdder)、算数逻辑单元(ALU)
  • 时序逻辑
    • 锁存器(Flip-Flops)、寄存器、程序计数器P
    • RAM的位扩展(RAM512、RAM4K、RAM16K)
  • 机器语言(指令集)的设计
    • 汇编实现简单的乘法计算
    • 汇编实现输入/输出驱动:检查键盘输入,屏幕输出

[注意点]

测试时需要将 hdl 文件放到与脚本同一目录下,tst 脚本才能正常执行。我为了分类将测试文件放到了./scripts目录下了,因此测试时需要暂时将hdl文件放置./scripts目录下。

HDL文件中输入/输出的命名不要使用_,不然你的实现不能正常加载,但是又没有报错,摸不着头脑😫。