Merge branch 'master' of 192.168.0.7:/home/tim/gitsrc/open_pdks/
diff --git a/VERSION b/VERSION index 79728fe..8955a01 100644 --- a/VERSION +++ b/VERSION
@@ -1 +1 @@ -1.0.24 +1.0.26
diff --git a/common/gate_list.txt b/common/gate_list.txt index 84fd5b7..b1097ec 100644 --- a/common/gate_list.txt +++ b/common/gate_list.txt
@@ -98,7 +98,7 @@ LATCHRQ function Q=IQ QB=IQB enable E data_in D clear !R LATCHIRQ function Q=IQ QB=IQB enable !E data_in D clear !R LATCHSRQ function Q=IQ QB=IQB enable E data_in D preset !S clear !R -LATCHISRQ function Q=IQ QB=IQB enable E data_in D preset !S clear !R +LATCHISRQ function Q=IQ QB=IQB enable !E data_in D preset !S clear !R DFF function Q=IQ clocked_on C next_state D DFFQ function Q=IQ function QB=IQB clocked_on C next_state D
diff --git a/common/spectre_to_spice.py b/common/spectre_to_spice.py index c522367..820c870 100755 --- a/common/spectre_to_spice.py +++ b/common/spectre_to_spice.py
@@ -1,6 +1,6 @@ #!/bin/env python3 # Script to read all files in a directory of SPECTRE-compatible device model -# files, and convert them to a form that is compatible with ngspice. +# files, and convert them to a form that is compatible with ngspice. import os import sys @@ -38,7 +38,7 @@ rtok = re.compile('([^ \t\n]+)[ \t]*(.*)') fmtline = [] - + if iscall: rest = line elif inparam: @@ -122,7 +122,7 @@ else: # Match to a CDL subckt parameter that does not have an '=' and so # assumes that the parameter is always passed, and therefore must - # be part of the .subckt line. A parameter without a value is not + # be part of the .subckt line. A parameter without a value is not # legal SPICE, so supply a default value of 1. pmatch = parm5rex.match(rest) if pmatch: @@ -148,7 +148,7 @@ binrex = re.compile('[ \t]*([0-9]+):[ \t]+type[ \t]*=[ \t]*(.*)') shincrex = re.compile('\.inc[ \t]+') - stdsubrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)') + stdsubrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+(.*)') stdmodelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)') stdendsubrex = re.compile('\.ends[ \t]+(.+)') stdendonlysubrex = re.compile('\.ends[ \t]*') @@ -195,7 +195,9 @@ # Item 1b. In-line C++-style // comments get replaced with $ comment character elif ' //' in line: - line = line.replace(' //', ' $ ', 1) + line = line.replace(' //', ' $ ', 1) + elif '//' in line: + line = line.replace('//', ' $ ', 1) elif '\t//' in line: line = line.replace('\t//', '\t$ ', 1) @@ -216,9 +218,9 @@ contline = False if line.strip() != '': if inparam: - inparam = False + inparam = False if inpinlist: - inpinlist = False + inpinlist = False # Item 3. Handle blank lines like comment lines if line.strip() == '': @@ -278,7 +280,7 @@ inparam = True spicelines.append(fmtline) continue - + # statistics---not sure if it is always outside an inline subcircuit smatch = statrex.match(line) if smatch: @@ -293,7 +295,8 @@ mmatch = modelrex.match(line) if not mmatch: mmatch = cdlmodelrex.match(line) - iscdl = True + if mmatch: + iscdl = True else: mmatch = stdmodelrex.match(line) @@ -362,7 +365,7 @@ else: spicelines.append(line) continue - + else: if isspectre: ematch = endsubrex.match(line) @@ -403,7 +406,7 @@ line = 'D' + line spicelines.append(line) - # Will need more handling here for other component types. . . + # Will need more handling here for other component types. . . for line in calllines[1:]: spicelines.append(line) @@ -414,7 +417,7 @@ for line in modellines: spicelines.append(line) modellines = [] - + # Complete the subcircuit definition spicelines.append('.ends ' + subname) @@ -482,7 +485,7 @@ continue # Check for a line that begins with the subcircuit name - + dmatch = devrex.match(line) if dmatch: fmtline, ispassed = parse_param_line(dmatch.group(3), True, insub, True, ispassed) @@ -513,6 +516,10 @@ else: convtype = type + # If there is a binned model then it replaces any original + # model line that was saved. + if modellines[-1].startswith('.model'): + modellines = modellines[0:-1] modellines.append('') modellines.append('.model ' + modname + '.' + bin + ' ' + convtype) continue
diff --git a/common/split_spice.py b/common/split_spice.py index d8c5539..f7cc695 100755 --- a/common/split_spice.py +++ b/common/split_spice.py
@@ -48,9 +48,6 @@ for line in inplines: - if subname == 'xrdn': - print('handling line in xrdn, file ' + in_file + ': "' + line + '"') - # Item 1. Handle comment lines if line.startswith('*'): if subcktlines != []: @@ -65,14 +62,12 @@ else: contline = False if inparam: - inparam = False + inparam = False if inpinlist: - inpinlist = False + inpinlist = False # Item 3. Handle blank lines like comment lines if line.strip() == '': - if subname == 'xrdn': - print('blank line in xrdn subcircuit') if subcktlines != []: subcktlines.append(line) else: @@ -101,7 +96,7 @@ else: spicelines.append(line) continue - + # model mmatch = modelrex.match(line) if mmatch: @@ -151,6 +146,9 @@ print(line, file=ofile) subcktlines = [] + # Add an include statement to this file in the source + spicelines.append('.include ' + subckt_file) + insubckt = False inmodel = False subname = ''
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech index ee75912..7e31c4c 100644 --- a/sky130/magic/sky130.tech +++ b/sky130/magic/sky130.tech
@@ -5,7 +5,7 @@ ### magic; this keeps compatibility between layouts ### for all process variants. ### -#---------------------------------------------------------- +#------------------------------------------------------------------------ # Copyright (c) 2020 R. Timothy Edwards # Revisions: See below # @@ -14,10 +14,10 @@ # process. The file may be distributed under the terms # of the Apache 2.0 license agreement. # -#---------------------------------------------------------- +#------------------------------------------------------------------------ # This file is designed to be used with magic versions # 8.3.24 or newer. -#---------------------------------------------------------- +#------------------------------------------------------------------------ tech format 35 TECHNAME @@ -28,56 +28,56 @@ description "SkyWater SKY130: PRE ALPHA Vendor Open Source rules and DRC" end -#---------------------------------------------------------- +#------------------------------------------------------------------------ # Status 7/10/20: Rev 1 (alpha): # First public release -#-------------------------------------------------------------- +# Status 8/14/20: Rev 2 (alpha): +# Started updating with new device/model naming convention +#------------------------------------------------------------------------ -#-------------------------------------------------------------- +#------------------------------------------------------------------------ # Supported device types -#-------------------------------------------------------------- -# device name magic ID layer description -#------------------------------------------------------------- -# nshort nfet standard nFET -# nshort scnfet standard nFET in standard cell** -# npd npd special nFET in SRAM cell -# npass npass special nFET in SRAM cell -# nlowvt nfetlvt low Vt nFET -# sonos_p/e nsonos SONOS nFET -# pshort pfet standard pFET -# pshort scpfet standard pFET in standard cell** -# ppu ppu special pFET in SRAM cell -# plowvt pfetlvt low Vt pFET -# phighvt pfethvt high Vt pFET -# ntvnative --- native nFET -# phv mvpfet thickox pFET -# nhv mvnfet thickox nFET -# nhvnative mvnnfet thickox native nFET -# ndiode ndiode n+ diff diode -# ndiode_h mvndiode thickox n+ diff diode -# pdiode pdiode p+ diff diode -# pdiode_h mvpdiode thickox p+ diff diode -# ndiode_native nndiode diode with nndiff -# ndiode_lvt ndiodelvt low Vt n+ diff diode -# pdiode_lvt pdiodelvt low Vt p+ diff diode -# pdiode_hvt pdiodehvt high Vt p+ diff diode -# nwdiode --- nwell diode -# dnwdiode_psub --- deep nwell diode to substrate -# dnwdiode_pw --- deep nwell diode to pwell -# xcmimc1 mimcap MiM cap 1st plate -# xcmimc2 mimcap2 MiM cap 2nd plate -# mrdn rdn n+ diff resistor -# mrdn_hv mvrdn thickox n+ diff resistor -# mrdp rdp p+ diff resistor -# mrdp_hv mvrdp thickox p+ diff resistor -# mrl1 rli local interconnect resistor -# mrp1 npres n+ poly resistor -# xhrpoly_* ppres (*) p+ poly resistor (300 Ohms/sq) -# uhrpoly_* xres (*) p+ poly resistor (2k Ohms/sq) -# xcnwvc varactor varactor (low Vt?) -# xcnwvc2 varactorhvt high Vt varactor -# xchvnwc mvvaractor thickox varactor -# xpwres rpw pwell resistor (in deep nwell) +#------------------------------------------------------------------------ +# device name magic ID layer description +#------------------------------------------------------------------------ +# sky130_fd_pr__nfet_01v8 nfet standard nFET +# sky130_fd_pr__nfet_01v8 scnfet standard nFET in standard cell** +# npd npd special nFET in SRAM cell +# npass npass special nFET in SRAM cell +# sky130_fd_pr__nfet_01v8_lvt nfetlvt low Vt nFET +# sonos_p/e nsonos SONOS nFET +# sky130_fd_pr__pfet_01v8 pfet standard pFET +# sky130_fd_pr__pfet_01v8 scpfet standard pFET in standard cell** +# ppu ppu special pFET in SRAM cell +# sky130_fd_pr__pfet_01v8_lvt pfetlvt low Vt pFET +# sky130_fd_pr__pfet_01v8_mvt pfetmvt med Vt pFET +# sky130_fd_pr__pfet_01v8_hvt pfethvt high Vt pFET +# sky130_fd_pr__nfet_03v3_nvt --- native nFET +# sky130_fd_pr__pfet_g5v0d10v5 mvpfet thickox pFET +# sky130_fd_pr__nfet_g5v0d10v5 mvnfet thickox nFET +# sky130_fd_pr__nfet_01v8_nvt mvnnfet thickox native nFET +# sky130_fd_pr__diode_pw2nd ndiode n+ diff diode +# ndiode_h mvndiode thickox n+ diff diode +# sky130_fd_pr__diode_pd2nw pdiode p+ diff diode +# pdiode_h mvpdiode thickox p+ diff diode +# sky130_fd_pr__diode_pw2nd_nvt nndiode diode with nndiff +# sky130_fd_pr__diode_pw2nd_lvt ndiodelvt low Vt n+ diff diode +# sky130_fd_pr__diode_pd2nw_lvt pdiodelvt low Vt p+ diff diode +# sky130_fd_pr__diode_pd2nw_hvt pdiodehvt high Vt p+ diff diode +# xcmimc1 mimcap MiM cap 1st plate +# xcmimc2 mimcap2 MiM cap 2nd plate +# mrdn rdn n+ diff resistor +# mrdn_hv mvrdn thickox n+ diff resistor +# mrdp rdp p+ diff resistor +# mrdp_hv mvrdp thickox p+ diff resistor +# mrl1 rli local interconnect resistor +# mrp1 npres n+ poly resistor +# xhrpoly_* ppres (*) p+ poly resistor (300 Ohms/sq) +# uhrpoly_* xres (*) p+ poly resistor (2k Ohms/sq) +# xcnwvc varactor varactor (low Vt?) +# xcnwvc2 varactorhvt high Vt varactor +# xchvnwc mvvaractor thickox varactor +# xpwres rpw pwell resistor (in deep nwell) # # (*) Note that ppres may extract into some generic type # called "xhrpoly", but only specific sizes of xhrpoly are @@ -179,6 +179,7 @@ -active mvvaractor,mvvaract,mvvar -active pmoslvt,pfetlvt + -active pmosmvt,pfetmvt -active pmoshvt,pfethvt -active nmoslvt,nfetlvt -active varactorhvt,varacthvt,varhvt @@ -360,12 +361,6 @@ padl m1 m2 m3 glass #endif (!METAL5) - res0p35 implant1 - res0p69 implant1 - res1p41 implant1 - res2p85 implant1 - res5p73 implant1 - #ifdef REDISTRIBUTION mrdlc metal5 mrdl #endif (REDISTRIBUTION) @@ -381,7 +376,7 @@ allnwell nwell,obswell allnfets nfet,npass,npd,scnfet,mvnfet,mvnnfet,nfetlvt,nsonos - allpfets pfet,ppu,scpfet,mvpfet,pfethvt,pfetlvt + allpfets pfet,ppu,scpfet,mvpfet,pfethvt,pfetlvt,pfetmvt allfets allnfets,allpfets,varactor,mvvaractor,varhvt allnactivenonfet *ndiff,*nsd,*ndiode,*nndiode,*mvndiff,*mvnsd,*mvndiode,*ndiodelvt @@ -400,7 +395,7 @@ allactiveres ndiffres,pdiffres,mvndiffres,mvpdiffres allndifflv *ndif,*nsd,*ndiode,ndiffres,nfet,npass,npd,scnfet,nfetlvt,nsonos - allpdifflv *pdif,*psd,*pdiode,pdiffres,pfet,ppu,scpfet,pfetlvt,pfethvt + allpdifflv *pdif,*psd,*pdiode,pdiffres,pfet,ppu,scpfet,pfetlvt,pfetmvt,pfethvt alldifflv allndifflv,allpdifflv allndifflvnonfet *ndif,*nsd,*ndiode,*nndiode,ndiffres,*ndiodelvt allpdifflvnonfet *pdif,*psd,*pdiode,pdiffres,*pdiodelvt,*pdiodehvt @@ -483,6 +478,7 @@ psc pdiff_in_pwell metal1 contact_X'es pfetlvt ptransistor ptransistor_stripes implant1 + pfetmvt ptransistor ptransistor_stripes implant3 pfethvt ptransistor ptransistor_stripes implant2 nfetlvt ntransistor ntransistor_stripes implant1 nsonos ntransistor implant3 @@ -508,6 +504,12 @@ xpc polysilicon pselect2 metal1 contact_X'es rmp polysilicon poly_resist_stripes + res0p35 implant1 + res0p69 implant1 + res1p41 implant1 + res2p85 implant1 + res5p73 implant1 + pdiode pdiffusion pselect2 ndiode ndiffusion nselect2 pdiodec pdiffusion pselect2 metal1 contact_X'es @@ -823,6 +825,18 @@ calma 125 44 #---------------------------------------------------------------- +# HVTR +#---------------------------------------------------------------- + + layer HVTR pfetmvt + grow 180 + bridge 380 380 + grow 185 + shrink 185 + close 265000 + calma 18 20 + +#---------------------------------------------------------------- # HVTP #---------------------------------------------------------------- @@ -1494,116 +1508,147 @@ options calma-permissive-labels gridlimit 5 +#---------------------------------------------------------------- +# Generate guard-band around nwells to keep FOM from crossing +# Spacing from nwell = Diff/Tap 9 = 0.34um +# Enclosure by nwell = Diff/Tap 8 = 0.18um +#---------------------------------------------------------------- + templayer well_shrink nwell + shrink 180 + templayer well_guardband nwell + grow 340 + and-not well_shrink + #--------------------------------------------------- -# FOM fill (under development) +# Interleaved FOM and POLY fill #--------------------------------------------------- templayer slots_fom_pass1 bbox top slots 0 4080 1320 0 4080 1320 1360 0 templayer obstruct_fom_pass1 alldiff,allpoly,rpw grow 500 + or well_guardband templayer fomfill_pass1 slots_fom_pass1 and-not obstruct_fom_pass1 shrink 2035 grow 2035 +#--------------------------------------------------- + + templayer slots_poly_pass1 + bbox top + slots 0 720 360 0 720 360 240 0 + templayer obstruct_poly_pass1 alldiff,allpoly,rpw + grow 700 + or fomfill_pass1 + grow 300 + or well_guardband + templayer polyfill_pass1 slots_poly_pass1 + and-not obstruct_poly_pass1 + shrink 355 + grow 355 + +#--------------------------------------------------- + templayer slots_fom_pass2 bbox top slots 0 2500 1320 0 2500 1320 1360 0 templayer obstruct_fom_pass2 fomfill_pass1 grow 820 - or alldiff,allpoly,rpw - grow 500 + grow 200 + or polyfill_pass1 + grow 300 + or obstruct_fom_pass1 templayer fomfill_pass2 slots_fom_pass2 and-not obstruct_fom_pass2 shrink 1245 grow 1245 - templayer slots_fom_coarse - bbox top - slots 0 1500 1320 0 1500 1320 1360 0 - templayer obstruct_fom_coarse fomfill_pass1,fomfill_pass2 - grow 820 - or alldiff,allpoly,rpw - grow 500 - templayer fomfill_coarse slots_fom_coarse - and-not obstruct_fom_coarse - shrink 745 - grow 745 - - templayer slots_fom_fine - bbox top - slots 0 500 400 0 500 400 160 0 - templayer obstruct_fom_fine fomfill_pass1,fomfill_pass2,fomfill_coarse - grow 820 - or alldiff,allpoly,rpw - grow 500 - templayer fomfill_fine slots_fom_fine - and-not obstruct_fom_fine - shrink 245 - grow 245 - - layer FOMMASK fomfill_pass1 - or fomfill_pass2 - or fomfill_coarse - or fomfill_fine - calma 23 0 - #--------------------------------------------------- -# POLY fill (under development) -#--------------------------------------------------- - templayer slots_poly_pass1 - bbox top - slots 0 720 360 0 720 360 240 0 - templayer obstruct_poly_pass1 alldiff,allpoly,rpw - grow 1000 - templayer polyfill_pass1 slots_poly_pass1 - and-not obstruct_poly_pass1 - shrink 355 - grow 355 templayer slots_poly_coarse bbox top slots 0 720 360 0 720 360 240 120 - templayer obstruct_poly_coarse alldiff,allpoly,rpw - grow 640 - or polyfill_pass1 - grow 360 + templayer obstruct_poly_coarse polyfill_pass1 + grow 60 + or fomfill_pass1,fomfill_pass2 + grow 300 + or obstruct_poly_pass1 templayer polyfill_coarse slots_poly_coarse and-not obstruct_poly_coarse shrink 355 grow 355 +#--------------------------------------------------- + + templayer slots_fom_coarse + bbox top + slots 0 1500 1320 0 1500 1320 1360 0 + templayer obstruct_fom_coarse fomfill_pass1,fomfill_pass2 + grow 1020 + or polyfill_pass1,polyfill_coarse + grow 300 + or obstruct_fom_pass1 + templayer fomfill_coarse slots_fom_coarse + and-not obstruct_fom_coarse + shrink 745 + grow 745 + +#--------------------------------------------------- templayer slots_poly_medium bbox top slots 0 540 360 0 540 360 240 100 - templayer obstruct_poly_medium alldiff,allpoly,rpw - grow 650 - or polyfill_pass1,polyfill_coarse - grow 360 + templayer obstruct_poly_medium polyfill_pass1,polyfill_coarse + grow 1010 + or obstruct_poly_pass1 templayer polyfill_medium slots_poly_medium and-not obstruct_poly_medium shrink 265 grow 265 +#--------------------------------------------------- + + templayer slots_fom_fine + bbox top + slots 0 500 400 0 500 400 160 0 + templayer obstruct_fom_fine fomfill_pass1,fomfill_pass2,fomfill_coarse + grow 1320 + or obstruct_fom_pass1 + templayer fomfill_fine slots_fom_fine + and-not obstruct_fom_fine + shrink 245 + grow 245 + +#--------------------------------------------------- templayer slots_poly_fine bbox top slots 0 480 360 0 480 360 240 200 - templayer obstruct_poly_fine alldiff,allpoly,rpw + templayer obstruct_poly_fine polyfill_pass1,polyfill_coarse,polyfill_medium grow 650 or polyfill_pass1,polyfill_coarse,polyfill_medium grow 360 + or obstruct_poly_pass1 templayer polyfill_fine slots_poly_fine and-not obstruct_poly_fine shrink 235 grow 235 - layer POLYMASK polyfill_pass1 +#--------------------------------------------------- + templayer fomfill fomfill_pass1 + or fomfill_pass2 + or fomfill_coarse + or fomfill_fine + calma 23 0 + + templayer polyfill polyfill_pass1 or polyfill_coarse or polyfill_medium or polyfill_fine calma 28 0 + layer FOMMASK fomfill + layer POLYMASK polyfill + #--------------------------------------------------- # MET1 fill #--------------------------------------------------- @@ -2086,6 +2131,10 @@ and LVTN labels DIFF + layer pfetmvt pfetarea + and HVTR + labels DIFF + layer pfethvt pfetarea and HVTP labels DIFF @@ -3167,6 +3216,8 @@ calma TAP 65 44 # LVTN calma LVTN 125 44 + # HVTR + calma HVTR 18 20 # HVTP calma HVTP 78 44 # SONOS (TUNM) @@ -3503,7 +3554,7 @@ surround ndc/a *ndiff,nfet,scnfet,npd,npass,nfetlvt 40 absence_illegal \ "N-diffusion overlap of N-diffusion contact < %d (LIcon 5a)" - surround pdc/a *pdiff,pfet,scpfet,ppu,pfethvt,pfetlvt 40 absence_illegal \ + surround pdc/a *pdiff,pfet,scpfet,ppu,pfethvt,pfetmvt,pfetlvt 40 absence_illegal \ "P-diffusion overlap of P-diffusion contact < %d (LIcon 5a)" surround ndic/a *ndi 40 absence_illegal \ "N-diode overlap of N-diode contact < %d (LIcon 5a)" @@ -3512,7 +3563,7 @@ surround ndc/a *ndiff,nfet,scnfet,npd,npass,nfetlvt 60 directional \ "N-diffusion overlap of N-diffusion contact < %d in one direction (LIcon 5c)" - surround pdc/a *pdiff,pfet,scpfet,ppu,pfethvt,pfetlvt 60 directional \ + surround pdc/a *pdiff,pfet,scpfet,ppu,pfethvt,pfetmvt,pfetlvt 60 directional \ "P-diffusion overlap of P-diffusion contact < %d in one direction (LIcon 5c)" surround ndic/a *ndi 60 directional \ "N-diode overlap of N-diode contact < %d in one direction (LIcon 5c)" @@ -3759,7 +3810,7 @@ "Butting MV N-tap spacing to MV PMOS gate < %d (Poly 6)" # No LV FETs in HV diff - spacing pfet,scpfet,ppu,pfetlvt,pfethvt,*pdiff *mvpdiff 360 touching_illegal \ + spacing pfet,scpfet,ppu,pfetlvt,pfetmvt,pfethvt,*pdiff *mvpdiff 360 touching_illegal \ "LV P-diffusion to MV P-diffusion < %d (Diff/tap 23 + Diff/tap 22)" spacing nfet,scnfet,npd,npass,nfetlvt,varactor,varhvt,*ndiff *mvndiff 360 touching_illegal \ @@ -3933,14 +3984,14 @@ extract - style ngspice variants (lvs),(sim),(si) + style ngspice variants (),(orig),(si) cscale 1 # NOTE: SkyWater SPICE libraries use .option scale 1E6 so all # dimensions must be in units of microns in the extract file. # Use extract style "ngspice(si)" to override this and produce # a file with SI units for length/area. - variants (lvs),(sim) + variants (),(orig) lambda 1E6 variants (si) lambda 1.0 @@ -4313,81 +4364,132 @@ #ifdef REDISTRIBUTION #endif (REDISTRIBUTION) -# Devices: Use document (...) +# Devices: Base models (not subcircuit wrappers) -variants (sim) +variants (),(si) - device msubcircuit pshort pfet,scpfet *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w - device msubcircuit ppu ppu *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w - device msubcircuit plowvt pfetlvt *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w - device msubcircuit phighvt pfethvt *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w + device msubcircuit sky130_fd_pr__pfet_01v8 pfet,scpfet \ + *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w + device msubcircuit ppu ppu \ + *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w + device msubcircuit sky130_fd_pr__pfet_01v8_lvt pfetlvt \ + *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w + device msubcircuit sky130_fd_pr__pfet_01v8_mvt pfetmvt \ + *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w + device msubcircuit sky130_fd_pr__pfet_01v8_hvt pfethvt \ + *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w - device msubcircuit nshort nfet,scnfet,npd,npass *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w - device msubcircuit npd npd *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w - device msubcircuit npass npass *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w - device msubcircuit nlowvt nfetlvt *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w - device msubcircuit sonos_e nsonos *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w - device subcircuit xcnwvc varactor *nndiff nwell error l=l w=w - device subcircuit xcnwvc2 varhvt *nndiff nwell error l=l w=w - device subcircuit xchvnwc mvvaractor *mvnndiff nwell error l=l w=w + device msubcircuit sky130_fd_pr__nfet_01v8 nfet,scnfet,npd,npass \ + *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w + device msubcircuit npd npd \ + *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w + device msubcircuit npass npass \ + *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w + device msubcircuit sky130_fd_pr__nfet_01v8_lvt nfetlvt \ + *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w + device msubcircuit sonos_e nsonos \ + *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w + device subcircuit xcnwvc varactor \ + *nndiff nwell error l=l w=w + device subcircuit xcnwvc2 varhvt \ + *nndiff nwell error l=l w=w + device subcircuit xchvnwc mvvaractor \ + *mvnndiff nwell error l=l w=w - device msubcircuit phv mvpfet *mvpdiff,mvpdiffres *mvpdiff,mvpdiffres nwell error l=l w=w - device msubcircuit nhv mvnfet *mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w - device msubcircuit nhvnative mvnnfet *mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w + device msubcircuit sky130_fd_pr__pfet_g5v0d10v5 mvpfet \ + *mvpdiff,mvpdiffres *mvpdiff,mvpdiffres nwell error l=l w=w + device msubcircuit sky130_fd_pr__nfet_g5v0d10v5 mvnfet \ + *mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w + device msubcircuit sky130_fd_pr__nfet_05v0_nvt mvnnfet \ + *mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w - device rsubcircuit short rmp *poly space/w,pwell,nwell error l=l w=w - device rsubcircuit short rli1 *li,coreli space/w,pwell,nwell error l=l w=w - device rsubcircuit short rmetal1 *metal1 space/w,pwell,nwell error l=l w=w - device rsubcircuit short rmetal2 *metal2 space/w,pwell,nwell error l=l w=w - device rsubcircuit short rmetal3 *metal3 space/w,pwell,nwell error l=l w=w + device rsubcircuit short rmp \ + *poly space/w,pwell,nwell error l=l w=w + device rsubcircuit short rli1 \ + *li,coreli space/w,pwell,nwell error l=l w=w + device rsubcircuit short rmetal1 \ + *metal1 space/w,pwell,nwell error l=l w=w + device rsubcircuit short rmetal2 \ + *metal2 space/w,pwell,nwell error l=l w=w + device rsubcircuit short rmetal3 \ + *metal3 space/w,pwell,nwell error l=l w=w #ifdef METAL5 - device rsubcircuit short rm4 *m4 space/w,pwell,nwell error l=l w=w - device rsubcircuit short rm5 *m5 space/w,pwell,nwell error l=l w=w + device rsubcircuit short rm4 \ + *m4 space/w,pwell,nwell error l=l w=w + device rsubcircuit short rm5 \ + *m5 space/w,pwell,nwell error l=l w=w #endif (METAL5) - device rsubcircuit xhrpoly_0p35 xhrpoly xpc pwell,space/w error +res0p35 l=l w=w - device rsubcircuit xhrpoly_0p69 xhrpoly xpc pwell,space/w error +res0p69 l=l w=w - device rsubcircuit xhrpoly_1p41 xhrpoly xpc pwell,space/w error +res1p41 l=l w=w - device rsubcircuit xhrpoly_2p85 xhrpoly xpc pwell,space/w error +res2p85 l=l w=w - device rsubcircuit xhrpoly_5p73 xhrpoly xpc pwell,space/w error +res5p73 l=l w=w - device rsubcircuit xhrpoly xhrpoly xpc pwell,space/w error l=l w=w - device rsubcircuit uhrpoly_0p35 uhrpoly xpc pwell,space/w error +res0p35 l=l w=w - device rsubcircuit uhrpoly_0p69 uhrpoly xpc pwell,space/w error +res0p69 l=l w=w - device rsubcircuit uhrpoly_1p41 uhrpoly xpc pwell,space/w error +res1p41 l=l w=w - device rsubcircuit uhrpoly_2p85 uhrpoly xpc pwell,space/w error +res2p85 l=l w=w - device rsubcircuit uhrpoly_5p73 uhrpoly xpc pwell,space/w error +res5p73 l=l w=w - device rsubcircuit uhrpoly uhrpoly xpc pwell,space/w error l=l w=w + device rsubcircuit xhrpoly_0p35 xhrpoly \ + xpc pwell,space/w error +res0p35 l=l w=w + device rsubcircuit xhrpoly_0p69 xhrpoly \ + xpc pwell,space/w error +res0p69 l=l w=w + device rsubcircuit xhrpoly_1p41 xhrpoly \ + xpc pwell,space/w error +res1p41 l=l w=w + device rsubcircuit xhrpoly_2p85 xhrpoly \ + xpc pwell,space/w error +res2p85 l=l w=w + device rsubcircuit xhrpoly_5p73 xhrpoly \ + xpc pwell,space/w error +res5p73 l=l w=w + device rsubcircuit xhrpoly xhrpoly \ + xpc pwell,space/w error l=l w=w + device rsubcircuit uhrpoly_0p35 uhrpoly \ + xpc pwell,space/w error +res0p35 l=l w=w + device rsubcircuit uhrpoly_0p69 uhrpoly \ + xpc pwell,space/w error +res0p69 l=l w=w + device rsubcircuit uhrpoly_1p41 uhrpoly \ + xpc pwell,space/w error +res1p41 l=l w=w + device rsubcircuit uhrpoly_2p85 uhrpoly \ + xpc pwell,space/w error +res2p85 l=l w=w + device rsubcircuit uhrpoly_5p73 uhrpoly \ + xpc pwell,space/w error +res5p73 l=l w=w + device rsubcircuit uhrpoly uhrpoly \ + xpc pwell,space/w error l=l w=w - device rsubcircuit mrp1 mrp1 *poly pwell,space/w error l=l w=w + device rsubcircuit mrp1 mrp1 \ + *poly pwell,space/w error l=l w=w - device rsubcircuit mrdn ndiffres *ndiff pwell,space/w error l=l w=w - device rsubcircuit mrdp pdiffres *pdiff nwell error l=l w=w - device rsubcircuit xpwres rpw pwell dnwell error l=l w=w + device rsubcircuit mrdn ndiffres \ + *ndiff pwell,space/w error l=l w=w + device rsubcircuit mrdp pdiffres \ + *pdiff nwell error l=l w=w + device rsubcircuit xpwres rpw \ + pwell dnwell error l=l w=w - device rsubcircuit mrdn_hv mvndiffres *mvndiff pwell,space/w error l=l w=w - device rsubcircuit mrdp_hv mvpdiffres *mvpdiff nwell error l=l w=w + device rsubcircuit mrdn_hv mvndiffres \ + *mvndiff pwell,space/w error l=l w=w + device rsubcircuit mrdp_hv mvpdiffres \ + *mvpdiff nwell error l=l w=w - device subcircuit pdiode *pdiode nwell a=a p=p - device msubcircuit ndiode *ndiode pwell,space/w a=a p=p - device subcircuit pdiode_h *mvpdiode nwell a=a p=p - device msubcircuit ndiode_h *mvndiode pwell,space/w a=a p=p + device subcircuit sky130-fd_pr__diode_pd2nw *pdiode \ + nwell a=a p=p + device msubcircuit sky130_fd_pr__diode_pw2nd *ndiode \ + pwell,space/w a=a p=p + device subcircuit pdiode_h *mvpdiode \ + nwell a=a p=p + device msubcircuit ndiode_h *mvndiode \ + pwell,space/w a=a p=p # These are parasitic devices - device msubcircuit ndiode_lvt *ndiodelvt pwell,space/w a=a p=p - device subcircuit pdiode_lvt *pdiodelvt nwell a=a p=p - device subcircuit pdiode_hvt *pdiodehvt nwell a=a p=p - device msubcircuit ndiode_native *nndiode pwell,space/w a=a p=p + device msubcircuit sky130_fd_pr__diode_pw2nd_lvt *ndiodelvt \ + pwell,space/w a=a p=p + device subcircuit sky130_fd_pr__diode_pd2nw_lvt *pdiodelvt \ + nwell a=a p=p + device subcircuit sky130_fd_pr_diode_pd2nw_hvt *pdiodehvt \ + nwell a=a p=p + device msubcircuit sky130_fd_pr__diode_pw2nd_nvt *nndiode \ + pwell,space/w a=a p=p #ifdef MIM device subcircuit xcmimc1 *mimcap m3 nwell,pwell,space/w error a=a p=p s=subs device subcircuit xcmimc2 *mimcap2 m4,mimcc/m4 nwell,pwell,space/w error a=a p=p s=subs #endif (MIM) - variants (lvs),(si) + variants (orig) device mosfet pshort scpfet,pfet pdiff,pdiffres,pdc nwell device mosfet ppu ppu pdiff,pdiffres,pdc nwell device mosfet plowvt pfetlvt pdiff,pdiffres,pdc nwell + device mosfet pmedvt pfetmvt pdiff,pdiffres,pdc nwell device mosfet phighvt pfethvt pdiff,pdiffres,pdc nwell device mosfet nshort scnfet,npd,npass,nfet ndiff,ndiffres,ndc pwell,space/w device mosfet npd npd ndiff,ndiffres,ndc pwell,space/w