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 三个指标怎么配合使用?

这三个指标不是孤立的,要结合起来看。我一般的工作流程是这样的:

  1. 先看拥塞图:快速定位红色区域,找到“疑似堵点”。
  2. 再看溢出数据:确认这些区域的溢出值是否超标。
  3. 最后看利用率:分析是哪个金属层出了问题,是底层太挤还是高层不够用。

举个例子,有一次我看到拥塞图上有个红点,溢出值显示最大溢出是12,利用率显示M3层到了88%。那问题就很清楚了:M3层走线太多,需要把一部分走线推到M4层去。

说白了,这三个指标就是你的“三驾马车”。拥塞图告诉你“哪里堵”,溢出告诉你“堵多严重”,利用率告诉你“为什么堵”。

总结一下:

  • 拥塞图:定性分析,快速定位
  • 溢出:定量分析,评估严重程度
  • 利用率:根源分析,找到优化方向

我个人习惯是,在布局阶段至少看三次拥塞图:第一次在布局完成后,第二次在时钟树综合后,第三次在布线前。每次看完,都要记录下溢出和利用率的数据,方便对比优化效果。

嗯,今天就先聊到这儿。这三个指标你记住了,拥塞分析就算入门了。

拥塞度量指标核心逻辑 拥塞图 定性分析 · 定位堵点 溢出 定量分析 · 评估严重程度 路由资源利用率 根源分析 · 找到优化方向 工作流程:先看拥塞图 → 再看溢出 → 最后看利用率 三者关系 拥塞图:哪里堵? 溢出:堵多严重? 利用率:为什么堵?

实用技巧:在Innovus或ICC2里,可以用命令 report_congestion 或 check_route 快速查看这三个指标。我一般会在布局后、CTS后、布线前各跑一次,对比数据变化。

可可精品资料库