• 如何控制std cell的密度?


    其实,关于密度有两个说法。

    一是utilization,也就是设计的利用率。一般来说,为了成本考虑,利用率能做的越高越好,也就是std cell密度越高越好。

    二是在利用率确定的情况下,std cell的局部密度,也是今天要讨论的话题。

    在设计的面积已经确定的情况下,std cell局部密度是越低越好?还是越高越好?答案当然是不一定。

    局部密度高,对时序好。因为线短,net delay小,transition小,cell delay也小。但是,局部密度过高,可能对绕线不好,另一个风险是没有足够的空间给eco来修timing和修hold等。

    局部密度低,恰恰相反,对绕线好,但是对timing差,对power也不好。

    所以,一般的设计里,局部密度要综合考虑:即congestion严重的地方,cell密度要低点;timing要求高的地方,cell密度可以高点。所以整个设计里的密度通常看起来是不均匀的。

    那么在ICC2里,到底是在控制密度?

    答案是placer(或者叫coarse placer)。placer在ICC2里至少有三处被调用:

    第一处:place_opt -from initial_place -to initial_place

    第二处:place_opt -from final_place -to final_place

    第三处:clock_opt -from final_opto

    如果脚本里还有使用create_placement,那也是在调用placer。

    placer会在timing要求高的地方,把std cell摆的紧凑,局部密度高。在有congestion的地方,把std cell往四周推开,让这个区域密度低,有利于解决congestion。

    下一个问题来了,密度需要高的地方,可以高到什么程度?解congestion往四周推散cell,推的力度又可以到达什么程度?

    ICC2里有两个对应的参数来控制。前者用max_density,后者用max_util。

    max_density用来控制放std cell时的最高密度,最高不可以超过它。

    max_util来控制解congestion时,往四周推散cell的力度,最高不可以超过它。比如max_util=0.9,那么往周围推散cell时,周围的std cell密度(利用率)达到了0.9就停止推了,即使还没有完全解决congestion也会停下来。因为再往四周退散,四周密度超过90%,就有很大的风险了。

    max_util=0.9,那么往周围推散cell时,周围的std cell密度(利用率)达到了0.9就停止推了,即使还没有完全解决congestion也会停下来。因为再往四周退散,四周密度超过90%,就有很大的风险了。

    两个参数都是用来控制最高密度,但是作用不一样。前者是开始放std cell的时候,能达到的最高密度;后者是placer解cogestion时,能推到什么程度。虽然两者都是placer一起同时控制的,但为了理解方便,我们可以认为有先后顺序。即先按max_density做placement,再按照max_utli来推散cell解congestion。

    局部密度一定要合理,根据你的设计来定,没有固定的值。

    好了,理解了这两个概念,控制起来就非常简单了。

    均匀密度

     

    要让std cell在设计里均匀摆放,很简单,就是设置如下变量

    place.coarse.auto_density_control=false

    place.coarse.max_density=0

    自动密度控制选项关掉且max_density=0,则placer就会均匀的摆放std cell。

    聪明的读者可能会问,你不是说placer还会看max_util这个参数吗?如果这个参数设置了,那密度还会均匀吗?

    答案是看你有没有用congestion driven的placement。

    比如create_placement, 不加任何参数时,不是congestion driven,这时不看max_utli。create_placement -congestion,则是congestion driven,是会看max_utli的。

    place_opt -from initial_place -to initial_place,不是congestion driven

    place_opt -from final_place -to final_place,是congestion driven

    对于绝大多数flow来说,都会跑final_place这步骤,所以设计不会完全均匀;会在局部有congestion的地方,密度会低些(它周围会高点)。所以均匀密度也是指大体均匀,还是需要去解决congestion的。

    来个均匀密度的例子。

    而对于非均匀密度的控制,工具提供两种方式:自动挡手动挡。大多数设计用自动挡就足够了。但不排除有些设计对密度要求特别严,这时候就需要手动挡了。

    自动挡

     

    place.coarse.auto_density_control = true

    place.coarse.max_density=0 (default value)

    place.coarse.congestion_driven_max_util=0.93(default value)

    自动密度控制开关打开后,另外两个app option用默认值,工具自动决定各个阶段的max_density和max_util,具体的值如下:

    Stage

    Max_density

    Max_util

    initial_place

    0.2

    0.87

    2nd pass incr place

    0.6

    0.87

    final_place

    0.7

    0.90

    clock_opt place

    0.8

    0.93

    细心的读者会发现,自动挡并不是一个固定的值,而是在不同的阶段有不同的值。并且随着步骤的进行,density也越来越高。

    手动挡

     

    如果想自己控制密度,那也很简单,设置如下变量即可:

    place.coarse.auto_density_control=false

    place.coarse.max_density = xxx

    place.coarse.congestion_driven_max_util = xxx

    手动挡设定后,每个步骤的placer都会遵从这个设置。如果你想不同步骤的placer的密度不一样,你也可以做完上一个placement后,及时修改这两个参数,那么后面的placer就会用新的参数。

  • 相关阅读:
    2021微软Power BI 每月功能更新系列——Power BI 6月版本功能完整解读 ​
    Power Automate实例应用
    微软Power BI 每月功能更新系列——2021年4月版本功能更新全面解读
    Power Apps 应用:构建一套简易的五一休假报备管理系统(一)
    如何在Azure上使用 Python 创建ADF
    微软Power BI 每月功能更新系列——2021年3月版本功能更新全面解读
    Power BI 制作技巧 — 按钮动画效果
    连接到Power BI Premium或 Azure Analysis Services时,如何更改Excel中的用户帐户
    在 Power BI 中连接到 SAP HANA 数据库
    2021微软Power BI 每月功能更新系列——Power BI 2月版本功能完整解读
  • 原文地址:https://www.cnblogs.com/lelin/p/12588022.html
Copyright © 2020-2023  润新知