Skip to content

Commit b71a488

Browse files
authored
Merge pull request #3961 from Dhirenderchoudhary/fix/pre-post-step-hooks
Add systematic PRE/POST Tcl hooks for flow steps
2 parents 5808340 + 16c4106 commit b71a488

20 files changed

+275
-5
lines changed

docs/user/FlowVariables.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,39 @@ configuration file.
192192
| <a name="PLATFORM"></a>PLATFORM| Specifies process design kit or technology node to be used.| |
193193
| <a name="PLATFORM_TCL"></a>PLATFORM_TCL| Specifies a Tcl script with commands to run before loading design.| |
194194
| <a name="POST_CTS_TCL"></a>POST_CTS_TCL| Specifies a Tcl script with commands to run after CTS is completed.| |
195+
| <a name="POST_DENSITY_FILL_TCL"></a>POST_DENSITY_FILL_TCL| Specifies a Tcl script with commands to run after density fill.| |
196+
| <a name="POST_DETAIL_PLACE_TCL"></a>POST_DETAIL_PLACE_TCL| Specifies a Tcl script with commands to run after detailed placement.| |
197+
| <a name="POST_DETAIL_ROUTE_TCL"></a>POST_DETAIL_ROUTE_TCL| Specifies a Tcl script with commands to run after detailed route.| |
198+
| <a name="POST_FILLCELL_TCL"></a>POST_FILLCELL_TCL| Specifies a Tcl script with commands to run after fillcell insertion.| |
199+
| <a name="POST_FINAL_REPORT_TCL"></a>POST_FINAL_REPORT_TCL| Specifies a Tcl script with commands to run after final report generation.| |
200+
| <a name="POST_FLOORPLAN_TCL"></a>POST_FLOORPLAN_TCL| Specifies a Tcl script with commands to run after floorplan is completed.| |
201+
| <a name="POST_GLOBAL_PLACE_SKIP_IO_TCL"></a>POST_GLOBAL_PLACE_SKIP_IO_TCL| Specifies a Tcl script with commands to run after global placement (skip IO).| |
202+
| <a name="POST_GLOBAL_PLACE_TCL"></a>POST_GLOBAL_PLACE_TCL| Specifies a Tcl script with commands to run after global placement.| |
203+
| <a name="POST_GLOBAL_ROUTE_TCL"></a>POST_GLOBAL_ROUTE_TCL| Specifies a Tcl script with commands to run after global route.| |
204+
| <a name="POST_IO_PLACEMENT_TCL"></a>POST_IO_PLACEMENT_TCL| Specifies a Tcl script with commands to run after IO placement.| |
205+
| <a name="POST_MACRO_PLACE_TCL"></a>POST_MACRO_PLACE_TCL| Specifies a Tcl script with commands to run after macro placement.| |
206+
| <a name="POST_PDN_TCL"></a>POST_PDN_TCL| Specifies a Tcl script with commands to run after PDN generation.| |
207+
| <a name="POST_REPAIR_TIMING_POST_PLACE_TCL"></a>POST_REPAIR_TIMING_POST_PLACE_TCL| Specifies a Tcl script with commands to run after post-place timing repair.| |
208+
| <a name="POST_RESIZE_TCL"></a>POST_RESIZE_TCL| Specifies a Tcl script with commands to run after resize.| |
209+
| <a name="POST_SYNTH_TCL"></a>POST_SYNTH_TCL| Specifies a Tcl script with commands to run after synthesis ODB generation.| |
210+
| <a name="POST_TAPCELL_TCL"></a>POST_TAPCELL_TCL| Specifies a Tcl script with commands to run after tapcell.| |
211+
| <a name="PRE_CTS_TCL"></a>PRE_CTS_TCL| Specifies a Tcl script with commands to run before CTS.| |
212+
| <a name="PRE_DENSITY_FILL_TCL"></a>PRE_DENSITY_FILL_TCL| Specifies a Tcl script with commands to run before density fill.| |
213+
| <a name="PRE_DETAIL_PLACE_TCL"></a>PRE_DETAIL_PLACE_TCL| Specifies a Tcl script with commands to run before detailed placement.| |
214+
| <a name="PRE_DETAIL_ROUTE_TCL"></a>PRE_DETAIL_ROUTE_TCL| Specifies a Tcl script with commands to run before detailed route.| |
215+
| <a name="PRE_FILLCELL_TCL"></a>PRE_FILLCELL_TCL| Specifies a Tcl script with commands to run before fillcell insertion.| |
216+
| <a name="PRE_FINAL_REPORT_TCL"></a>PRE_FINAL_REPORT_TCL| Specifies a Tcl script with commands to run before final report generation.| |
217+
| <a name="PRE_FLOORPLAN_TCL"></a>PRE_FLOORPLAN_TCL| Specifies a Tcl script with commands to run before floorplan.| |
218+
| <a name="PRE_GLOBAL_PLACE_SKIP_IO_TCL"></a>PRE_GLOBAL_PLACE_SKIP_IO_TCL| Specifies a Tcl script with commands to run before global placement (skip IO).| |
219+
| <a name="PRE_GLOBAL_PLACE_TCL"></a>PRE_GLOBAL_PLACE_TCL| Specifies a Tcl script with commands to run before global placement.| |
195220
| <a name="PRE_GLOBAL_ROUTE_TCL"></a>PRE_GLOBAL_ROUTE_TCL| Specifies a Tcl script with commands to run before global route.| |
221+
| <a name="PRE_IO_PLACEMENT_TCL"></a>PRE_IO_PLACEMENT_TCL| Specifies a Tcl script with commands to run before IO placement.| |
222+
| <a name="PRE_MACRO_PLACE_TCL"></a>PRE_MACRO_PLACE_TCL| Specifies a Tcl script with commands to run before macro placement.| |
223+
| <a name="PRE_PDN_TCL"></a>PRE_PDN_TCL| Specifies a Tcl script with commands to run before PDN generation.| |
224+
| <a name="PRE_REPAIR_TIMING_POST_PLACE_TCL"></a>PRE_REPAIR_TIMING_POST_PLACE_TCL| Specifies a Tcl script with commands to run before post-place timing repair.| |
225+
| <a name="PRE_RESIZE_TCL"></a>PRE_RESIZE_TCL| Specifies a Tcl script with commands to run before resize.| |
226+
| <a name="PRE_SYNTH_TCL"></a>PRE_SYNTH_TCL| Specifies a Tcl script with commands to run before synthesis ODB generation.| |
227+
| <a name="PRE_TAPCELL_TCL"></a>PRE_TAPCELL_TCL| Specifies a Tcl script with commands to run before tapcell.| |
196228
| <a name="PROCESS"></a>PROCESS| Technology node or process in use.| |
197229
| <a name="PWR_NETS_VOLTAGES"></a>PWR_NETS_VOLTAGES| Used for IR Drop calculation.| |
198230
| <a name="RCX_RULES"></a>RCX_RULES| RC Extraction rules file path.| |
@@ -291,6 +323,8 @@ configuration file.
291323
- [DFF_MAP_FILE](#DFF_MAP_FILE)
292324
- [LATCH_MAP_FILE](#LATCH_MAP_FILE)
293325
- [MIN_BUF_CELL_AND_PORTS](#MIN_BUF_CELL_AND_PORTS)
326+
- [POST_SYNTH_TCL](#POST_SYNTH_TCL)
327+
- [PRE_SYNTH_TCL](#PRE_SYNTH_TCL)
294328
- [SDC_FILE](#SDC_FILE)
295329
- [SDC_GUT](#SDC_GUT)
296330
- [SYNTH_ARGS](#SYNTH_ARGS)
@@ -349,6 +383,14 @@ configuration file.
349383
- [PLACE_DENSITY](#PLACE_DENSITY)
350384
- [PLACE_DENSITY_LB_ADDON](#PLACE_DENSITY_LB_ADDON)
351385
- [PLACE_SITE](#PLACE_SITE)
386+
- [POST_FLOORPLAN_TCL](#POST_FLOORPLAN_TCL)
387+
- [POST_MACRO_PLACE_TCL](#POST_MACRO_PLACE_TCL)
388+
- [POST_PDN_TCL](#POST_PDN_TCL)
389+
- [POST_TAPCELL_TCL](#POST_TAPCELL_TCL)
390+
- [PRE_FLOORPLAN_TCL](#PRE_FLOORPLAN_TCL)
391+
- [PRE_MACRO_PLACE_TCL](#PRE_MACRO_PLACE_TCL)
392+
- [PRE_PDN_TCL](#PRE_PDN_TCL)
393+
- [PRE_TAPCELL_TCL](#PRE_TAPCELL_TCL)
352394
- [REMOVE_ABC_BUFFERS](#REMOVE_ABC_BUFFERS)
353395
- [ROUTING_LAYER_ADJUSTMENT](#ROUTING_LAYER_ADJUSTMENT)
354396
- [RTLMP_AREA_WT](#RTLMP_AREA_WT)
@@ -408,6 +450,18 @@ configuration file.
408450
- [PLACE_DENSITY](#PLACE_DENSITY)
409451
- [PLACE_DENSITY_LB_ADDON](#PLACE_DENSITY_LB_ADDON)
410452
- [PLACE_PINS_ARGS](#PLACE_PINS_ARGS)
453+
- [POST_DETAIL_PLACE_TCL](#POST_DETAIL_PLACE_TCL)
454+
- [POST_GLOBAL_PLACE_SKIP_IO_TCL](#POST_GLOBAL_PLACE_SKIP_IO_TCL)
455+
- [POST_GLOBAL_PLACE_TCL](#POST_GLOBAL_PLACE_TCL)
456+
- [POST_IO_PLACEMENT_TCL](#POST_IO_PLACEMENT_TCL)
457+
- [POST_REPAIR_TIMING_POST_PLACE_TCL](#POST_REPAIR_TIMING_POST_PLACE_TCL)
458+
- [POST_RESIZE_TCL](#POST_RESIZE_TCL)
459+
- [PRE_DETAIL_PLACE_TCL](#PRE_DETAIL_PLACE_TCL)
460+
- [PRE_GLOBAL_PLACE_SKIP_IO_TCL](#PRE_GLOBAL_PLACE_SKIP_IO_TCL)
461+
- [PRE_GLOBAL_PLACE_TCL](#PRE_GLOBAL_PLACE_TCL)
462+
- [PRE_IO_PLACEMENT_TCL](#PRE_IO_PLACEMENT_TCL)
463+
- [PRE_REPAIR_TIMING_POST_PLACE_TCL](#PRE_REPAIR_TIMING_POST_PLACE_TCL)
464+
- [PRE_RESIZE_TCL](#PRE_RESIZE_TCL)
411465
- [ROUTING_LAYER_ADJUSTMENT](#ROUTING_LAYER_ADJUSTMENT)
412466
- [SKIP_REPORT_METRICS](#SKIP_REPORT_METRICS)
413467
- [TNS_END_PERCENT](#TNS_END_PERCENT)
@@ -430,6 +484,7 @@ configuration file.
430484
- [MATCH_CELL_FOOTPRINT](#MATCH_CELL_FOOTPRINT)
431485
- [MAX_REPAIR_TIMING_ITER](#MAX_REPAIR_TIMING_ITER)
432486
- [POST_CTS_TCL](#POST_CTS_TCL)
487+
- [PRE_CTS_TCL](#PRE_CTS_TCL)
433488
- [REMOVE_CELLS_FOR_EQY](#REMOVE_CELLS_FOR_EQY)
434489
- [REPORT_CLOCK_SKEW](#REPORT_CLOCK_SKEW)
435490
- [SETUP_REPAIR_SEQUENCE](#SETUP_REPAIR_SEQUENCE)
@@ -453,6 +508,7 @@ configuration file.
453508
- [MAX_REPAIR_TIMING_ITER](#MAX_REPAIR_TIMING_ITER)
454509
- [MAX_ROUTING_LAYER](#MAX_ROUTING_LAYER)
455510
- [MIN_ROUTING_LAYER](#MIN_ROUTING_LAYER)
511+
- [POST_GLOBAL_ROUTE_TCL](#POST_GLOBAL_ROUTE_TCL)
456512
- [PRE_GLOBAL_ROUTE_TCL](#PRE_GLOBAL_ROUTE_TCL)
457513
- [REPORT_CLOCK_SKEW](#REPORT_CLOCK_SKEW)
458514
- [ROUTING_LAYER_ADJUSTMENT](#ROUTING_LAYER_ADJUSTMENT)
@@ -478,6 +534,10 @@ configuration file.
478534
- [MAX_REPAIR_ANTENNAS_ITER_DRT](#MAX_REPAIR_ANTENNAS_ITER_DRT)
479535
- [MAX_ROUTING_LAYER](#MAX_ROUTING_LAYER)
480536
- [MIN_ROUTING_LAYER](#MIN_ROUTING_LAYER)
537+
- [POST_DETAIL_ROUTE_TCL](#POST_DETAIL_ROUTE_TCL)
538+
- [POST_FILLCELL_TCL](#POST_FILLCELL_TCL)
539+
- [PRE_DETAIL_ROUTE_TCL](#PRE_DETAIL_ROUTE_TCL)
540+
- [PRE_FILLCELL_TCL](#PRE_FILLCELL_TCL)
481541
- [REPORT_CLOCK_SKEW](#REPORT_CLOCK_SKEW)
482542
- [ROUTING_LAYER_ADJUSTMENT](#ROUTING_LAYER_ADJUSTMENT)
483543
- [SKIP_ANTENNA_REPAIR_POST_DRT](#SKIP_ANTENNA_REPAIR_POST_DRT)
@@ -491,6 +551,10 @@ configuration file.
491551
- [GND_NETS_VOLTAGES](#GND_NETS_VOLTAGES)
492552
- [MAX_ROUTING_LAYER](#MAX_ROUTING_LAYER)
493553
- [MIN_ROUTING_LAYER](#MIN_ROUTING_LAYER)
554+
- [POST_DENSITY_FILL_TCL](#POST_DENSITY_FILL_TCL)
555+
- [POST_FINAL_REPORT_TCL](#POST_FINAL_REPORT_TCL)
556+
- [PRE_DENSITY_FILL_TCL](#PRE_DENSITY_FILL_TCL)
557+
- [PRE_FINAL_REPORT_TCL](#PRE_FINAL_REPORT_TCL)
494558
- [PWR_NETS_VOLTAGES](#PWR_NETS_VOLTAGES)
495559
- [REPORT_CLOCK_SKEW](#REPORT_CLOCK_SKEW)
496560
- [ROUTING_LAYER_ADJUSTMENT](#ROUTING_LAYER_ADJUSTMENT)

flow/scripts/cts.tcl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ source $::env(SCRIPTS_DIR)/load.tcl
33
source $::env(SCRIPTS_DIR)/lec_check.tcl
44
erase_non_stage_variables cts
55
load_design 3_place.odb 3_place.sdc
6+
source_step_tcl PRE CTS
67

78
# Clone clock tree inverters next to register loads
89
# so cts does not try to buffer the inverted clocks.
@@ -86,7 +87,7 @@ if { !$::env(SKIP_CTS_REPAIR_TIMING) } {
8687

8788
report_metrics 4 "cts final"
8889

89-
source_env_var_if_exists POST_CTS_TCL
90+
source_step_tcl POST CTS
9091

9192
orfs_write_db $::env(RESULTS_DIR)/4_1_cts.odb
9293
orfs_write_sdc $::env(RESULTS_DIR)/4_cts.sdc

flow/scripts/density_fill.tcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
source $::env(SCRIPTS_DIR)/load.tcl
22
erase_non_stage_variables final
33
load_design 5_route.odb 5_route.sdc
4+
source_step_tcl PRE DENSITY_FILL
45

56
if { $::env(USE_FILL) } {
67
set_propagated_clock [all_clocks]
@@ -13,3 +14,5 @@ if { $::env(USE_FILL) } {
1314
log_cmd exec cp $::env(RESULTS_DIR)/5_route.odb $::env(RESULTS_DIR)/6_1_fill.odb
1415
# There is no 5_route.v file to copy
1516
}
17+
18+
source_step_tcl POST DENSITY_FILL

flow/scripts/detail_place.tcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ utl::set_metrics_stage "detailedplace__{}"
22
source $::env(SCRIPTS_DIR)/load.tcl
33
erase_non_stage_variables place
44
load_design 3_4_place_resized.odb 2_floorplan.sdc
5+
source_step_tcl PRE DETAIL_PLACE
56

67
source $::env(PLATFORM_DIR)/setRC.tcl
78

@@ -38,4 +39,6 @@ if { $result != 0 } {
3839

3940
report_metrics 3 "detailed place" true false
4041

42+
source_step_tcl POST DETAIL_PLACE
43+
4144
orfs_write_db $::env(RESULTS_DIR)/3_5_place_dp.odb

flow/scripts/detail_route.tcl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
utl::set_metrics_stage "detailedroute__{}"
22
source $::env(SCRIPTS_DIR)/load.tcl
33
load_design 5_1_grt.odb 5_1_grt.sdc
4+
source_step_tcl PRE DETAIL_ROUTE
45
if { ![grt::have_routes] } {
56
error "Global routing failed, run `make gui_grt` and load $::global_route_congestion_report \
67
in DRC viewer to view congestion"
@@ -69,7 +70,7 @@ if {
6970
utl::metric_int "antenna_diodes_count" -1
7071
}
7172

72-
source_env_var_if_exists POST_DETAIL_ROUTE_TCL
73+
source_step_tcl POST DETAIL_ROUTE
7374

7475
check_antennas -report_file $env(REPORTS_DIR)/drt_antennas.log
7576

flow/scripts/fillcell.tcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ source $::env(SCRIPTS_DIR)/load.tcl
22
erase_non_stage_variables route
33
if { [env_var_exists_and_non_empty FILL_CELLS] } {
44
load_design 5_2_route.odb 5_1_grt.sdc
5+
source_step_tcl PRE FILLCELL
56

67
set_propagated_clock [all_clocks]
78

@@ -12,3 +13,5 @@ if { [env_var_exists_and_non_empty FILL_CELLS] } {
1213
} else {
1314
log_cmd exec cp $::env(RESULTS_DIR)/5_2_route.odb $::env(RESULTS_DIR)/5_3_fillcell.odb
1415
}
16+
17+
source_step_tcl POST FILLCELL

flow/scripts/final_report.tcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ utl::set_metrics_stage "finish__{}"
22
source $::env(SCRIPTS_DIR)/load.tcl
33
erase_non_stage_variables final
44
load_design 6_1_fill.odb 6_1_fill.sdc
5+
source_step_tcl PRE FINAL_REPORT
56

67
set_propagated_clock [all_clocks]
78

@@ -63,6 +64,8 @@ report_cell_usage
6364

6465
report_metrics 6 "finish"
6566

67+
source_step_tcl POST FINAL_REPORT
68+
6669
# Save a final image if openroad is compiled with the gui
6770
if { [ord::openroad_gui_compiled] } {
6871
gui::show "source $::env(SCRIPTS_DIR)/save_images.tcl" false

flow/scripts/floorplan.tcl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ utl::set_metrics_stage "floorplan__{}"
22
source $::env(SCRIPTS_DIR)/load.tcl
33
erase_non_stage_variables floorplan
44
load_design 1_synth.odb 1_synth.sdc
5+
source_step_tcl PRE FLOORPLAN
56

67
proc report_unused_masters { } {
78
set db [ord::get_db]
@@ -148,7 +149,7 @@ report_units
148149
report_units_metric
149150
report_metrics 2 "floorplan final" false false
150151

151-
source_env_var_if_exists POST_FLOORPLAN_TCL
152+
source_step_tcl POST FLOORPLAN
152153
source_env_var_if_exists IO_CONSTRAINTS
153154

154155
orfs_write_db $::env(RESULTS_DIR)/2_1_floorplan.odb

flow/scripts/global_place.tcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ utl::set_metrics_stage "globalplace__{}"
22
source $::env(SCRIPTS_DIR)/load.tcl
33
erase_non_stage_variables place
44
load_design 3_2_place_iop.odb 2_floorplan.sdc
5+
source_step_tcl PRE GLOBAL_PLACE
56

67
set_dont_use $::env(DONT_USE_CELLS)
78

@@ -74,4 +75,6 @@ if { $::env(CLUSTER_FLOPS) } {
7475

7576
report_metrics 3 "global place" false false
7677

78+
source_step_tcl POST GLOBAL_PLACE
79+
7780
orfs_write_db $::env(RESULTS_DIR)/3_3_place_gp.odb

flow/scripts/global_place_skip_io.tcl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
source $::env(SCRIPTS_DIR)/load.tcl
22
erase_non_stage_variables place
33
load_design 2_floorplan.odb 2_floorplan.sdc
4+
source_step_tcl PRE GLOBAL_PLACE_SKIP_IO
45

56
if { [env_var_exists_and_non_empty FLOORPLAN_DEF] } {
67
puts "FLOORPLAN_DEF is set. Skipping global placement without IOs"
@@ -13,4 +14,6 @@ if { [env_var_exists_and_non_empty FLOORPLAN_DEF] } {
1314
{*}[env_var_or_empty GLOBAL_PLACEMENT_ARGS]
1415
}
1516

17+
source_step_tcl POST GLOBAL_PLACE_SKIP_IO
18+
1619
orfs_write_db $::env(RESULTS_DIR)/3_1_place_gp_skip_io.odb

0 commit comments

Comments
 (0)