如今内存价格一路疯涨,不少人直呼「买不起内存了」,该怎么办?
自己造一个,似乎也不是不行。
这听起来像是硬件发烧友才会干的事,但最近,一位前微软工程师真的动手了。
Dave Plummer 曾参与开发 Windows 任务管理器和 Windows 弹球游戏。退休后,他依然没有闲下来,继续折腾各种计算机项目。

这一次,他借助 ChatGPT,从零设计了一块内存板,准备给一台诞生于 1970 年代的老电脑扩容 4MB RAM。
更有意思的是,Plummer 此前从未尝试过 FPGA 编程。从电路设计、PCB 布局,到 FPGA 控制器开发和实际硬件测试,他几乎是一路摸索着完成了整个项目。这番折腾,也让人看到了 AI 辅助开发在软件之外的另一种可能。

老电脑内存太贵,他决定自己造一个
Dave Plummer 这次折腾的对象,是一台 D
这是一款诞生于 1970 年的经典小型计算机,在计算机发展史上有着相当重要的地位。UNIX 操作系统的早期发展,也与 PDP-11 密切相关。
不过,几十年过去,这些老电脑的配件早已不像现代硬件那样容易购买。尤其是内存。
Plummer 在社交平台 X 上发帖吐槽,“如果你觉得普通内存已经够贵了,那不妨试试 PDP-11 的内存。只要能买到,价格差不多是每 MB 1000 美元。”
换句话说,想给这台老电脑配齐 4MB 内存,光内存本身就可能花掉 4000 美元。
这价格,别说给老电脑升级了,拿去买一台相当不错的现代电脑都绰绰有余。
于是,Plummer 决定换个思路:既然这么贵,那不如自己动手造一块。

从原理图到 PCB,ChatGPT 帮他一步步设计
这次项目并不是简单地把几颗内存芯片焊在一起。
Dave Plummer 借助 ChatGPT 和在线电路设计工具 EasyEDA,从原理图开始,一步步完成电路设计、PCB 布局和布线,甚至连生产所需的物料清单也准备好了。
Dave Plummer 坦言自己此前做过 PCB,但从未尝试过如此复杂的项目。
要让这块自制内存真正运行起来,还得先了解 PDP-11 的硬件架构。
不分 PDP-11 机型采用 Q-Bus 总线连接各类功能板卡。因此,Dave Plummer 将这块自制内存设计成一张独立板卡,再与搭载 M8190 处理器的板卡一同插入背板,进行实际测试。
这块内存板的核心是一颗 Lattice MachXO2 FPGA 芯片(型号为 2000HC),负责充当内存控制器,外接 4 颗 ISSI 的 1MB 存储芯片。此外,板卡还配备了 U2S 输入输出芯片、DIP 拨码开关、通信接口及若干电容,共同组成完整的电路。
在地址空间方面,M8190 所在系统采用 22 位地址寻址,支持最高 4MB 的寻址空间,其中顶部 256KB 地址空间预留给输入输出设备和只读存储器(ROM)。这也意味着,自制内存板不仅要提供足够的存储容量,还必须遵循原有系统的地址映射规则。
简单来说,FPGA 负责协调现代存储芯片与 PDP-11 之间的数据传输,让这台老电脑能够按照原有的方式访问内存。
设计完成后,Dave Plummer 一口气订购了 5 块 PCB,准备开始实际测试。
至此,一块自制内存板的硬件设计基本完成。但真正的挑战,才刚刚开始。
第一次给 FPGA 刷程序,折腾了好几轮,最终成功跑起了 Unix
电路板做好了,不代表它就能正常工作。
Dave Plummer 接下来需要把自己编写的 FPGA 程序烧录进去。问题是,他此前从未对 FPGA 芯片进行烧录编程。
于是,他又买了一块 FT232H 转接板,把它连接起来。后来又安装了 openFPGALoader,开始摸索整个烧录流程。
中间没少踩坑。经历几次失败后,他终于成功把程序写进 FPGA。“这对我来说完全是一个全新的领域!”Dave Plummer 说道。
随后,他把新做的 RAM 板插入 PDP-11 的背板,与搭载 M8190 CPU 的主板一起进行测试。
这时候,好消息来了。
电脑已经能够识别这块新内存板,系统也显示出了 4MB RAM,以及预留给 ROM 的地址空间。对于一个第一次尝试如此复杂硬件项目、此前甚至没给 FPGA 刷过程序的人来说,这已经是相当不错的进展。
但 Dave Plummer 很快发现,事情还没完。
在测试过程中,Dave Plummer 遇到了一个相当基础、却又容易踩坑的问题:这块 RAM 无法正常访问奇数地址。
问题出在内存控制器对数据的处理方式上。
PDP-11 采用 16 位数据总线,一次可以传输两个字节。读取数据时,CPU 会根据地址,自动从这两个字节中选出自己需要的那个。
但 Dave Plummer 设计的内存控制器,仍然需要一次返回完整的两个字节。写入时也一样:CPU 需要通过位选择信号,告诉内存控制器究竟要修改哪一个字节。否则,整个 16 位数据都可能被写入,导致另一个字节的数据也遭到覆盖。
显然,Dave Plummer 最初的 FPGA 代码没有正确处理这一逻辑,导致内存访问出现问题。
一位网友对此开玩笑说,他「造出了 4MB 内存,结果最后只有 2MB」。
Dave Plummer 则回应称,这块内存「只能返回每隔一个字」,也印证了问题出在数据访问逻辑上。

好在,这并不意味着内存板本身出了大问题。在后续发布的 X 内容中,Plummer 更新了项目进展,其表示:「我搞定了!修改了 FPGA 代码……现在已经通过了所有测试!」

更让人兴奋的是,他不仅修复了内存访问问题,还成功让这台 PDP-11 启动了 UNIX 多用户模式。

其中,多用户模式意味着系统需要同时管理多个用户和进程,对内存的稳定性和完整性提出了更高要求。
相比普通内存测试,能够启动 UNIX 多用户模式,显然是更有说服力的验证。而这次成功,也让整个项目从「看起来能用」变成了真正意义上的可用。
有人建议用树莓派,他说自己早就试过了
对于一台诞生于 1970 年的老电脑来说,能够用一块现代自制内存板实现 4MB 扩容,本身就相当有意思。随着 Dave Plummer 将自己的这次尝试分享出来,也引发了不少的讨论。
也有网友提出了另一种思路:既然老电脑的内存接口这么麻烦,为什么不直接用树莓派连接 PDP-11 的总线,通过软件模拟内存?
Plummer 的回答倒是很干脆:他上周基本已经这么做过了。
此前,他使用了一块现代 QBone D

也就是说,这次 FPGA 内存板并不是他解决老电脑内存问题的唯一方案,而是一次更接近传统硬件实现的尝试。
回头看这次折腾,最有意思的地方或许并不是 ChatGPT 一次性设计出了一块完美的 RAM。
从原理图、PCB 布局到 FPGA 编程,AI 帮 Dave Plummer跨过了不少陌生领域的门槛,但实际测试中遇到的问题,仍然需要他自己一
而现在,这块自制 RAM 已经不只是「看起来能用」了。它通过了测试,还让一台诞生于 1970 年代的老电脑成功启动了 UNIX 多用户模式。
对于一位第一次尝试 FPGA 编程的老工程师来说,这场折腾显然还挺值。
参考:
https://x.com/davepl1968/status/2115871903114260528
https://www.tomshardware.com/pc-components/ram/veteran-microsoft-engineer-makes-his-own-ram-from-scratch-using-ai-attempts-to-build-4mb-of-1970s-pdp-11-ram-from-scratch

