前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >论P&R | Pin Density 跟 Congestion

论P&R | Pin Density 跟 Congestion

作者头像
老秃胖驴
发布2019-11-21 20:12:48
3.1K0
发布2019-11-21 20:12:48
举报
文章被收录于专栏:陌上风骑驴看IC

在《论综合:为什么做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":
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陌上风骑驴看IC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档