本节主要讲一些宏观方面的东西,具体的细节由于种种原因就不讲了。还需要不断的实践不断的积累才能理解更加深刻,只看别人讲是吸收不了多少的。
做PR,floorplan是第一步,基本功。但是可惜的是,这个不像扎马步,练得越久扎的越稳,反倒运气的成分占大多数。本节主要讲讲block的floorplan,只是随便聊聊作者的看法和做法,并不代表这是最理想最通用的。
boundary
一般来说block的形状都是top切下来的。但是也不能说百分百是这样的;有一些重要的block,例如CPU,先以自己最优的形状(一般是矩形)去做,做好后再给top。
在项目刚开始的时候,如果top没有给这个形状,就需要我们自己先创建一个矩形的,然后再基于utilization对boundary进行缩放,然后预估出大小给top用。
先创建一个矩形的形状:如果想创建一个不规则的形状,可以采用GUI的方式,或者是下面的命令来进行调节。
setObjFPlanPolygon
setObjFPlanBoxList
port
pin的位置也是top给的。但是在项目的初期,需要根据block自身的情况进行摆放,然后top再基于此进行调节。
port的宽度一般都是最小的宽度,长度却不一定。因为为了防止本block的信号线受到外部其他block的干扰,会在boundary周围打一圈routing-blockage。所以这个port的长度就需要长一点,起码比这个routing-blockage要长。不过也可以创建锯齿形的routing-blockage,在有port的地方不打blockage.
port一般采用中间的层,在摆port的时候,不建议都集中到一块,容易引起congestion。 有port的地方一般不建议周围有macro,容易引起congestion,因为有port的地方一般为了IO-timing的考虑,都会在附近放些buffer等。
macro
摆macro的时候,需要对design本身有一定的了解,就拿CPU来说吧。包括一级缓存,二级缓存,运算单元,存储控制单元等等,可以根据原理,把相应的单元摆在相应的位置。
但是如果不清楚design,就需要让工具先摆一个大致的位置,然后再不断的尝试调整,。不同macro的timing不一样,在第一次摆放后,就可以知道timing的结果,把timing紧的放在里面,timing不紧的放在外面。
一般都要把macro摆在四周,中间留给std-cell。但这并不是绝对的,具体什么情况,哪种情况更好,得多做几遍,多试几遍,没有什么金科玉律。
有时候想法是好的,但是经常你下一次的优化,不一定比当前的好,下下一次的优化说不定更差。花了N多时间,结果却得来一个更差的结果,确实令人头疼,但是PR就是这样,不像脚本debug,很快就可以知道结果。再加上top和block本身由于各种原因不停地在变化,boundary和port等等都不停地在改变,所有的东西又得从头再来,确实更头疼 。
先进工艺下,macro只能左右翻转,不能90度翻转,不能像老的工艺可以随意翻转。macro之间的channel没有一个确定的计算方法,因为macro上面也能走信号线,加上macro之间的channel可能会放入其他的cell。所以只有不断的尝试才能得到一个最优的。
innovus已经有了concurrent macro placement的流程,同时能对macro的位置和std-cell进行优化,做完之后,还能自动将macro legalize好,而不是像之前的那样随意的摆放。作者还没有用过,大家可以尝试一下,
setLimitedAccessFeature $feature\_name 1
place\_design -concurrent\_macros
保存
上面的各种尝试过程中,需要时时刻刻保存结果。可以采用writeFPlanScript命令来保存为TCL的格式,或者可以通过defOut来保存为def。
检查
所有的都做完了,还需要检查一下这个floorplan是否合理。不过这一步已经到最后了,你已经确定你的floorplan是已经很优化的了。如果还处在不断的尝试优化的过程中,没必要去检查。
一些检查的命令和设置:
setFPlanMode, 先设置检查的条件。
checkFPlan,进行检查,检查的内容包括:
- 是否macro或boundary放到了grid上;
- row是奇数还是偶数,是否符合该工艺的要求;
- fence约束是否在grid上,如果不是,可以通过下面的命令snapFPlan来进行snap。
- 还可以通过verifyGeometry来检查port是否在grid上。
优化
上面讲到了如何摆macro,假设大体位置已经摆好。还可以对macro进行微调,就像前几节讲的,对PG进行微调一样,可以写一些额外的脚本,将macro的net引导一下,具体如何做,请听下回讲解。
作者:陌上风骑驴
来源:https://mp.weixin.qq.com/s/1SBcNdnti4\_UTT88ZejZEQ
作者微信公众号
相关文章推荐
更多IC设计技术干货请关注IC设计技术专栏。