基于方法学flow来聊聊APR工具placement

电子说

1.3w人已加入

描述

众所周知,在prePlace阶段打完Power后,需要使用APR工具把网表中存在的例化完的instance来全局放置在core内,这个布局阶段(place)会暴露出设计Case在不加任何约束下按工具默认的globaldensity等设置摆放cell所存在的风险。

实际上在后端范围,工程师通常提到的高风险模块指的就是congestion较高的模块以及时序风险较高的模块,这两者实际上都和place有着千丝万缕的联系,前者可能是因为place阶段不合理/面积切分不合理导致局部绕线资源紧张,后者则有可能因为place的原因使得局部density过高导致timing eco阶段hold插爆引起不能修的short drc。

这篇文章小编就来以APR placement flow为例,分析工具在place阶段到底做了哪些事情,并且结合项目心得,讲述几种常见的解congestion的方法和思路。

实际上placement不止和route最后的drc结果息息相关,更是和下个阶段的cts时钟树密切相关,一个优秀的placement,摆的寄存器的位置比较合理/紧凑的话可以让cts解drv的时候线长减短,进而减少很多为了解transition而插的INV,进而一定程度上优化时钟树长和skew。

在数字电路中,单元的放置是很规范的,std cell的面积都是site的整数倍,而row是由site大小决定生成的,std cell也通常为一倍/二倍row高度,对应的std cell也会snap到row上放置,其实从综合工具DCG看初始状态这些cell全部都是堆叠摆放的。而placement最重要的任务,就是把这些cell摆好,不能有Overlap,不能有legalization的问题,不能有FE DRC。这就很类似于一堆散乱的乐高积木,我们要把它一个个的在地上(core row)铺好,但是又要摆放的符合前端代码(RTL)关系。

寄存器寄存器

寄存器

上述内容就是指导innovus进行block placement的基础flow了,由注释可以发现主要包括设置placemode;设置opt mode,设置OCV derate参数加严时序,add_tie_cell来钳位住logic 0/1的Pin,一端接pg net,一端接constant pin;进行Place以及Place_opt操作;存完db后,报timing以分析时序,也许有些ICer会疑惑PlaceOpt怎么就一个place_opt_design就一笔带过了?事实上,APR布局布线的PlaceOpt阶段工具是其中的一个重要步骤,主要负责对芯片的物理布局进行优化,以满足电气约束和布局规则。

PlaceOpt阶段工具的主要作用如下:

优化芯片的物理布局:PlaceOpt阶段工具可以通过对芯片的物理布局进行优化,使得芯片的面积更小、功耗更低、性能更好。PlaceOpt阶段工具会针对芯片的电气约束和布局规则进行优化,以达到最佳的布局效果。

解决布局冲突:在布局布线的过程中,可能会出现布局冲突的情况,比如两个器件之间的距离过近,或者某些器件之间的间距不符合规定等。PlaceOpt阶段工具可以检测这些冲突,并进行解决,以保证芯片的物理布局符合规范。

优化时序和功耗:PlaceOpt阶段工具可以通过优化芯片的物理布局,来改善芯片的时序和功耗。例如,可以通过减小器件之间的距离,来缩短信号传输的时间,从而提高芯片的时序性能。又如,可以通过合理的布局,来降低芯片的功耗。

生成布局报告:PlaceOpt阶段工具会生成布局报告,其中包括芯片的面积、功耗、时序等信息,以便设计人员对布局结果进行评估和调整。

需要注意的是,PlaceOpt阶段工具只是APR布局布线过程中的一个步骤,它需要与其他工具配合使用,才能完成整个布局布线的过程。例如,在PlaceOpt阶段工具之后,还需要进行时钟树合成、布局布线、后仿真等步骤,以完成芯片设计的整个流程。那么问题来了,如果在place完毕后,工程师在查阅log/报告时候发现局部区域overflow(congestion)确实很大,存在很大的绕线风险时候一般怎么解决呢?

可以通过调整flooplan来解决,通常MEM的沟道/出PIN位置附近会有纵向/横向的overflow,这种congestion通常可以通过调整沟道宽度/MeM的相对位置(使得走线规整)解决

打PlaceBlk,对于cell density过高的区域可以加partitial place blk来降低density,可以密度逐层递增,打多层

增加keepout margin,通过设置Pin keep out来给PIN足够空间出

打routing blk,对于Macro周边底层signal如M2 M3等出PIN导致的signal overflow尤其是拐角处,在周边区域走线资源充足的情况下,可以对堵塞区域设置对应层的no_signal rblk,route完毕后删掉,以免报drc错误

设置padding,对于高Pin Density的区域,经常有AIO,MUX,MBIT等多Pin std cell,虽然cell的密度不高,但是走线出Pin太多,这种情况可以通过设置一类lib cell的padding来解,通常可以加1~2site的距离,不够再加,注意,这样操作很有可能会影响timing,需要谨慎使用。

merge bit,对于寄存器导致发生overflow的区域,工程师可以设置Merge bit以减少时钟PIN

修改RTL代码,有可能是逻辑设计不合理,MUX等多PIN逻辑太多了,后端确实解不了

修改Power Plan,对于H overflow,则加密纵向走线,放松横向Power走线,反之加密横向Power走线,放松纵向Power走线

规划std cell,整理signal 线,在Power net高层空间允许的情况下,走高层NDR来释放风险

少部分的signal线,可以自己手动拉线走高层/或者换层

最终杀招,和项目经理商量要不要增加点面积,或者砍点macro放到其他模块去,H overflow就增加高度,V overflow就增加宽度。






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分