没有哪个做数字后端的人,敢拍着胸脯说从来没被IR Drop和EM坑过。尤其在先进工艺节点,电源规划早已不是“铺一圈电源环、打几排电源条带”那么简单。我这篇想聊的,就是电源规划里那些经常被一笔带过、但实际流片回来才追悔莫及的细节。以MTCMOS配置为例,因为它牵扯到电源开关单元、常开电源域、可关断电源域之间的复杂关系,IR Drop和EM的问题会暴露得非常典型。
先解决几个基本认知。IR Drop,本质是电源网络从PAD到标准单元供电端之间的寄生电阻分压,电流越大、路径越长,电压降就越大。EM(Electromigration,电迁移)则是金属原子在电子风作用下发生迁移,久而久之导致连线开路或短路。IR Drop是电压问题,EM是寿命问题,但它们的根源是同一个:电流在电源网络里的流动方式。MTCMOS(Multi-Threshold CMOS)则是通过电源开关管将电路划分为常开域和可关断域,关断时用休眠晶体管切断泄露路径,降低静态功耗。正是因为MTCMOS多了一层电源开关单元,IR Drop和EM的分析复杂度陡然上升。
这篇内容适合刚接触物理设计的数字IC工程师,也适合做低功耗流程的后端老手。已经跑过几个项目的人,可以重点看后面关于MTCMOS响应时间、PG mesh规划、以及EM修复优先级的内容,这些是常规培训材料里不大会展开讲的东西。
1. 内容整体设计与思路拆解
1.1 为什么电源规划的核心是“电流路径”,而不是“电压”
刚入行的时候,我理解的IR Drop就是V=IR,电源网络电阻小一点,drop就小一点。这个理解不能算错,但它会导致一个很危险的倾向:一味增加电源网络密度,觉得把金属铺满就万事大吉。等真正开始做MTCMOS项目,你会发现问题远没有这么简单。
电源规划的本质,是给电流规划一条从PAD到每个标准单元VDD/VSS引脚的低阻路径。IR Drop关注的,是这条路径上每个节点的电压是否满足要求;EM关注的,是这条路径上每一段金属、每一个过孔、每一根电源开关管,能否在其寿命周期内承受对应的电流密度。两件事绑在一起看,才会理解为什么说电源规划的核心是电流路径——电压是结果,电流是原因。
MTCMOS配置会让这个问题更加突出。电源开关单元串联在常开电源网络和可关断电源网络之间,相当于在电流路径上人为制造了一个“瓶颈”。开关管的导通电阻(Ron)直接叠加到电源网络上,可关断域的IR Drop预算被这个瓶颈吃掉一大块。更麻烦的是,开关管在开启瞬间还要承受浪涌电流,这个电流如果不加控制,EM风险会集中在MTCMOS开关单元本身。
1.2 MTCMOS在电源规划中的角色与影响分析
MTCMOS的设计目标很明确:用一个或一组高阈值电压的PMOS/NMOS管作为电源开关,在待机时切断逻辑域的电源或地,把漏电从微安级降到纳安级。但在后端实现层面,它带来的影响是全链条的。
首先是电源网络的分配。常开域(AON,Always-On)和可关断域(PD,Power-Down)需要独立的电源网络。在MTCMOS配置下,通常会有全局电源(如VDD)为AON域和开关管供电,以及一个虚拟电源(如VDD_OFF)为可关断域供电。VDD_OFF这条网络,在版图上是从MTCMOS开关单元的输出端连出来的,相当于一个“次级电源轨”。它的宽度、间距、层次分配,直接决定了可关断域内部的IR Drop水平。
其次是标准单元的供电方式。可关断域内所有标准单元的VDD引脚,都必须连接到VDD_OFF上,而不是直接接VDD。这意味着物理库中的单元必须有对应的电源引脚定义,后端工具才能正确识别和连接。如果库里面MTCMOS单元的电源引脚定义不完整,或者在Floorplan阶段没有正确设置电源域形状,后端的PG(Power-Ground)连接很容易出现短路或悬空,这类问题在LVS阶段才会暴露,排查起来非常痛苦。
最后是时序和功耗的耦合关系。MTCMOS开关管的Ron会引入额外的电压降,导致可关断域的实际供电电压低于标称值。电压降低,单元延时增大,时序收敛难度提高。所以,MTCMOS配置下的电源规划,从来不只是后端自己的工作,它必须和前端低功耗架构、库的时序模型形成闭环。PD域的电压降预算,通常需要在综合阶段就通过库的电压降级模型(Voltage Derating)折算进去。
1.3 方案选型的常见误区与避坑原则
做MTCMOS电源规划,有几个常见的选型误区,我先列出来,后面再展开分析。
第一个误区是“MTCMOS开关单元越大越好”。开关管尺寸大,Ron就小,IR Drop就小,但关断漏电也随之增大,同时开关瞬态浪涌电流会变得非常大,反而可能引发局部的EM和地弹问题。开关管尺寸,需要根据目标域的峰值电流、可接受的IR Drop和漏电约束,综合计算和迭代。
第二个误区是“IR Drop分析和EM分析分开做就行”。事实上,电源网络拓扑如果存在EM热点,通常也是IR Drop的薄弱环节。反过来,IR Drop优化过程中的某些修复动作(比如加宽金属、增加条带),如果布局不合理,又会把电流挤到某几条窄路径上,导致新增EM违规。两个分析必须共享同一份电源网络拓扑数据,相互迭代收敛。
第三个误区是“只关心静态IR Drop,忽略动态IR Drop”。MTCMOS场景下,域唤醒/关断瞬间的动态电流变化极其剧烈,dI/dt非常大。静态IR Drop只是均值水平的电压降,动态IR Drop才是导致时序violation和功能性错误的直接原因。尤其是唤醒瞬间,大量开关管同时导通,浪涌电流可能在几个纳秒内达到几安培,这一瞬态的压降如果不提前预判,等跑到 signoff 阶段才去处理,能改的余地已经非常小了。
2. 核心细节解析与实操要点
2.1 MTCMOS电源开关单元的参数解析与选型
MTCMOS电源开关单元,从物理实现角度看,核心参数无非就这么几个:Ron、最大电流能力(Imax)、关断漏电、栅极电容/开关响应时间。Ron和Imax决定了对IR Drop和EM的容忍度,漏电决定了低功耗收益,栅极电容和响应时间则决定了唤醒/关断行为。
选型的起点是估算目标域的峰值电流。峰值电流怎么估?有一个粗略但实用的办法:在签核功耗数据(PrimeTime PX或者Redhawk的功耗报告)里,找到该域在worst case corner(通常是SS/高温/慢速工艺角)下的总开关功耗和内部功耗之和,除以供电电压,得到一个平均电流;再结合翻转率(toggle rate)和去耦电容的充电电流,乘上一个经验系数(一般取2~3倍),作为峰值电流的近似值。之后,用这个峰值电流除以单个MTCMOS开关管的Imax,即可估算出需要的开关管并联数量。
这里有个实操要点:不要把所有开关管集中放在一个狭窄区域。多个开关管并联时,如果版图上摆放过于集中,电流会在金属连线上汇流,导致连接处局部电流密度超标。合理的做法是,把MTCMOS开关单元沿着可关断域的电源条带均匀分布。一个可关断模块如果需要30个开关管,不要把它们堆在模块角落的两条Row里,而是每隔若干Row分布一个或两个,让电流能够就近进入开关管,而不是横向奔波几百微米再到开关管。
我在实际项目里还踩过一个坑:开关管的衬底连接(bulk connection)容易被忽略。MTCMOS开关管的Bulk端如果接错网络,轻则漏电异常,重则闩锁效应(Latch-up)风险剧增。尤其是PMOS开关管,NWell必须可靠连接到最高电位(常开域VDD),并且衬底接触(tap cell)密度要足够。很多后端工程师在放MTCMOS单元的时候没有额外检查Well连接,导致LVS隆出一堆错误。这个检查,建议在floorplan阶段的PG连接核查里就提前做掉。
2.2 IR Drop与EM在MTCMOS场景的耦合关系
IR Drop和EM不是两个独立的问题。它们共享同一条电流路径,所以在这条路径的任何一处做了改动,两个指标都会联动变化。
MTCMOS场景下,IR Drop可以拆成三部分来看:第一部分是全局电源网络上的IR Drop,从PAD到开关管输入端;第二部分是开关管本身的导通压降,等于Ron乘以流过的电流;第三部分是虚拟电源网络(VDD_OFF)上的IR Drop,从开关管输出端到各标准单元。这三部分加在一起,才是单元实际感受到的电压降。
EM分析则对应这条路径上的每一段导体。全局电源网络、开关管内部金属、虚拟电源网络、以及连接它们的过孔和电源条带(PG strap),都需要检查电流密度。我见过最典型的案例是:为了降低IR Drop,工程师把虚拟电源网络的顶层金属加宽了一倍,结果下层竖条(VIA和M2短条)没有同步加宽,电流从宽顶层金属下来后全部挤到几条窄竖条上,EM直接爆红。这种问题,单纯盯IR Drop热图是发现不了的,必须开着EM热图一起看。
实操中的一个关键点,是给IR Drop和EM分别设定不同的约束。通常IR Drop分析关注的是动态最差压降是否超过核心电压的一定比例(比如5%),而EM分析关注的则是平均电流密度和峰值电流密度是否超过工艺给出的寿命限值。两个约束没有谁更严格之分,在不同工艺节点下表现完全不同。28nm以下,EM约束往往比IR Drop更先到达极限,因为金属线宽越来越窄、电流密度越来越大,寿命成了稀缺资源。
2.3 MTCMOS唤醒响应时间与浪涌电流控制
MTCMOS的唤醒过程,是整个电源规划里最容易被低估的动态事件。我可以这么说:跑十次静态IR Drop,都不如一次唤醒瞬间的动态IR Drop波动来得严重。
唤醒时,休眠晶体管栅极电压从关断电平切换到开启电平,多个开关管同时导通,可关断域的电源网络从0开始充电。如果唤醒控制信号翻转太快,所有开关管在几百皮秒内全部导通,虚拟电源网络上会形成一个巨大的浪涌电流,这个电流足以让局部IR Drop瞬间跌破功能阈值,也可能在开关管输出金属和过孔上造成严重的EM冲击。
为了控制浪涌电流,标准做法是分步唤醒(staggered wake-up),也就是在不同时间点分别开启不同组的MTCMOS开关管,让电流按时间阶梯上升。这个策略可以被设计成库中特殊的高扇出唤醒控制单元(wake-up control cell),也可以在后端网表层面手动插入延迟缓冲器来错开使能信号的到达时间。
我在一个实际项目里,就遇到过因为唤醒使能信号由同一个buffer驱动的巨大扇出网络,导致几百个MTCMOS开关管几乎同时开启。第一次跑动态IR Drop仿真时,VDD_OFF电压跌到标称值的70%,逻辑直接乱掉。后来在综合网表中对唤醒信号做了分组,每组串入不同的delay cell,把有效上升沿错开了2纳秒左右,峰值浪涌电流几乎削减了一半,IR Drop也不再violation。这件事让我意识到,MTCMOS的唤醒策略应该被纳入电源规划的前期设计,而不是等物理实现后期靠修timing那种思路去补救。因为救不回来。
2.4 去耦电容的规划原则与放置策略
去耦电容(Decap)在MTCMOS设计中肩负着双重任务:抑制动态IR Drop和抑制浪涌电流引起的电压波动。问题是,Decap如果乱放,不仅占用面积,还可能引入额外的漏电,甚至成为EM的受害者。
去耦电容的布局原则,简单说是一句话:哪里变化快,哪里放decap。动态IR Drop的根源是电流突变,而Decap的作用就是就近提供瞬态电流,减少对远端电源网络的依赖。所以,Decap应该优先放置在开关活动频繁的逻辑周围,以及MTCMOS开关管输出端的附近。前者抑制逻辑翻转引起的局部压降,后者则为浪涌电流提供就近的高频电流源,降低虚拟电源上的电压跌落。
Decap的量也需要控制。放少了没作用,放多了反而会因为Decap本身的充放电电流在电源网络上引入额外EM应力。并且Decap本身也有漏电,在低功耗设计里是很大的浪费。经验上,Decap面积一般占可关断域的5%~10%,具体比例需要根据动态电流密度迭代收敛。每次迭代不要盲目加Decap,而应该先看动态IR Drop热图上的热点分布,在热点附近小步增量地补充,而不是整片区域平均撒。
另外一个细节:Decap在MTCMOS场景下需要区分接在VDD还是VDD_OFF上。接在VDD上的Decap可以在唤醒过程中可关断域充电时提供额外电流,但也会在关断时成为漏电路径;接在VDD_OFF上的Decap则主要承担逻辑翻转时的瞬时供电。两者应该分别配置,并确保它们在对应电源域上的PG连接是正确的。我在早期项目里因为Decap接错电源域,导致关断时VDD_OFF电压迟迟无法跌落到0,等测功耗的时候发现问题,已经在后端ECO阶段了,改起来很痛苦。
3. 实操过程与核心环节实现
3.1 实操流程总览:从功耗评估到IR/EM签核
下面是MTCMOS配置下电源规划与IR/EM分析的一个完整实操流程,我把它整理成可以直接沿用的步骤:
- 获取并确认功耗数据,确定每个电源域的峰值电流、平均电流和唤醒浪涌电流。
- 进行电源网络预算,把IR Drop预算分配到全局网络、MTCMOS开关管和虚拟电源网络上。
- 确定PG mesh网络拓扑(电源轨宽度、间距、金属层次分配)。
- 插入MTCMOS开关单元,规划其摆放位置和分布密度;插入Decap并分区规划。
- 跑静态IR Drop分析,检查每个电源域的电压降是否满足预算。
- 跑动态IR Drop分析,重点检查唤醒瞬态和时钟边沿附近的最差压降。
- 跑EM分析,检查所有电源金属段、过孔、MTCMOS开关管的电流密度。
- 汇总violations,制定修复方案,迭代到收敛。
这个流程看起来简单,实际上每个环节都可能要求你回退到前面的步骤。比如第8步修复IR Drop的过程中,发现加宽某段金属后EM反而更差了——这正是电源规划需要反复迭代的原因。
3.2 电源网络预算的计算方法与实例
关于电源网络预算的分配,我做过的项目里,一般按下面这个套路来:
假设核心电压正常工作范围是0.8V,设计约束是IR Drop不能超过5%,也就是40mV的预算。这40mV要在三个部分之间分配:
- 全局电源网络(从PAD到开关管输入端):分配8mV
- MTCMOS开关管导通压降:分配20mV
- 虚拟电源网络(从开关管输出端到标准单元):分配12mV
为什么开关管压降预算最大?因为这是MCU关断功能的代价,也是最难通过物理手段优化的部分。你的选择只有增加开关管尺寸或数量,而全局网络和虚拟网络还可以通过金属加宽、增加条带等方式优化。
有了这部分预算,你就可以反推MTCMOS开关管的Ron上限。例如,假设你估算可关断域在worst case下的峰值电流为2A,而开关管分配的IR Drop预算是20mV,那么整个可关断域的开关管总Ron必须小于等于10mΩ。如果单个开关管在库里的Ron是80mΩ,那么你需要至少8个并联,考虑到冗余和分布均匀性,实际会放到12个。
基于这个思路,有一种快速估算方法可以分享:处理器的某个可关断模块,平均功耗150mW,电压0.8V,平均电流约187mA;考虑到2~3倍峰值系数,预估峰值电流约400mA。开关管IR Drop预算20mV,因此所有开关管总Ron应小于50mΩ。库里单管Ron为500mΩ,故需要10个并联。再考虑到分布均匀性和局部热点,我最终放了14个,沿模块Row均匀分布。
3.3 电源网络与MTCMOS单元的PG连接实现
在布局布线的层次上实现MTCMOS电源规划,一个特别关键的步骤是定义好两种不同的VDD网络。全局VDD网络使用高层金属的完整网格;VDD_OFF虚拟电源网络,则从MTCMOS开关管输出端引出,使用低层金属构建另一套网格。这个网格,可以比全局VDD网格稀疏一些,因为可关断域内部的电流密度通常低于开关管输入端的累计电流密度。
电源条带(power strap)的宽度和间距,是PG mesh设计的关键参数。一般来说,垂直条带(通常使用M7~M9这类高层金属)提供主要电流通路,水平条带(通常使用M4~M5这类较低层金属)负责将电流分配到Row内的标准单元。条带宽度受限于布线资源,间距受限于IR Drop和EM约束。实际操作中,我习惯先把条带最宽金属层的宽度定为设计规则允许的最大值附近,然后通过静态IR Drop分析微调间距。间距太大,IR Drop爆表;间距太小,布线资源被过度挤占,信号层甚至没法出pin。
MTCMOS单元的PG连接,要特别留意它的电源引脚名字。在一些库里,MTCMOS单元的输入电源引脚叫VDD,输出电源引脚叫VDD_OFF,二者都物理存在。后端工具在做PG连接的时候,如果这两个引脚的 PG 类型没有正确指定,工具可能会把VDD_OFF一律连接成VDD,导致可关断域根本没有被关断能力。这个步骤,不同工具的操作路径不太一样,但思路是一致的:需要额外创建电源域的“虚拟电源网络”定义,并在电源域属性里指定,MTCMOS单元的开关输出端连接到了这条虚拟网络上,而可关断域内标准单元的VDD则全部接VDD_OFF。
我还想强调一个容易忽略的细节:power switch单元本身,也有自己的时序和功耗模型。在设计库里,MTCMOS单元含有输入引脚(通常是唤醒控制信号)、输出引脚和电源引脚,它的延时直接影响唤醒使能传播。在时序分析的时候,要确保唤醒信号路径上的drc(max transition/cap)是干净的。否则,唤醒信号在传播过程中如果边沿恶化,开关管开启时间就会被延后,浪涌电流的错峰设计也就失效了。
3.4 IR Drop与EM分析的仿真设置与结果解读
在做IR Drop分析时,输入数据是关键。静态IR Drop需要三个输入:PG网表(提取后的电源网络寄生RC)、供电电压源(对应PAD位置或稳压源输出)、以及每个单元的功耗电流。动态IR Drop则还需要仿真波形,通常是VCD/FSDB,或是用库的开关电流模型将功耗映射到翻转事件上。
动态IR Drop分析的仿真设置里,有一个参数叫“cycle time”或者“动态窗口”。这个窗口不能随便设。窗口太短,电流还没被充分平均就被截断了;窗口太长,仿真时间爆炸,而且动态事件反而被“磨平”了。在MTCMOS场景下,最需要关注的窗口是唤醒事件附近的时间窗口,以及时钟边沿周围最活跃的几个cycle。实际操作中,可以在功耗仿真的波形里分别抽取“唤醒时段”和“稳定工作时段”,各自跑一次动态IR Drop,看看两个场景下的压降分布差异。
结果解读时,优先看动态IR Drop热图(redhawk是violation热图,voltus是IR drop地图),关注热点是否集中在同一个区域。出现热点后,不要急着加金属,先用探针功能定位是哪个单元、哪条路径贡献了最大压降。如果是某一小簇高翻转率单元(比如一条巨大的扇出buffer链),给它就近放decap或者把附近电源轨加宽,往往比全局铺金属更高效。如果是MTCMOS开关管本身的输出端附近压降大,那就是开关管数量或分布的问题,加再多的decap效果也有限。
EM结果的解读,要分清楚平均电流(Javg)和峰值电流(Jpeak)各自的违规表现形式。平均电流EM违规,通常表现为金属过热或原子迁移累积,多见于长期运行的持续高电流路径;峰值电流EM违规,则在电源开关瞬间或者高频翻转时出现。在MTCMOS场景下,最常见的EM违规点包括:MTCMOS开关管的输出金属段、虚拟电源网络上连接Row的最底层电源轨(M1/M2)、以及Decap的充放电路径。看到这些位置出现EM violation,不用惊讶,这是MTCMOS拓扑的普遍弱点。
4. 常见问题与排查技巧实录
4.1 MTCMOS配置下IR Drop违规的常见场景
IR Drop违规出现的位置,其实很有规律。我总结下来,MTCMOS配置下容易出现动态IR Drop热点的地方主要有以下几类。
第一类是唤醒控制信号附近的逻辑。唤醒信号翻转的瞬间,同时驱动大量MTCMOS开关管的栅极,驱动这一大扇出的buffer链自身电流突增,如果它们正好布置在可关断域入口附近,就会在局部形成比较大的压降。
第二次类是Decap集中的区域。Decap在逻辑翻转时提供瞬时电流,但电流总是要回流的。如果Decap附近的地网络(VSS)比较薄弱,IR Drop会主要在地网络上体现。很多人只看VDD的drop,不留意VSS的rise,这是一个盲区。地弹(ground bounce)和电源压降是等价的,都是供电质量下降。
第三类是标准单元密度很高、翻转率又很高的局部区域。逻辑密集意味着本地的平均电流密度很大,如果电源条带间距在此区域没有特殊加密,IR Drop很容易超过预算。
遇到这些场景,我的排查思路是:先看热图,再看功耗分布图,最后看电源网络拓扑。热图告诉你在哪发生,功耗分布图告诉你是谁在耗电,网络拓扑则告诉你电流是怎么流动的。三条信息对齐,一般都能找到问题的根源。
4.2 EM违规处理优先级与常规修复手段
EM违规的修复,和IR Drop修复的优先级不完全一样。IR Drop修复的核心思路是“降低电阻”,而EM修复的核心思路是“分流电流”。目的都是让电流路径更宽、更多、更均匀。
常规修复手段,按优先级排序,我一般这样处理:
- 加宽局部金属和过孔:最直接,但影响布线资源,只建议在热点局部执行。
- 增加电源条带或竖条:可以对热点区域做“画龙点睛”式的加密,要注意PDN分析工具对密度有上限。
- 调整MTCMOS开关管的分布:如果是输出端附近EM超标,考虑把开关管摊开,或者增加开关管数量,让电流分散。
- 调整Decap的位置和数量:Decap充电回路如果EM违规,考虑将部分Decap移到电源网络更充足的位置。
- 降低局部区域的翻转率或逻辑规模:这属于设计层面的改动,影响较大,一般在早期评估阶段就要考虑。
提到EM修复,有一个容易忽略的点:过孔阵列的配置。很多EM违规其实不是金属线不够宽,而是过孔数量不够。VDD_OFF网络上连接高层金属和低层金属的VIA阵列,如果只满足IR Drop的阻值要求,EM可能并不过关。因为IR Drop看的是总电阻,而EM看的是每一颗过孔分到的电流密度。如果电流集中在少数几颗过孔上,哪怕总电阻很低,EM寿命也会剧减。所以在做电源网络修改的时候,但凡涉及换层(换层必然要打过孔),我都习惯性地多检查一下过孔阵列的密度和分布。
4.3 网表与版图层面易被忽视的电源问题
网表和版图层面的电源问题,这类坑我不希望你踩第二遍,因为排查时间实在太长了。
一是电源域定义不一致。综合工具里的UPF文件和物理实现工具里的电源域定义,如果在嵌套关系、电源网络命名上不一致,就会出现工具层面“虚连”的现象——工具认为连接了,实际上版图里没有,或者连错了。解决方法是,在导入物理实现工具后,先跑一次电源域的完整性检查,确认每个单元所在Row的电源供电网络和UPF预期一致,再往下走。
二是未分配电源网络的单元。有些单元在库里的PG引脚定义里,可能没有你预期的VDD_OFF引脚,或者多了一个额外的VDD引脚。在自动连接PG时,工具可能会跳过这些单元,到后期LVS才报错。一个从源头避免问题的做法,是在floorplan之后,立刻用工具检查所有instance的PG连接状态,确保没有任何instance处于“PG not connected”状态。
三是虚拟电源网络的冗余问题。VDD_OFF网络在设计上必须是一个独立的网络,不能被工具合并到VDD里。但在某些不使用UPF的落后流程里,网表并没有真正定义VDD_OFF网络,只是靠版图层次上的某个label来区分,这就非常容易出错。我建议,物理实现阶段的网表一定要带上完整的UPF信息,或者至少带上电源域属性,不要依赖“经验”去手工识别哪些单元该接哪个电源网络。
四是测试逻辑的电源。带有扫描链或BIST逻辑的可关断域,在测试模式下需要额外供电,因为有测试夹具会在关断模式下驱动这些逻辑。如果测试逻辑的电源连接是接在VDD_OFF上,而测试阶段VDD_OFF并未被外部电压源拉起,就会导致测试失败。这个坑,一般在芯片回片测试阶段才会暴露,等你从测试部门接到反馈,整个设计流程已经走完一轮了,改起来代价极大。
4.4 问题排查工具链建议与技巧
不同公司用的功耗分析工具链可能不同,Redhawk、Voltus、PrimeRail是比较常见的三类。无论哪种工具,有一些通用的排查技巧是相通的。
第一,学会用“功耗剖析(power breakdown)”而非只看热图。热图只能告诉你位置,功耗剖析能告诉你该区域内不同单元类型的耗电占比。比例最高的那类单元,往往就是优化的主要对象。
第二,在动态IR Drop分析时,适当增加“报告最差时刻”的功能。很多工具支持输出每一个单元的最差压降发生时间,按时间聚类以后,你能看到压降热点是不是同时发生的。如果是同时发生,就寻找共同驱动源——通常是同一个时钟沿、同一条唤醒信号线或者同一块Decap放电回路。
第三,验证修复效果时,不要只比较violation数量,要比较修复前后“最差压降幅值”、“EM平均电流密度”和“违规面积”三个指标变化。你可能会发现,某些修复动作减少了violation数量,但反而抬高了局部最差压降的幅值。这种“移花接木”式的修复,说明修复本身并没有改变根本矛盾,只是把问题挪了个位置,后患无穷。
再补充一个实用技巧:在项目早期,用预布局(pre-layout)估算阶段跑一版快速的IR/EM检查,哪怕精度不高,也比等到布局完成后才第一次看电源结果好得多。预布局阶段就可以验证电源网络预算分配是否合理、MTCMOS开关管数量估算是否靠谱。精度低一点没关系,能够尽早发现数量级层面的问题,就能省下一整个ECO迭代的周期。
从事后端设计这些年,我在电源规划上踩过最大的一个坑,就是早期过于依赖工具默认设置,觉得跑完静态IR Drop没有大红块就万事大吉。直到做MTCMOS的低功耗项目,才真正领会到电源网络上的每一次决策,都是对电流路径的规划,IR Drop和EM只是这条路径在不同维度上的投影。现在每接手一个新的低功耗设计,我都会在一开始就通读UPF里的电源域结构,仔细估算唤醒浪涌电流,再动手做floorplan。最后再分享一个小技巧:无论工具报告看起来多干净,保留一份自己手动计算的电流预算表,按域、按金属层次分别列清楚,当工具报告和预期不符时,这张表是你能最快定位问题的参照。电源规划没有银弹,但条理清晰的人,总能少走很多弯路。