前面主要介绍了Optimize的一些基本概念,那么今天就来讲解一下它的一些实际运用,以及我们怎么才能用好这个强大的命令!!
说到Optimize,那和它联系最紧密的就是Timing了。在做实际design中,从place到signoff,Timing violation是伴随着整个流程挥之不去的阴影。那P&R中,Timing violation的趋势是怎么样的呢?
很多人脑海里浮现的是左边呈倒金字塔形的这张吧,认为每前进一步就会修掉一些violation。其实则不然,右边那张才是更合理化的趋势图。工具P&R的核心,placement和routing,其实都不是那么的timing aware。Routing以后甚至会出现violation path的增多(因为Route之前都不care DRC)。那其实整个Timing closure的过程中,出力最大的就是Optimize。因此,我们非常有必要来了解一些传统的Optimize的注意点
1Before Optimize
正所谓"临阵磨枪,不亮也光",Optimize可是个超级命令,通常运行时间都在几个小时,甚至几十个小时以上。耗费这么大的财力物力,我们可不希望它跑得毫无价值。在开始运行place_opt之前,对design的基本情况进行一些基本检查真的是非常有必要的。整理了一下,以下几点是比较有用的:
1)跑一遍check_design,检查一下design中包括(netlist,Timing library,Floorplan)
2)检查sdc文件是否clean。是否有一些定义不合理的约束。
3)报一遍zero wireload model的timing,如果zwl timing的结果都不理想的话,试着要去调整下sdc文件等等
4)采用get_attribute [get_lib_cell *] dont_use或者report_dont_use报出当前设计中的dont use cell,一些特别weak的cell我们需要禁用。
5)检查一下有没有打开需要的active scenarios
set_scenario_status
6)检查所需要的Optimize mode。
Performance (opt.timing.effort)
Power (opt.power.effort)
Density (-max_density)
2During Optimize
这个期间,是Optimize自己后台运行的过程。我们也做不了什么操作,正好来复习一下Optimize的transform。我们知道它可以做很多的动作,而工具中可以让它操作的object又有很多,这两者之间的关系在下面这张表中可以体现出来:
3After Optimize
当Optmize做完,结果不理想该肿么办呢?
Debug呗~~
提供以下几点建议:
1)从log入手:
1.查看下各个Path Group的WNS/TNS的收敛趋势。
2.查看下DRV的收敛趋势。
3.查看下Optimize过程中各个transform的detail report。包括move的instance数目,距离。包括routing conestion等等,检查下有没有异常值。
2)分析Timing情况
1. 总体概括性地检查一下critical path,而不是去看最差的一条,通常Path Group的timing变差具有共性
2. 分析一下path上的cell/net delay, 看看有没有“bad buffering, bad sizing, weak cell”这些情况
3. 检查一下Placement结果吧,看看某些区域的density是不是较大,可以采用keepout margin或者cell spacing constraint来增大cell之间的距离
4. macro是否摆放不合理,channel留太少,或者macro上的routing过差,可以采用添加合适的blockage,或者重新摆放macro位置来解决
5. 可以自己创建Path Group来优化timing,Optimize默认创建的Path Group是reg2reg, reg2cgate. 我们可以采用group_path来自己创建需要重点优化的Path。
3)通过report相关的命令来检查一些潜在的误操作或者工具的bug
report_dont_use可以报出当前design中的dont use cell
report_dont_touch可以报出当前design中的dont touch cell
4)运行incremental的optimize
它会基于当前Placement的结果来优化density,以及基于Optimize的结果来继续优化WNS和TNS
optimize的介绍就到此为止了,看似简单的一个命令其实要用好他却不容易。如何挖掘工具潜能,取得较好的优化结果,这是一个反复迭代,反复分析设计的过程。总之,多尝试,多跑跑设计,才能对工具愈发熟练。
全部0条评论
快来发表一下你的评论吧 !