数字后端PR流程4:Placement
欢迎大家评论转发关注,不定时更新!
上一节我们介绍了芯片在PR阶段的Floorplan一般情况下怎么去规划,并且在规划中怎么去检查timing以及系统的IR drop。并且通过上节我们将满足要求的floorplan通过软件产生了标准格式的DEF文件,以供本节我们使用。
在这一节将介绍有了DEF文件后,我们怎么去对我们的std-cell等去摆放。主要内容包括:
- 进行一些涉及Placement的设置以及timing的优化
- 进行一些涉及DFT的设置以及Power的优化
- 执行std cell的Placement
- 分析Congestion,timing以及Power
- 执行一些增量的placement以及相关优化
1、placement前的设置以及检查
这里我们首先打开一个Floorplan确定的设计,正如前面所讲,可以通过icc-gui界面打开,也可以通过shell命令打开-->open_mw_lib orca_lib.mw open_mw_cel ORCA_floorplanned。为了简单起见,这里的设计只有Core区域,不包含数字IO-PAD。
- 在执行palcement前我们需要进行一些常见的软件设置以及软件进行timing分析和优化的控制,具体如下:
1)、
timing_enable_multiple_clocks_per_reg 此变量设置成ture可以让软件分析到达寄存器时钟引脚多个时钟的时序。
2)、
case_analysis_with_logic_constants 此变量告知工具在timing分析中是否考虑constant,这个变量默认false,默认下可能导致timing分析错误,故一般要设置成ture。
3)、
physopt_delete_unloaded_cells用于禁止工具去优化一下unload的cells
4)、
physopt_power_critical_range 指定一个值用于工具在leakage power优化过程中,当一个cell的slack小于该指定值那么工具就不再对其优化。如果该值过小,软件会花费较多时间在leakage power优化过程中。
5)、
physopt_area_critical_range同上用于面积优化过程中指定的一个margin的值。
6)、
set_fix_multiple_port_nets 该命令在DC综合的时候也会用到,主要用于禁止assign语句的出现(原因)
7)、set_timing_derate 用于OCV设置
8)、后面的一些约束都是一些时序分析时的分组等。
接着我们将floorplan中已经摆放进入的macro设置成fixed,就是说在后面的placement过程中这些位置都不能移动。
set_dont_touch_placement [all_macro_cells]
- 在我们实际routing过程中,关于时钟的走线一般要特殊设置,因为实际设计中时钟的质量对系统要求较高,故涉及时钟的routing 的宽度一般比普通走线要宽,具体设置如下。将时钟的走线走在Metal3-Metal6,并且双倍的线宽(Non default routing)。
define_routing_rule 2X_SPACING -spacings {METAL2 0.6 \
METAL3 0.6 METAL4 0.8 METAL5 1.2 METAL6 1.4}
set_clock_tree_options -clock_tree [all_clocks] \
-routing_rule 2X_SPACING -layer_list "METAL3 METAL6"
- 在当前这个设计中,是存在DFT的,固我们在placement过程中,需要读入DFT提高的scandef文件,主要的目的就是告诉工具尽量将同一scan chain上的cell 靠近摆放。
read_def design_data/ORCA_TOP.scandef
读入后我们也可以通过report_scan_chain 来查看当前设计总共包含的scan chain的个数。
- 因为在place过程中,在考虑timing的同时也需要考虑功耗的优化,我们对当前设计可以提供一个SAIF文件,用于在placement过程的功耗优化,如果我们没有SAIF文件,那么我们需要通过命令指定反转率,具体如下:
2、placement 以及优化
上述设置完成后,我们就可以执行placement命令,具体如下,其中option -area_recovery 允许工具在非关键timing路径上area recovery ;-optimize_dft 允许工具在placement过程中基于timing重新调整scan的顺序 ;-power 允许工具在placement过程中执行lekagepower优化等。
place_opt –area_recovery -optimize_dft -power
执行完placement后我们可以观察Global Route Congestion,
report_congestion –grc_based –by_layer –routing_stage global
也可以通过report_design -physical 产生一个实际Placement后的物理报告,在这个报告里面我们能够看到std cell的利用率,具体如下图示。
同时我们也可以report_qor,查看当前placement后,各时钟域内的timing信息,通过报告我们可以看到在 Timing Path Group 'SYS_2x_CLK' 存在hold违例,但是在placement阶段我们不需要特别care hold的违例。
通过report_power可以查看当前placement后,当前设计的功耗情况。主要包括动态功耗和静态功耗部分。