芯粒(chiplet)
几十年来,人们的本能做法都是把所有东西塞进一整块大硅片里——也就是单片芯片(monolithic)。芯粒(chiplet)把这个本能反了过来:你把设计拆成几块小小的、各管一摊的裸片(die)——这里放一簇 CPU 核,那里放一块 I/O,再来一块缓存——然后把它们装进同一个封装里,彼此之间连得极其紧密,工作起来几乎就像一颗芯片。可以把它想成:从用一整块大理石雕一尊像,改成用乐高积木来搭——与其押注在一个又大又冒险的部件上,不如把几块更小、更成熟可靠的部件拼到一起。
图什么呢?最大的理由是良率。缺陷会随机落在晶圆上的某个位置,所以裸片越大,越容易被某个意外瑕疵毁掉整片——而在最先进的工艺节点上,扔掉一块巨大的裸片代价高得惊人。把这块裸片切成四小块,单个缺陷就只毁掉其中一小块;好的那几块(known-good die,已知合格裸片)留下,便宜的废片扔掉就行。芯粒还让你能混搭节点:渴求最新、最贵工艺的计算核心可以用最尖端的节点,而几乎不靠缩小受益的 I/O 和模拟模块则留在更便宜、更成熟的节点上。而且因为每块芯粒都是自成一体、可复用的积木,你可以把同一套核心组合既放进一颗笔记本电脑芯片,也放进一颗 64 核服务器芯片,而不必从头重新设计。
代价在于那道接缝。同一块单片裸片上的两个晶体管,靠几微米长的导线对话;而两块芯粒之间,信号必须横跨封装,这比留在片内要多花一些能量、多担一点延迟。所以芯粒要依赖高密度封装——并排坐在硅中介层(interposer)上,或者叠起来——再加上快速、标准化的裸片间(die-to-die)互连,好让这道边界几乎看不出来。UCIe 就是正在兴起的开放标准,让来自不同厂商、不同节点的芯粒能够拼接起来,就像当年 USB 统一各种外设那样。AMD 的 Ryzen 和 EPYC(计算裸片与 I/O 裸片分开)、Intel 的分块(tiled)处理器、苹果的双裸片 Ultra 系列,都是已经大批量出货的芯粒设计。
MONOLITHIC DIE CHIPLET PACKAGE +-------------------+ +-----------------------------+ | | | [CPU] [CPU] [ I/O ] [cache]| | cores + I/O + | | die die die die | | cache + analog | | =========================== <- die-to-die links | ALL on one node | | ====== interposer ========= | | one defect = lose| +-----------------------------+ | the whole thing | small dies, each maybe a +-------------------+ DIFFERENT process node
一整块大的单片裸片会让整颗芯片因一个缺陷而报废,并把每个模块都锁死在同一个工艺节点上;把它拆成中介层上的多块芯粒,则能提高良率,并让每块裸片用上最适合自己的节点。
芯粒用单颗裸片的简单性换来更好的经济性,所以前沿工作就是把裸片间的跨越做得足够便宜——无论是能量还是延迟——让整个封装表现得就像一颗芯片。