4. 拥塞的度量指标:拥塞图、溢出与路由资源利用率
各位工程师,咱们今天聊聊拥塞怎么“量”出来。
做后端设计,最怕什么?最怕布局布线跑了两天,最后一步告诉你“route failed”。你想想看,几十万条线挤在一块,谁先走谁后走,这本身就是个技术活。我个人习惯是,在布局阶段就要开始看拥塞,别等到布线阶段才傻眼。
那拥塞到底怎么度量?说白了,就是三个核心指标:拥塞图(Congestion Map)、溢出(Overflow)、路由资源利用率(Routing Resource Utilization)。这三个东西,就像医生看病时的体温、血压和CT片子,缺一不可。
4.1 拥塞图:一眼看出“堵点”
拥塞图,说白了就是一张热力图。EDA工具会把芯片划分成一个个小格子(叫GCell或者Bin),然后统计每个格子里的走线需求。颜色越红,说明那个区域越挤。
我记得刚入行那会儿,带我的老工程师跟我说:“别光看报告,把拥塞图调出来,一眼就能看出问题。” 这话我现在也经常跟新人讲。
拥塞图通常有两种:
- 全局拥塞图:看整个芯片的宏观分布,哪里红、哪里绿,一目了然。
- 局部拥塞图:放大到某个模块或某个区域,看具体的走线冲突。
嗯,这里要注意:拥塞图是动态的。你每做一次优化,它都会变。所以别只看一次,要反复看。
核心要点:拥塞图是定性分析工具,帮你快速定位“问题区域”。但它不能告诉你“到底有多严重”,这时候就需要看溢出数据了。
4.2 溢出:用数字说话
溢出(Overflow)是什么?简单讲,就是“想走的线超过了能走的位置”。
每个格子里的走线轨道数是有限的。如果需求超过了供给,多出来的那部分就叫溢出。溢出越大,拥塞越严重。
我一般看两个值:
- 总溢出(Total Overflow):所有格子溢出的总和。这个值越小越好,理想情况是0。
- 最大溢出(Max Overflow):单个格子溢出的最大值。这个值如果太大,说明那个地方已经“堵死了”。
我曾经遇到过一个项目,总溢出只有几百,但最大溢出高达50多。结果呢?布线时那个区域直接爆了,工具怎么绕都绕不过去。后来我学乖了,不光看总数,更要看峰值。
个人经验:我一般把总溢出控制在100以内,最大溢出不超过5。超过这个阈值,就要开始动手优化了。
4.3 路由资源利用率:看看“路”有多挤
路由资源利用率,就是看每个金属层上已经用了多少走线资源。这个指标通常用百分比表示。
比如,M4层的利用率是70%,意味着还有30%的空位。但如果M4层利用率到了95%,那基本就是“水泄不通”了。
这里有个坑:不同金属层的利用率意义不一样。底层金属(M1-M3)通常更挤,因为标准单元和电源网络占了很多地方。高层金属(M5以上)相对宽松,但也要注意长走线的分布。
我习惯把利用率分成三个等级:
| 利用率范围 | 状态 | 建议操作 |
|---|---|---|
| < 60% | 宽松 | 正常设计,无需特别处理 |
| 60% - 80% | 中等 | 关注局部热点,适当调整 |
| > 80% | 拥挤 | 必须优化,否则布线可能失败 |
你想想看,如果某个区域利用率到了85%以上,再加上一些长走线或者时钟线,那基本就是“定时炸弹”。
避坑指南:我曾经在某个28nm项目上,M2层利用率到了92%,我以为没事,结果布线阶段跑了三天没跑通。后来不得不回退到布局阶段,重新调整标准单元的位置,才把利用率降下来。所以,利用率超过80%就要拉警报了。
4.4 三个指标怎么配合使用?
这三个指标不是孤立的,要结合起来看。我一般的工作流程是这样的:
- 先看拥塞图:快速定位红色区域,找到“疑似堵点”。
- 再看溢出数据:确认这些区域的溢出值是否超标。
- 最后看利用率:分析是哪个金属层出了问题,是底层太挤还是高层不够用。
举个例子,有一次我看到拥塞图上有个红点,溢出值显示最大溢出是12,利用率显示M3层到了88%。那问题就很清楚了:M3层走线太多,需要把一部分走线推到M4层去。
说白了,这三个指标就是你的“三驾马车”。拥塞图告诉你“哪里堵”,溢出告诉你“堵多严重”,利用率告诉你“为什么堵”。
总结一下:
- 拥塞图:定性分析,快速定位
- 溢出:定量分析,评估严重程度
- 利用率:根源分析,找到优化方向
我个人习惯是,在布局阶段至少看三次拥塞图:第一次在布局完成后,第二次在时钟树综合后,第三次在布线前。每次看完,都要记录下溢出和利用率的数据,方便对比优化效果。
嗯,今天就先聊到这儿。这三个指标你记住了,拥塞分析就算入门了。
实用技巧:在Innovus或ICC2里,可以用命令 report_congestion 或 check_route 快速查看这三个指标。我一般会在布局后、CTS后、布线前各跑一次,对比数据变化。
可可精品资料库