先问大家几个问题:
一:create_placement会把std cell 放进soft place blockage里吗?
二:在soft place blockage里创建一个hard bound,create_placement会把相应的std cell放进bound里去吗?
三:在hard place blockage里创建一个hard bound,legalizer会把std cell 从bound里挪出来吗?
std cell出门,靠两个工具,placer和legalizer。placer是宝马,可以让std cell从原点跑到floorplan的任何地方。legalizer是步行,坐宝马到了目的地后,得走一点点路,在附近找到一个合适的地方休息。std cell还有个亲戚,就是high-fanout-synthesis(简称HFS)和optimizer插入的buffer/inverter)。buffer不坐宝马,从天上掉下来后,然后也走走路(靠legalizer),找个合适的地方休息。
std cell并不能随心所欲,不能想去哪就去哪。它有两个约束,placement blockage和bound。这两功能刚好相反,blockage是不让std cell进来,bound则是不让std cell出去。他们又有很多分类,bound分为soft bound和hard bound。blockage又分soft,hard,和partial以及各种特殊的blockage(比如buffer only等)。
一般情况下,blockage和bound分开工作,井水不犯河水。但是,偶尔会遇到bound和blockage overlap的情况,这种情况下,std cell该呆在里面呢?还是该出去呢?如果能正确理解工具的行为,那么将会把你的std cell弄的服服帖帖的,指哪打哪,精确去到你想去的地方。
Placer怎么处理blockage
hard blockage,是霸王条款,没有商量,不允许placer把任何std cell进来。
soft blockage,有分别心。不允许placer把std cell放进来,但允许optimizer/HFS放buffer进来,为的是解DRC,优化时序。soft blockage也还算包容,已经进来的cell(也许是optimizer/HFS放的),则允许继续留在里面(place.coarse.enable_enhanced_soft_blockage=true),incremental place并不会把他们挪出去。
partial blockage,需要一个参数,即密度。std cell随时可以进来,但是不能超过这个密度阈值,否则,对不起,多余的人请出去吧。
所以placer手下的std cell和blockage的关系是:
Blockage Type |
Hard |
Soft |
Partial |
Place |
进不去 |
进不去 |
能进去,但别进太多 |
Incremental Place |
进不去 |
进不去 已经进去的可以呆着 |
能进去,但别进太多 |
Placer怎么处理bound
bound的目标很简单,指定一些std cell的位置,所以bound只是个约束。而placer的工作就是将这些宝贝疙瘩std cell放到bound里去。
Hard bound,顾名思义,是个硬性要求。所以placer不管三七二十一,会把这些cell全部装进这个bound里。
Soft bound,不是硬性条件,placer一般都会把std cell放进去,但也可能为了更好的时序,会被placer摆在bound外面一点。但一般不会离bound很远,多远取决于soft bound的effort。
注意事项:
壹:创建hard bound时,最好用leaf cell,而不要用hierarchy cell。因为如果指定hierarchy cell,将来optimizer插入的buffer如果逻辑上在这个hierarchy cell里,也会被认为符合这个约束,因此会被legalizer强制放进这个bound区域,可能对时序有很大的伤害。
贰:bound的利用率要在合理的范围之内。不要超过100%,也不要高达80%-90%,不然将来这里别的cell进不来。
叁:placer把cell放进bound后,cell并不是legalized。需要后续的legalizer把它们放好。
肆:一般的bound要在create placement后删除,让后面的步骤更好的优化时序。
另外还有HFS和optimizer新插入的buffer,也不会放进hard placement blockage,但可以放进soft/partial blockage。HFS/optimizer不会理睬bound,该放哪就放哪。
总结一下
placer/HFS/optimizer和blockage/bound的关系
Legalizer介绍
Legalizer的作用,简单的说,就是把std cell放到附近合法的位置(legal location),越近越好。什么是legal locaction?感觉这是一个很复杂的话题。在较老的工艺里(比如28nm或者更老的),legal location就是把std cell放在row和site里,且没有overlap就是了。而新的工艺的legal location越来越复杂,因为不仅要考虑row/site和overlap,还要考虑两个cell 放在一起是不是有DRC?是不是导致将来的绕线DRC?会不会和PG太近,pin是不是在track上等等等等。好,打住,以后有专门的文章来介绍legalizer。
Legalizer和blockage
legalizer和blockage的关系比较简单。
hard blockage:legalizer会遵从hard blockage不让放std cell的约束。当std cell在hard blockage里时,legalizer会把它挪出来,放在外面的legal location;std cell在hard blockage外面时,当然不会挪进去。
soft blockage:legalizer不会遵从 soft blockage。在里面的继续呆在里面,在外面的继续呆在外面。在边界的,可能会为了找legal location会进进出出。总之一句话,legalizer 把soft blocakge当作空气。
partial blockage:legalizer不会遵从 partial blockage,和处理soft blockage行为相同。
Legalizer和bound
hard bound:legalizer会遵从hard bound的约束。当属于这个bound的std cell已经在bound里时,legalizer不会挪出来。当属于这个bound的std cell在bound外面时,legalizer会把他们挪进去。
soft bound:legalizer不会遵从soft bound。在里面的继续呆在里面,在外面的继续呆在外面。在边界的,可能会为了找legal location会进进出出。总之同一句话,legalizer 把soft bound当作空气。
总结一下
Legalizer和placement blockage,bound的关系:
原文地址:https://www.cnblogs.com/lelin/p/12586612.html