NAND-16:一台由 277,248 个与非门搭成的计算机

查看原文 HN 讨论

文章摘要

NAND-16 是一个在浏览器里运行的交互式 3D 演示:一台 16 位计算机,从 CPU、内存到显存,全部由 277,248 个两输入与非门(NAND)构成,在你的浏览器里逐门仿真运行,上面跑着一个小操作系统和几个程序,其中包括一款叫 NANDTRIS 的俄罗斯方块。页面的介绍语是”CPU、内存、操作系统和俄罗斯方块,全都跑在这些门上。放大进去,看信号流动”。它挂在 somethingbig.ai 下面,这是 Matt Shumer 的 AI 通讯网站(他以年初那篇流传甚广的《Something Big Is Happening》出名),页面本身没有任何关于作者和制作过程的说明。HN 帖子由 rossant 提交,拿到 187 分、约 100 条评论。

页面上有什么。 打开后是一个 3D 场景:一张桌子,上面放着一台复古 CRT 显示器、一副键盘和一块透明外壳里的电路板。电路板上排列着几颗”芯片”,标签分别是 N16 CPU、MASK ROM 8K×16、SRAM 1K×16、VIDEO RAM 128×96、I/O、地址译码、数据总线多路选择器,以及两相时钟 φ1/φ2,旁边还有一颗标着 32.768 kHz 的晶振。代码里设定的标称频率是 16384 Hz,状态栏会实时显示门数、每秒周期数、帧率和网表哈希。页面加载时会提示”正在根据 rom.bin 制造这台机器”,也就是在后台 Web Worker 里根据 ROM 生成整张门级网表;为了用上共享内存,页面还专门装了一个服务工作线程来启用跨源隔离。

两种模式。 “Play”模式下,键盘输入直接送给 NAND-16。开机进入一个 shell,可以选择运行 NANDTRIS、贪吃蛇、生命游戏,以及一个十六进制监视器程序(输入 8100 查看内存、8100.810F 转储一段、8100: 3201 写入、8100R 从该地址运行,颇有 70 年代单板机的味道)。按 Tab 切到”Explore”模式,就可以滚轮缩放、拖拽平移、右键环绕,双击某颗芯片会一路飞进去,最终看到一个个发光的与非门和它们之间的连线在高低电平之间闪烁。点击一个门会弹出它的名字、层级路径和真值表,当前状态那一行会被高亮。拉远看,显存区域就是一块直接映射到屏幕的帧缓冲。手机上也能玩,用双指缩放和拖动。

为什么全用与非门。 与非门是”功能完备”的:任何布尔逻辑都可以只用与非门搭出来。这台机器把触发器、寄存器乃至 ROM 和 RAM 阵列也都用与非门实现了,所以门数会显得格外多。HN 上有人指出,二十七万多个门里的大头其实花在了系统内存和显存上。

HN 评论精华

讨论大约 100 条,大部分在争论两件事:AI 生成的作品还值不值得赞叹,用 AI 做出来的东西算不算”你做的”。聊这台计算机本身、讨论技术细节的评论只占一小部分。

“几年前会让人惊掉下巴,今天只剩一声’嗯’“。 排在第一的 guiambros 说这很令人难过:几年前看到这个会觉得震撼,那意味着有人凭毅力和韧劲从零开始辛苦搭出来;今天呢?”嗯。”LarsDu88 有同感:他几个月前用 Rust vibe coding 了一个 MOS 6502 模拟器,Rust 水平很弱,对 6502 和 CPU 设计什么也没学到;就算他手写,也没法证明自己没用 LLM,这让整件事的吸引力都降低了。socializer 回应说本来就不需要证明,直说就行,靠的是声誉;Retr0id 庆幸自己有 LLM 出现之前的公开项目可以展示(其中正好也有一个 6502 模拟器),”完全不知道从零开始要怎么建立同样的声誉”。dmitrygr 分享了他在 MIT 林肯实验室经历过的最酷的面试:花一小时讲一个你做过的很酷的技术项目,再花一小时回答面试官的追问,”不真正懂的人不可能通过,百分百防 LLM”。raddan 说以前学生问他怎样提高被录用的机会,标准答案是”做个热爱的项目”,项目本身从来不是重点,重点是证明你是那种抠细节、爱钻研的人;最好的岗位现在仍然想要这样的人,只是一个 GitHub 仓库已经不够了。Lerc 对 LarsDu88 说:你本来可以学到东西,问 AI 哪里慢、为什么慢,试着重排芯片底部的查找表设计自己的指令集,AI 都能帮忙,但要指挥它这么做,你自己就得学。LarsDu88 解释他真正的目的是研究能否在活细胞里构建一个初级 CPU,而 6502 让他看到,芯片的大部分电路都用在编排和搬运数据上,算术只占一小块。

“作者”之争。 morpheos137 认为 LLM 的产出应该归功于写提示词的人:LLM 和编译器、电锯一样只是工具,觉得 AI 作品”可悲”的人,其实是在为知识民主化和门槛降低而难过。反驳接踵而至:jbjbjbjb 说这更像是发短信让木匠给你打一个衣柜;IcyWindows 说问题在于我们不知道对方是发了一条短信,还是和木匠做了详细的设计讨论和反复修改,人们往往默认是两个极端之一;ThrowawayR2 说把这句话换成 AI 出现前的版本就是”员工的产出应该归功于监督他们的经理”;UpsideDownRide 把它比作花钱找人代打游戏天梯,或者开车跑完马拉松距离;LarsDu88 说他现在可以在对 CPU 一无所知的情况下让 LLM 设计一个 CPU,这跟写程序交给编译器完全不同,更像是让 YouTube 给你推一个视频,然后假装自己是 MrBeast。Lichtso 则认为 LLM 本质上是史无前例规模的”出处洗白”。

sdcfgy 问”不是自己做的,意义何在”,saulpw 说这个角色叫”制作人”,虽不直接创作,但同样重要;hollowturtle 回”除非你是 Rick Rubin,否则你什么也没制作”。随后 sdcfgy 和 fc417fc802、hex4def6 展开了一场关于披萨的长辩论:sdcfgy 说让食品工厂反复改单直到披萨对味,那也不是你做的披萨;hex4def6 说如果你让它调整面粉比例、参考 14 世纪英国食谱、试验揉面时间,到某个程度你就算是主厨了,”我们都在爬抽象之塔,只是 AI 这一步跨得比较大”;fc417fc802 反问你自己磨面粉、种小麦了吗,并认为该看的是个人到底贡献了哪些部分,用了什么现成的东西并不要紧。tarkin2 用电子琴打比方:花几年学乐理和钢琴弹出一首好听的曲子,和按一下”演示”键放出一首更好听的曲子,后者难道更令人佩服吗?fc417fc802 认为用 LLM 并不必然意味着走了捷径,只是很多人确实这么用。

多少只是一句提示词? Nurysso 惊叹”人们是怎么做出这种东西的”,Retr0id 答”他们打开 AI 智能体,输入’给我做一台用与非门搭成的 16 位计算机’,然后按回车”。phoghed 不服,叫他自己去试试;Retr0id 说多写几句描述细节就行,他有信心,但宁愿把 token 留给自己更感兴趣的事。phoghed 坚持认为一次生成不可能做出这个,”能做出类似的东西吗?当然。代码迟早会像点子一样便宜,人们应该现在就适应,而不是把 LLM 碰过的东西统统斥为垃圾”。socializer 则说这类 AI 项目的秘方是有钱、肯烧钱,作为技术演示他能理解,但它没有商业或教育价值,可能也不是作者真正感兴趣的东西,只会”抽干一个爱好圈子的空气”,明明有不少人真的用分立门电路造过自己的计算机,大家分享的却是这个。HarHarVeryFunny 说这些复古项目的意义大半在于物理搭建,这里连照片都没有,只是”一个 vibe coding 出来的处理器的仿真”。welcome_dragon 说如果这是有人把 Nand2Tetris 往前推了好几步,那会很了不起。

技术细节和”越看越多 bug”。 wang_li 估算一个与非门要 2 个晶体管,那么这台机器相当于约 55.4 万个晶体管,而 Intel 386 只有 27.5 万个;ohazi 纠正 CMOS 两输入与非门需要 4 个晶体管,matja 则指出门数大头花在了系统内存和显存的 SRAM 上,而 386 片上两者都没有,不能直接比。HarHarVeryFunny 补充 ARM1 只有约 2.5 万个晶体管。monocasa 本想说”这么多门、这么少的计算机”,后来才发现 ROM 和 RAM 也是与非门阵列;bmitc 认为这很可能受 Nand2Tetris 启发。enzo05814648 和 btilly 都指出任何门都能用与非门构造,所以”用 N 个与非门搭成”其实就是先用普通逻辑门设计计算机、再全部分解成与非门。jamesgill 提到阿波罗导航计算机几乎全部由或非门(NOR)构成。brunesto 问 SRAM 左上角的 AndBus16 是什么意思,tarkin2 讽刺说作者大概也得去问他用的 AI。

视觉效果本身赢得了不少称赞。carodgers 说一定要试试平移镜头、放大到芯片里,TedDoesntTalk 说”现在明白《创》(TRON)里 Kevin Flynn 的感受了”,andai 称之为”计算机界的 Google 地球”,说自己十年前的集显 ThinkPad 都能在浏览器里跑起来,顺带吐槽”从 CSS 看,作者似乎是 GPT”。artemonster、kphorn 惊讶它在手机上运行得如此流畅。但细看之下问题开始浮现:fancyfredbot 发现渲染有错,点击某个门时弹出的文字说明它连接两个不同的输入,画面上却把两个输入画在同一根线上;carodgers 随后说越看问题越多,电路板上的走线终止在莫名其妙的地方,或者在不该重叠的地方重叠,他回头编辑了自己最初的夸奖,说”我明知是 LLM 生成的,却没核实就夸了作者,惭愧”。

跑题的一支。 介入放射科医生 aabajian 说现在 AI 编程基本”已解决”,人们要想得更大:他正在把 CT 器官分割模型和血管径向直径测量模型组合起来,估算每个器官的血流灌注,用于手术规划,Opus 5.5 能在几分钟到几小时内完成过去要几周几个月的算法实现。bmitc 质疑你怎么知道它是对的,他自己当天让 Opus 5.5 读一张 X 光片,几乎得不出有用信息;aabajian 说这只是辅助选择导管、C 臂角度和造影剂注射速率的工具,结果对不上时他还有自己的默认经验。电子工程师 hex4def6 则说 AI 编程改变了他的工作,他不再需要求软件团队修驱动、加功能,可以自己动手。