在《论综合:为什么做physical aware synthesis》中论及做Physical 综合的二分之一原因是Congestion 优化;Congestion 是一个硬指标,因为前面做的再好,如果congestion 太严重线绕不通还是要重头再来。跟功耗的优化类似,设计本身对Congestion 影响最大,如果设计已经足够优化,Coding Style 对Congestion 足够友好;那FloorPlan 对Congestion 的影响就至关重要,如果FloorPlan 也足够优化,也都按着数据流精细调整过;那剩下解Congestion 的办法就十分有限,目前在综合阶段可用的办法不外乎:
- 结构选择;
- 推散cell;
- 禁用pin Density 大的cell, 比如x1 的AOI/OAI cell, 通常这类cell 有5-7 个pin.
To reprot High Pin Density cells
cell 的pin Density = 该cell pin 的个数/ 该cell 的面积。在Innovus 中可以用如下脚本报出库中所有cell 的Pin Density, 该脚本可在 support.cadence.com 搜『 To reprot High Pin Density cells 』找到。
Script:
Sample Output:
Local Hot Spots optimize in Innovus
在Innovus 中可以用如下办法来优化Local hot spots:
- 调整-congEffort, 在Innovus 中该值默认为auto, 在placeDesign 或place\_opt\_design 前将该值设为high, 工具会在placement 时迭代更多次,进行congestion 优化,该变量会导致runtime 增加。
setPlaceMode -congEffort high
- 用命令congRepair, 该命令会基于trialRoute congestion 的结果做一次增量的placement, 通过将cell 推散来优化Local hot spots, 通常在placeDesign 或pre-CTS opt 之后执行该命令,由于该命令会大范围移动cell, 所以不建议在post-CTS 之后执行。可以指定option -area 来限制工具在一定范围内移动cell.
- 加module padding, 该方法常用于某些congestion 特别严重的module, 用如下命令给相应module 指定一个padding factor, 工具会将该module 下所有leaf cell 的面积都乘以该factor, 类似于设path\_group 加weight, 以实现将cell 松散摆放的目的,至于factor 值设为多少,不同的设计需要不同的尝试,以得到一个类似最优解。Module padding 只作用于global placement阶段,在refinePlace ( Placement legalization ) 会被忽略掉。
setPlaceMode -modulePadding $module 1.2
- 设blockage, 根据Density 分布图,如果有大量的连线穿过某个channel 可以对该channel 设一个Hard placement blockage 禁止工具摆放其它cell 进来;如果某个区域Congestion 特别严重,可以设一个Partial placement blockage 降低该区域的cell density. 可以参考如下步骤:
- 加cell padding, 给pin Density 高的cell 加额外的padding, 如 "specifyCellPad cellName 6" 可用如下proc 对lib cell 加padding, 并设置命令 "setPlaceMode -padFixedInsts true" .
Pin Density report
跟cell Density 类似,在Innovus 中不同命令侧重不同,会得到不同的Pin Density 值,此处可回顾《论PR | Innovus 中cell density计算解析》。
如上例所示,pin Density = total pin counts / total area. 不同命令计算得到的total pin counts 不同,从而得到不同的pin Density.
Total area 计算:
- Innovus 使用site unit 来计算total area. 选中一个std cell, 可以用如下命令得到site area:
- 该例中chip box 是 {0.00, 0.00, 516.12, 287.28}, 所以可得chip 的面积,chip 面积除以site 面积即为此处的total area.
Pin Count 计算:
- 命令queryPinDensity 将所有leaf pin 累加起来计算得到 "total # of pins":
- 命令checkFPlan -reportUtil 将所有leaf pin 跟IO port 累加起来得到"total # of pins":
- 命令place\_design 将所有leaf pin 跟IO port累加起来再减去constant pin 计算得到"total # of pins":
作者:陌上风骑驴
来源:https://mp.weixin.qq.com/s/xB6WGCq8Z9yfdlINHR5UNQ
作者微信公众号
相关文章推荐
•抽刀断水水更流,RC Corner不再愁:STA之RC Corner
•大牛访谈:纯粹的技术控——旭姐
更多IC设计技术干货请关注IC设计技术专栏。