这一篇主要总结一下可能遇到的congestion问题和解决办法。

通过congestion map和overflow,可以快速的找到congestion出现的大致位置和layers,然后再结合逻辑设计(数据流),floorplan摆放,pin的摆放,集成规则等分析出现congestion的原因。

我们这里先把congestion可能的原因列出来。

全局的congestion

需要先看下利用率,确认面积是否偏小。若利用率不高,则面积无问题。

再看下congestion发生的层数,是否集中在某几层,如果集中在某几层,有可能是物理规则违反导致的,如cell 出pin问题,孔的大小问题,绕线宽度,电源条问题。还有可能是时序问题,比如时序较差,工具选用高层走线,高层线较宽,导致高层congestion。还有可能是特殊形状的floorplan加特殊的逻辑设计,PIN摆放,导致竖向或者横向绕线资源不足。

局部congestion

大概率是cell overlap,多pin cell密集,cell detour,修时序插了太多cell等导致的。也有可能是综合或者设计导致的,比如某个module内有大量的交叉线,有较多的多pin cell等。

案例一 IP摆放

图示左边是之前的floorplan,红色为congestion发生区域,黄色为block pin,黑色小框为memory。图示的蓝色表示有连接关系。

我们首先看到原图片左上角 channel处有congestion,有可能是mem连接的逻辑过多,局部面积不够,可以增加channel宽度解决。

细看PR流程|congestion分析

图片下方在mem channel和mem上方有congestion,但是它除了channel问题外,还有pin A 和pin B的一些交互。所以这边除了增大channel,还可以适当挪开mem,留出空间。

最右边的123是不同的module,有比较强的交互关系,目前的fp将123放在一起没问题。但是1和2中间的小块mem出现了大量congestion,考虑可能是阻挡了1和2之间的交互或者有部分逻辑放不下。此外,1和pin A比较近,pin附近位置不够。都可以微调一下1和小块mem位置,留出空间。

案例二 PIN位置和逻辑设计问题

如上图,floorplan呈长条形,右侧存在非常严重的congestion。左侧是12个module或者IP或者memory组。这种congestion一开始可以考虑增加面积,增加右侧cell区域。但是面积不是无限增加的,有可能增加面积解决不了问题。

长条形的floorplan极有可能存在竖向绕线资源不足的问题。需要分析一下congestion来源,查看分层congestion报告,看下是否存在特定层的问题。

图示的这个floorplan存在12组memory块和12组pin交互,还存在12组memory和共同的一组pin交互(common pin)。首先发现的问题是pin的位置和memory块位置不匹配,导致额外的交叉走线。可以调整memory块的位置或者和顶层协商调整pin的位置,优化走线交叉问题。

接着解决common pin导致的走线交互问题,此类情况可能是共同送数据给common pin处理,common pin数据分发,可以考虑和前端沟通完成分级的控制或者数据传输。比如可能原来是12组数据共同送到common pin处理,可以分成两两送一组数据,再3组数据并成一组,最后只送两组数据到中间。这样到中间的线就减少了很多。

案例三 高density cell or pin

在上图左侧有严重的congestion,分析发现这块主要是m1 m2 module,且module内存在大量的多pin cell。m1 m2和右侧,右上的pin有交互。可以考虑微调floorplan,将mem挪开,再对这个module设置pin density或者加cell padding。

案例四 逻辑设计问题

同示例二,多组汇聚或者分发到多组的都可以考虑分级处理,对congestion和时序都有好处。

同样的high fanin,high fanout,如果导致了congestion和时序问题,可以考虑复制逻辑解决。

案例五 pg密度

pg密度是个复杂的问题,密度高了走线资源不足,密度低了容易有IR问题,需要综合考虑。不过如果只是某几层有congestion而且IR无问题,可以考虑删一点PG。