分享

每日学习:芯片诚可贵,时序价更高——Optimize(二)

 字善 2023-06-06 发布于上海

作者称谓:Tao涛

个人介绍:摸爬滚打多年的数字后端工程师

微信公众号:数字后端IC芯片设计

半导体知识分享第75期

技能升级,从这里开始

前面主要介绍了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的注意点

1
Before 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  <list_of_placement_scenarios>  -active true

6)检查所需要的Optimize mode。

Performance (opt.timing.effort)

Power (opt.power.effort)

Density (-max_density)

2
During Optimize

这个期间,是Optimize自己后台运行的过程。我们也做不了什么操作,正好来复习一下Optimize的transform。我们知道它可以做很多的动作,而工具中可以让它操作的object又有很多,这两者之间的关系在下面这张表中可以体现出来:

图片

3
After 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 bufferingbad sizingweak cell”这些情况

3. 检查一下Placement结果吧,看看某些区域的density是不是较大,可以采用keepout margin或者cell spacing constraint来增大cell之间的距离

【数字后端基本概念介绍<Keepout Margin>】

【数字后端基本概念介绍<Cell Spacing Constraint>】

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多