很多人把芯片设计方法的演化史当成一份产品编年史来读:哪年出了哪个工具、谁发布了什么语言、哪个公司收购了谁。我这些年陆续啃过不少这类资料,发现真正值钱的不是年份表,而是一条贯穿始终的暗线——抽象层级的一级级抬升,以及自动化边界的一次次外推。
这话怎么理解?芯片设计从晶体管级走到门级,从门级走到寄存器传输级,再往行为级、系统级走,本质上一直是同一件事:把一部分“确定怎么做”的细节,交给库、工具和流程去处理,让设计者能把精力放到更高层次的决策上。围绕标题“芯片设计方法的演化史”,这篇文章不打算罗列时间线,而是把演化背后的驱动逻辑、关键转折和当下的新拐点拆开讲清楚。适合刚接触芯片设计的人建立整体框架,也适合有几年经验的工程师回头重新理解自己每天都在用的流程——很多你以为的“新趋势”,其实是同一套历史逻辑的又一次重演。
1. 从画矩形到写RTL:抽象层级抬升是演化的主轴
1.1 晶体管级设计:连一颗MOS管都要亲手画
最早做芯片的人,确实是在"画芯片"。那个年代没有标准单元库,没有逻辑综合,设计者拿到一块版图,面对的是无数多边形:哪一块是扩散区,哪一块是多晶硅栅,哪一条金属线连到哪里。画一颗最普通的MOS管,要手动确认沟道的宽长比、源漏区的形状、接触孔的位置,稍有偏差,流片出来可能就是一颗反着工作的管子。
这种设计方式只在集成度很低的时候勉强能跑。几十个晶体管的手工版图,靠人肉排布还能搞定;到几千个晶体管的时候,人手画图开始变成纯体力活。这跟盖房子一样,你不可能每块砖都找工匠现场雕。行业第一次真正意义上的方法革命,是把“晶体管组合”做成了标准部件——标准单元库。
所谓标准单元,就是把经过验证的、固定高度的逻辑功能块预先把版图画好,比如一个二输入与非门NAND2、一个带复位的D触发器。设计者不再需要关心这些单元内部是怎么画出来的,只要像拼积木一样把它们放到一行行等高的格子里,再连上线就行。这大概是芯片设计史上第一次大规模的“抽象”:底层版图细节被封装进库里,设计者面对的变成了电路符号和网表。
1.2 RTL的出现:把设计语言从电路图改成状态机
标准单元解决了“怎么画”的问题,但没有解决“怎么想”的问题。设计者仍然先要在脑子里把电路拆成门级结构,再手动例化一堆门单元。寄存器传输级(RTL)设计的出现,彻底改变了这个思考方式。
RTL的核心思想是:你不需要描述电路里每个门怎么连接,你只需要描述每个时钟沿到来之后,寄存器里的数据如何变化。至于组合逻辑怎么实现、用什么门、怎么摆放,那是综合工具的事。Verilog和VHDL就是这个时代的产物。一个有数字电路基础的人,从画电路图过渡到写RTL,心理上最需要跨过的坎是:写代码时的每个always块、每个assign语句,背后都是硬件电路,不是软件程序。
从产业角度回看,RTL的胜利不只是语言本身的胜利,而是**设计流程从“自底向上”翻转为“自顶向下”**的标志。在此之前,设计者先画好底层单元,再逐级组合;有了RTL之后,设计者先想清楚架构和状态转移,再让工具去生成底层结构。现在市面上很多芯片设计方法教材,包括不少NPU方向的设计教材,起点几乎都在RTL这一层,就是这个历史分水岭留下的惯性。
1.3 抽象不是免费的,每往上走一层都会丢信息
这里必须说句泼冷水的话:抽象层级不是越高越好,每一次抽象都有代价。RTL里一个简单的加法操作,设计者不需要管进位链里每个门怎么实现,但代价是丢掉了底层物理特性的精确感知——同样一段RTL,在先进工艺下可能因为布线拥塞导致时序收敛不了,可能因为某个组合逻辑路径太长导致频率上不去。
也就是说,每次抽象都在“设计产能”和“物理控制力”之间做交换。标准单元库让你不用手动画晶体管,代价是你没法像全定制电路那样手工压缩每一微米的面积;RTL让你不用手搭门级网表,代价是有些电路结构上的怪癖你无法直接表达,只能通过代码风格间接诱导工具生成。这是理解整个演化史的关键:没有一个方法是全面优于前代的,只是痛点转移了。
真正的设计高手,往往恰好是那些能跨层思考的人。写RTL的时候能预判综合结果,做物理设计的时候能回溯到RTL结构问题,这正是无数新人巴不得拿一个HLS工具把他带出苦海、但老工程师始终谨慎对待高层次综合的根本原因。
2. 手工版图时代与GDSII:文件格式才是最早的“版本管理”
2.1 为什么我对GDSII的印象最深
很多介绍演化史的文章会把重点放在工具上,但我干了这一行之后,慢慢发现一件挺反直觉的事:真正受到广泛认可、影响了几十年设计流程的,是一个看起来毫无技术含量的东西——数据格式。
早期芯片设计工具本来各搞各的,你做图形编辑,他做设计规则检查,互相之间数据根本不通。设计师在编辑工具里画完版图,导出一份数据,拿到另一家的检查工具里死活打不开,只能通过中间人手工转换。这个时候,Calma公司搞的GDSII流片格式,凭借先发优势和足够简单的数据结构,成了行业默认的“通用语言”。今天你走到任何一家晶圆厂,签核阶段的版图数据仍然可以是GDSII,哪怕OASIS这类新格式效率高出不少,GDSII依然靠存量生态活到了现在。
这件事给我们的启发是:芯片设计方法的演化,很多时候不是某个算法突破,而是接口标准化落地。就像版本管理之于软件工程,GDSII之于芯片设计,其实就是最早的数据交换协议。它解决的核心问题,不是“怎么设计”,而是“怎么把设计结果可靠地交接给下一个环节”。
2.2 DRC和LVS:从瞪眼检查到自动化验证
在版图还靠手工绘制的时代,验证工作更是原始得让人哭笑不得。设计规则检查(DRC,Design Rule Check)最早就靠设计者拿尺子量、拿眼睛瞪,对照工艺厂发下来的一页纸设计规则,看自己的多边形间距有没有违规。版图与原理图一致性检查(LVS)呢?要人工对比原理图和版图里的器件连接是否一致。几十个晶体管还能瞪得过来,上规模之后,人眼就是最大的瓶颈。
所以EDA公司早期最有价值的产品,其实不是“帮你画版图”,而是“帮你查错”。第一代DRC工具的意义,等同于软件工程里的静态检查——机器按规则穷举扫描版图,把所有间距、宽度、包围关系逐一比对。这套机制背后反映的是整个行业对“设计正确性”的管理思路转变:从依赖个人责任心,走向依赖流程和工具保证。
DRC规则的条目数量变化,也侧面反映了工艺演进对设计方法的影响。早期工艺的设计规则一两页纸能写完,现在先进工艺的设计手册上千页,规则条目动辄以十万计。如果还靠人眼,先不说效率,光是漏检一条就够流片翻车的。
2.3 文件格式的演进史就是交接环节的演进史
顺着GDSII往下看,整个EDA生态里的格式五花八门,但每个格式都对应一个交接场景:
- GDSII/OASIS:物理版图数据,给晶圆厂做掩膜用的最终输出。
- LEF/DEF:LEF描述标准单元库的抽象版图信息,比如单元高度、引脚位置、布线阻挡层,DEF则描述具体设计的实例位置和连线关系。物理设计工具靠这对组合完成布局布线,才不用每次都去解析库完整的版图。
- SDC:时序约束文件,把时钟周期、输入输出延迟、伪路径等约束标准化,让综合、布局布线、签核工具用同一套时序目标。
- UPF:电源意图格式,描述电压域划分、电源开关策略、隔离单元和电平转换单元的需求。
- CDL/SPICE:晶体管级网表和电路描述。
可以看到,每出现一个跨工具、跨阶段的交接问题,行业最终都会沉淀出一种标准格式。这也是为什么许多新人第一次接触项目代码时晕头转向——他不理解这些文件是干什么的,自然也就不知道怎么改。
如果只记住一句话:工具会不断更替,但这些“接口语言”才是一个设计流程里最稳定的主干。你在一家公司积累的对这些格式的理解,换一个设计平台基本不会折旧。
3. 综合出现后,“写芯片”才终于变成了“写代码”
3.1 综合到底解决了什么问题
逻辑综合工具的商用化,尤其是上世纪80年代末Synopsys把Design Compiler推向市场,是芯片设计方法史上最关键的转折点。它的意义不是让版图自动画完,而是让电路结构设计第一次真正自动化。
综合的输入是三个东西:RTL代码、标准单元库、时序约束。输出是门级网表——一个由标准单元实例和连接关系组成的“电路清单”。它做的事情本质上是在解一个优化问题:在满足时序、面积、功耗约束的前提下,把RTL描述的行为映射到给定工艺库里的实际逻辑单元。也就是说,设计者第一次可以在“电路细节完全没定”的情况下,先把行为描述写清楚,剩下的交给工具去选门、排逻辑。
这放到软件工程里相当于:以前你写程序必须自己管理变量在内存里的位置和寄存器分配,现在你可以用高级语言写,编译器帮你做底层映射。我后来回头看RTL设计,总觉得它更像一门“把行为描述清楚之后,剩下听天由命”的工程学科,在很大程度上,听的不是命,是综合工具。
3.2 时序约束SDC:一套大家都要懂的“行话”
但综合不是随便按一下就跑出来能用的网表。设计者必须通过SDC告诉工具很多决策信息:时钟周期是多少、时钟偏斜怎么定义、哪些路径是伪路径可以不收敛、哪些输入输出接口延迟必须满足。这就像写代码前先跟编译器和同事约好接口规格一样。
很多从FPGA转做ASIC的人,第一个不适应的地方就在这:FPGA里时钟约束写宽松点,工具照样给你跑出结果;ASIC里时序约束稍微写错一点,综合出来的网表直接没法用。实际上,SDC约束质量的高低,直接决定设计收敛速度。我见过太多团队在综合阶段草草给个时钟周期了事,结果后面物理设计天天在修setup、修hold,加班全加在还给综合阶段欠下的债上。
写约束时的常见套路是:先用较松的约束跑一版综合,看面积和时序基线,再逐步收紧时钟和I/O约束。新人的误区是上来就把约束拉满,导致综合为了满足约束做出异常的逻清结构,反而面积爆炸、布线更难收。
3.3 现代流程里离不开的Power Rail设计
回到标题里提到的power rail相关话题,现代芯片里电源网络设计已经是一门显学。早年芯片功耗低,电源轨(power rail)也就是在版图周围画一圈较宽的金属线,把电流送到各个单元就行。现在一颗多核SoC功耗动辄几十上百瓦,核心区域的电源完整性成了大问题。
电源轨设计的核心矛盾在于:金属层电阻会带来压降(IR drop),电流密度过大会导致电迁移(EM),电源噪声会影响时序裕量。设计者必须尽早把电源网络规划纳入全局:从UpF定义电压域和电源开关,到物理设计阶段预留足够的电源轨资源,到签核阶段做全芯片IR drop分析。如果不提前做,等到封装完毕再发现某些角落电压不足,那就是流片级别的惨剧。
我建议每个做数字后端的人,都至少要花一段时间专门看电源网络设计。这个领域并不需要多高深的理论,但需要很强的全局感——哪条供电路径经过哪些模块、哪些模块是同时翻转的高峰、IR drop最差的位置在哪。所有这些,构成了现代布局布线之前必须解决的“供电骨架”问题。
4. 验证的翻身仗:从15%的工作量到70%的时间都耗在这
4.1 一度被忽视的验证
早期的芯片设计项目里,验证并不是一个被特别重视的环节,设计者写完电路,花点时间跑一遍仿真波形,肉眼看看结果对不对,就算完成了。那个时代验证占整个项目的人力比例,我估计也就15%上下。
但随着设计规模上升,一个反直觉的现象出现了:设计产能上来了,设计错误也成规模地上来了。芯片不能像软件一样发布后再打补丁,一次流片动辄几个月、动辄烧掉几十万甚至几百万美元,逻辑错误流片之后才发现,代价是灾难性的。于是验证从一个“附属环节”逐步翻身,到今天很多团队验证工程师的人数已经是设计工程师的两倍甚至更多。
4.2 验证方法的几次转向
第一次转向,是从定向测试到约束随机验证。以前人们为每个功能写专门的测试向量,后来发现你根本写不全所有边界情况。约束随机验证的思路是你定义合法的激励空间,让工具随机生成数据往里灌,用覆盖率来衡量验证得够不够。这就像你不可能手动列出一万种用户输入,但你可以写个随机数生成器模拟用户,最后看代码覆盖率、功能覆盖率来评估风险。
第二次转向,是UVM验证方法学的普及。2011年前后UVM成为Accellera标准之后,可复用验证环境终于有了统一框架。sequence、driver、monitor、scoreboard这些组件各司其职,一套环境可以在多个项目中复用。我对UVM的看法是,它的重要性不是语法,而是把验证的“组织方式”固定了下来——你不再是给每个测试点单独写一套脚本,而是构建一台流水线式的测验证机器,不停注入激励并自动检查输出。
第三次转向,是形式验证的真实落地。等价性检查已经成了综合前后、布局布线前后必跑的项目,保证每一步转换没有改变逻辑功能。更高阶的模型检验、断言形式化验证,虽然还不至于完全取代动态仿真,但在一些关键模块——比如仲裁器、状态机、死锁场景——已经能发挥出仿真看不到问题的优势。
4.3 验证不在“找Bug”,而在“证明足够正确”
我喜欢的验证定义是:验证不是证明你没有Bug,而是用穷举、抽样式、数学化的方法,尽可能让人相信设计已经“足够正确”。这个视角决定了验证策略的根本方向。
对一个大模块,你没有资源跑完整功能遍历,所以你要设计覆盖模型,找出最需要关注的特征空间;你没有时间让每一条断言都在动态仿真里被证明,所以你要规划哪些用形式化穷举,哪些用随机仿真,哪些用硬件仿真加速器跑回归。这种策略权衡的能力,是验证工程师区别于测试工程师的核心分水岭。
5. 工艺缩到纳米级,设计流程被倒逼着重新武装
5.1 工艺演进改变的不只是尺寸
芯片设计方法的每一次大改,几乎都有一个共同的外部推手:工艺特征尺寸缩小。从微米级到深亚微米,再到纳米级、几纳米级,变化的不只是晶体管变快,还有一堆本来可以忽略的物理效应开始变得致命。
短沟道效应让泄漏电流变大,低功耗从“能省则省”变成“必须管理”;金属连线的电阻电容延迟占比快速上升,门延迟不再是时序的唯一主角;工艺制造里的图形失真、关键尺寸偏差,连设计规则都开始要为可制造性考虑。我并不喜欢把摩尔定律当成一种技术承诺,它更像一个经济学目标,但这个目标倒逼出来的设计方法进化,确实是过去五十年半导体行业最核心的技术主线。
对设计流程的具体影响,大概可以分成几个方面:提取与签核工具从简单RC走向三维场求解器;时序分析从理想时钟走向片上变异(OCV)建模;功耗分析从平均功耗走向动态压降和电迁移的精确评估;DRC从规则检查走向可制造性设计(DFM)。
5.2 低功耗设计方法学成为独立分支
功耗管理在早期设计里几乎不是个学科,现在单独把低功耗设计方法学拉出来讲,内容多到足够写几本书。从架构层面看,有动态电压频率调节(DVFS)、多电压域、电源门控;从电路层面看,有门控时钟、操作数隔离、低功耗标准单元库;从流程层面看,UPF定义的电源意图贯穿从RTL到物理实现的每一个阶段。
最让我感慨的一点是,很多设计团队并行开发了多种低功耗技术,却忽略了它们之间的耦合。例如,电源门控虽然能显著降低漏电,但开关电源时产生的大电流冲击会带来IR drop噪声;门控时钟省了动态功耗,却可能在时钟树上制造额外的偏差让时序更难收敛。真正成熟的低功耗设计,往往是在这些相互牵制的目标之间找平衡。别指望靠某一个“黄金技巧”解决问题,低功耗设计就是一个系统工程。
5.3 从“规则”走向“意图”,设计约束的表达越来越抽象
早期物理设计给工程师的输入,基本就是一堆设计规则:金属间距不得小于多少、MOS管沟道长度不能小于多少。工程师在规则框架内做优化。今天的设计约束已经上升到“意图”层面:综合工具需要知道哪些路径要优先满足时序,物理设计工具需要知道哪些模块之间要靠近摆放,签核工具需要知道哪条IR drop限制是硬约束。
这个过程和前面说的抽象层级抬升完全同构:规则告诉你怎么做,意图告诉你做什么。工具拿到意图之后,自己去找最优解。因此,现在一个合格的芯片设计工程师,最重要的能力不是背下所有规则,而是能准确表达设计意图。恰恰是很多从传统物理设计转过来的人,最难适应思维层面的变化。
6. 封装不再是收尾:Chiplet和3D堆叠重新定义设计边界
6.1 设计方法的视力范围第一次越过die边界
过去做芯片设计,封装的属于后端里的“后端”,设计者把版图交出去,封装工程师负责把die装上基板、打线、封塑,大家各干各的。但工艺逼近物理极限之后,靠单die单工艺解决所有问题的成本越来越高,行业把目光转向了系统级封装、2.5D/3D堆叠和Chiplet。
Chiplet的本质,是先进封装技术与设计方法学的合流:把一颗大芯片拆成多个小芯片(die),通过封装基板上的高密度互连把它们拼回一个系统。从设计方法的角度看,这件事最革命的地方在于,设计者要考虑的物理域,从单一die内部的金属层扩展到了die和die之间的硅中介层、基板布线、微凸点接口。高速并行接口、信号完整性、供电分布式网络、热累积问题,成了一颗好芯片设计的决定因素。
6.2 把Chiplet类比成“硅片级标准单元库”
怎么理解Chiplet对设计方法的影响?我想到的类比是标准单元库。
当年标准单元库把晶体管组合模块化,让设计者拼积木式完成大规模电路。Chiplet就是在芯片机尺度重复同一件事:把CPU、GPU、IO、内存控制器、NPU切成物理实体,通过标准互连接口拼在一起。这意味着IP复用从“代码右键复制”升级成了“物理模块直接贴片”。一套好的die-to-die接口标准,比如UCIe这类行业互联规范,就是为这种“积木”之间定义通用接口。
由此带来的方法和工具变化是巨大的。SoC规划设计要从系统热预算、供电结构、散热方式反推die切分,物理设计工具必须能同时处理die内布线和die间基板布线,验证环境要从全片功能仿真走向跨die交互与接口协议验证。
6.3 AI算力芯片正在重新写方法教材
与Chiplet同步发生的,是NPU这类AI算力芯片对设计方法带来的新需求。传统CPU设计以控制逻辑和缓存为主,NPU设计变成了数据流工程——大量并行算子、高带宽片上网络(NoC)、存储与计算的比例权衡。设计方法也因此生发出很多垂直分支:面向数据流架构的HLS探索、针对脉动阵列/近存计算的电路风格,以及围绕利用率、带宽利用率建立的软硬件协同设计流程。
很多人以为NPU设计只是“架构换了,流程没变”,真的做过就会知道差别相当大。举例来说,CPU流水线设计里你关心分支预测准确率、Cache命中率;NPU里你关心数据在NoC里的路由会不会拥塞、片上SRAM的bank冲突多不多。这些差异正在推动新一代设计方法教材改变内容结构,最新热词里频繁出现的“NPU芯片设计方法教材”,正是行业在寻找新叙事的表现。
顺带一提,类似xs9922b这样的具体芯片,它提供的“硬件设计用户指南”式文档,也在悄悄变化——早年芯片手册基本就是寄存器表和引脚定义,现在越来越多硬件设计指南会直接覆盖电源域划分、高速接口布线约束、散热设计建议,甚至给出一套可参考的整机电路方案。这本身就是“设计方法向产品化外溢”的微观证据。
6.4 封装设计成为设计链路上的核心节点
“芯片封装设计”在热词榜单上频繁出现,直观反映了这个趋势。封装设计过去被归类为“结构设计”,如今因为2.5D、3D堆叠工艺成熟,它已经变成决定性能、良率、功耗的关键环节。
设计团队现在最头痛的事情之一,就是die上的引脚分布和封装基板走线之间的协同优化。一个物理上不合理的die pad排布,可能让基板布线绕一大圈,信号完整性变差,强制重新迭代。封装、基板、die三者的绑在一起进行系统级优化,已是新片上系统的常规操作。
7. 演化背后的三条规律,以及正在发生的新拐点
7.1 规律一:自动化永远冲着当前最痛的人力瓶颈去
把整部芯片设计方法演化史串起来看,会发现一个非常朴素的规律:工具和方法,永远在往“当时最耗人力、最易出错、最需要人的经验才能做”的环节集中发力。手工版图又累又容易错,所以标准单元库和自动布线出来了;门级设计规模爆炸,所以逻辑综合出来了;随机验证效率不够,所以UVM和覆盖率驱动出来了;后摩尔时代单die优化越来越难,所以Chiplet和先进封装的知识就开始进入前端设计。
这条规律最大的用途,是用来做职业规划和技术选型。你可以问自己:今天整个设计流程里最痛最贵的环节是什么?大概率答案是系统级验证、物理收敛、跨die协同这些。把时间投入在这些方向,往往比重复学一些已经高度工具化的环节更有价值。
7.2 规律二:接口标准化比单点工具更值得关注
每轮设计方法革新,除了工具层面的突破,一定会沉淀出一套接口标准。GDSII让版图数据得以交接,LEF/DEF让库与物理设计解耦,SDC让时序约束变成全流程通用语言,UVM让验证环境可以跨项目复用,UCIe让die间互连有共同协议。单点工具再强,没有清晰交接边界,设计链照样跑不顺。
这一点对个人的启示也很实在:换工具可以,换标准不行。你从Synopsys切到Cadence,花两周就能适应;但如果你不了解GDSII、LEF/DEF、SDC、UPF这些接口文件,你到哪一家公司都会卡在流程衔接上。
7.3 正发生的新拐点:AI辅助设计正在把“怎么做”也自动化
眼下这轮热潮里,AI辅助芯片设计是最值得关注的方向。强化学习做Floorplan、生成式模型帮助做宏单元摆放、大模型辅助生成验证代码,这些已经在流片项目里实际落地。我认为AI辅助的定位,不是替代设计师,而是把“怎么做”的部分自动化到前所未有的程度,让设计者更专注于“做什么”和“为什么这样做”。它和历史上每次抽象层级提升的逻辑完全一致。
不过有一点暂时没变:无论是RTL还是Chiplet还是AI,给自己留一点能回到晶体管级思考的功夫依然必要。我见过只会在高层写代码、完全不懂底层物理的新人,遇到时序异常和功耗问题容易被卡死;反过来,只懂底层却无法抽象表达需求的老工程师,在现代大规模系统设计里也越来越吃不消。跨层理解,仍然是这门工程手艺里最稀缺的能力。
我自己刚入门那阵,总觉得学芯片设计应该一条路走到黑,把每个工具都摸透、每个格式都背熟。后来回头看,真正开窍的瞬间,是发现这些工具和格式不是孤立的,它们全是围绕“交接和抽象”这两个核心矛盾长出来的。顺着这个视角,你再去看新出的NPU设计方法论、3D堆叠设计流程、AI辅助工具,基本一眼就能看穿它们在这个演化坐标里的位置——哪个环节在抬升抽象、哪个环节在接管交接、哪个环节在解决上一轮抽象后遗症。那感觉,比闷头看十本工具书都管用。