两周。
这就是一个独立黑客,从零开始拿到芯片流片文件所需的全部时间。
这不是在写PPT,也不是在画大饼,而是实打实的物理实体——一颗基于 GlobalFoundries 180nm 工艺的 ASIC 芯片。
在这个动辄需要几十人团队、耗资数百万、耗时数月的芯片行业,这听起来像是个天方夜谭。但就在刚刚,有人真的做到了,而且还是免费的。## 免费的小白鼠
如果你觉得“免费”这个词听起来很诱人,那背后的代价可能让你望而却步。
这次流片是通过 Tiny Tapeout 的“实验性班车”完成的。为什么免费?因为你是小白鼠。
这种实验性班车是新工艺节点和新设计流程的“试炼场”。工具链不稳定?那是常态。芯片最终能不能点亮?全看天意。甚至不同设计之间的隔离度都不如正式班车那么高。
参与资格甚至有门槛:你必须以前提交过设计,证明你不是来捣乱的。换句话说,这是一场老兵的游戏。
对于贡献者来说,你必须接受一个残酷的现实:这颗芯片回来后,可能因为各种不可控因素变成一块昂贵的砖头。
但也正因为这种不确定性,主办方大方地免除了费用。这意味着“面积”变得极其廉价,导致这次提交的设计中出现了不少“巨无霸”。
只要芯片最终能勉强工作,这些 ASIC 和开发板就会在 Tiny Tapeout 商店上架出售。
灵魂拷问:我到底在造什么?说实话,我最初并不是为了造什么 AI 加速器。
我想讲一个宏大的故事,说我是为了社区设计一个自由开源的硅验证 AI 加速器。但这不是真相。
这个项目的初衷其实很枯燥——我想设计一套片上调试基础设施,也就是那个无处不在的 JTAG。
至于那个听起来很酷的“脉动阵列矩阵乘法加速器”,它只是作为“被测设计”后来加进去的。
毕竟,如果我的芯片回来变成了一块砖,我至少得有个抓手来搞清楚我到底在哪个环节把事情搞砸了。这大概就是我永远成不了“酷小孩”的原因吧。
14天变成10天的生死时速
让我们认清现实:我要在两周内,从零开始完成架构设计、RTL 编码、仿真、FPGA 验证、固件开发,最后跑到 ASIC 流程。
如果在任何一家正常公司,这个时间表等同于一张通往地狱的单程票。
不要在工作中尝试这种疯狂行为!
而且,我还要承认一件事:我撒谎了。
虽然名义上有两周,但我前四天都在从上次流片的后遗症中恢复——睡觉、出门、和活人说话。剩下的时间都在用“决定技术方向”这种黑话来掩饰“拖延症”。所以,实际上,我只有10天。
为了在死线前活下来,我制定了一个极其紧凑的路线图:架构 -> 设计 -> 仿真 -> FPGA 仿真 -> 固件 -> 实现。
这基本上是我一贯的“祖传”路线图。毕竟,如果没坏,就别修它。
拯救世界的不是超人,是开源工具链
为什么我敢这么作死?自我催眠是一方面,真正的救命稻草是开源硅生态系统的成熟。
OpenROAD 的目标就是实现“无人值守”,将设计周转时间压缩到 24 小时以内。Librelane 则像是一个总指挥,把 OpenROAD、Yosys、Magic 等工具串联起来,从 Verilog 到流片文件,一条龙服务,极少需要人工干预。Tiny Tapeout 补全了最后一块拼图,自动跑完测试并上传 GDSII。
我甚至把 FPGA 的构建流程自动化到了极致,只需要一个命令就能完成从 RTL 到比特流的所有工作,甚至自动插入调试核。
make fpga_prog debug=1
所以,这次设计的瓶颈根本不是工具,而是椅子和键盘之间那个软趴趴的人类。
2x2 的算力美学
既然是 AI 加速器,核心自然是脉动阵列。这次我设计了一个 2x2 的阵列,专门用来做 8 位整数的矩阵乘法。
你可能会问:为什么这么小?既然面积免费,为什么不造个 256x256 的?
因为我要做一个“好邻居”。我占用的每一寸面积,都可能意味着别人失去了提交项目的机会。而且,我的初衷只是验证调试模块,2x2 足够了。
脉动阵列的精髓在于计算与内存访问的比例。
内存访问是昂贵的。SRAM 耗时耗能,DRAM 更是耗时“永恒”且耗能“惊人”。相比之下,计算操作——哪怕是 64 位浮点乘法——都便宜得像白送。数据在阵列内部循环复用,而不是反复去内存搬运。这就是为什么现代 AI 加速器都爱用这玩意儿。
为了省带宽,我甚至把权重直接存储在每个计算单元内部。
当 JTAG 遇上 IEEE 付费墙
这个芯片里真正的主角,其实是 JTAG TAP 控制器。
当我的芯片变成砖头时,JTAG 是我唯一的救命稻草。它不仅是为了这次项目,更是为了未来所有流片准备的“安全带”。
JTAG 是硬件优先的协议,设计起来很直观。但这里有个插曲:IEEE 的官方规范被锁在付费墙后面。我没交那笔保护费,所以我进不去那座城堡。
怎么办?
我决定采用一种全新的设计哲学:“由支持设计”。
既然看不到官方规范,那就让开源工具 OpenOCD 来告诉我 JTAG 应该怎么表现。只要 OpenOCD 报错,那就是我的错。
为了支持我自己定义的那些“离经叛道”的指令,我还得给 OpenOCD 写自定义 TCL 脚本。
这听起来很疯狂,但很管用。
日志显示,我的芯片甚至成功伪装成了一块 Nvidia 加速器(制造商 ID 0x06b)。做人如果没有梦想,和咸鱼有什么区别?
没人能预知结局
奇迹般地,我赶上了这个荒谬的死线。芯片已经在制造厂里了。
这是一场与时间的战斗,但我很自豪没有迷失在“再加一个功能”的诱惑里。
这只是第一步。下一次,我要挑战浮点运算,还要加上扫描链和 ATPG 流程。
我的终极目标是:完全独立地流片一颗属于我自己的芯片,不再依赖 Tiny Tapeout 的保护伞。
开源工具正在让芯片设计变得触手可及,这不再是巨头们的游戏。
至于这颗 180nm 的芯片能不能顺利点亮?
谁知道呢,至少我知道,如果它挂了,我的 JTAG 会告诉我死在哪。
参考链接:
https://essenceia.github.io/projects/two_weeks_until_tapeout/