innovus笔记——mem(macro)太多,怎么才能摆出符合数据流的mem呢?

        情景再现:

        读入design后,调整好floorplan box,接下来就是摆放mem,如果此时mem的数量多达几百个,不知道这些mem的相互关系?不知道具体的数据流向,也没有guide或者前期的floorplan经验来指导摆放mem,那该怎么办呢?难道只能通过摆放多版mem的摆放来最终决定那一版是摆放的合理吗?(尝试多版,还不一定能得到比较好的结果)

      下面介绍一种快捷实用的方法,只用跑一次就能得到design的数据流向以及符合数据流向的mem大致摆放位置,大大节省后端的run time。

第一步:

        正常的读入design的数据;

第二步:

        调整floorplan box到顶层切的形状。同时询问顶层,本模块的pin应该是放置die box的那条边;添加boundry cell、tapcell等(floorplan形状和pin的位置对mem的摆放有非常大影响,因此需要提前设置)

第三步:

        不需要打power相关net,直接忽略

第四步:

        设置place阶段mode,主要围绕setPlaceMode命令下的相关设置。希望和正常run place flow的placeMode设置相同,主要是为了和正常run place stage的时候的correlation做的好一些。

第五步:

        开始设置command,如下:

#命令版本为innovus版本18
#设置congestion effort
#设置inst gap(如果需要)
#设置max_density

#设置完mode后,键入下面命令
place_design -concurrent_macros

run完上面命令后,会得到mem和std摆放情况,如下图1

注释:最大外框为die box、黄框为core box、红框为pin location、A—K组黑框表示跑完命令后工具根据design的数据流而摆放的mem group、绿色为模拟std摆放。

        根据下图1就可以大致知道mem应该摆放的位置,以及哪些std是和mem的关联性比较强。比如A、B、C组mem是和pin关联性比较强的,如果pin的位置发生改变,那么对应的mem也需要摆放在pin的周围。F、G、I应该放置在一起,并且和pin的关联性较弱。同时发现K组mem和G组mem的周围std比较聚集,这就需要考虑在真正摆放mem后,在K和G mem的出pin地方会不会出现congestion的问题。

                                                                        图1 

根据上面图1的guide后摆放的正式mem的位置,如下图2

                                                                            图2 

第六步:

        得到mem具体位置信息以及可能需要打的place blockage信息后,将mem和blockage用脚本写出。重新restore init后的db,soure先前保存的mem以及blockage的脚本。接下来开始正常打power和后续place流程。这样就可以只run一次就能大致知道mem的摆放位置啦,后续再根据place后真正的timing和congestion进行微调就可以啦,大大提升效率。

你可能感兴趣的:(数字后端知识分享,后端,笔记)