blob: a71cab5117bdf451208688bdaaa9cc179794978e [file] [log] [blame]
Tim Edwards55f4d0e2020-07-05 15:41:02 -04001###
2### Source file sky130_setup.tcl
3### Process this file with the preproc.py processor
4###
5#---------------------------------------------------------------
6# Setup file for netgen LVS
7# SkyWater TECHNAME
8#---------------------------------------------------------------
9permute default
10property default
11property parallel none
12
13#---------------------------------------------------------------
14# For the following, get the cell lists from
15# circuit1 and circuit2.
16#---------------------------------------------------------------
17
18set cells1 [cells list -all -circuit1]
19set cells2 [cells list -all -circuit2]
20
21# NOTE: In accordance with the LVS manager GUI, the schematic is
22# always circuit2, so some items like property "par1" only need to
23# be specified for circuit2.
24
25#-------------------------------------------
26# Resistors (except metal)
27#-------------------------------------------
28
Tim Edwardsd7289eb2020-09-10 21:48:31 -040029set devices {}
30lappend devices sky130_fd_pr__res_iso_pw
31lappend devices sky130_fd_pr__res_generic_po
32lappend devices sky130_fd_pr__res_high_po_0p35
33lappend devices sky130_fd_pr__res_high_po_0p69
34lappend devices sky130_fd_pr__res_high_po_1p41
35lappend devices sky130_fd_pr__res_high_po_2p85
36lappend devices sky130_fd_pr__res_high_po_5p73
37lappend devices sky130_fd_pr__res_high_po
38lappend devices sky130_fd_pr__res_xhigh_po_0p35
39lappend devices sky130_fd_pr__res_xhigh_po_0p69
40lappend devices sky130_fd_pr__res_xhigh_po_1p41
41lappend devices sky130_fd_pr__res_xhigh_po_2p85
42lappend devices sky130_fd_pr__res_xhigh_po_5p73
43lappend devices sky130_fd_pr__res_xhigh_po
44lappend devices sky130_fd_pr__res_generic_nd
45lappend devices sky130_fd_pr__res_generic_pd
46lappend devices mrdn_hv mrdp_hv
Tim Edwards55f4d0e2020-07-05 15:41:02 -040047
48foreach dev $devices {
49 if {[lsearch $cells1 $dev] >= 0} {
50 permute "-circuit1 $dev" 1 2
51 property "-circuit1 $dev" series enable
52 property "-circuit1 $dev" series {w critical}
53 property "-circuit1 $dev" series {l add}
54 property "-circuit1 $dev" parallel enable
55 property "-circuit1 $dev" parallel {l critical}
56 property "-circuit1 $dev" parallel {w add}
57 property "-circuit1 $dev" parallel {value par}
58 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
59 # Ignore these properties
Tim Edwards2d613602020-10-02 09:03:27 -040060 property "-circuit1 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -040061 }
62 if {[lsearch $cells2 $dev] >= 0} {
63 permute "-circuit2 $dev" 1 2
Tim Edwards2d613602020-10-02 09:03:27 -040064 property "-circuit2 $dev" series enable
65 property "-circuit2 $dev" series {w critical}
66 property "-circuit2 $dev" series {l add}
67 property "-circuit2 $dev" parallel enable
68 property "-circuit2 $dev" parallel {l critical}
69 property "-circuit2 $dev" parallel {w add}
70 property "-circuit2 $dev" parallel {value par}
71 property "-circuit2 $dev" tolerance {l 0.01} {w 0.01}
Tim Edwards55f4d0e2020-07-05 15:41:02 -040072 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -040073 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -040074 }
75}
76
77#-------------------------------------------
78# MRM (metal) resistors
79#-------------------------------------------
80
Tim Edwardsd7289eb2020-09-10 21:48:31 -040081set devices {}
82lappend devices sky130_fd_pr__res_generic_l1
83lappend devices sky130_fd_pr__res_generic_m1
84lappend devices sky130_fd_pr__res_generic_m2
85lappend devices sky130_fd_pr__res_generic_m3
Tim Edwards55f4d0e2020-07-05 15:41:02 -040086#ifdef METAL5
Tim Edwardsd7289eb2020-09-10 21:48:31 -040087lappend devices sky130_fd_pr__res_generic_m4
88lappend devices sky130_fd_pr__res_generic_m5
Tim Edwards55f4d0e2020-07-05 15:41:02 -040089#endif (METAL5)
90
91foreach dev $devices {
92 if {[lsearch $cells1 $dev] >= 0} {
93 permute "-circuit1 $dev" 1 2
94 property "-circuit1 $dev" series enable
95 property "-circuit1 $dev" series {w critical}
96 property "-circuit1 $dev" series {l add}
97 property "-circuit1 $dev" parallel enable
98 property "-circuit1 $dev" parallel {l critical}
99 property "-circuit1 $dev" parallel {w add}
100 property "-circuit1 $dev" parallel {value par}
101 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
102 # Ignore these properties
Tim Edwards2d613602020-10-02 09:03:27 -0400103 property "-circuit1 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400104 }
105 if {[lsearch $cells2 $dev] >= 0} {
106 permute "-circuit2 $dev" 1 2
Tim Edwards2d613602020-10-02 09:03:27 -0400107 property "-circuit2 $dev" series enable
108 property "-circuit2 $dev" series {w critical}
109 property "-circuit2 $dev" series {l add}
110 property "-circuit2 $dev" parallel enable
111 property "-circuit2 $dev" parallel {l critical}
112 property "-circuit2 $dev" parallel {w add}
113 property "-circuit2 $dev" parallel {value par}
114 property "-circuit2 $dev" tolerance {l 0.01} {w 0.01}
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400115 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400116 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400117 }
118}
119
120#-------------------------------------------
121# (MOS) transistors
122#-------------------------------------------
123
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400124set devices {}
125lappend devices sky130_fd_pr__nfet_01v8
126lappend devices sky130_fd_pr__nfet_01v8_lvt
127lappend devices sky130_fd_bs_flash__special_sonosfet_star
Tim Edwardsd53c8002020-11-22 15:07:06 -0500128lappend devices sky130_fd_pr__nfet_g5v0d10v5
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400129lappend devices sky130_fd_pr__pfet_01v8
130lappend devices sky130_fd_pr__pfet_01v8_lvt
131lappend devices sky130_fd_pr__pfet_01v8_mvt
132lappend devices sky130_fd_pr__pfet_01v8_hvt
Tim Edwardsd53c8002020-11-22 15:07:06 -0500133lappend devices sky130_fd_pr__pfet_g5v0d10v5
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400134lappend devices sky130_fd_pr__special_pfet_pass
135lappend devices sky130_fd_pr__special_nfet_pass
136lappend devices sky130_fd_pr__special_nfet_latch
137lappend devices sky130_fd_pr__cap_var_lvt
138lappend devices sky130_fd_pr__cap_var_hvt
139lappend devices sky130_fd_pr__cap_var
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400140
141foreach dev $devices {
142 if {[lsearch $cells1 $dev] >= 0} {
143 permute "-circuit1 $dev" 1 3
144 property "-circuit1 $dev" parallel enable
145 property "-circuit1 $dev" parallel {l critical}
146 property "-circuit1 $dev" parallel {w add}
147 property "-circuit1 $dev" tolerance {w 0.01} {l 0.01}
148 # Ignore these properties
Tim Edwards1134fbc2020-10-12 22:35:42 -0400149 property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400150 }
151 if {[lsearch $cells2 $dev] >= 0} {
152 permute "-circuit2 $dev" 1 3
Tim Edwards2d613602020-10-02 09:03:27 -0400153 property "-circuit2 $dev" parallel enable
154 property "-circuit2 $dev" parallel {l critical}
155 property "-circuit2 $dev" parallel {w add}
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400156 property "-circuit2 $dev" tolerance {w 0.01} {l 0.01}
157 # Ignore these properties
Tim Edwards1134fbc2020-10-12 22:35:42 -0400158 property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400159 }
160}
161
162#-------------------------------------------
163# diodes
164#-------------------------------------------
165
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400166set devices {}
167lappend devices sky130_fd_pr__diode_pw2nd_05v5
168lappend devices sky130_fd_pr__diode_pw2nd_05v5_lvt
169lappend devices sky130_fd_pr__diode_pw2nd_05v5_nvt
170lappend devices sky130_fd_pr__diode_pd2nw_05v5
171lappend devices sky130_fd_pr__diode_pd2nw_05v5_lvt
172lappend devices sky130_fd_pr__diode_pd2nw_05v5_hvt
173lappend devices sky130_fd_pr__diode_pw2nd_11v0
174lappend devices sky130_fd_pr__diode_pd2nw_11v0
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400175
176foreach dev $devices {
177 if {[lsearch $cells1 $dev] >= 0} {
178 property "-circuit1 $dev" parallel enable
179 property "-circuit1 $dev" parallel {area add}
180 property "-circuit1 $dev" parallel {value add}
181 property "-circuit1 $dev" tolerance {area 0.02}
182 # Ignore these properties
Tim Edwards2d613602020-10-02 09:03:27 -0400183 property "-circuit1 $dev" delete mult perim
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400184 }
185 if {[lsearch $cells2 $dev] >= 0} {
186 property "-circuit2 $dev" parallel enable
Tim Edwards2d613602020-10-02 09:03:27 -0400187 property "-circuit2 $dev" parallel {area add}
188 property "-circuit2 $dev" parallel {value add}
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400189 property "-circuit2 $dev" tolerance {area 0.02}
190 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400191 property "-circuit2 $dev" delete mult perim
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400192 }
193}
194
195#-------------------------------------------
196# capacitors
197# MiM capacitors
198#-------------------------------------------
199
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400200set devices {}
201lappend devices sky130_fd_pr__cap_mim_m3_1
202lappend devices sky130_fd_pr__cap_mim_m3_2
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400203
204foreach dev $devices {
205 if {[lsearch $cells1 $dev] >= 0} {
206 property "-circuit1 $dev" parallel enable
207 property "-circuit1 $dev" parallel {area add}
208 property "-circuit1 $dev" parallel {value add}
209 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
210 # Ignore these properties
Tim Edwards2d613602020-10-02 09:03:27 -0400211 property "-circuit1 $dev" delete mult perim mf
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400212 }
213 if {[lsearch $cells2 $dev] >= 0} {
Tim Edwards2d613602020-10-02 09:03:27 -0400214 property "-circuit2 $dev" parallel enable
215 property "-circuit2 $dev" parallel {area add}
216 property "-circuit2 $dev" parallel {value add}
217 property "-circuit2 $dev" tolerance {l 0.01} {w 0.01}
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400218 # Ignore these properties
Tim Edwards2d613602020-10-02 09:03:27 -0400219 property "-circuit2 $dev" delete mult perim mf
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400220 }
221}
222
223#-------------------------------------------
224# Fixed-layout devices
225# bipolar transistors,
226# VPP capacitors
227#-------------------------------------------
228
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400229set devices {}
230lappend devices sky130_fd_pr__npn_05v5_W1p00L1p00
231lappend devices sky130_fd_pr__npn_05v5_W1p00L2p00
232lappend devices sky130_fd_pr__php_05v5_W0p68L0p68
233lappend devices sky130_fd_pr__php_05v5_W3p40L3p40
234
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400235#ifdef METAL5
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400236lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_lim5_shield
237lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_lim5_shield
238lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m4_shield
239lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_pom4_shield
240lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_lim5_shield
241lappend devices sky130_fd_pr__cap_vpp_6p8x6p1_lim4_shield
242lappend devices sky130_fd_pr__cap_vpp_6p8x6p1_polym4_shield
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400243#endif (METAL5)
Tim Edwardsd7289eb2020-09-10 21:48:31 -0400244lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_lim5_shield
245lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_li_shield
246lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_shield
247lappend devices sky130_fd_pr__cap_vpp_1p8x1p8_li_shield
248lappend devices sky130_fd_pr__cap_vpp_1p8x1p8_m3_shield
249lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_li_shield
250lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_shield
251lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_li_shield
252lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_shield
253#ifdef REDISTRIBUTION
254lappend devices sky130_fd_pr__ind_04_01
255lappend devices sky130_fd_pr__ind_04_02
256#endif (REDISTRIBUTION)
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400257
258foreach dev $devices {
259 if {[lsearch $cells1 $dev] >= 0} {
260 property "-circuit1 $dev" parallel enable
261 # Ignore these properties
Tim Edwards2d613602020-10-02 09:03:27 -0400262 property "-circuit1 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400263 }
264 if {[lsearch $cells2 $dev] >= 0} {
265 property "-circuit2 $dev" parallel enable
266 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400267 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400268 }
269}
270
271#---------------------------------------------------------------
272# Digital cells (ignore decap, fill, and tap cells)
273# Make a separate list for each supported library
274#---------------------------------------------------------------
Tim Edwards320242b2020-10-21 10:11:37 -0400275# e.g., ignore class "-circuit2 sky130_fc_sc_hd__decap_3"
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400276#---------------------------------------------------------------
277
278foreach cell $cells1 {
Tim Edwards320242b2020-10-21 10:11:37 -0400279 if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400280 ignore class "-circuit1 $cell"
281 }
Tim Edwards320242b2020-10-21 10:11:37 -0400282 if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400283 ignore class "-circuit1 $cell"
284 }
285}
286foreach cell $cells2 {
Tim Edwards320242b2020-10-21 10:11:37 -0400287 if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400288 ignore class "-circuit2 $cell"
289 }
Tim Edwards320242b2020-10-21 10:11:37 -0400290 if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400291 ignore class "-circuit2 $cell"
292 }
293}
294
295#---------------------------------------------------------------
296# Handle cells captured from Electric
297#
298# Find cells of the form "<library>__<cellname>" in the netlist
299# from Electric where the extracted layout netlist has only
300# "<cellname>". Cross-check by ensuring that the full name
301# "<library>__<cellname>" does not exist in both cells, and that
302# the truncated name "<cellname>" does not exist in both cells.
303#---------------------------------------------------------------
304# e.g., hydra_spi_controller__hydra_spi_controller
305#---------------------------------------------------------------
Ahmed Ghazy32982b72020-07-27 14:46:07 +0200306
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400307foreach cell $cells1 {
308 if {[regexp "(.+)__(.+)" $cell match library cellname]} {
309 if {([lsearch $cells2 $cell] < 0) && \
310 ([lsearch $cells2 $cellname] >= 0) && \
311 ([lsearch $cells1 $cellname] < 0)} {
312 equate classes "-circuit1 $cell" "-circuit2 $cellname"
313 puts stdout "Matching pins of $cell in circuit 1 and $cellname in circuit 2"
314 equate pins "-circuit1 $cell" "-circuit2 $cellname"
315 }
316 }
317}
318
319foreach cell $cells2 {
320 if {[regexp "(.+)__(.+)" $cell match library cellname]} {
321 if {([lsearch $cells1 $cell] < 0) && \
322 ([lsearch $cells1 $cellname] >= 0) && \
323 ([lsearch $cells2 $cellname] < 0)} {
324 equate classes "-circuit1 $cellname" "-circuit2 $cell"
325 puts stdout "Matching pins of $cellname in circuit 1 and $cell in circuit 2"
326 equate pins "-circuit1 $cellname" "-circuit2 $cell"
327 }
328 }
329}
330
331# Match pins on black-box cells if LVS is called with "-blackbox"
332if {[model blackbox]} {
333 foreach cell $cells1 {
334 if {[model "-circuit1 $cell"] == "blackbox"} {
335 if {[lsearch $cells2 $cell] >= 0} {
336 puts stdout "Matching pins of $cell in circuits 1 and 2"
337 equate pins "-circuit1 $cell" "-circuit2 $cell"
338 }
339 }
340 }
341}
342
343#---------------------------------------------------------------