尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

芯片设计方法演化史:从手工版图到AI辅助的工程实践

芯片设计方法演化史:从手工版图到AI辅助的工程实践 1. 从一张手绘图到千亿晶体管芯片设计方法到底经历了什么刚入行那会儿带我的师傅扔给我一本上世纪八十年代的版图设计手册里面全是手绘的晶体管剖面图和用坐标纸标注的尺寸。他跟我说了一句话我记到现在“你现在打开电脑点几下就能跑仿真是因为前面四十年有人把苦活累活都干完了。”这句话放在芯片设计方法演化史上再贴切不过。芯片设计方法说白了就是“怎么把一堆晶体管连成能用的电路”这件事的做事方式。它要解决的问题非常具体当晶体管数量从几十个涨到几百亿个人脑和双手根本管不过来必须找到一套能分层、能复用、能自动化的流程。这套流程的演化直接决定了今天一颗手机SoC能不能在两年内从概念走到量产也决定了你手里那块开发板上的芯片为什么能卖到几块钱。这篇文章适合谁看如果你是刚接触芯片设计的在校学生或者从PCB设计想往上游走的硬件工程师又或者你只是好奇“为什么EDA软件那么贵还不得不用”那这篇内容能帮你把整个脉络理清楚。我会从最早的纯手工时代讲起一直讲到现在的智能辅助设计中间穿插关键工具、核心方法和实际踩过的坑。不堆术语尽量说人话。2. 手工时代的荣光与局限芯片设计方法的起点2.1 晶体管级手工设计用坐标纸和刻刀做芯片最早的集成电路设计根本没有“设计方法”这个概念。上世纪六十年代一颗芯片上只有几十个晶体管工程师的做法是在巨大的坐标纸上画出每个晶体管的版图标注尺寸然后交给工艺线用刻刀和光刻版去制作。听起来不可思议但当时确实就是这么干的。我见过一份保存下来的老图纸一张A0大小的坐标纸上密密麻麻全是矩形和折线旁边用铅笔写着“基区宽度20微米”。这个阶段的核心特征是设计即版图。工程师脑子里想的是电路功能手上画的是物理图形两者之间没有抽象层。好处是直观坏处是规模稍微大一点就崩溃。一个人能同时管理的晶体管数量极限大概在几百个再往上就会出错。而且一旦工艺变了所有图纸全部作废得从头再来。注意这个阶段留下的一个重要遗产是“设计规则”的概念。即使后来有了自动化工具设计规则检查DRC依然是芯片tapeout前必须过的关卡。我在实际项目中见过因为一条金属间距规则没查出来导致整批晶圆报废的案例损失够买一套房。2.2 从手工到半自动CAD工具的萌芽到了七十年代计算机开始进入设计流程。最初的CAD工具做的事情非常简单把坐标纸上的图形搬到计算机里用键盘输入坐标用绘图仪输出。这时的“设计方法”还是以手工为主计算机只是替代了纸和笔。但变化已经开始了——数据开始结构化。每个图形有了独立的坐标和图层信息可以批量修改可以自动检查间距。这个阶段出现了一个关键角色版图工程师。他们不再需要懂电路原理只需要按照电路工程师给的网表把图形画出来。分工出现了效率提升了但新的问题也来了电路工程师和版图工程师之间的沟通成本极高一个参数改一下版图可能要重画好几天。我师傅说他们当年最怕听到的一句话就是“这个管子宽度加两个微米”因为这意味着整块版图要重新调整。2.3 标准单元概念的诞生设计方法第一次真正分层真正让芯片设计方法发生质变的是标准单元概念的提出。逻辑门被做成固定高度、不同宽度的标准化版图放在单元库里。设计者只需要在网表里调用这些单元工具自动完成布局布线。这是设计方法史上第一次真正的分层逻辑设计与物理实现分离。这个变化带来的影响是深远的。首先设计者不再需要关心每个晶体管的物理细节可以把精力放在电路功能上。其次单元库可以复用同一个加法器单元在不同芯片里反复使用经过验证的单元可靠性有保障。第三自动化布局布线工具有了用武之地因为所有单元的高度一致工具只需要在行内排列即可。但标准单元也不是没有代价。固定高度的单元意味着驱动能力受限需要大驱动的地方得用多个单元并联或者单独定制。我在做一款电源管理芯片时就遇到过标准单元驱动能力不够导致信号边沿太缓的问题最后不得不手工设计了一个大驱动单元插进去。这种“标准单元手工定制”的混合方法至今仍然是主流。3. EDA工具链的成型芯片设计方法从艺术走向工程3.1 从CAD到EDA设计自动化的分水岭八十年代中后期CAD这个词逐渐被EDA取代。一字之差含义天壤之别。CAD是计算机辅助设计核心还是人在设计计算机只是辅助画图。EDA是电子设计自动化核心是计算机自动完成设计步骤人只需要给约束和规则。这个转变的标志性事件是自动布局布线工具的成熟。我刚开始用自动布局布线工具时心里是抗拒的。手工画的版图面积小、走线漂亮工具跑出来的结果又大又乱。但当我第一次做了一颗含十万门电路的芯片后我彻底服了。手工画十万个门给我一年也画不完工具跑一晚上就出来了而且DRC全过。从那时起我就明白在规模面前技巧不值一提。这个阶段的设计方法可以概括为用约束驱动工具用工具实现设计。设计者写RTL代码综合工具生成门级网表布局布线工具生成版图时序分析工具验证是否满足频率要求。整个流程像一条流水线每个环节都有对应的工具。这条流水线的效率直接决定了芯片公司的竞争力。3.2 综合工具的突破行为级到门级的桥梁综合工具的出现是EDA发展史上最重要的里程碑之一。在此之前设计者必须手工把行为级描述翻译成门级网表工作量巨大且容易出错。综合工具自动完成这个翻译过程而且能根据时序约束和面积约束进行优化。综合工具的核心是工艺库映射和逻辑优化。工艺库映射就是把通用的逻辑表达式映射到具体的标准单元上比如把a b映射到二输入与门单元。逻辑优化则是在满足时序的前提下尽量减少面积和功耗。这两个步骤听起来简单实际上涉及大量的图论算法和启发式搜索。我在实际使用综合工具时总结了几条经验第一约束要合理过紧的约束会让工具跑很久还达不到过松的约束会浪费面积和功耗。第二不要过度依赖工具的默认设置默认设置往往偏保守手动调整一些关键参数能显著改善结果。第三综合后的网表一定要做形式验证确保功能没有在优化过程中被改变。我见过因为综合工具的一个bug导致功能错误的案例虽然概率很低但一旦发生就是灾难性的。3.3 时序驱动的设计方法频率就是金钱当芯片工作频率超过100MHz后时序问题成为设计的主要矛盾。设计方法也随之演变为时序驱动所有工具都以满足时序为首要目标面积和功耗在时序满足的前提下再优化。时序驱动的核心概念是时序路径和** slack**。Slack是要求时间与实际到达时间的差值正值表示满足时序负值表示违例。整个设计流程就是不断消除负slack的过程。综合工具会为了修setup违例而插入缓冲器或者调整单元尺寸布局布线工具会为了修hold违例而绕线或者插延迟单元。这里有一个我踩过的坑不要只盯着最差路径。最差路径的slack是-50ps你把它修好了第二差的路径可能变成-40ps然后你继续修结果发现总也修不完。正确的做法是看slack的分布如果大量路径集中在-20ps到-50ps之间说明整体约束太紧或者工艺库太慢需要从架构层面解决而不是靠工具硬修。4. SoC时代的系统级设计方法从电路到系统的跃迁4.1 IP复用与SoC设计方法学当芯片上集成了CPU核、存储器控制器、各种外设接口后设计方法再次发生质变。SoC设计方法学的核心是IP复用把经过验证的功能模块作为IP通过总线互连组成系统。设计者的工作从“设计每个晶体管”变成了“选择合适的IP并正确连接”。这个转变带来的最大挑战是验证。一颗SoC里可能有几十个IP每个IP都有自己的接口协议和时序要求。IP之间的交互是否正确靠仿真很难穷尽。我参与过一颗手机SoC的验证工作光是USB控制器和DMA控制器之间的交互场景就有上千种仿真跑了一周还没跑完。后来我们引入了形式验证和硬件加速仿真才把验证周期压缩到可接受的范围。IP复用还带来了一个隐性成本集成风险。不同来源的IP可能有不同的编码风格、不同的时钟复位策略、不同的低功耗方案。把它们集成在一起经常会出现时钟域交叉、复位顺序错误、电源域冲突等问题。我在一个项目里遇到过因为两个IP的复位释放时间差了一个时钟周期导致系统启动概率性失败的问题查了整整两周才定位到。4.2 总线架构的演化从自定义到标准化早期SoC的总线都是各家公司自定义的IP复用时需要做大量的接口转换。后来出现了AMBA等标准化总线协议IP的接口统一了复用变得容易很多。总线架构也从简单的共享总线演化到多层总线、交叉开关、片上网络。选择什么样的总线架构是SoC设计方法中的一个关键决策。共享总线面积小但带宽有限适合低速外设交叉开关带宽高但面积大适合CPU和内存之间的高带宽通路片上网络扩展性好但延迟略高适合多核系统。我在做一颗视频处理芯片时最初选了共享总线结果发现多个视频通道同时工作时带宽不够后来改成交叉开关才解决问题。这个决策的代价是芯片面积增加了15%但性能提升了三倍值得。4.3 低功耗设计方法从可选到必选当工艺节点进入28nm以下后功耗成为和性能、面积同等重要的设计指标。低功耗设计方法从“锦上添花”变成了“不做不行”。主流的低功耗技术包括时钟门控、电源门控、多电压域、动态电压频率调节等。时钟门控是最基础也最有效的手段。原理很简单某个模块不工作时把它的时钟关掉动态功耗就降为零。但实现起来有很多细节要注意。比如门控单元的位置要合理太靠前会导致时钟树不平衡太靠后会导致门控效果不好。我在一个项目里因为门控单元插错了位置导致某个模块的时钟偏斜增加了200ps差点造成时序违例。电源门控比时钟门控更彻底直接把模块的电源切断静态功耗也降为零。但代价是模块的状态会丢失唤醒后需要重新初始化。而且电源开关的设计要考虑浪涌电流、唤醒时间、隔离单元等问题。我见过因为电源开关太少导致唤醒时电压跌落过大芯片直接复位的情况。5. 先进工艺节点下的设计方法新挑战5.1 工艺节点的演进与设计方法的适配从微米级到纳米级再到现在的3nm、2nm工艺节点的演进给设计方法带来了一波又一波的挑战。短沟道效应、量子隧穿、工艺波动这些物理现象让设计者不能再把晶体管当成理想开关。在先进节点下设计方法必须考虑工艺角和片上变异。同一个芯片上不同位置的晶体管因为光刻和刻蚀的偏差性能可能差很多。设计时必须在最差工艺角下满足时序同时考虑片上变异带来的额外余量。这个余量在28nm时大概是5%到了5nm以下可能超过20%。这意味着设计者必须把频率目标定得比理论值低很多或者采用自适应电压频率调节等技术来补偿。我在做一颗16nm芯片时第一次遇到了FinFET自热效应的问题。FinFET的鳍片被氧化层包围散热路径很窄局部功耗密度高时温度会显著上升导致晶体管变慢。这个问题在平面工艺时代基本可以忽略但在FinFET时代必须认真对待。我们的解决方案是在布局时把高功耗模块分散开避免热点的产生。5.2 芯片封装设计被忽视的设计方法环节很多设计者把注意力全放在芯片内部忽略了芯片封装设计。实际上封装对芯片性能的影响越来越大。倒装焊、硅中介层、3D堆叠这些先进封装技术让封装从“保护壳”变成了“系统的一部分”。封装设计方法的核心是信号完整性和电源完整性。高速信号从芯片到封装的过孔、焊球、基板走线每一段都会引入寄生参数。这些寄生参数在低频时无所谓但在GHz频率下会导致信号失真和时序偏移。我在一个高速SerDes项目里因为封装走线没有做阻抗控制导致眼图完全闭合后来重新设计封装基板才解决。电源完整性同样重要。芯片的瞬态电流很大如果封装电源网络的电感太大会导致电源电压波动严重时引起逻辑错误。解决方案是在封装基板上放置足够的去耦电容并且优化电源和地的平面设计。这些工作通常需要和封装工程师紧密配合芯片设计者不能当甩手掌柜。5.3 设计方法中的AI辅助新工具与新思路最近几年AI辅助设计成为热门方向。工具厂商推出了AI驱动的布局布线、参数优化、缺陷检测等功能。我试用过几款AI辅助工具感受是在特定场景下确实有效但远没有到“取代人类”的程度。AI在布局布线中的典型应用是预测拥塞和优化布线策略。传统工具靠试错来寻找可行解AI工具通过学习历史设计数据能更快地找到高质量的解。我在一个项目中用AI工具做布局相比传统工具线长缩短了8%运行时间减少了30%。但AI工具也有局限它学到的模式来自历史设计如果新设计和历史设计差异很大效果就会打折扣。AI在参数优化中的应用也很有意思。芯片设计中有大量参数需要调优比如缓冲器的尺寸和数量、时钟树的层次结构、电源开关的分布。传统方法是靠经验或者暴力搜索AI方法可以建立参数和性能之间的模型用贝叶斯优化等方法快速找到最优解。我试过用这种方法优化时钟树在满足偏斜要求的前提下时钟树功耗降低了12%。6. 实操视角从RTL到GDSII的完整设计流程6.1 设计流程概览与关键决策点一颗芯片从RTL代码到最终版图中间要经过十几个步骤。每个步骤都有对应的工具和输入输出文件。我以一颗中等规模的SoC为例把主要步骤和关键决策点列出来。步骤主要工具输入输出关键决策RTL设计文本编辑器规格书RTL代码架构选择、时钟方案功能验证仿真器RTL代码、测试用例验证报告覆盖率目标、验证方法逻辑综合综合工具RTL代码、工艺库、约束门级网表约束设置、优化策略形式验证形式验证工具RTL代码、门级网表等价性报告无需决策必须通过布局规划布局规划工具门级网表、物理库布局规划文件宏单元位置、电源网络布局布线布局布线工具布局规划文件版图拥塞控制、时序优化时序分析静态时序分析工具版图、寄生参数时序报告工艺角选择、余量设置物理验证DRC/LVS工具版图验证报告无需决策必须通过流片掩模制作GDSII文件掩模版无这个流程看起来线性实际上迭代很多。综合后发现时序不满足可能要改RTL布局布线后发现拥塞严重可能要改布局规划时序分析发现违例可能要重新布局布线。我做过的一个项目从RTL freeze到tapeout花了四个月其中两个月是在迭代布局布线和时序优化。6.2 逻辑综合的实操要点与参数计算逻辑综合是设计流程中第一个自动化步骤也是影响后续所有步骤的关键环节。综合的质量直接决定了布局布线的难度和最终芯片的PPA。综合的核心输入是工艺库、RTL代码和约束文件。工艺库提供了标准单元的面积、延迟、功耗等信息。约束文件定义了时钟频率、输入输出延迟、输出负载等。综合工具根据这些信息把RTL代码映射成门级网表同时进行逻辑优化。约束设置是综合中最需要经验的部分。以时钟约束为例假设目标频率是500MHz时钟周期就是2ns。但你不能直接把2ns写成约束因为时钟树本身有延迟和偏斜布局布线后还会有额外的延迟。通常的做法是留10%到20%的余量也就是约束设成1.6ns到1.8ns。这个余量留多少取决于设计的复杂度和工艺的成熟度。我在28nm项目上通常留15%在16nm项目上留20%在7nm项目上留25%。综合后的面积估算也很重要。工具报告的面积是标准单元的总面积实际芯片面积还要加上布线面积、宏单元面积、电源网络面积、填充单元面积等。经验公式是实际面积约等于标准单元面积的1.5到2倍。如果综合后标准单元面积是1平方毫米那芯片面积大概在1.5到2平方毫米之间。这个估算对早期成本评估很有用。6.3 布局布线的实操难点与解决思路布局布线是设计流程中最耗时也最复杂的步骤。工具需要在满足时序、拥塞、功耗等多重约束的前提下把几十万到几亿个标准单元和宏单元放到芯片上并完成所有连接。拥塞是布局布线中最常见的问题。当某个区域的布线资源不够用时工具会报拥塞错误。解决拥塞的方法有几种调整布局规划把高连接度的模块放在一起增加金属层数提供更多布线资源优化单元密度降低局部密度。我在一个项目里遇到过因为一个存储器宏单元放在芯片中央导致周围拥塞严重的问题后来把它移到边缘拥塞就消失了。时序收敛是另一个难点。布局布线工具会为了满足时序而插入缓冲器、调整单元尺寸、优化布线。但这些优化可能会引入新的问题比如面积增大、功耗增加、拥塞加剧。我的经验是先解决拥塞再解决时序。拥塞不解决时序优化根本做不下去因为工具没有布线资源可用。拥塞解决后时序优化会顺利很多。信号完整性在先进节点下越来越重要。串扰会导致信号延迟变化严重时引起逻辑错误。工具会在布线时考虑串扰的影响但设计者也需要在布局阶段就注意避免长距离平行走线增加敏感信号之间的间距必要时加屏蔽线。我在一个高速接口项目里因为两根时钟线平行走了很长一段距离导致其中一根时钟的抖动增加了30ps后来把它们分开走才解决。7. 常见问题与排查技巧实录7.1 综合与布局布线常见问题速查问题现象可能原因排查方法解决方案综合后时序大面积违例约束过紧、工艺库太慢检查约束是否合理对比工艺库延迟放宽约束、换更快工艺库、改架构布局后拥塞严重布局规划不合理、单元密度过高查看拥塞图定位高密度区域调整布局规划、降低密度、增加金属层布线后时序恶化寄生参数过大、串扰影响对比布局前后时序报告优化布线、加缓冲器、调整单元位置DRC违例大量出现版图设计规则理解错误查看DRC报告定位违例类型修改版图、调整工具设置LVS不匹配网表与版图不一致对比网表和版图的连接关系检查电源地连接、检查单元映射芯片功耗超标时钟树功耗大、漏电大分析功耗报告定位主要功耗来源优化时钟树、换高阈值单元、电源门控7.2 几个让我记忆深刻的踩坑经历第一个坑是关于复位信号的处理。在一个项目里我图省事把复位信号直接连到了所有触发器的异步复位端。综合和布局布线都没问题时序也满足。但芯片回来后发现系统上电时偶尔会启动失败。查了很久才发现复位信号的释放时间不一致有些触发器先释放有些后释放导致状态机进入了非法状态。后来改成同步复位并且加了复位同步器问题才解决。这个教训是异步复位不是不能用但一定要做同步释放。第二个坑是关于时钟域交叉。在一个多时钟域设计里我用了一个简单的两级触发器做同步器从慢时钟域向快时钟域传数据。仿真没问题但芯片回来后发现数据偶尔出错。原因是慢时钟域的信号在快时钟域看来是异步的两级触发器虽然能降低亚稳态概率但不能完全消除。而且如果慢时钟域的信号变化太快快时钟域可能采到中间态。后来改成了握手协议问题才彻底解决。这个教训是跨时钟域传输能用握手就用握手不要图省事。第三个坑是关于电源网络的设计。在一个低功耗项目里我为了省面积把电源网络的金属线宽设得比较小。仿真时电压降在可接受范围内但芯片回来后发现在高负载情况下芯片边缘的电压降超过了10%导致时序违例。原因是仿真时用的电流模型太理想实际电流分布不均匀。后来加宽了电源线并在边缘增加了去耦电容问题才解决。这个教训是电源网络设计要留足余量仿真模型要尽量真实。7.3 提升设计效率的实用技巧技巧一建立自己的脚本库。EDA工具的命令行接口很强大但每次手动输入很麻烦。我把常用的操作写成脚本比如批量跑综合、批量分析时序、批量生成报告。这些脚本积累下来能节省大量时间。我现在的脚本库有上百个脚本覆盖了从RTL检查到GDSII输出的所有环节。技巧二用好版本控制。芯片设计涉及大量文件RTL代码、约束文件、脚本、报告。没有版本控制很容易搞乱。我用Git管理所有设计文件每次tapeout前打标签。这样出了问题可以快速回退也可以对比不同版本之间的差异。技巧三建立检查清单。Tapeout前需要检查的项目有上百项靠脑子记肯定漏。我整理了一份检查清单包括时序检查、DRC检查、LVS检查、电源检查、IO检查等。每次tapeout前逐项打勾确保没有遗漏。这个清单我还在不断补充每次遇到新问题就加一项。技巧四保持和工艺厂的沟通。工艺厂提供的设计规则文档往往有几百页很多细节靠自己看容易理解错。我定期和工艺厂的技术支持开会确认一些模糊的规则了解工艺的最新变化。这种沟通能避免很多因为理解偏差导致的问题。8. 从设计方法演化中能学到什么回头看这几十年的演化芯片设计方法的变化有一条清晰的主线不断把复杂问题分层让每一层的人只需要关心自己那一层的事。从晶体管到门级从门级到RTL从RTL到系统级每一层抽象都让设计效率提升一个数量级。但分层也带来了新的问题层与层之间的接口越来越复杂验证越来越困难。一颗先进SoC的验证工作量可能占整个项目的70%以上。这也是为什么验证工程师越来越吃香为什么形式验证和硬件加速仿真越来越重要。另一个感受是工具再强大也替代不了人的判断。EDA工具能自动完成很多步骤但每个步骤的输入参数、约束条件、优化目标都需要人来设定。工具跑出来的结果也需要人来判断是否合理。我见过太多人把工具当黑盒输入进去等结果出了问题就束手无策。真正的高手是理解工具原理的人知道工具在做什么、为什么这么做、什么时候会出错。最后说一个我个人的观察芯片设计方法的演化和软件工程的发展有很多相似之处。都经历了从手工到自动化、从单体到模块化、从通用到领域特定的过程。如果你有软件背景转芯片设计时很多概念是相通的。反过来芯片设计中的一些方法比如时序约束、面积优化也可以借鉴到软件性能优化中。这种跨领域的类比经常能给我带来新的思路。这个领域还在快速变化新的工艺节点、新的封装技术、新的AI辅助工具不断涌现。但底层的方法学逻辑是相对稳定的分层、复用、自动化、验证。把这四个词理解透了不管技术怎么变你都能找到自己的位置。
返回列表