3. 拥塞的类型:全局拥塞 vs 局部拥塞、水平拥塞 vs 垂直拥塞
好,咱们接着聊拥塞。上一节我们把拥塞的成因讲清楚了,这一节我带你看看拥塞到底长什么样。说白了,就是给拥塞分分类,让你在项目里一眼就能认出它来。
我个人习惯把拥塞分成两个维度来看:一个是看范围,另一个是看方向。范围上分全局和局部,方向上分水平和垂直。你想想看,这就像看病一样,先看是全身发烧还是局部红肿,再看是哪个方向的血脉不通。
3.1 全局拥塞 vs 局部拥塞
全局拥塞,顾名思义,是整个芯片或者某个大模块都出现了布线资源紧张的情况。我在项目中遇到过最典型的例子,就是某个高性能计算芯片,整个核心区域的标准单元密度都超过了85%。结果呢?整个区域的布线轨道几乎被占满,绕线空间少得可怜。
全局拥塞的特征很明显:
- 整个区域的布线资源利用率普遍偏高(通常超过80%)
- DRC违例散布在整个区域,没有明显的集中点
- 时序路径普遍变长,因为绕线距离增加了
关键判断指标:如果整个模块的全局布线资源利用率超过75%,你就要开始警惕了。超过85%,基本可以断定存在全局拥塞问题。
局部拥塞就更有意思了。它往往集中在某个特定区域,比如某个大宏单元(Macro)的周围,或者某个高扇出网络的汇聚点。我记得有一次做AI加速器芯片,在乘法器阵列的角落,因为大量数据路径汇聚,那个区域的布线密度直接飙到了95%以上,但周围区域只有60%左右。
局部拥塞的典型表现:
- 拥塞热点区域非常集中,可能只占芯片面积的5%-10%
- 热点区域的DRC违例数量是其他区域的10倍以上
- 绕线路径在热点区域被迫绕大圈,形成明显的"瓶颈"
我的经验:处理局部拥塞时,我通常会先看那个区域有没有"大家伙"——比如大宏单元、IP核、或者密集的寄存器阵列。很多时候,稍微挪动一下这些"大家伙"的位置,局部拥塞就迎刃而解了。
3.2 水平拥塞 vs 垂直拥塞
这个维度是从布线方向来区分的。现代工艺中,金属层通常有水平层(如M2、M4)和垂直层(如M1、M3、M5)。水平拥塞就是水平方向的布线资源不够用了,垂直拥塞同理。
水平拥塞,说白了就是水平方向的轨道被占满了。我见过最夸张的一次,某个设计在M4层(水平层)的轨道利用率达到了98%,但垂直层M3才用了40%。为什么会这样?因为那个模块的数据流主要是横向传输的,大量总线都在水平方向走线。
水平拥塞的常见场景:
- 数据总线密集的区域(总线通常是水平方向走线)
- 多个宏单元并排放置时,它们之间的水平通道
- 时钟树综合后,水平方向的时钟走线过多
垂直拥塞则相反,是垂直方向的轨道吃紧。我记得有个项目,因为电源网络在垂直方向用了太多M1层资源,导致垂直方向的布线通道严重不足。最后不得不调整电源网络策略,把部分电源走线改到更高层去。
垂直拥塞的典型场景:
- 标准单元行之间的垂直通道(M1层)
- 宏单元上下堆叠时,它们之间的垂直间隙
- 高密度寄存器阵列的垂直信号走线
曾经踩过的坑:我曾经在一个28nm的项目中,只关注了全局拥塞,忽略了局部水平拥塞。结果在布局阶段看起来一切正常,到了详细布线阶段,某个区域的水平层完全布不通。最后不得不回退到布局阶段重新调整,浪费了两周时间。所以,一定要同时关注范围和方向两个维度。
3.3 四种拥塞类型的组合分析
实际项目中,这四种类型往往是组合出现的。我习惯用一个2x2矩阵来分析:
| 全局 | 局部 | |
|---|---|---|
| 水平 | 整个芯片水平方向资源紧张 常见于总线密集型设计 |
某个区域水平方向拥塞 常见于宏单元之间的水平通道 |
| 垂直 | 整个芯片垂直方向资源紧张 常见于电源网络过密的设计 |
某个区域垂直方向拥塞 常见于标准单元行之间的垂直通道 |
你想想看,这个矩阵能帮你快速定位问题。比如,如果整个芯片的M2层(水平层)利用率都超过80%,那就是全局水平拥塞。但如果只有某个角落的M2层爆满,那就是局部水平拥塞。处理策略完全不同。
3.4 如何快速识别拥塞类型
嗯,这里我要分享一个实用技巧。在EDA工具里,我们通常用拥塞热力图来识别。我个人习惯分三步走:
- 先看全局热力图:如果整个区域都是红色或橙色,那就是全局拥塞。如果只有零星的红点,那就是局部拥塞。
- 再看分层热力图:分别查看每个金属层的拥塞情况。如果水平层普遍偏红,那就是水平拥塞;垂直层偏红,那就是垂直拥塞。
- 交叉验证:把范围维度和方向维度结合起来,就能准确定位了。
实用命令示例(Innovus):
# 查看全局拥塞热力图
report_congestion -global
# 查看指定层的拥塞情况
report_congestion -layer M2
# 查看局部区域的拥塞详情
report_congestion -area {x1 y1 x2 y2} -detail
我曾经用这个方法,在一个7nm的项目中,半小时内就定位了三个不同的拥塞热点:一个是全局水平拥塞(总线区域),两个是局部垂直拥塞(宏单元间隙)。针对不同类型,分别用了不同的优化策略,最终顺利通过了布线。
小提示:不要只看总体的拥塞数值。我建议你至少查看M1到M4这四个关键层的拥塞情况。因为低层金属(M1-M2)通常最紧张,高层金属(M3-M4)次之。如果高层金属都出现拥塞,那问题就比较严重了。
好了,这一节我们把拥塞的类型讲清楚了。记住这个2x2矩阵,下次你在项目里看到拥塞报告时,就能快速判断出它属于哪种类型,然后对症下药。
这张图把四种拥塞类型的关系讲得很清楚了。你把它记在脑子里,以后看拥塞报告时,就能快速对号入座。