277,248 个二输入 NAND 门,在浏览器里跑起了一台完整的 16 位计算机。它不带任何其它类型的逻辑单元,能在 16.4 kHz 的时钟频率下顺畅运行俄罗斯方块变体。在这个满屏代码和高级语言的时代,NAND-16 选择用最原始的方式重新发明轮子。我们直觉上认为,造出一台复杂的机器必须依赖不同功能的专属部件,需要专门的运算器和独立的存储器配合。NAND-16 把事实摆了出来:通用计算的门槛低到一个最基础的开关就够了。
复杂度不需要专属部件
图:一颗 7400 系列四路二输入 NAND 门芯片,这台计算机只用 277,248 个这种逻辑单元搭成。来源:Wikimedia Commons
NAND-16 项目全机只用一种叫做 NAND(与非门)的逻辑单元。这相当于只发给你一种最基础形状的乐高积木,要求你拼出一座带电梯的高楼。在这个系统里,加法器、寄存器、控制逻辑全是用同一种积木相互咬合产生的组合。把整个系统强制压到一种门,反而让算力的来龙去脉变得一清二楚。
项目导览部分(Genesis)分了 15 个章节,主题就是「从一个门重新发明这台计算机」。它演示了如何用两个 NAND 门组成一个 RS 触发器,再用触发器一步步搭出更复杂的寄存器和运算单元。当你顺着这条链路走下来,硬件设计的神秘感就被打碎了。每一个高级功能,最终都能还原成无数个开关状态的简单翻转。
27万门数量级源于存储代价
人们在 Hacker News 上看到 277,248 这个数字,第一反应通常是错愕。当年的 ARM1 处理器只用了不到 2.5 万个晶体管。这台机器用掉十倍以上的规模,是因为 ROM 和 RAM 也是纯靠 NAND 门阵列堆叠而成的。机器没有使用任何现成的存储芯片。
常规计算机里处理和记忆是两套组件。存储器通常有独立的晶体管结构优化。但在 NAND-16 中,记忆单元是用逻辑门生拼出来的。这种对指令和数据的存储需求,直接导致门数量爆炸。
网页前端数据显示,机器的周期数达到 160,208,指令数约为 58,402,程序计数器停在 046C。这本身是一个正在逐行吞吐机器码的物理模拟环境。系统在浏览器里跑出了 23.0 M/s 的门级求值速度,指令执行频率约 4.0 k/s。这些性能指标背后的真相是,27 万个门里绝大部分根本不在做运算,而是在当存储器。通用计算可以只用一种开关,代价就是你需要用海量的开关去堆出存储空间。
砸坏单一部件看系统崩溃
图:NAND-16 整机在浏览器中运行,页面顶部带有独立审计器持续校验计算结果。来源:somethingbig.ai
由于全机只用一种部件,排查和破坏都变成了直观的物理实验。项目内置了故障实验室(Fault Lab),允许你把任意一个门永久钉在 0 或 1,然后观察整台机器如何崩塌。拔掉第二相时钟,系统画面直接死机;弄坏视频存储体里的一个门,屏幕上立刻多出一个消除不掉的隐形方块。
内建的破坏案例还包括断掉的进位链、一条永远不跳转的分支指令,甚至是一个变弱的随机数发生器。当你用键盘玩游戏遇到按键卡住时,原因往往是底层的某一个逻辑门被外力锁死了。
所有的运行数据都在网页上实时渲染,页面顶部甚至带有一个审计器(audit)。它用独立实现的求值器重新执行采样周期,一旦发现网表状态不一致就会全盘标红。逻辑分析仪不仅支持逐指令单步调试,还能录下一个周期,按门延迟播放子弹时间。双击屏幕上的任意一个像素,画面会直接追踪到锁住那个像素的底层锁存器。当机器的每一个门都被铺在页面上时,硬件黑盒就不存在了。
社区反应折射出时代滤镜
社区对这台机器的态度分化成了两端。一部分人惊叹于纯用 NAND 门阵列复刻存储的工程毅力,认为这种从零开始搭建数字宇宙的做法足够纯粹。另一部分人则反应冷淡,觉得几年前看到会震撼,但今天这种规模的项目大概率是 AI 生成的网表,不值得过度兴奋。HN 评论区的争论,暴露了今天技术社区面对大型工程时的默认心态。
时代滤镜改变了人们对工程难度的感知,但没有改变系统运转的底层物理法则。不论作者是否大量依赖了自动化工具生成网表,NAND-16 都剥开了计算机的复杂性外衣,把它扔在浏览器里供人随意拆解。计算没有使用神秘魔法,只要有足够多的同款开关,整个系统就能按固定规则跑起来。一台透明的计算机,本身就是最好的原理教科书。
参考链接:
- NAND-16 项目页
- HN 讨论
- Wikimedia Commons