Skip to content

Commit 5b43227

Browse files
committed
make fill and tap cell insertion optional
Signed-off-by: Jeff Ng <[email protected]>
1 parent 0aa3fe5 commit 5b43227

File tree

16 files changed

+115
-64
lines changed

16 files changed

+115
-64
lines changed

docs/user/FlowVariables.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ Note:
7272
| `PDN_TCL` | ?= | ?= | ?= | ?= | ?= |
7373
| `IO_PLACER_H` | = | = | = | = | ?= |
7474
| `IO_PLACER_V` | = | = | = | = | ?= |
75+
| `FILL_CELLS` | = | = | = | = | = |
7576
| Placement | | | | | |
7677
| `CELL_PAD_IN_SITES_GLOBAL_PLACEMENT` | ?= | ?= | ?= | ?= | ?= |
7778
| `CELL_PAD_IN_SITES_DETAIL_PLACEMENT` | ?= | ?= | ?= | ?= | ?= |
@@ -85,7 +86,6 @@ Note:
8586
| `EQUIVALENCE_CHECK` | ?= | ?= | ?= | ?= | ?= |
8687
| `REMOVE_CELLS_FOR_EQY` | ?= | ?= | ?= | ?= | ?= |
8788
| Routing | | | | | |
88-
| `FILL_CELLS` | = | = | = | = | = |
8989
| `KLAYOUT_TECH_FILE` | = | = | = | = | = |
9090
| `MAX_ROUTING_LAYER` | = | = | = | = | ?= |
9191
| `MIN_ROUTING_LAYER` | = | = | = | = | ?= |
@@ -147,6 +147,9 @@ Note:
147147
| `GUI_NO_TIMING` | Skip loading timing for a faster GUI load. |
148148
| `GUI_SOURCE` | Source the script. |
149149
| `GUI_ARGS` | OpenROAD command line options for gui_ and open_ targets, typically set tup `-exit` in combination with GUI_SOURCE to run a script and exit. |
150+
| `FILL_CELLS` | Fill cells are used to fill empty sites. If not set or empty, fill cell insertion is skipped |
151+
| `TAP_CELL_NAME` | Name of the cell to use in tap cell insertion. If not set or empty, tap cell insertion may be skipped (based on platform) |
152+
| `ENDCAP_CELL_NAME` | Name of the cell to use in end cap insertion. If not set or empty, end cap insertion may be skipped (based on platform) |
150153

151154

152155
### Placement
@@ -189,7 +192,6 @@ Note:
189192

190193
| Variable | Description |
191194
|-----------------------|---------------------------------------------------------------------------------------------------|
192-
| `FILL_CELLS` | Fill cells are used to fill empty sites. |
193195
| `MIN_ROUTING_LAYER` | The lowest metal layer name to be used in routing. |
194196
| `MAX_ROUTING_LAYER` | The highest metal layer name to be used in routing. |
195197
| `DETAILED_ROUTE_ARGS` | Add additional arguments for debugging purpose during detail route. |

flow/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,11 @@ $(eval $(call do-step,5_1_grt,$(RESULTS_DIR)/4_cts.odb $(FASTROUTE_TCL) $(PRE_GL
836836

837837
# SEP 2: Filler cell insertion
838838
# ------------------------------------------------------------------------------
839+
ifeq ($(FILL_CELLS),)
840+
$(eval $(call do-copy,5_2_fillcell,5_1_grt.odb))
841+
else
839842
$(eval $(call do-step,5_2_fillcell,$(RESULTS_DIR)/5_1_grt.odb,fillcell))
843+
endif
840844

841845
# STEP 3: Run detailed route
842846
#-------------------------------------------------------------------------------
Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
tapcell \
2-
-endcap_cpp "12" \
3-
-distance 100 \
4-
-tapcell_master $::env(TIE_CELL) \
5-
-endcap_master $::env(ENDCAP_CELL) \
6-
-halo_width_x $::env(MACRO_HALO_X) \
7-
-halo_width_y $::env(MACRO_HALO_Y)
1+
if {[info exists ::env(TAP_CELL_NAME)] && $::env(TAP_CELL_NAME) != "" &&
2+
[info exists ::env(ENDCAP_CELL_NAME)] && $::env(ENDCAP_CELL_NAME) != ""} {
3+
tapcell \
4+
-endcap_cpp "12" \
5+
-distance 100 \
6+
-tapcell_master $::env(TAP_CELL_NAME) \
7+
-endcap_master $::env(ENDCAP_CELL_NAME) \
8+
-halo_width_x $::env(MACRO_HALO_X) \
9+
-halo_width_y $::env(MACRO_HALO_Y)
10+
} else {
11+
puts "Skipping tapcell insertion since TAP_CELL_NAME and/or ENDCAP_CELL_NAME are not defined"
12+
}
813

flow/platforms/asap7/config.mk

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,16 @@ export PLACE_DENSITY ?= 0.60
128128
export TAPCELL_TCL = $(PLATFORM_DIR)/openRoad/tapcell.tcl
129129

130130
# Fill cells used in fill cell insertion
131-
export FILL_CELLS = FILLERxp5_ASAP7_75t_R \
132-
FILLER_ASAP7_75t_R \
133-
DECAPx1_ASAP7_75t_R \
134-
DECAPx2_ASAP7_75t_R \
135-
DECAPx4_ASAP7_75t_R \
136-
DECAPx6_ASAP7_75t_R \
137-
DECAPx10_ASAP7_75t_R
131+
export FILL_CELLS ?= FILLERxp5_ASAP7_75t_R \
132+
FILLER_ASAP7_75t_R \
133+
DECAPx1_ASAP7_75t_R \
134+
DECAPx2_ASAP7_75t_R \
135+
DECAPx4_ASAP7_75t_R \
136+
DECAPx6_ASAP7_75t_R \
137+
DECAPx10_ASAP7_75t_R
138138

139-
export TAP_CELL_NAME = TAPCELL_ASAP7_75t_R
139+
export TAP_CELL_NAME ?= TAPCELL_ASAP7_75t_R
140+
export ENDCAP_CELL_NAME ?= $(TAP_CELL_NAME)
140141

141142
export SET_RC_TCL = $(PLATFORM_DIR)/setRC.tcl
142143

@@ -165,9 +166,10 @@ ifeq ($(ASAP7_USELVT), 1)
165166

166167
export ABC_DRIVER_CELL = BUFx2_ASAP7_75t_L
167168

168-
export FILL_CELLS = "FILLERxp5_ASAP7_75t_L"
169+
export FILL_CELLS ?= "FILLERxp5_ASAP7_75t_L"
169170

170-
export TAP_CELL_NAME = TAPCELL_ASAP7_75t_L
171+
export TAP_CELL_NAME ?= TAPCELL_ASAP7_75t_L
172+
export ENDCAP_CELL_NAME ?= $(TAP_CELL_NAME)
171173

172174
export GDS_FILES = $(PLATFORM_DIR)/gds/asap7sc7p5t_28_L_220121a.gds \
173175
$(ADDITIONAL_GDS)
@@ -214,9 +216,10 @@ ifeq ($(ASAP7_USESLVT), 1)
214216

215217
export ABC_DRIVER_CELL = BUFx2_ASAP7_75t_SL
216218

217-
export FILL_CELLS = "FILLERxp5_ASAP7_75t_SL"
219+
export FILL_CELLS ?= "FILLERxp5_ASAP7_75t_SL"
218220

219-
export TAP_CELL_NAME = TAPCELL_ASAP7_75t_SL
221+
export TAP_CELL_NAME ?= TAPCELL_ASAP7_75t_SL
222+
export ENDCAP_CELL_NAME ?= $(TAP_CELL_NAME)
220223

221224
export GDS_FILES = $(PLATFORM_DIR)/gds/asap7sc7p5t_28_SL_220121a.gds \
222225
$(ADDITIONAL_GDS)
Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
1-
puts "Tap and End Cap cell insertion"
2-
puts " TAP Cell : $::env(TAP_CELL_NAME)"
3-
puts " ENDCAP Cell : $::env(TAP_CELL_NAME)"
4-
puts " Halo Around Macro : $::env(MACRO_HALO_X) $::env(MACRO_HALO_Y)"
5-
puts " TAP Cell Distance : 25"
1+
if {[info exists ::env(TAP_CELL_NAME)] && $::env(TAP_CELL_NAME) != "" &&
2+
[info exists ::env(ENDCAP_CELL_NAME)] && $::env(ENDCAP_CELL_NAME) != ""} {
3+
puts "Tap and End Cap cell insertion"
4+
puts " TAP Cell : $::env(TAP_CELL_NAME)"
5+
puts " ENDCAP Cell : $::env(TAP_CELL_NAME)"
6+
puts " Halo Around Macro : $::env(MACRO_HALO_X) $::env(MACRO_HALO_Y)"
7+
puts " TAP Cell Distance : 25"
68

7-
# allow user to set the halo around macro with MACRO_HALO_?
8-
tapcell \
9-
-distance 25 \
10-
-tapcell_master "$::env(TAP_CELL_NAME)" \
11-
-endcap_master "$::env(TAP_CELL_NAME)" \
12-
-halo_width_x $::env(MACRO_HALO_X) \
13-
-halo_width_y $::env(MACRO_HALO_Y)
9+
# allow user to set the halo around macro with MACRO_HALO_?
10+
tapcell \
11+
-distance 25 \
12+
-tapcell_master "$::env(TAP_CELL_NAME)" \
13+
-endcap_master "$::env(TAP_CELL_NAME)" \
14+
-halo_width_x $::env(MACRO_HALO_X) \
15+
-halo_width_y $::env(MACRO_HALO_Y)
16+
} else {
17+
puts "Skipping tapcell insertion since TAP_CELL_NAME and/or ENDCAP_CELL_NAME are not defined"
18+
}

flow/platforms/gf180/config.mk

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@ export GDS_FILES = $(wildcard $(PLATFORM_DIR)/gds/$
2424
export DONT_USE_CELLS = *_1
2525

2626
# Fill cells used in fill cell insertion
27-
export FILL_CELLS = gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_64 \
28-
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_32 \
29-
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_16 \
30-
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_8 \
31-
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_4 \
32-
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_2 \
33-
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_1
34-
35-
export TIE_CELL = gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__filltie
36-
export ENDCAP_CELL = gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__endcap
27+
export FILL_CELLS ?= gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_64 \
28+
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_32 \
29+
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_16 \
30+
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_8 \
31+
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_4 \
32+
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_2 \
33+
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_1
34+
35+
export TAP_CELL_NAME = gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__filltie
36+
export ENDCAP_CELL_NAME = gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__endcap
3737
export RC_FILE = $(PLATFORM_DIR)/setRC.tcl
3838

3939
#-----------------------------------------------------
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
tapcell \
2-
-endcap_cpp "12" \
3-
-distance 100 \
4-
-tapcell_master $::env(TIE_CELL) \
5-
-endcap_master $::env(ENDCAP_CELL)
1+
if {[info exists ::env(TAP_CELL_NAME)] && $::env(TAP_CELL_NAME) != "" &&
2+
[info exists ::env(ENDCAP_CELL_NAME)] && $::env(ENDCAP_CELL_NAME) != ""} {
3+
tapcell \
4+
-endcap_cpp "12" \
5+
-distance 100 \
6+
-tapcell_master $::env(TAP_CELL_NAME) \
7+
-endcap_master $::env(ENDCAP_CELL_NAME)
8+
} else {
9+
puts "Skipping tapcell insertion since TAP_CELL_NAME and/or ENDCAP_CELL_NAME are not defined"
10+
}

flow/platforms/ihp-sg13g2/config.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ sg13g2_dfrbp_2
3535

3636

3737
# Define fill cells
38-
export FILL_CELLS = sg13g2_fill_1 sg13g2_fill_2 sg13g2_decap_4 sg13g2_decap_8
38+
export FILL_CELLS ?= sg13g2_fill_1 sg13g2_fill_2 sg13g2_decap_4 sg13g2_decap_8
3939
# -----------------------------------------------------
4040
# Yosys
4141
# ----------------------------------------------------

flow/platforms/nangate45/config.mk

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export GDS_FILES = $(sort $(wildcard $(PLATFORM_DIR)/gds/*.gds)) \
1616
export DONT_USE_CELLS = TAPCELL_X1 FILLCELL_X1 AOI211_X1 OAI211_X1
1717

1818
# Fill cells used in fill cell insertion
19-
export FILL_CELLS = FILLCELL_X1 FILLCELL_X2 FILLCELL_X4 FILLCELL_X8 FILLCELL_X16 FILLCELL_X32
19+
export FILL_CELLS ?= FILLCELL_X1 FILLCELL_X2 FILLCELL_X4 FILLCELL_X8 FILLCELL_X16 FILLCELL_X32
2020

2121
# -----------------------------------------------------
2222
# Yosys
@@ -57,6 +57,8 @@ export IO_PLACER_V = metal6
5757
export PDN_TCL ?= $(PLATFORM_DIR)/grid_strategy-M1-M4-M7.tcl
5858

5959
# Endcap and Welltie cells
60+
export TAP_CELL_NAME = TAPCELL_X1
61+
export ENDCAP_CELL_NAME = $(TAP_CELL_NAME)
6062
export TAPCELL_TCL = $(PLATFORM_DIR)/tapcell.tcl
6163

6264
export MACRO_PLACE_HALO ?= 22.4 15.12
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
tapcell \
2-
-distance 120 \
3-
-tapcell_master "TAPCELL_X1" \
4-
-endcap_master "TAPCELL_X1"
1+
if {[info exists ::env(TAP_CELL_NAME)] && $::env(TAP_CELL_NAME) != "" &&
2+
[info exists ::env(ENDCAP_CELL_NAME)] && $::env(ENDCAP_CELL_NAME) != ""} {
3+
tapcell \
4+
-distance 120 \
5+
-tapcell_master "$::env(TAP_CELL_NAME)" \
6+
-endcap_master "$::env(ENDCAP_CELL_NAME)"
7+
} else {
8+
puts "Skipping tapcell insertion since TAP_CELL_NAME and/or ENDCAP_CELL_NAME are not defined"
9+
}
10+

0 commit comments

Comments
 (0)