热度 1| ||
“天下大势分久必合,合久必分”
背景:在整个chip中某些属于同一个module的cell在place之后非常的分散,不利于timing,transition等;这时可以采用将这一类型的cell“捆绑”起来,做成一个小小的macro,在place的时候就不会分散开来。
data准备:需要组合的cell的netlist(将来需要再top的netlist里将相关cell用新的macro替换掉);相应cell的lef;这些macro所属的clock的sdc;viewDefinational文件;
操作步骤:
1.写好init的脚本,进行place;
相当于做一个微型design,里面只有几个逻辑cell和buffer等,而且不用做长tree(为了快速抽取时序模型)
set init_lef_file "tech.lef std.lef"
set init_mmmc_file "view.tcl"
set init_gnd_net "VSS"
set init_pwr_net "VDD"
set init_top_cell “top_test”
init_design
2.确定macro的size(尽量小),和row的方向(保持核与chip的row的方向相同);
这一步根据实际需要进行手动操作,因为cell数量少,手动调整方便,并且可以进行最优化排列,尽可能减小size。
3.删掉trial route,打fllowpin,用脚本生出外部的pin的位置和大小(defOut defIn);
这一步就相当于进行powerplan,并且确定出pin的位置,可以通过脚本摆放pin的位置,完成后生成def,可根据需要修改def,然后在重新吃进修改好的def。
4.加filler,route,采用double via;
基本形状和pin的位置以及power都完成之后,加filler把空余的地方补满,尽可以进行route了,为了保证性能可采用double via。
addFiller -cell FILLER
5.吐出gds,检查drc。lvs;
这一步就是生成gds来进行drc和lvs的验证,验证没问题之后就可以进行时序模型和lef的抽取,方便后端使用。
6.通过之后使用edi抽出lib,使用laker等工具抽出lef。
生成lib和lef文件都有多种方式,这里主要以innovus的快捷方式为主。
有了lef和lib,就可以加到design中直接使用了。