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