Skip to content

Commit 0bceea9

Browse files
committed
gf180: add metal density fill rules (fill.json) on the dummy datatype
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 / MT.3), which a sparse design cannot meet without metal fill. Add flow/platforms/gf180/fill.json (Metal1-Metal5) and point FILL_CONFIG at it. Two details matter for gf180mcu correctness: - Fill is emitted as rectangular STRIPES (2.0um in the constrained axis, extended along each layer's routing channel), not squares. Square 2.0um tiles waste a gap on all four sides and top out ~18% coverage, leaving Metal5 below the 30% floor; stripes only pay the gap at channel ends and reach ~30-60%. Geometry follows DRM section 13.3 dummy rules: min dimension 2.0um (DM.1), fill-to-fill 1.0um (DM.2, >=0.98), fill-to- circuit-metal 2.0um (DM.3). In the default 5LM_1TM stack Metal5 is the thick top metal (MT.4 min area 0.5625um^2); 2.0um stripes give >=4um^2. - Density fill streams to the foundry dummy-metal datatype 4 (the Metal*_Dummy layers), not datatype 0. The edi2gds layermaps mapped Metal1..Metal5 FILL/FILLOPC to datatype 0, which merges dummy fill with drawn circuit metal. Because fill is spaced 2.0um away from real metal, each shape is an electrically floating island; on the drawn datatype LVS extraction would flag it as metal on no net. Routing FILL/FILLOPC to datatype 4 keeps the fill distinguishable and LVS-clean. Opt-in and no change to existing results: USE_FILL still defaults to 0, so density_fill stays a no-op unless a chip/top-level design sets USE_FILL=1. Block/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 stripe fill inserts on Metal1-Metal5 with no errors; per- layer fill-only coverage 24-29% (plus drawn routing) clears the 30% floor. Known limitation: in the 6LM_1TM stack Metal5 is a thin intermediate layer and MetalTop (GDS 53) is the thick top; this fill.json fills Metal1-5 only, so 6LM MetalTop is not yet filled. Signed-off-by: Serge Rabyking <s.rabykin@gmail.com>
1 parent c9c22ca commit 0bceea9

6 files changed

Lines changed: 122 additions & 40 deletions

‎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": [12.00, 6.00, 3.00, 2.00],
12+
"height": [2.00, 2.00, 2.00, 2.00],
13+
"space_to_fill": 1.0,
14+
"space_to_non_fill": 2.0
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, 2.00, 2.00, 2.00],
27+
"height": [12.00, 6.00, 3.00, 2.00],
28+
"space_to_fill": 1.0,
29+
"space_to_non_fill": 2.0
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": [12.00, 6.00, 3.00, 2.00],
42+
"height": [2.00, 2.00, 2.00, 2.00],
43+
"space_to_fill": 1.0,
44+
"space_to_non_fill": 2.0
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, 2.00, 2.00, 2.00],
57+
"height": [12.00, 6.00, 3.00, 2.00],
58+
"space_to_fill": 1.0,
59+
"space_to_non_fill": 2.0
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": [12.00, 6.00, 3.00, 2.00],
72+
"height": [2.00, 2.00, 2.00, 2.00],
73+
"space_to_fill": 1.0,
74+
"space_to_non_fill": 2.0
75+
}
76+
}
77+
}
78+
}

‎flow/platforms/gf180/gds/7t/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Metal1 NET 34 0
66
Metal1 SPNET 34 0
77
Metal1 PIN 34 0
88
Metal1 LEFPIN 34 0
9-
Metal1 FILL 34 0
10-
Metal1 FILLOPC 34 0
9+
Metal1 FILL 34 4
10+
Metal1 FILLOPC 34 4
1111
Metal1 VIA 34 0
1212
Metal1 VIAFILL 34 0
1313
Metal1 VIAFILLOPC 34 0
@@ -31,8 +31,8 @@ Metal2 NET 36 0
3131
Metal2 SPNET 36 0
3232
Metal2 PIN 36 0
3333
Metal2 LEFPIN 36 0
34-
Metal2 FILL 36 0
35-
Metal2 FILLOPC 36 0
34+
Metal2 FILL 36 4
35+
Metal2 FILLOPC 36 4
3636
Metal2 VIA 36 0
3737
Metal2 VIAFILL 36 0
3838
Metal2 VIAFILLOPC 36 0
@@ -56,8 +56,8 @@ Metal3 NET 42 0
5656
Metal3 SPNET 42 0
5757
Metal3 PIN 42 0
5858
Metal3 LEFPIN 42 0
59-
Metal3 FILL 42 0
60-
Metal3 FILLOPC 42 0
59+
Metal3 FILL 42 4
60+
Metal3 FILLOPC 42 4
6161
Metal3 VIA 42 0
6262
Metal3 VIAFILL 42 0
6363
Metal3 VIAFILLOPC 42 0
@@ -81,8 +81,8 @@ Metal4 NET 46 0
8181
Metal4 SPNET 46 0
8282
Metal4 PIN 46 0
8383
Metal4 LEFPIN 46 0
84-
Metal4 FILL 46 0
85-
Metal4 FILLOPC 46 0
84+
Metal4 FILL 46 4
85+
Metal4 FILLOPC 46 4
8686
Metal4 VIA 46 0
8787
Metal4 VIAFILL 46 0
8888
Metal4 VIAFILLOPC 46 0
@@ -106,8 +106,8 @@ Metal5 NET 81 0
106106
Metal5 SPNET 81 0
107107
Metal5 PIN 81 0
108108
Metal5 LEFPIN 81 0
109-
Metal5 FILL 81 0
110-
Metal5 FILLOPC 81 0
109+
Metal5 FILL 81 4
110+
Metal5 FILLOPC 81 4
111111
Metal5 VIA 81 0
112112
Metal5 VIAFILL 81 0
113113
Metal5 VIAFILLOPC 81 0

‎flow/platforms/gf180/gds/7t/gf180mcu_6LM_1TM_9K_7t_edi2gds.layermap‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Metal1 NET 34 0
66
Metal1 SPNET 34 0
77
Metal1 PIN 34 0
88
Metal1 LEFPIN 34 0
9-
Metal1 FILL 34 0
10-
Metal1 FILLOPC 34 0
9+
Metal1 FILL 34 4
10+
Metal1 FILLOPC 34 4
1111
Metal1 VIA 34 0
1212
Metal1 VIAFILL 34 0
1313
Metal1 VIAFILLOPC 34 0
@@ -31,8 +31,8 @@ Metal2 NET 36 0
3131
Metal2 SPNET 36 0
3232
Metal2 PIN 36 0
3333
Metal2 LEFPIN 36 0
34-
Metal2 FILL 36 0
35-
Metal2 FILLOPC 36 0
34+
Metal2 FILL 36 4
35+
Metal2 FILLOPC 36 4
3636
Metal2 VIA 36 0
3737
Metal2 VIAFILL 36 0
3838
Metal2 VIAFILLOPC 36 0
@@ -56,8 +56,8 @@ Metal3 NET 42 0
5656
Metal3 SPNET 42 0
5757
Metal3 PIN 42 0
5858
Metal3 LEFPIN 42 0
59-
Metal3 FILL 42 0
60-
Metal3 FILLOPC 42 0
59+
Metal3 FILL 42 4
60+
Metal3 FILLOPC 42 4
6161
Metal3 VIA 42 0
6262
Metal3 VIAFILL 42 0
6363
Metal3 VIAFILLOPC 42 0
@@ -81,8 +81,8 @@ Metal4 NET 46 0
8181
Metal4 SPNET 46 0
8282
Metal4 PIN 46 0
8383
Metal4 LEFPIN 46 0
84-
Metal4 FILL 46 0
85-
Metal4 FILLOPC 46 0
84+
Metal4 FILL 46 4
85+
Metal4 FILLOPC 46 4
8686
Metal4 VIA 46 0
8787
Metal4 VIAFILL 46 0
8888
Metal4 VIAFILLOPC 46 0
@@ -106,8 +106,8 @@ Metal5 NET 81 0
106106
Metal5 SPNET 81 0
107107
Metal5 PIN 81 0
108108
Metal5 LEFPIN 81 0
109-
Metal5 FILL 81 0
110-
Metal5 FILLOPC 81 0
109+
Metal5 FILL 81 4
110+
Metal5 FILLOPC 81 4
111111
Metal5 VIA 81 0
112112
Metal5 VIAFILL 81 0
113113
Metal5 VIAFILLOPC 81 0

‎flow/platforms/gf180/gds/9t/gf180mcu_5LM_1TM_9K_9t_edi2gds.layermap‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Metal1 NET 34 0
66
Metal1 SPNET 34 0
77
Metal1 PIN 34 0
88
Metal1 LEFPIN 34 0
9-
Metal1 FILL 34 0
10-
Metal1 FILLOPC 34 0
9+
Metal1 FILL 34 4
10+
Metal1 FILLOPC 34 4
1111
Metal1 VIA 34 0
1212
Metal1 VIAFILL 34 0
1313
Metal1 VIAFILLOPC 34 0
@@ -31,8 +31,8 @@ Metal2 NET 36 0
3131
Metal2 SPNET 36 0
3232
Metal2 PIN 36 0
3333
Metal2 LEFPIN 36 0
34-
Metal2 FILL 36 0
35-
Metal2 FILLOPC 36 0
34+
Metal2 FILL 36 4
35+
Metal2 FILLOPC 36 4
3636
Metal2 VIA 36 0
3737
Metal2 VIAFILL 36 0
3838
Metal2 VIAFILLOPC 36 0
@@ -56,8 +56,8 @@ Metal3 NET 42 0
5656
Metal3 SPNET 42 0
5757
Metal3 PIN 42 0
5858
Metal3 LEFPIN 42 0
59-
Metal3 FILL 42 0
60-
Metal3 FILLOPC 42 0
59+
Metal3 FILL 42 4
60+
Metal3 FILLOPC 42 4
6161
Metal3 VIA 42 0
6262
Metal3 VIAFILL 42 0
6363
Metal3 VIAFILLOPC 42 0
@@ -81,8 +81,8 @@ Metal4 NET 46 0
8181
Metal4 SPNET 46 0
8282
Metal4 PIN 46 0
8383
Metal4 LEFPIN 46 0
84-
Metal4 FILL 46 0
85-
Metal4 FILLOPC 46 0
84+
Metal4 FILL 46 4
85+
Metal4 FILLOPC 46 4
8686
Metal4 VIA 46 0
8787
Metal4 VIAFILL 46 0
8888
Metal4 VIAFILLOPC 46 0
@@ -106,8 +106,8 @@ Metal5 NET 81 0
106106
Metal5 SPNET 81 0
107107
Metal5 PIN 81 0
108108
Metal5 LEFPIN 81 0
109-
Metal5 FILL 81 0
110-
Metal5 FILLOPC 81 0
109+
Metal5 FILL 81 4
110+
Metal5 FILLOPC 81 4
111111
Metal5 VIA 81 0
112112
Metal5 VIAFILL 81 0
113113
Metal5 VIAFILLOPC 81 0

‎flow/platforms/gf180/gds/9t/gf180mcu_6LM_1TM_9K_9t_edi2gds.layermap‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Metal1 NET 34 0
66
Metal1 SPNET 34 0
77
Metal1 PIN 34 0
88
Metal1 LEFPIN 34 0
9-
Metal1 FILL 34 0
10-
Metal1 FILLOPC 34 0
9+
Metal1 FILL 34 4
10+
Metal1 FILLOPC 34 4
1111
Metal1 VIA 34 0
1212
Metal1 VIAFILL 34 0
1313
Metal1 VIAFILLOPC 34 0
@@ -31,8 +31,8 @@ Metal2 NET 36 0
3131
Metal2 SPNET 36 0
3232
Metal2 PIN 36 0
3333
Metal2 LEFPIN 36 0
34-
Metal2 FILL 36 0
35-
Metal2 FILLOPC 36 0
34+
Metal2 FILL 36 4
35+
Metal2 FILLOPC 36 4
3636
Metal2 VIA 36 0
3737
Metal2 VIAFILL 36 0
3838
Metal2 VIAFILLOPC 36 0
@@ -56,8 +56,8 @@ Metal3 NET 42 0
5656
Metal3 SPNET 42 0
5757
Metal3 PIN 42 0
5858
Metal3 LEFPIN 42 0
59-
Metal3 FILL 42 0
60-
Metal3 FILLOPC 42 0
59+
Metal3 FILL 42 4
60+
Metal3 FILLOPC 42 4
6161
Metal3 VIA 42 0
6262
Metal3 VIAFILL 42 0
6363
Metal3 VIAFILLOPC 42 0
@@ -81,8 +81,8 @@ Metal4 NET 46 0
8181
Metal4 SPNET 46 0
8282
Metal4 PIN 46 0
8383
Metal4 LEFPIN 46 0
84-
Metal4 FILL 46 0
85-
Metal4 FILLOPC 46 0
84+
Metal4 FILL 46 4
85+
Metal4 FILLOPC 46 4
8686
Metal4 VIA 46 0
8787
Metal4 VIAFILL 46 0
8888
Metal4 VIAFILLOPC 46 0
@@ -106,8 +106,8 @@ Metal5 NET 81 0
106106
Metal5 SPNET 81 0
107107
Metal5 PIN 81 0
108108
Metal5 LEFPIN 81 0
109-
Metal5 FILL 81 0
110-
Metal5 FILLOPC 81 0
109+
Metal5 FILL 81 4
110+
Metal5 FILLOPC 81 4
111111
Metal5 VIA 81 0
112112
Metal5 VIAFILL 81 0
113113
Metal5 VIAFILLOPC 81 0

0 commit comments

Comments
 (0)