首页
/ 从与非门到俄罗斯方块:Nand2Tetris 计算机体系结构入门课自学指南

从与非门到俄罗斯方块:Nand2Tetris 计算机体系结构入门课自学指南

2026-09-04 12:08:21作者:柏廷章Berta

本篇指南基于 CS 自学指南中的 Coursera: Nand2Tetris 课程文档展开,系统介绍这门希伯来大学出品的无门槛体系结构课程:它的硬件/软件两大模块如何从与非门一路搭建到可运行游戏的完整计算机、10 个 Project 的学习路径、配套教材与资源,以及它在自学路线图中作为“体系结构入门课”的定位与衔接方式。读完后你将清楚如何按部就班地在一个月内从零亲手造出一台计算机,并建立对整个计算机体系结构的全局鸟瞰。

课程概览

Nand2Tetris(Nand to Tetris,简称 N2T)是 CS 自学指南在 体系结构 板块首推的入门课,其核心信息如下:

项目 说明
所属大学 希伯来大学(Hebrew University of Jerusalem)
先修要求
编程语言 任选一个编程语言
课程难度 🌟🌟🌟
预计学时 40 小时

这门课在 Coursera 平台被数万人评为满分,在全球四百多所高校、高中被采用。它的核心命题极具吸引力:让一个完全没有计算机基础的人从与非门(Nand gate)开始造一台计算机,并在上面运行俄罗斯方块小游戏。听起来很酷,实现起来更酷——因为课程的目标就是让你亲手把这件事做出来。

课程结构:硬件与软件两大模块

N2T 课程分为硬件和软件两个部分,覆盖了从上至下、从软至硬的完整栈。

硬件部分:进入 01 的世界

硬件部分的目标是从最底层的逻辑门开始,逐层向上搭建出能够执行程序指令的 CPU:

  1. 逻辑电路:用与非门构造出各种基本逻辑门(与、或、非等),再组合出加法器、多路选择器等更复杂的组合电路与寄存器、RAM 等时序电路;
  2. CPU 设计:将数据通路与控制器整合,逐步搭建出一个完整的 CPU;
  3. 运行简易汇编:这个 CPU 能够运行一套课程作者定义的简易汇编指令集——这是硬件部分的终点,也是与软件部分的接口。

硬件部分刻意略去了现代计算机为性能而设计的众多复杂细节(如流水线、Cache、虚拟内存等),提取出计算机最本质的部分,让零基础学习者也能理解“一条指令是如何被电路执行的”。

软件部分:从高级语言到可运行的游戏

软件部分建立在硬件部分搭好的 CPU 之上,沿着“高级语言 → 字节码 → 汇编 → 机器”的方向逐层翻译:

  1. 编写编译器:将课程作者开发的高级语言 Jack 编译为可以运行在虚拟机(VM)上的字节码;
  2. VM 到汇编:将字节码进一步翻译为硬件部分那个 CPU 能够执行的汇编代码;
  3. 开发简易 OS:开发一个简易操作系统,让你的计算机支持输入输出与图形界面;
  4. 终点项目:用 Jack 开发一个俄罗斯方块(Tetris)小游戏,将它编译为汇编代码,运行在你用与非门搭建出的 CPU 上,通过你开发的 OS 与游戏交互。

走完这条链路后,你实际上已经独立实现了计算机体系结构中数字电路、指令集、汇编、虚拟机、编译器、操作系统这几个核心环节的“麻雀虽小、五脏俱全”版本。

10 个 Project 带你造台计算机

课程以 10 个 Project 贯穿整个学习过程,从简单的逻辑门组合到最终的俄罗斯方块游戏,每个 Project 都有明确的验收标准,带你一步步把一台计算机真正“造”出来。具体的每个 Project 要求详见课程网站(Nand2Tetris I / II)。这种以 Project 为驱动的设计,正是课程能保持低难度高完成度的关键:你始终在“造东西”,而不是被动听课。

教材与课程资源

课程文档 所列,本课程的核心资源包括:

  • 课程网站:Nand2Tetris I(硬件部分)与 Nand2Tetris II(软件部分)两个系列,均在 Coursera 平台提供,课程视频随网站附设;
  • 课程教材:《计算机系统要素:从零开始构建现代计算机》(The Elements of Computing Systems: Building a Modern Computer from First Principles),由课程作者 Shimon Schohn 与 Noam Nisan 编写,与两个系列课程一一对应;
  • 课程作业:10 个 Project 带你造台计算机,具体要求详见课程网站;
  • 资源汇总:指南维护者 PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在其 NandToTetris 仓库中,可作为学习参考与实现对照。

在 CS 自学指南中的定位

在 CS 自学指南的整体规划中,Nand2Tetris 被明确定位为体系结构的入门课,与进阶课程形成清晰衔接:

  • 一份仅供参考的 CS 学习规划 的体系结构章节中,作者建议“花一到两个月的时间”学习这门无门槛课程,认为它在低年级阶段就能帮助学习者“从宏观上建立对整个计算机体系的鸟瞰图,大有裨益”;
  • 如何使用这本书 的“删繁就简”课程表中,Nand2Tetris 被列为体系结构入门的核心课程之一;
  • 若学完 N2T 想深入现代计算机的复杂细节(流水线、Cache、虚存、并发),可接着学习伯克利的 UCB CS61C: Great Ideas in Computer Architecture。从 CS61C 的文档描述看,两门课的定位差异很明确:CS61C“在难度和深度上都会提高很多,具体会涉及到流水线、Cache、虚存以及并发相关的内容”;而希伯来大学的 ETHz: Digital Design and Computer ArchitectureETHz: Computer Architecture 则是另外两条偏硬件设计与 Verilog 实践的体系结构学习路线。

这种“N2T 建立全局观 → CS61C 深入细节”的递进,正是它作为入门课的价值的体现。

自学建议:零基础也能一个月学完

课程文档给出的几点关键信息,直接决定了这门课对自学者的友好程度:

  1. 无先修要求:课程面向完全没有计算机基础的人,课程作者的目标是让高中生都能理解。如果你对计算机世界由 01 构成的说法感到好奇,这门课就是最直接的入口;
  2. 编程语言任选:软件部分(编译器、VM 等)可以用你自选的任意编程语言实现,你可以用自己最熟练的语言降低学习摩擦;
  3. 预计 40 小时:只要按部就班跟着课程规划走,一个月内学完绰绰有余。建议将 10 个 Project 作为进度锚点,每完成一个 Project 就是一次可验证的里程碑;
  4. 难度设计精巧:这门课很好地提取出了计算机的本质,而不过多地陷于现代计算机为性能而设计的众多复杂细节,让学习者能在轻松愉快的体验中感受计算机的优雅与神奇。

需要说明的前提是:本文描述的课程信息(学时、难度、资源构成)以当前仓库文档为准,实际开设形式与内容以 Coursera 课程网站最新说明为准。

学完能获得什么

完成 Nand2Tetris 后,你将对整个计算机的体系结构有一个全局且深刻的理解:从逻辑门、数据通路,到指令集、汇编、虚拟机、编译器、操作系统,每一层如何工作、层与层之间如何衔接,你都有了亲手实现过的第一手经验。正如课程文档所总结的——这对后续课程(操作系统、编译原理、体系结构专业课等)的学习有着莫大的帮助,也是从“会用计算机的人”走向“理解计算机的人”的关键一步。

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

项目优选

收起
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