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 面积优化的实战流程
说了这么多,咱们总结一下我常用的面积优化流程:
- 综合阶段:用多阈值库,关键路径用高驱动,非关键路径用低驱动。
- Floorplan阶段:合理划分模块,预估congestion热点,提前预留绕线资源。
- Placement阶段:控制utilization在75-82%之间,用soft blockage引导单元分布。
- 电源网络设计:基于IR drop分析,确定最小strap密度,避免过度设计。
- Post-placement优化:检查congestion map,必要时做局部调整。
记住:面积优化不是一步到位的。我通常要迭代2-3轮,才能找到面积、时序、功耗的最佳平衡点。
4.6 知识体系框架
下面这张图,是我自己总结的面积优化知识体系。你可以把它当作一个检查清单,做项目时对照着看。
嗯,以上就是我对面积优化的全部心得了。记住,面积优化不是一锤子买卖,而是贯穿整个物理设计流程的持续工作。多迭代、多检查、多总结,你也能成为面积优化的高手。
可可精品资料库