blob: 66d40ee1a70f08c06f949ec5f75b57481242f270 [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
29set devices {xpwres mrp1 xhrpoly uhrpoly mrdn mrdp mrdn_hv mrdp_hv}
30
31foreach dev $devices {
32 if {[lsearch $cells1 $dev] >= 0} {
33 permute "-circuit1 $dev" 1 2
34 property "-circuit1 $dev" series enable
35 property "-circuit1 $dev" series {w critical}
36 property "-circuit1 $dev" series {l add}
37 property "-circuit1 $dev" parallel enable
38 property "-circuit1 $dev" parallel {l critical}
39 property "-circuit1 $dev" parallel {w add}
40 property "-circuit1 $dev" parallel {value par}
41 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
42 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -040043 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -040044 }
45 if {[lsearch $cells2 $dev] >= 0} {
46 permute "-circuit2 $dev" 1 2
47 property "-circuit1 $dev" series enable
48 property "-circuit1 $dev" series {w critical}
49 property "-circuit1 $dev" series {l add}
50 property "-circuit1 $dev" parallel enable
51 property "-circuit1 $dev" parallel {l critical}
52 property "-circuit1 $dev" parallel {w add}
53 property "-circuit1 $dev" parallel {value par}
54 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
55 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -040056 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -040057 }
58}
59
60#-------------------------------------------
61# MRM (metal) resistors
62#-------------------------------------------
63
64set devices {mrl1 mrm1 mrm2 mrm3}
65#ifdef METAL5
Tim Edwards7cbaaba2020-08-05 12:19:18 -040066lappend devices mrm4 mrm5
Tim Edwards55f4d0e2020-07-05 15:41:02 -040067#endif (METAL5)
68
69foreach dev $devices {
70 if {[lsearch $cells1 $dev] >= 0} {
71 permute "-circuit1 $dev" 1 2
72 property "-circuit1 $dev" series enable
73 property "-circuit1 $dev" series {w critical}
74 property "-circuit1 $dev" series {l add}
75 property "-circuit1 $dev" parallel enable
76 property "-circuit1 $dev" parallel {l critical}
77 property "-circuit1 $dev" parallel {w add}
78 property "-circuit1 $dev" parallel {value par}
79 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
80 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -040081 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -040082 }
83 if {[lsearch $cells2 $dev] >= 0} {
84 permute "-circuit2 $dev" 1 2
85 property "-circuit1 $dev" series enable
86 property "-circuit1 $dev" series {w critical}
87 property "-circuit1 $dev" series {l add}
88 property "-circuit1 $dev" parallel enable
89 property "-circuit1 $dev" parallel {l critical}
90 property "-circuit1 $dev" parallel {w add}
91 property "-circuit1 $dev" parallel {value par}
92 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
93 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -040094 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -040095 }
96}
97
98#-------------------------------------------
99# (MOS) transistors
100#-------------------------------------------
101
102set devices {nshort nlowvt sonos_e nhvnative nhv pshort plowvt phighvt phv}
Tim Edwards7cbaaba2020-08-05 12:19:18 -0400103lappend devices ppu npass npd
104lappend devices xcnwvc xcnwvc2 xchvnwc
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400105
106foreach dev $devices {
107 if {[lsearch $cells1 $dev] >= 0} {
108 permute "-circuit1 $dev" 1 3
109 property "-circuit1 $dev" parallel enable
110 property "-circuit1 $dev" parallel {l critical}
111 property "-circuit1 $dev" parallel {w add}
112 property "-circuit1 $dev" tolerance {w 0.01} {l 0.01}
113 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400114 property "-circuit2 $dev" delete as ad ps pd mult sa sb sd
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400115 }
116 if {[lsearch $cells2 $dev] >= 0} {
117 permute "-circuit2 $dev" 1 3
118 property "-circuit1 $dev" parallel enable
119 property "-circuit1 $dev" parallel {l critical}
120 property "-circuit1 $dev" parallel {w add}
121 property "-circuit2 $dev" tolerance {w 0.01} {l 0.01}
122 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400123 property "-circuit2 $dev" delete as ad ps pd mult sa sb sd
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400124 }
125}
126
127#-------------------------------------------
128# diodes
129#-------------------------------------------
130
131set devices {ndiode ndiode_lvt pdiode pdiode_lvt pdiode_hvt ndiode_h pdiode_h}
132lappend devices ndiode_native
133
134foreach dev $devices {
135 if {[lsearch $cells1 $dev] >= 0} {
136 property "-circuit1 $dev" parallel enable
137 property "-circuit1 $dev" parallel {area add}
138 property "-circuit1 $dev" parallel {value add}
139 property "-circuit1 $dev" tolerance {area 0.02}
140 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400141 property "-circuit2 $dev" delete mult perim
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400142 }
143 if {[lsearch $cells2 $dev] >= 0} {
144 property "-circuit2 $dev" parallel enable
145 property "-circuit1 $dev" parallel {area add}
146 property "-circuit1 $dev" parallel {value add}
147 property "-circuit2 $dev" tolerance {area 0.02}
148 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400149 property "-circuit2 $dev" delete mult perim
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400150 }
151}
152
153#-------------------------------------------
154# capacitors
155# MiM capacitors
156#-------------------------------------------
157
158set devices {xcmimc1 xcmimc2}
159
160foreach dev $devices {
161 if {[lsearch $cells1 $dev] >= 0} {
162 property "-circuit1 $dev" parallel enable
163 property "-circuit1 $dev" parallel {area add}
164 property "-circuit1 $dev" parallel {value add}
165 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
166 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400167 property "-circuit2 $dev" delete mult perim
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400168 }
169 if {[lsearch $cells2 $dev] >= 0} {
170 property "-circuit1 $dev" parallel enable
171 property "-circuit1 $dev" parallel {area add}
172 property "-circuit1 $dev" parallel {value add}
173 property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
174 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400175 property "-circuit2 $dev" delete mult perim
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400176 }
177}
178
179#-------------------------------------------
180# Fixed-layout devices
181# bipolar transistors,
182# VPP capacitors
183#-------------------------------------------
184
185set devices {sky130rf_npn_1x1 sky130rf_npn_1x2 sky130rf_pnp5x}
186#ifdef METAL5
187lappend devices balun xint4_011 xind4_02
188lappend devices sky130rf2_xcmvpp11p5x11p7_lim5shield
189lappend devices sky130rf2_xcmvpp11p5x11p7_m3_lim5shield
190lappend devices sky130rf2_xcmvpp11p5x11p7_m4shield
191lappend devices sky130rf2_xcmvpp11p5x11p7_polym4shield
192lappend devices sky130rf2_xcmvpp11p5x11p7_polym50p4shield
193lappend devices sky130rf2_xcmvpp4p4x4p6_m3_lim5shield
194lappend devices sky130rf2_xcmvpp6p8x6p1_lim4shield
195lappend devices sky130rf2_xcmvpp6p8x6p1_polym4shield
196#endif (METAL5)
197lappend devices sky130rf2_xcmvpp8p6x7p9_m3_lim5shield
198lappend devices sky130rf2_xcmvppx4_2xnhvnative10x4
199lappend devices sky130rf_xcmvpp11p5x11p7_m3_lishield
200lappend devices sky130rf_xcmvpp11p5x11p7_m3shield
201lappend devices sky130rf_xcmvpp1p8x1p8_lishield
202lappend devices sky130rf_xcmvpp1p8x1p8_m3shield
203lappend devices sky130rf_xcmvpp2
204lappend devices sky130rf_xcmvpp2_nwell
205lappend devices sky130rf_xcmvpp4p4x4p6_m3_lishield
206lappend devices sky130rf_xcmvpp4p4x4p6_m3shield
207lappend devices sky130rf_xcmvpp8p6x7p9_m3_lishield
208lappend devices sky130rf_xcmvpp8p6x7p9_m3shield
209
210foreach dev $devices {
211 if {[lsearch $cells1 $dev] >= 0} {
212 property "-circuit1 $dev" parallel enable
213 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400214 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400215 }
216 if {[lsearch $cells2 $dev] >= 0} {
217 property "-circuit2 $dev" parallel enable
218 # Ignore these properties
Tim Edwards23c97662020-08-09 11:57:32 -0400219 property "-circuit2 $dev" delete mult
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400220 }
221}
222
223#---------------------------------------------------------------
224# Digital cells (ignore decap, fill, and tap cells)
225# Make a separate list for each supported library
226#---------------------------------------------------------------
227# e.g., ignore class "-circuit2 sky130_fc_sc_hd_decap_3"
228#---------------------------------------------------------------
229
230foreach cell $cells1 {
Ahmed Ghazy32982b72020-07-27 14:46:07 +0200231 if {[regexp {sky130_fd_sc_\w\w__decap_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400232 ignore class "-circuit1 $cell"
233 }
Ahmed Ghazy32982b72020-07-27 14:46:07 +0200234 if {[regexp {sky130_fd_sc_\w\w__fill_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400235 ignore class "-circuit1 $cell"
236 }
237}
238foreach cell $cells2 {
Ahmed Ghazy32982b72020-07-27 14:46:07 +0200239 if {[regexp {sky130_fd_sc_\w\w__decap_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400240 ignore class "-circuit2 $cell"
241 }
Ahmed Ghazy32982b72020-07-27 14:46:07 +0200242 if {[regexp {sky130_fd_sc_\w\w__fill_[[:digit:]]+} $cell match]} {
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400243 ignore class "-circuit2 $cell"
244 }
245}
246
247#---------------------------------------------------------------
248# Handle cells captured from Electric
249#
250# Find cells of the form "<library>__<cellname>" in the netlist
251# from Electric where the extracted layout netlist has only
252# "<cellname>". Cross-check by ensuring that the full name
253# "<library>__<cellname>" does not exist in both cells, and that
254# the truncated name "<cellname>" does not exist in both cells.
255#---------------------------------------------------------------
256# e.g., hydra_spi_controller__hydra_spi_controller
257#---------------------------------------------------------------
Ahmed Ghazy32982b72020-07-27 14:46:07 +0200258
Tim Edwards55f4d0e2020-07-05 15:41:02 -0400259foreach cell $cells1 {
260 if {[regexp "(.+)__(.+)" $cell match library cellname]} {
261 if {([lsearch $cells2 $cell] < 0) && \
262 ([lsearch $cells2 $cellname] >= 0) && \
263 ([lsearch $cells1 $cellname] < 0)} {
264 equate classes "-circuit1 $cell" "-circuit2 $cellname"
265 puts stdout "Matching pins of $cell in circuit 1 and $cellname in circuit 2"
266 equate pins "-circuit1 $cell" "-circuit2 $cellname"
267 }
268 }
269}
270
271foreach cell $cells2 {
272 if {[regexp "(.+)__(.+)" $cell match library cellname]} {
273 if {([lsearch $cells1 $cell] < 0) && \
274 ([lsearch $cells1 $cellname] >= 0) && \
275 ([lsearch $cells2 $cellname] < 0)} {
276 equate classes "-circuit1 $cellname" "-circuit2 $cell"
277 puts stdout "Matching pins of $cellname in circuit 1 and $cell in circuit 2"
278 equate pins "-circuit1 $cellname" "-circuit2 $cell"
279 }
280 }
281}
282
283# Match pins on black-box cells if LVS is called with "-blackbox"
284if {[model blackbox]} {
285 foreach cell $cells1 {
286 if {[model "-circuit1 $cell"] == "blackbox"} {
287 if {[lsearch $cells2 $cell] >= 0} {
288 puts stdout "Matching pins of $cell in circuits 1 and 2"
289 equate pins "-circuit1 $cell" "-circuit2 $cell"
290 }
291 }
292 }
293}
294
295#---------------------------------------------------------------