4. 物理设计面积优化:标准单元选择、placement优化、congestion与面积、电源网络对面积的影响

各位好,我是你们的后端工程师老K。今天咱们聊聊面积优化——说白了,就是怎么在芯片上省地方。省下来的每一平方微米,都是真金白银。

我刚开始做后端那会儿,总觉得面积优化就是使劲推utilization。结果有一次,一个模块推到了85%的利用率,跑完route一看,绕线绕得跟蜘蛛网似的,时序一塌糊涂。后来我明白了——面积优化不是单纯地塞单元,而是一门平衡的艺术。

4.1 标准单元选择:选对单元,事半功倍

标准单元库里的门电路,其实有很多种变体。比如一个2输入与非门,可能有X1、X2、X4、X8等不同驱动强度的版本。你想想看,如果所有地方都用X8的大驱动单元,面积肯定爆炸。但全用X1的小单元,时序又跑不过。

我的经验是:在综合阶段就做好单元选择。对于关键路径上的单元,用大驱动;对于非关键路径,用小驱动。这叫「按需分配」。

核心原则:驱动强度每增加一倍,面积大约增加40-60%。所以能用X1的地方,千万别用X2。

另外,我建议多关注一下库里的「低面积」单元。有些工艺库会提供专门优化面积的版本,比如去掉一些冗余的阱接触。我在一个低功耗项目中用过这种单元,面积直接省了8%。

4.2 Placement优化:摆得好,省一半

Placement是整个物理设计中最关键的一步。单元摆得好不好,直接决定了面积能不能收敛。

我常用的几个技巧:

  • 高利用率区域的密度控制:不要一股脑把单元往一个地方塞。我会在placement之前先做floorplan分析,把高连接密度的模块放在一起,减少绕线资源消耗。
  • 利用soft blockage:在预估绕线紧张的区域,提前放一些soft blockage,让工具自动把单元往宽松的地方推。这招我在一个AI芯片项目中用过,congestion直接降了30%。
  • 关注filler cell的插入:很多人忽略filler cell。其实filler cell的密度和类型会影响后续的电源网络和阱连接。我习惯在placement阶段就预留好filler的位置。

避坑指南:我曾经在一个项目中,为了追求极致面积,把utilization推到了90%。结果placement做完,congestion map红了一大片。后来不得不回退到82%,重新做。所以,别贪心,留点余量。

4.3 Congestion与面积:绕线资源是隐形成本

Congestion,说白了就是绕线资源不够用。你想想看,如果两个区域之间只有两条绕线通道,但需要走十条线,那肯定堵车。

Congestion对面积的影响:

  • 绕线拥堵会导致工具自动插入更多的buffer和inverter来绕开路障——这些单元都是额外的面积开销。
  • 严重拥堵时,工具可能会把单元推到更远的地方,导致面积利用率下降。
  • 为了缓解拥堵,你可能需要增加芯片尺寸——这是最直接的面积损失。

我个人的习惯是,在placement阶段就做一次congestion预估。如果发现某个区域的congestion超过5%,我会提前调整floorplan或者加一些routing blockage。

注意:Congestion不是越小越好。完全无拥堵的设计,往往意味着绕线资源浪费。我一般把目标定在1-3%的局部拥堵,这样面积和绕线能达到平衡。

4.4 电源网络对面积的影响:看不见的「吃面积」大户

电源网络,很多人觉得它跟面积没关系。其实不然。电源网络的宽度、间距、层数,都会直接影响可用面积。

具体来说:

电源网络参数 对面积的影响
电源线宽度 每增加1μm宽度,占用绕线资源增加,可能导致单元密度下降
电源线间距 间距越小,绕线通道越少,容易引发congestion
电源网络层数 多用一层电源网络,可能减少一层绕线资源,间接影响面积
电源strap密度 strap太密,单元摆放空间被压缩;太疏,IR drop又过不了

我记得有一个项目,电源网络设计得太保守,strap间距只有10μm。结果整个芯片的利用率从75%降到了68%,白白浪费了7%的面积。后来我把strap间距放宽到20μm,同时优化了IR drop,面积利用率又回到了73%。

我的建议是:电源网络设计要「够用就好」。先做一个粗略的IR drop分析,确定最小需要的strap密度,然后在此基础上加10-15%的余量。别一上来就加满。

4.5 面积优化的实战流程

说了这么多,咱们总结一下我常用的面积优化流程:

  1. 综合阶段:用多阈值库,关键路径用高驱动,非关键路径用低驱动。
  2. Floorplan阶段:合理划分模块,预估congestion热点,提前预留绕线资源。
  3. Placement阶段:控制utilization在75-82%之间,用soft blockage引导单元分布。
  4. 电源网络设计:基于IR drop分析,确定最小strap密度,避免过度设计。
  5. Post-placement优化:检查congestion map,必要时做局部调整。

记住:面积优化不是一步到位的。我通常要迭代2-3轮,才能找到面积、时序、功耗的最佳平衡点。

4.6 知识体系框架

下面这张图,是我自己总结的面积优化知识体系。你可以把它当作一个检查清单,做项目时对照着看。

面积优化知识体系 标准单元选择 • 驱动强度按需分配(X1/X2/X4) • 低面积单元优先使用 • 多阈值库混合使用 • 避免过度驱动 • 关注单元高度和宽度 Placement优化 • 密度控制(75-82%) • Soft blockage引导 • Filler cell预留 • 高连接模块就近摆放 • 局部密度均衡 Congestion与面积 • 绕线资源是隐形成本 • 拥堵导致额外buffer插入 • 目标拥堵率1-3% • 提前预估congestion热点 • 必要时增加芯片尺寸 电源网络对面积的影响 • 电源线宽度影响绕线资源 • Strap密度与IR drop平衡 • 避免过度设计 • 基于分析确定最小密度 • 留10-15%余量 平衡:面积 vs 时序 vs 功耗 vs 绕线

嗯,以上就是我对面积优化的全部心得了。记住,面积优化不是一锤子买卖,而是贯穿整个物理设计流程的持续工作。多迭代、多检查、多总结,你也能成为面积优化的高手。

可可精品资料库