
一根会说“就是你”的信号线
时间来到 1985 年。一位工程师坐在工作台前,为计算机世界里最不起眼的问题耗掉了整个下午。
她面前的电路板并不复杂:中间是一颗处理器,左边是一颗存放程序的存储芯片,右边是另一颗保存程序当前数据的芯片。它们通过一排并行导线相连。处理器一公布地址,两颗芯片就会同时听见。
问题恰恰在这里:它们都听见了,但处理器只是在和其中一颗说话。
因此,必须有个角色站在处理器和存储芯片之间,像会议主持人一样点名:这次轮到左边那位发言,右边那位请先别抢麦。
判断规则并不复杂,一口气就能说完:如果地址落在内存的高半区,而且处理器正在请求读取,就唤醒左边那颗芯片。
一句话,一根信号,这就是全部工作。
可在 1985 年,为了实现这句话,得搭进去电路板的一整个角落。
小黑芯片组成的海洋
如果你见过那个年代的电路板,仔细观察便会发现一件怪事。
在处理器、存储器以及那些真正负责“产品卖点”的昂贵大芯片周围,往往散落着一群长相雷同的小黑方块。每颗大约十四只引脚,少则十几颗,多时甚至有三十颗。
它们干的事情,基本都不会印在包装盒上。
这些是 7400 系列逻辑芯片,每颗只装着几个最基础的逻辑功能:有的包含四个 AND 门,有的装着四个 OR 门,还有的提供六个反相器。反相器的一生相当专一:输入高电平,它就输出低电平,反之亦然。工作内容简单得像一位只负责说“不”的门卫。
为了实现前面那条一句话规则,工程师可能要从第一颗芯片借几个逻辑门,从第二颗再借两个,最后去第三颗那里凑一个反相器。
然而,每颗芯片都是实打实的物理对象。它需要占用电路板面积,需要布线,需要焊接一堆引脚,还会在设备开机期间持续吃掉一点电。
工程师把这些东西叫作 glue logic,也就是“胶合逻辑”——它们像结缔组织一样,把真正有意思的部件粘在一起。这个名字里多少带点嫌弃:没人会在发布会上激动地宣布,我们今年的胶水又先进了百分之二十。它只是必要开销,不做又不行。
但真正昂贵的并不是板上空间,而是那句话写错之后会发生什么。
因为此时,逻辑已经变成了铜。它被蚀刻成电路板上的实体路径。想修改逻辑,就得修改电路板本身。
于是工程师拿起刻刀,找到那条不该存在的铜线,小心地把它割断——这是一场精确、克制而且迫不得已的破坏行为,对象则是一块花了六周时间、经过工厂生产才拿到手的电路板。
接着,她再焊上一根飞线,把信号接到本来应该去的地方。业内称这种线为 bodge wire。一块板子上要是挂了两三根,看起来就像刚做完外科手术:功能恢复了,缝合线和伤疤也大大方方地露在外面。
那时,每一个逻辑错误,都会变成一道真实的物理伤口。
GAL 就是在这样的世界里登场的。
一颗还没想好自己要干什么的芯片
它看起来平平无奇:二十只引脚,黑色外壳,大约一枚拇指甲那么大。今天买一颗,甚至用不了一美元。
GAL 的全称是 Generic Array Logic,通常译作通用阵列逻辑。它内部是一张连接网格,每个交叉点上都有可配置结构。
芯片离开工厂时,并没有决定自己将来要做什么。它像一张空白乐谱:以后是负责地址译码、产生时钟,还是夹在两颗芯片之间充当协议翻译,都不是芯片出厂时的既定命运,而取决于使用者写进去的内容。
而你用来告诉它的,不是烙铁,而是文本。比如这一行:
/RAMS = /MREQ * A15
这其实就是工程师在工作台前说出的那句话,只不过换成了机器能理解的形式:当处理器正在访问内存,并且最高地址位为高时,把 RAM 的片选信号拉低。
将它编译,通过编程器写进芯片,再把芯片插进插座,那句话便成了真实的硬件逻辑。
芯片数量随之断崖式下降。
曾有一位修复 68000 计算机的爱好者,用一颗 GAL 替换了整套分立地址译码电路,一口气从板上删掉了 八颗芯片。面积、省电、焊点,以及原译码器里的一个 Bug,全都一起消失。
另一个 PDP-11 单板机项目则发现,有了 GAL,六颗 TTL 芯片压根不用安装。更妙的是,GAL 往往还比被替换掉的旧逻辑更快:信号传播只需大约 15 纳秒,而老器件还在后面慢悠悠地赶路。
不过,真正重要的数字并不是八,也不是六,而是这个事实:GAL 可以擦除并重新编程。
现在写错逻辑,不必再拿刻刀,也不用在板子上焊一根横跨半场的飞线,更不用留下伤疤或等待六周。
拔下芯片,改一行,重新写入,再插回去。修正错误只需要几秒钟。
这里发生了一件安静却极其重大的变化。后面的整个故事,其实都只是这件事的不同版本:
硬件的最终形态,不再必须在工厂里决定。
这个决定被推迟了,并交到了真正拿着电路板的人手中。
核心思想就这么简单。之后发生的一切,不过是在它后面不断加零。
同一个想法,长大到有点吓人
既然能推迟一次决定,那就索性多推迟一些。
别只留下一小块尚未定义的逻辑。我们可以在芯片里铺上成千上万个空白逻辑单元,把它们排列成网格;更关键的是,就连这些单元之间如何布线,也暂时不决定。
这不只是一堆空白逻辑门,而是一座尚未规划用途的城市,连道路都可以重画。
这就是 FPGA:Field-Programmable Gate Array,现场可编程门阵列。
所谓“现场可编程”,是指芯片完成制造、封装、销售、运输,甚至已经焊到电路板上之后,用户仍然可以决定它到底是什么。GAL 里只有有限的可配置连接,而 FPGA 里则可能有数百万个开关。它们由一个称为 bitstream 的配置文件控制,设备上电时,通常会从旁边的一颗 Flash 芯片读取并加载。
于是,FPGA 有了一个相当奇特的特性:一断电,它就“失忆”。
每次机器重新启动,FPGA 都会回到一片空白的状态,必须重新被告知自己是谁、应该做什么。
而你告诉它的,也早已不只是一句简单逻辑。它可以是一整条信号处理流水线、一个视频编码器、一台网络交换机,甚至是一颗真正能运行的处理器。
毕竟,处理器本质上也只是大量逻辑门构成的复杂结构。只要 FPGA 资源足够,没有什么能阻止你把这些逻辑门排列成一颗 CPU。
不过,人们愿意为 FPGA 买单,关键并不只是它能装下多少逻辑,而是它能变成什么形状。
普通处理器非常聪明,但工作方式基本像单队列窗口:先做第一件事,再做第二件事,然后做第三件事,只不过速度极快。
FPGA 不需要按这种顺序办事,因为它不是在依次执行指令。它已经被物理配置成了答案本身。不同部分可以同时运行,因为它们就是同时存在的独立电路。
如果你必须在同一瞬间,对一万个输入值执行相同操作,那么你需要的不是一个读得更快的人,而是一万双同时开工的手。
一个远在 2.25 亿公里外的真实案例
2021 年 2 月,NASA 的“毅力号”火星车穿越火星大气层。下降过程中,它用相机观察地面,把实时画面与机载地图进行对比,判断自己身在何处,以及脚下那片区域究竟适不适合着陆。
它只有几秒钟时间。
地球上的任何人都帮不上忙,因为无线电信号往返一次所需的时间,比整个下降过程还长。等地球回一句“收到”,火星车可能已经落地——至于是正常落地,还是以零件形式落地,就不好说了。
毅力号的主飞行计算机使用抗辐射处理器。它的第一任务是扛住太空环境,而不是参加跑分比赛。处理一对立体图像,大约需要 180 秒。
旁边的 FPGA 加速卡完成相同工作,只需大约 1.5 秒。
这两者之间的差距,就是一套着陆系统与一块非常昂贵的火星石头之间的差距。
接下来发生的事,才真正把 FPGA 的魅力讲明白。
火星车安全着陆后,下降过程结束了。着陆逻辑已经完成使命,以后再也不会用到。于是工程师重新配置了那颗 FPGA。
同一块物理硅片,刚刚还在引导毅力号穿过火星天空;着陆后,它又在另一个星球表面被重新排列,变成一套帮助火星车观察前方地形、决定往哪里开的系统。
一颗芯片,两台完全不同的机器。
而第二台机器,直到第一台机器完成任务之后才真正诞生。
这正是 1985 年工作台上那枚可擦除配置单元一路发展到极致的模样。
可你口袋里的手机,偏偏不这么干
故事到这里要拐个弯。
还是那项最朴素的工作:唤醒正确的芯片。
如果去现代智能手机里寻找,你一定能找到它的某种对应实现。你正在阅读这篇文章的设备,很可能每秒都要执行数十亿次类似判断。
但它不在 GAL 里,也不在 FPGA 里。
它被永久蚀刻进了一颗定制芯片,在工厂里一次决定,此后直到手机报废都不会改变。
这种芯片叫 ASIC,也就是 Application-Specific Integrated Circuit,专用集成电路。
按照前面的评价标准,ASIC 简直像是“最差选项”:毫无灵活性;逻辑写错了,不能飞线修补,也不能重新下载配置,严重时只能召回产品;而且设计通常在产品上市前几年就得冻结。
然而,这样一颗芯片,量产成本可能只要两美元左右。
问题来了:既然永久固化的硅片这么便宜,为什么不把所有东西都做成 ASIC?大家何必花钱买那种一拔电源就忘记自己是谁的芯片?
藏在“两美元”背后的那个数字
因为两美元,只是下一颗芯片的价格。
在第一颗 ASIC 诞生之前,工程团队必须完成设计,进行近乎穷尽式的验证,购买各种 IP 授权,还要承担最狠的一笔开销:制造光掩模。
光掩模可以理解为把电路图案“印”到硅片上的物理模板。在现代制程节点上,仅一套掩模的成本就可能达到一千万至四千万美元。
最先进制程的完整芯片项目,报价甚至可能达到数亿美元。当然,公平地说,这些吓人的头条数字一直存在争议。一些芯片创业公司据称只花了其中一小部分,就完成了先进节点设计。
具体金额可以争论,但成本曲线的形状没什么可争的。
工程师给这类费用起了一个名字,也是本文最值得记住的术语:NRE,即 Non-Recurring Engineering,非重复性工程成本。
这笔钱只付一次,而且是在产品真正存在之前就要支付。至于未来只生产一台,还是生产十亿台,它都不会主动少收你一分钱。
只要同时看懂 NRE 与单件成本,整个芯片行业立刻就没那么神秘了:
| 第一件产品诞生前的成本 | 单件成本 | 出货后还能修改吗? | |
|---|---|---|---|
| 分立逻辑门 / GAL | 基本可以忽略 | 几美分 | 可以,而且很简单 |
| FPGA | 主要是工程开发时间 | $20 到 $20,000,而且每一台都要付 | 可以,甚至能远程更新 |
| 定制芯片(ASIC) | 数百万至数亿美元 | 大约几美元 | 不可以 |
现在拿出计算器,你会发现,许多原以为属于工程技术的问题,其实早就被算术决定了。
假设投入五千万美元 NRE,生产两亿部手机,那么平均每台只增加 25 美分。
这时不做 ASIC 反而不理性。因为单件成本每降低一美元,乘以两亿部就是两亿美元。那笔看似巨大的前期投入,转眼就淹没在出货量里,连水花都不太明显。
但如果还是投入五千万美元,却只生产四十台设备呢?
那么每台要分摊超过一百万美元。更糟的是,你得到的还是一套永久固化、无法修正的设计,而这批设备可能在成本尚未收回前就已经换代。
四十台并不是为了方便计算随口编的数字。
2024 年,ASML——那家几乎垄断全球先进芯片制造设备的公司——只卖出了 44 台极紫外光刻系统。其最新一代设备每台价格大约 3.8 亿美元。
这些机器可能是人类组装过的最复杂设备之一,也是整个半导体行业最关键的瓶颈。可它们一年的产量,找个大点的超市停车场就能全部停下。
面对这样的出货量,一颗价值一万美元的可编程芯片根本算不上奢侈。与整台机器相比,它只是财务报表里一个不太值得皱眉的零头;而且出了问题,还能靠固件升级改进,不必把设备拖回工厂动手术。
于是我们得到了一个相当反直觉的结论:
世界上一些最昂贵、最先进的硬件,使用的定制硅片反而可能比一部中端手机更少。
不是因为设计者做不到,而是因为他们认真做过乘法。
原来我们一直站在这条曲线上
所以,同一根小小信号线的四种形态,从来不是四级进化阶梯,不是越新就一定越好。
它们只是四个不同问题的正确答案。
真正的问题从来不是:怎样实现才最先进、最有技术含量?
而是:这东西究竟要生产多少次?
决定硅片形态的是产量。不是聪明程度,甚至不完全是预算,而是产量。
更值得带出硬件世界的是:这条曲线并不会止步于电路板。
每当你考虑,是花一上午把某项工作自动化,还是直接手工做完,你其实都在比较 NRE 与执行次数。
自动化就像 ASIC:第一次投入很贵,之后每次执行几乎免费。
手工处理则更像 FPGA:前期准备少,但每做一次都要重新付出成本。
如果任务未来两年每天都要发生,那么不写工具多半是在和自己过不去。可如果这件事总共只会发生两次,那么造工具本身才可能是那个昂贵的错误——哪怕代码优雅得能拿去裱起来。
租用基础设施,还是自己搭建;引入完整框架,还是只手写眼前需要的功能;现在就抽象出一层,还是先复制粘贴三次,看看规律到底会不会出现。
本质上都是同一条曲线、同样两个变量。
人们之所以经常做错这类决策,通常不是不会算术,而是压根没意识到这里有一道算术题。
前期成本与重复成本,是两种完全不同的动物。它们之间存在一个真实的交叉点。只要愿意坐下来估算未来的使用次数,就有机会把那个点找出来。
1985 年的那位工程师当然还看不到这一切。
她只是想让一根信号线对正确的芯片说一句“就是你”,并且为了让这句话成立,不惜亲手在自己的电路板上动刀。
四十年后,那根线说的仍是同一句话。
改变的,只是让它改口需要付出的代价。
免责声明:本文由人类撰写,并在适用之处使用 AI 改进。