Skip to content

Commit ea43ffa

Browse files
committed
gf180: add metal density fill rules (fill.json)
The gf180 platform had no metal density fill: it shipped FILL_CELLS (std-cell filler) but no FILL_CONFIG, so OpenROAD's density_fill step inserted nothing. gf180mcu's density deck enforces ">30% metal coverage per layer, die-wide" (rules M2.4 / M3.4 / M5.4 / ...), which a sparse design cannot meet without metal fill. Add flow/platforms/gf180/fill.json (Metal1-Metal5) and point FILL_CONFIG at it. Layer/datatype numbers match the platform's own KLayout layer properties (Metal1 34/0 ... Metal5 81/0; fill geometry on the *_Dummy datatype 4). Fill shape sizes use a 3-size pattern [2.0, 1.0, 0.5] alternating H/V; Metal5 uses a tighter space_to_fill (0.5) because the top routing layer carries the PDN stripes and leaves less fillable area. This is opt-in and does not change any existing result: USE_FILL still defaults to 0, so density_fill remains a no-op unless a (chip/top-level) design sets USE_FILL=1. Block / hard-macro builds keep USE_FILL=0 so fill is inserted once, die-wide, at chip level rather than per block. Verified with OpenROAD density_fill -rules on a routed gf180mcu design: rules parse and fill inserts on Metal1-Metal5 with no errors. Signed-off-by: Serge Rabyking <s.rabykin@gmail.com>
1 parent c9c22ca commit ea43ffa

2 files changed

Lines changed: 82 additions & 0 deletions

File tree

flow/platforms/gf180/config.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ export FILL_CELLS ?= gf180mcu_fd_sc_mcu$(TRACK_OPTIO
3232
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_2 \
3333
gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__fill_1
3434

35+
# Metal density fill rules (OpenROAD density_fill). Applied at chip level
36+
# only when USE_FILL=1; macro/block builds leave USE_FILL=0 (the default).
37+
export FILL_CONFIG ?= $(PLATFORM_DIR)/fill.json
38+
3539
export TIE_CELL = gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__filltie
3640
export ENDCAP_CELL = gf180mcu_fd_sc_mcu$(TRACK_OPTION)$(POWER_OPTION)__endcap
3741
export RC_FILE = $(PLATFORM_DIR)/setRC.tcl

flow/platforms/gf180/fill.json

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
{
2+
"layers" : {
3+
"Metal1" : {
4+
"layer": 34,
5+
"name": "Metal1",
6+
"dir": "H",
7+
"datatype": 0,
8+
"space_to_outline": 5,
9+
"non-opc": {
10+
"datatype": 4,
11+
"width": [2.00, 1.00, 0.5],
12+
"height": [2.00, 1.00, 0.5],
13+
"space_to_fill": 1,
14+
"space_to_non_fill": 1
15+
}
16+
},
17+
18+
"Metal2" : {
19+
"layer": 36,
20+
"name": "Metal2",
21+
"dir": "V",
22+
"datatype": 0,
23+
"space_to_outline": 5,
24+
"non-opc": {
25+
"datatype": 4,
26+
"width": [2.00, 1.00, 0.5],
27+
"height": [2.00, 1.00, 0.5],
28+
"space_to_fill": 1,
29+
"space_to_non_fill": 1
30+
}
31+
},
32+
33+
"Metal3" : {
34+
"layer": 42,
35+
"name": "Metal3",
36+
"dir": "H",
37+
"datatype": 0,
38+
"space_to_outline": 5,
39+
"non-opc": {
40+
"datatype": 4,
41+
"width": [2.00, 1.00, 0.5],
42+
"height": [2.00, 1.00, 0.5],
43+
"space_to_fill": 1,
44+
"space_to_non_fill": 1
45+
}
46+
},
47+
48+
"Metal4" : {
49+
"layer": 46,
50+
"name": "Metal4",
51+
"dir": "V",
52+
"datatype": 0,
53+
"space_to_outline": 5,
54+
"non-opc": {
55+
"datatype": 4,
56+
"width": [2.00, 1.00, 0.5],
57+
"height": [2.00, 1.00, 0.5],
58+
"space_to_fill": 1,
59+
"space_to_non_fill": 1
60+
}
61+
},
62+
63+
"Metal5" : {
64+
"layer": 81,
65+
"name": "Metal5",
66+
"dir": "H",
67+
"datatype": 0,
68+
"space_to_outline": 5,
69+
"non-opc": {
70+
"datatype": 4,
71+
"width": [2.00, 1.00, 0.5],
72+
"height": [2.00, 1.00, 0.5],
73+
"space_to_fill": 0.5,
74+
"space_to_non_fill": 0.5
75+
}
76+
}
77+
}
78+
}

0 commit comments

Comments
 (0)