天气: 晴朗
心情: 高兴
前言:对于后端工程师来说,floorplan大概是最考验功力的地方。个人对design的数据流的理解和工具进行place的behaver的理解,二者综合起来进行布局才有可能大概率的获得一个较好的结果。那么考量的标准是什么呢?主要就是congestion和timing的结果了。目前,还没有哪家的工具和算法能够完全不借助工程师的经验去进行floorplan,所以这一步一直是限制EDA工具智能化的一个瓶颈。当然,各大EDA供应商也从未停止探索。比如,借助机器学习和AI算法等来加强EDA工具的自主性,来减少人力的劳动。不过,这仍旧是一个漫长的过程,短期内还是需要依靠工程师的功力。
摘要:一版好的Floorplan往往是经过几轮迭代调整,逼近完美而得来的。这里就涉及两大部分,一部分是基本操作,在熟悉各种rule的前提下快速布局,节省手工操作的时间;另一部分就是try布局,结合前段综合以及后面place和route的结果进行反复迭代,达到快速逼近收敛的效果。这里先分享基本操作的一些技巧,帮助工程师提高工作效率。
第一步,分析block和top的关系,根据客户或者设计的需求确定core / chip的大小和形状。需要达到什么样的利用率,core to die的间距是多少等等不一而论。
第二步,分析数据流,理清module之间的talk关系。
A. 直接从前端拿到数据流关系图,进行hard macro的摆放布局;
针对macro数量巨大的情况进行快速分类,将module进行打散,然后根据子module name的关键字将相应的memory摆放到core内,然后用颜色分类,快速区分不同module的macro。有脚本如下:
proc placeMemByName {sram high} {
set x 0
set y $high
set mem [dbGet [dbGet top.insts.cell.subClass block -p2].name $sram]
foreach i $mem {
placeInstance $i $x $y -placed
set width [dbGet [dbGet top.insts.name $i -p].box_sizex]
set x [expr $x + $width]
}
}
利用这个脚本快速将macro放进core内,然后上色:setMultiColorsHier
之后就可以根据数据流的关系图进行macro的顺序摆放。
B. 在缺少前端提供的数据流图的时候,也可以先快速把macro摆进core内,然后在自行分析数据流的关系。
方法一,就是按照gui界面的module之间的flightline的关系绘制数据流,然后进行估计摆放;
方法二,为了进一步确认module之间的具体数据交互关系,可以使用report_timing
进行分析,这一步可能需要花点时间,但是只需要做一次。
例如:report_timing -from [get_cells [all_registers] -filter "fullname =~ *A*" -hierarchical] -to [get_cells [all_registers] -filter "full_name =~ *B*" -hierarchical]
可以将相应的module的关键字写成list,利用foreach循环report得到完整的数据交互关系文件,再自行分析。
第三步,迭代求完美
初版floorplan布局完成之后,可以进行powerplan等后续操作,然后保存def文件。
兵分两路,一路将def反馈给综合人员,进行 phycail aware 的综合,进一步优化;
另一路,进行place,看overflow和timing的情况,然后直接route,看drc的情况。
这两路同时进行,第二路可以根据overflow和drc的情况进行分析,有针对的调整,以期得到更优化的floorplan;第一路,等待综合结果和上一版进行比较,是否得到优化,采用更优化的一版再run。
如此这般,反复迭代,直到得到一个满足各方面要求的floorplan来。这个迭代次数有可能是一次,有可能是多次,全看工程师的功夫了。不过,如今工具的有很大的改进,比如C家的INNOVUS,可以用工具进行自动floorplan,那么我们也可以借鉴工具做的布局,虽然工具未必完美,倒是有一定的参考价值。
小结:floorplan是后端工程师做项目的开始步骤,也是关键步骤,这里的功夫需要一定的脚本能力,更需要对布局的理解和经验,甚至是一种感觉。而这种感觉自然是靠经验支撑起来的,这一步是后面一切操作的基石,做好了,后期工作就会很顺利,不然就是一个反复迭代的过程。在迭代中求得完美,也是工程师的素养。当然,经验的积累就是要靠不断地尝试和灵活的借鉴,利用手头一切可以利用的资源最大化的提高工作效率。
floorplan的操作流程大体如此,更细致的操作技巧有待后续分享。