首页
/ Nand2Tetris 从与非门构建现代计算机:CS 自学指南中的体系结构入门课详解

Nand2Tetris 从与非门构建现代计算机:CS 自学指南中的体系结构入门课详解

2026-09-04 21:27:48作者:蔡怀权

本篇技术指南基于 Nand2Tetris 课程文档(中文版见 docs/体系结构/N2T.md)展开,系统介绍希伯来大学在 Coursera 上开设的 Nand2Tetris 课程:它如何以无门槛的方式,引导学习者从单个与非门(NAND)出发,逐步搭建 CPU、编写编译器与虚拟机,最终在自造计算机上运行俄罗斯方块。读完本篇,你将掌握该课程的完整学习路径、硬件与软件两大模块的技术脉络、10 个 Project 的递进结构,以及配套的教材与资源获取方式。

课程定位:为什么它是体系结构入门课

Nand2Tetris 是 Coursera 上最受欢迎的课程之一,在课程平台被数万人打出满分评价,并被全球四百多所高校与高中采用(课程背景引自 docs/体系结构/N2T.en.md)。在 CS 自学指南(cs-self-learning 仓库)中,它被明确定位为体系结构入门方向的首选课程:

  • 使用指南 的"删繁就简"核心课程清单中,它与 CS61C 一起构成"体系结构入门 + 体系结构进阶"的梯度组合,前者面向时间有限、希望补足底层理解的读者,后者面向想深挖现代体系结构细节的读者。
  • CS 学习规划 中,作者建议"花一到两个月的时间"学习这门无门槛课程,认为它在低年级阶段就帮助学习者建立对整个计算机体系"从上至下、从软至硬"的鸟瞰图大有裨益。

课程的核心理念是"麻雀虽小,五脏俱全":它提取出计算机的本质,略去现代计算机系统为追求效率与性能而引入的众多复杂细节,力图让完全零基础的读者(课程作者的预期是高中生也能理解)都能完整走通"逻辑门 → CPU → 编译器 → 虚拟机 → 操作系统"的全链路。

课程基本信息

以下为课程文档中给出的元数据,可直接用于评估课程投入:

项目 说明
所属大学 希伯来大学(Hebrew University of Jerusalem)
先修要求 无(面向完全无计算机基础的读者)
编程语言 任选(由学习者自行选择)
课程难度 3 星(指南内难度标尺的中档)
预计学时 40 小时
作业形式 10 个 Project,覆盖造一台计算机的全过程
配套教材 《计算机系统要素:从零开始构建现代计算机》(The Elements of Computing Systems)

从"40 小时 + 无先修要求"的参数组合看,这是一门密度很高但边界清晰的实践型课程:按部就班跟随课程规划,一个月内学完是文档给出的可达预期。

硬件模块:从 0/1 世界搭出一台 CPU

硬件模块让学习者进入基于 0 和 1 的世界,完成"自底向上"的电路综合:

  1. 逻辑门综合:以 NAND 门为唯一原语,构造出 AND、OR、NOT 等基础逻辑门。NAND 是功能完备门(functionally complete gate),仅凭它就可以组合出任意布尔函数,这正是课程选择它作为起点的原因。
  2. 组合电路搭建:在基础门之上继续综合多路选择器、加法器(adders)等更复杂的组合逻辑电路。
  3. CPU 构建:逐步搭建出一个 CPU,使其能够运行课程设计者定义的一套简化指令集(汇编)。这一步让学习者亲手验证"取指—译码—执行"的完整指令周期。

这一部分的训练重点在于:理解指令如何在晶体管级的布尔逻辑上被"实现"出来。学完后,你对汇编指令与硬件电路之间的映射关系会有一手的、可验证的认识,而不是停留在概念层面。

软件模块:从高级语言到自造 CPU 上的俄罗斯方块

软件模块完成"自顶向下"的语言翻译链路,与硬件模块形成闭环:

  1. 编译器(Compiler):编写一个编译器,将课程设计者开发的高级语言 Jack 编译为可运行在虚拟机上的字节码。
  2. 虚拟机(VM)翻译:进一步把字节码翻译为汇编代码——注意,这里翻译的目标正是你在硬件模块中亲手搭建的 CPU 所运行的指令集,软硬件两条链路在此汇合。
  3. 简易操作系统(OS):开发一个支持图形界面的简易 OS,让计算机具备输入输出能力。
  4. 终点项目:用 Jack 语言开发俄罗斯方块(Tetris)游戏,将其编译为汇编语言,运行在自造的 CPU 上,并通过自己开发的 OS 与游戏交互。

学完这一全程后,文档给出的学习收益是:对整个计算机体系结构建立全局且深刻的理解——从逻辑门、数字电路、汇编、体系结构,到虚拟机、编译、操作系统,一条完整的软件栈-硬件栈知识链被压缩在一门课内走完。这正是 CS 学习规划 中评价它"涵盖了编译、虚拟机、汇编、体系结构、数字电路、逻辑门等等从上至下、从软至硬的各类知识"的依据。

10 个 Project:课程的实践骨架

课程文档明确说明作业由 10 个 Project 组成,"带你造一台计算机"。从文档描述的硬件/软件两分结构可以推断,这 10 个 Project 恰好沿"硬件 5 步 + 软件 5 步"递进:硬件侧从逻辑门综合到可运行指令集的完整计算机,软件侧从 Jack 编译器、虚拟机实现到支持 GUI 的操作系统与最终的游戏项目。每个 Project 的输入都是上一个 Project 的产物(例如 CPU 是虚拟机翻译器的运行目标),这种严格的依赖链保证了"造出来的每一层都必须真的能跑"。各 Project 的具体要求细节,以课程网站上的官方说明为准。

课程资源清单

文档中列出的全部课程资源如下,按"获取入口 → 教材 → 作业 → 个人资源"组织:

  • 课程网站:分为 Nand2Tetris I 与 Nand2Tetris II 两个系列,分别对应硬件模块与软件模块(原文档指向 Coursera 平台上的对应课程页面)。
  • 课程视频:录播视频随课程网站提供。
  • 课程教材The Elements of Computing Systems: Building a Modern Computer from First Principles(中文译名《计算机系统要素:从零开始构建现代计算机》),原文档指向了该教材的 CN-zh 版本 PDF。教材与课程作业一一对应,是自学时最重要的案头参考。
  • 课程作业:10 个 Project,具体要求详见课程网站。
  • 个人资源汇总:仓库作者 @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都维护在 PKUFlyingPig/NandToTetris 仓库中(见 docs/体系结构/N2T.md 的"资源汇总"一节)。该仓库可作为对照参考:卡住时可以查看他人的实现思路,评分脚本与测试用例也能帮助自检验证。

学习建议与难度预期

基于原文档给出的信息,给出以下自学要点:

  1. 难度预期:课程"完全为外行设计",课程作者的预期是高中生都能理解内容。但"不难懂"不等于"不花时间"——40 小时的预计学时主要消耗在 Project 实现与调试上,建议按周切分 Project 节奏,一个月内完成是合理目标。
  2. 按部就班是关键:10 个 Project 存在严格的前后依赖(逻辑门 → 加法器 → ALU → CPU → 编译器 → 虚拟机 → OS),跳步学习会直接导致后续环节无法自验。
  3. 与进阶课程的衔接:如果想进一步深入现代体系结构的复杂细节(流水线、Cache、虚存、并发),本指南推荐衔接 CS61C: Great Ideas in Computer ArchitectureCS61C 文档 中明确对比:CS61C 在难度与深度上比 Nand2Tetris 提高很多,且以 C 与 RISC-V 汇编为载体。两者构成"入门鸟瞰 → 深入细节"的自然学习梯度。
  4. 收获验证:课程完成度的检验标准是文档描述的那个终点——用 Jack 写的俄罗斯方块跑在你用与非门搭出的 CPU 上,并经由你自建的 OS 完成交互。能完整复现这个闭环,即意味着掌握了整门课的知识链。

延伸阅读(本仓库内)

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
982
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384