2. 拥塞的根源:逻辑综合阶段对拥塞的影响、物理库单元对拥塞的影响
各位工程师朋友,咱们接着聊拥塞。上一节我讲了拥塞的基本概念和危害,说白了就是绕线资源不够用,大家挤在一起打架。但问题来了——这场架到底是谁挑起来的?
我做了十几年后端,见过太多项目在布局布线阶段突然爆出拥塞,然后一群人加班加点修。其实呢,很多拥塞的种子,早在逻辑综合阶段就埋下了。今天我就把这两个核心根源掰开揉碎了讲清楚。
核心观点:拥塞不是布局布线阶段突然冒出来的,它要么是逻辑综合阶段「种下的因」,要么是物理库单元「长歪了的果」。
2.1 逻辑综合阶段:拥塞的「种子」是怎么种下的?
逻辑综合,就是把RTL代码翻译成门级网表。这个阶段看起来跟物理设计离得远,但恰恰是拥塞的源头。我遇到过好几次,综合出来的网表面积看起来没问题,一放到版图上就炸了。
为什么会这样?因为综合工具只看逻辑,不看物理。它不知道你这些标准单元最后要摆在哪里,也不知道绕线资源够不够用。
2.1.1 高扇出网络:拥塞的「隐形杀手」
高扇出网络,就是一根线要驱动很多个负载。比如时钟网络、复位网络、使能信号。综合工具默认把这些网络优化得很强,驱动能力拉满,结果就是——单元面积巨大,绕线通道被堵死。
我记得有个项目,综合出来的复位网络扇出高达2000多。综合工具为了满足时序,把复位缓冲器链做得又长又宽。结果布局布线时,复位信号路径上全是密密麻麻的缓冲器,周围绕线资源被挤占得一干二净。
我的建议:在综合阶段就做高扇出网络的「打散」处理。把扇出超过100的网络,手动插入缓冲器树或者寄存器复制。别指望后端工具能帮你全搞定,它只能「治标」,不能「治本」。
2.1.2 逻辑深度过大:绕线资源的「无底洞」
逻辑深度,就是一条路径上经过的逻辑级数。深度越大,需要的标准单元越多,单元之间的互连线也越长。你想想看,一堆单元挤在一起,线又长又绕,拥塞不找你找谁?
我见过一个极端案例:某条数据路径的逻辑深度达到了60级。综合工具为了满足时序,把每一级都优化得特别大。结果布局布线时,这条路径占用了将近30%的绕线资源,整个芯片的拥塞热点全集中在这里。
| 逻辑深度 | 单元数量 | 绕线资源占用 | 拥塞风险 |
|---|---|---|---|
| < 20 级 | 正常 | 低 | 低 |
| 20 - 40 级 | 中等 | 中 | 中等 |
| > 40 级 | 高 | 高 | 高 |
注意:逻辑深度过大不仅导致拥塞,还会让时序收敛变得极其困难。我曾经有个项目,综合阶段没管逻辑深度,结果后端花了三周时间修拥塞和时序,最后还是不得不回头改RTL。
2.1.3 综合策略不当:过度优化带来的「副作用」
综合工具有很多优化选项,比如面积优化、功耗优化、时序优化。但有时候,过度优化反而会引入拥塞问题。
举个例子:综合工具为了降低动态功耗,会把高翻转率的节点做「门控时钟」处理。但门控时钟需要额外的逻辑单元,这些单元如果集中在一个区域,就会形成拥塞热点。
我个人的习惯是:综合阶段不要开「激进」优化选项。先把基础网表做出来,看看面积和时序是否合理。等后端做完初步布局,再回头调整综合策略。这样能避免很多不必要的拥塞。
2.2 物理库单元:拥塞的「硬件基础」
说完了逻辑综合,咱们再来看看物理库单元。物理库,就是标准单元、宏单元、IO单元这些物理实现的基础。它们的大小、形状、引脚位置,直接决定了绕线资源的可用性。
说白了,物理库单元就是芯片的「砖块」。砖块太大、形状太怪、引脚太密,你砌墙的时候肯定到处是缝,绕线自然就堵了。
2.2.1 标准单元的高度和宽度
标准单元的高度,通常用「轨道数」来表示。比如7轨单元、9轨单元、12轨单元。轨道数越多,单元越高,驱动能力越强,但面积也越大。
我建议:不要盲目追求高驱动能力的单元。有些工程师觉得驱动能力越强越好,结果全用了12轨单元。单元又高又宽,绕线通道被挤得只剩一条缝,拥塞率直接飙升。
实际项目中,我一般会混合使用不同高度的单元。关键路径用高驱动单元,非关键路径用低驱动单元。这样既能满足时序,又能控制拥塞。
2.2.2 宏单元的位置和引脚分布
宏单元,比如SRAM、ROM、PLL,它们体积大、引脚多。如果宏单元摆放不合理,或者引脚分布太密集,周围的绕线资源就会被严重挤压。
我记得有个项目,设计师把两个大SRAM紧挨着放,中间只留了一条窄通道。结果SRAM的几百个引脚全挤在这条通道里,绕线工具根本绕不开,最后只能手动调整宏单元位置。
避坑指南:我曾经在宏单元周围预留了至少2倍标准单元高度的绕线通道。如果空间实在不够,可以考虑把宏单元「打散」成多个小宏单元,分散摆放。
2.2.3 引脚密度和绕线层数
引脚密度,就是单位面积内引脚的数量。密度越高,绕线越困难。特别是当引脚集中在某个区域时,绕线工具需要「绕道」走,很容易形成拥塞。
我一般会关注两个指标:
- 引脚密度 < 30%:绕线资源充足,拥塞风险低
- 引脚密度 30% - 50%:需要关注,可能局部拥塞
- 引脚密度 > 50%:高风险,必须提前规划绕线策略
另外,绕线层数也很关键。层数越多,绕线资源越丰富。但层数多了,成本也上去了。我见过一些项目为了省钱,只用4层金属,结果拥塞得一塌糊涂。嗯,这里要注意:绕线层数不是越多越好,但太少肯定不行。
2.3 知识体系总结
说了这么多,我画了一张图,把拥塞的根源梳理了一下。你看完应该能更清楚:
你看,拥塞的根源其实就两大块:逻辑综合和物理库单元。逻辑综合阶段埋下的「种子」,到了布局布线阶段就会「发芽」;物理库单元选得不好,就像用劣质砖头砌墙,到处是窟窿。
我个人觉得,解决拥塞最好的办法,就是提前预防。在综合阶段就考虑物理实现,在选库阶段就评估绕线资源。别等到布局布线爆了拥塞,才回头去改。那时候成本可就高了。
一句话总结:拥塞不是「天灾」,而是「人祸」。只要在综合和选库阶段多花点心思,布局布线阶段的拥塞问题至少能减少一半。
好了,这一节就讲到这里。下一节我会聊聊拥塞分析的具体方法和工具使用,到时候咱们再细聊。