Modified the configure script to allow 3rd party libraries to be either installed
by default (requiring --disable) or ignored by default (requiring --enable).
Moved the SRAM library to the "ignored by default" list because it takes so long
to build.  Added all of the OSU standard cell libraries (hs/ms/ls each for
12T, 15T, and 18T).  Added a straight-through analog pad for high-speed I/O,
especially for the "caravan" analog variant of the "caravel" harness chip.
diff --git a/Makefile.in b/Makefile.in
index a98af99..cb4286b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -83,11 +83,16 @@
 CPP = common/preproc.py
 
 common_install:
-	mkdir -p @prefix@/pdk/bin/
-	cp common/cleanup_unref.py @prefix@/pdk/bin/
-	cp common/soc_floorplanner.py @prefix@/pdk/bin/
-	${CPP} -DPREFIX=@prefix@ common/create_project.py \
-		@prefix@/pdk/bin/create_project.py
+	@if test -w @prefix@ ; then \
+		mkdir -p @prefix@/pdk/bin/ ;\
+		cp common/cleanup_unref.py @prefix@/pdk/bin/ ;\
+		cp common/soc_floorplanner.py @prefix@/pdk/bin/ ;\
+		${CPP} -DPREFIX=@prefix@ common/create_project.py \
+			@prefix@/pdk/bin/create_project.py ;\
+		echo "Common install:  Done." ;\
+	else \
+		echo "Common install:  @prefix@ is not writeable (ignoring)." ;\
+	fi
 	
 #---------------------------------------------------
 
diff --git a/README.md b/README.md
index 310dc7d..80a0b60 100644
--- a/README.md
+++ b/README.md
@@ -52,13 +52,13 @@
 At a minimum you will want to pass a configure option to declare the location
 of the PDK vendor source distribution (which can be obtained separately),
 
-    ./configure --with-[PDK_name]-source=[path]
+    ./configure --enable-[PDK_name]-pdk=[path]
 
 The open_pdks version of the PDK can be built locally within open_pdks without
 the need to declare an install target or run "make install".  However, it is
 recommended to declare a target location and install there, using
 
-    ./configure --with-[PDK_name]-source=[path] --with-[PDK_name]-local-path=[path]
+    ./configure --enable-[PDK_name]-pdk=[path] --with-[PDK_name]-local-path=[path]
 
 followed by "make" and "make install".
 
diff --git a/scripts/configure b/scripts/configure
index 824d296..b0e3e58 100755
--- a/scripts/configure
+++ b/scripts/configure
@@ -588,9 +588,13 @@
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
 EF_STYLE
+SKY130_OSU_T18_PATH
+SKY130_OSU_T15_PATH
+SKY130_OSU_T12_PATH
+SKY130_OSU_PATH
+SKY130_SRAM_MACROS_PATH
 XSCHEM_SKY130_PATH
 SKY130_ML_XX_HD_PATH
-SKY130_SRAM_MACROS_PATH
 PATCH
 MAGIC
 XSCHEM_DISABLED
@@ -666,9 +670,13 @@
 enable_openlane
 enable_qflow
 enable_xschem
-enable_sram_sky130
 enable_alpha_sky130
 enable_xschem_sky130
+enable_sram_sky130
+enable_osu_sky130
+enable_osu_t12_sky130
+enable_osu_t15_sky130
+enable_osu_t18_sky130
 with_ef_style
 '
       ac_precious_vars='build_alias
@@ -1327,15 +1335,27 @@
                 Enable or disable xschem setup [default=enabled]
 
 
-  --enable-sram-sky130[=path]
-                          Install sky130_sram_macros. If path is omitted, it'll be
-                          downloaded. [default=enabled]
   --enable-alpha-sky130[=path]
-                          Install sky130_ml_xx_hd. If path is omitted, it'll be
-                          downloaded. [default=enabled]
+                          Install sky130_ml_xx_hd. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
   --enable-xschem-sky130[=path]
-                          Install xschem_sky130. If path is omitted, it'll be
-                          downloaded. [default=enabled]
+                          Install xschem_sky130. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
+  --enable-sram-sky130[=path]
+                          Install sky130_sram_macros. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
+  --enable-osu-sky130[=path]
+                          Install sky130_osu. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
+  --enable-osu-t12-sky130[=path]
+                          Install sky130_osu_t12. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
+  --enable-osu-t15-sky130[=path]
+                          Install sky130_osu_t15. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
+  --enable-osu-t18-sky130[=path]
+                          Install sky130_osu_t18. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -2441,46 +2461,7 @@
 # Other installations (libraries or tools if applicable)
 
 
-
-
-
-
-
-
-    # echo target targetvar flag location
-
-    SKY130_SRAM_MACROS_PATH=""
-
-    # Check whether --enable-sram-sky130 was given.
-if test "${enable_sram_sky130+set}" = set; then :
-  enableval=$enable_sram_sky130;
-            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will be installed automatically during make." >&5
-$as_echo "$as_me: Package 'sky130_sram_macros' will be installed automatically during make." >&6;}
-        	export SKY130_SRAM_MACROS_PATH=../sources/sky130_sram_macros
-            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_sram_macros'" >&5
-$as_echo "$as_me: Disabling package 'sky130_sram_macros'" >&6;}
-    		export SKY130_SRAM_MACROS_PATH=""
-            else
-                SKY130_SRAM_MACROS_PATH=$enableval
-                { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&5
-$as_echo "$as_me: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&6;}
-            fi
-            SKY130_SRAM_MACROS_PATH=`realpath $SKY130_SRAM_MACROS_PATH`
-
-else
-
-            { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will be installed automatically during make." >&5
-$as_echo "$as_me: Package 'sky130_sram_macros' will be installed automatically during make." >&6;}
-	    SKY130_SRAM_MACROS_PATH=../sources/sky130_sram_macros
-
-
-fi
-
-
-
-
+# Optional installations (like the above, but disabled by default)
 
 
 
@@ -2570,6 +2551,212 @@
 
 
 
+
+
+
+
+    # echo target targetvar flag location
+
+    SKY130_SRAM_MACROS_PATH=""
+
+    # Check whether --enable-sram-sky130 was given.
+if test "${enable_sram_sky130+set}" = set; then :
+  enableval=$enable_sram_sky130;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will be installed automatically during make." >&5
+$as_echo "$as_me: Package 'sky130_sram_macros' will be installed automatically during make." >&6;}
+        	export SKY130_SRAM_MACROS_PATH=../sources/sky130_sram_macros
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_sram_macros'" >&5
+$as_echo "$as_me: Disabling package 'sky130_sram_macros'" >&6;}
+    		export SKY130_SRAM_MACROS_PATH=""
+            else
+                SKY130_SRAM_MACROS_PATH=$enableval
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&5
+$as_echo "$as_me: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&6;}
+            fi
+            SKY130_SRAM_MACROS_PATH=`realpath $SKY130_SRAM_MACROS_PATH`
+
+else
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will not be installed." >&5
+$as_echo "$as_me: Package 'sky130_sram_macros' will not be installed." >&6;}
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+    # echo target targetvar flag location
+
+    SKY130_OSU_PATH=""
+
+    # Check whether --enable-osu-sky130 was given.
+if test "${enable_osu_sky130+set}" = set; then :
+  enableval=$enable_osu_sky130;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu' will be installed automatically during make." >&5
+$as_echo "$as_me: Package 'sky130_osu' will be installed automatically during make." >&6;}
+        	export SKY130_OSU_PATH=../sources/sky130_osu
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu'" >&5
+$as_echo "$as_me: Disabling package 'sky130_osu'" >&6;}
+    		export SKY130_OSU_PATH=""
+            else
+                SKY130_OSU_PATH=$enableval
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu' at $SKY130_OSU_PATH" >&5
+$as_echo "$as_me: Enabling package 'sky130_osu' at $SKY130_OSU_PATH" >&6;}
+            fi
+            SKY130_OSU_PATH=`realpath $SKY130_OSU_PATH`
+
+else
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu' will not be installed." >&5
+$as_echo "$as_me: Package 'sky130_osu' will not be installed." >&6;}
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+    # echo target targetvar flag location
+
+    SKY130_OSU_T12_PATH=""
+
+    # Check whether --enable-osu-t12-sky130 was given.
+if test "${enable_osu_t12_sky130+set}" = set; then :
+  enableval=$enable_osu_t12_sky130;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t12' will be installed automatically during make." >&5
+$as_echo "$as_me: Package 'sky130_osu_t12' will be installed automatically during make." >&6;}
+        	export SKY130_OSU_T12_PATH=../sources/sky130_osu_t12
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t12'" >&5
+$as_echo "$as_me: Disabling package 'sky130_osu_t12'" >&6;}
+    		export SKY130_OSU_T12_PATH=""
+            else
+                SKY130_OSU_T12_PATH=$enableval
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t12' at $SKY130_OSU_T12_PATH" >&5
+$as_echo "$as_me: Enabling package 'sky130_osu_t12' at $SKY130_OSU_T12_PATH" >&6;}
+            fi
+            SKY130_OSU_T12_PATH=`realpath $SKY130_OSU_T12_PATH`
+
+else
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t12' will not be installed." >&5
+$as_echo "$as_me: Package 'sky130_osu_t12' will not be installed." >&6;}
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+    # echo target targetvar flag location
+
+    SKY130_OSU_T15_PATH=""
+
+    # Check whether --enable-osu-t15-sky130 was given.
+if test "${enable_osu_t15_sky130+set}" = set; then :
+  enableval=$enable_osu_t15_sky130;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t15' will be installed automatically during make." >&5
+$as_echo "$as_me: Package 'sky130_osu_t15' will be installed automatically during make." >&6;}
+        	export SKY130_OSU_T15_PATH=../sources/sky130_osu_t15
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t15'" >&5
+$as_echo "$as_me: Disabling package 'sky130_osu_t15'" >&6;}
+    		export SKY130_OSU_T15_PATH=""
+            else
+                SKY130_OSU_T15_PATH=$enableval
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t15' at $SKY130_OSU_T15_PATH" >&5
+$as_echo "$as_me: Enabling package 'sky130_osu_t15' at $SKY130_OSU_T15_PATH" >&6;}
+            fi
+            SKY130_OSU_T15_PATH=`realpath $SKY130_OSU_T15_PATH`
+
+else
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t15' will not be installed." >&5
+$as_echo "$as_me: Package 'sky130_osu_t15' will not be installed." >&6;}
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+    # echo target targetvar flag location
+
+    SKY130_OSU_T18_PATH=""
+
+    # Check whether --enable-osu-t18-sky130 was given.
+if test "${enable_osu_t18_sky130+set}" = set; then :
+  enableval=$enable_osu_t18_sky130;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t18' will be installed automatically during make." >&5
+$as_echo "$as_me: Package 'sky130_osu_t18' will be installed automatically during make." >&6;}
+        	export SKY130_OSU_T18_PATH=../sources/sky130_osu_t18
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t18'" >&5
+$as_echo "$as_me: Disabling package 'sky130_osu_t18'" >&6;}
+    		export SKY130_OSU_T18_PATH=""
+            else
+                SKY130_OSU_T18_PATH=$enableval
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t18' at $SKY130_OSU_T18_PATH" >&5
+$as_echo "$as_me: Enabling package 'sky130_osu_t18' at $SKY130_OSU_T18_PATH" >&6;}
+            fi
+            SKY130_OSU_T18_PATH=`realpath $SKY130_OSU_T18_PATH`
+
+else
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t18' will not be installed." >&5
+$as_echo "$as_me: Package 'sky130_osu_t18' will not be installed." >&6;}
+
+
+fi
+
+
+
+
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem" >&5
 $as_echo "$as_me: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem" >&6;}
 
diff --git a/scripts/configure.ac b/scripts/configure.ac
index be17018..63de958 100755
--- a/scripts/configure.ac
+++ b/scripts/configure.ac
@@ -168,7 +168,7 @@
         flag,
         AS_HELP_STRING(
             [--enable-flag@<:@=path@:>@],
-            [Install target. If path is omitted, it'll be downloaded. @<:@default=enabled@:>@]
+            [Install target. If path is omitted, the repository will be downloaded. @<:@default=enabled@:>@]
         ), [
             if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                 AC_MSG_NOTICE([Package 'target' will be installed automatically during make.])
@@ -192,10 +192,53 @@
     AC_SUBST(targetvar[]_PATH)
 ])
 
-M4_GEN_INSTALLATION(sky130_sram_macros, sram-sky130, ../sources)
+# Optional installations (like the above, but disabled by default)
+AC_DEFUN([M4_OPT_INSTALLATION], [
+    m4_define([target], $1)
+    m4_define([targetvar], [m4_normalize(m4_esyscmd(echo target | tr "a-z-" "A-Z_"))])
+    m4_define([flag], $2)
+    m4_define([location], $3)
+
+    # echo target targetvar flag location
+
+    targetvar[]_PATH=""
+
+    AC_ARG_ENABLE(
+        flag,
+        AS_HELP_STRING(
+            [--enable-flag@<:@=path@:>@],
+            [Install target. If path is omitted, the repository will be downloaded. @<:@default=enabled@:>@]
+        ), [
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                AC_MSG_NOTICE([Package 'target' will be installed automatically during make.])
+        	export targetvar[]_PATH=location/target
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                AC_MSG_NOTICE([Disabling package 'target'])
+    		export targetvar[]_PATH=""
+            else
+                targetvar[]_PATH=$enableval
+                AC_MSG_NOTICE([Enabling package 'target' at $[]targetvar[]_PATH])
+            fi
+            targetvar[]_PATH=`realpath $[]targetvar[]_PATH`
+        ],[
+            AC_MSG_NOTICE([Package 'target' will not be installed.])
+	]
+    )
+
+    $4
+
+    AC_SUBST(targetvar[]_PATH)
+])
+
 M4_GEN_INSTALLATION(sky130_ml_xx_hd, alpha-sky130, ../sources)
 M4_GEN_INSTALLATION(xschem_sky130, xschem-sky130, ../sources)
 
+M4_OPT_INSTALLATION(sky130_sram_macros, sram-sky130, ../sources)
+M4_OPT_INSTALLATION(sky130_osu, osu-sky130, ../sources)
+M4_OPT_INSTALLATION(sky130_osu_t12, osu-t12-sky130, ../sources)
+M4_OPT_INSTALLATION(sky130_osu_t15, osu-t15-sky130, ../sources)
+M4_OPT_INSTALLATION(sky130_osu_t18, osu-t18-sky130, ../sources)
+
 AC_DEFUN([M4_GEN_WITH_TOOLS], [
     m4_foreach_w(tool, $1, [
         m4_define([toolvar], [m4_normalize(m4_esyscmd(echo tool | tr "a-z-" "A-Z_"))])
diff --git a/scripts/download.sh b/scripts/download.sh
index 1bfadc1..a4188d9 100755
--- a/scripts/download.sh
+++ b/scripts/download.sh
@@ -1,10 +1,10 @@
-#!/bin/sh
+#!/bin/bash
 #
 # download.sh --
 #	Download a tarball from the specified URL to the specified target
 #	directory, untar it, and remove the tarball file.
 #
-#	Usage:  download.sh <url> <target_dir>
+#	Usage:  download.sh <url> <target_dir> [<strip>]
 #
 # where:
 #
@@ -13,6 +13,8 @@
 #		tarball will be downloaded to the directory above this,
 #		untarred while renaming to <target_dir>, and then the tarball
 #		file will be deleted.
+#	<strip> is the number of directory levels to strip off the front of the
+#		tarball contents.  Defaults to 1 if not specified.
 #
 
 # Neither curl or wget are guaranteed to be included in all *nix systems,
@@ -39,7 +41,14 @@
 echo "Downloading $1 to $2"
 $DL_CMD $2.tar.gz $1
 
+if [ $# -gt 2 ]; then
+    snum=$3
+else
+    snum=1
+fi
+
 mkdir -p $2
-tar -xf $2.tar.gz --strip-components 1 -C $2
+echo "Untarring and removing $2.tar.gz"
+tar -xf $2.tar.gz --strip-components $snum -C $2
 rm $2.tar.gz
 exit 0
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 3e10159..5afc129 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -78,25 +78,52 @@
 # External (third-party) libraries and tool setups are the following (enabled
 # by default):
 #
-#	--enable-alpha-lib[=<path>]
+#	--enable-alpha-sky130[=<path>]
 #		If enabled, install the sky130_ml_xx_hd font library from
 #		Paul Schulz on github.  If <path> is not specified, then the
 #		font library will be cloned from the git repository and
 #		installed.
 #
-#	--enable-xschem[=<path>]
+#	--enable-xschem-sky130[=<path>]
 #		If enabled, install the Sky130 setup for the xschem schematic
 #		editor.  If <path> is specified, then the xschem setup is
 #		expected to be found rooted at the given path.  If not
 #		specified, then the xschem setup will be cloned from the
 #		repository and installed.
 #
-#	--enable-sram-lib[=<path>]
+# External (third-party) libraries and tool setups are the following (disabled
+# by default):
+#
+#	--enable-sram-sky130[=<path>]
 #		If enabled, install the sky130_sram_macros library from
 #		efabless on github.   If <path> is not specified, then
 #		the SRAM library will be cloned from the repository and
 #		installed.
 #
+#	--enable-osu-sky130[=<path>]
+#		If enabled, install the sky130_osu_sc library from
+#		foss-eda-tools on googlesource.   If <path> is not
+#		specified, then the OSU standard cell library will be
+#		clones from the repository and installed.
+#
+#	--enable-osu-t12-sky130[=<path>]
+#		If enabled, install the sky130_osu_sc_t12 libraries from
+#		foss-eda-tools on googlesource.   If <path> is not
+#		specified, then the OSU standard cell library will be
+#		clones from the repository and installed.
+#
+#	--enable-osu-t15-sky130[=<path>]
+#		If enabled, install the sky130_osu_sc_t15 libraries from
+#		foss-eda-tools on googlesource.   If <path> is not
+#		specified, then the OSU standard cell library will be
+#		clones from the repository and installed.
+#
+#	--enable-osu-t18-sky130[=<path>]
+#		If enabled, install the sky130_osu_sc_t18 libraries from
+#		foss-eda-tools on googlesource.   If <path> is not
+#		specified, then the OSU standard cell library will be
+#		clones from the repository and installed.
+#
 # The variables below are substituted from the configuration options:
 #
 #	SKYWATER_PATH: points to vendor sources
@@ -177,11 +204,19 @@
 ALPHA_PATH = @SKY130_ML_XX_HD_PATH@
 XSCHEM_PATH = @XSCHEM_SKY130_PATH@
 SRAM_PATH = @SKY130_SRAM_MACROS_PATH@
+OSU_PATH = @SKY130_OSU_PATH@
+OSU_T12_PATH = @SKY130_OSU_T12_PATH@
+OSU_T15_PATH = @SKY130_OSU_T15_PATH@
+OSU_T18_PATH = @SKY130_OSU_T18_PATH@
 
 PDK_URL = https://github.com/google/skywater-pdk
 ALPHA_URL = https://github.com/PaulSchulz/sky130_pschulz_xx_hd/archive/master.tar.gz
 XSCHEM_URL = https://github.com/StefanSchippers/xschem_sky130/archive/main.tar.gz
 SRAM_URL = https://github.com/efabless/sky130_sram_macros/archive/main.tar.gz
+OSU_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc/+archive/refs/heads/master.tar.gz
+OSU_T12_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12/+archive/refs/heads/master.tar.gz
+OSU_T15_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t15/+archive/refs/heads/master.tar.gz
+OSU_T18_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t18/+archive/refs/heads/master.tar.gz
 
 # NOTE:  Install destination is the git repository of the technology platform.
 # Once updated in git, the git project can be distributed to all hosts.
@@ -345,7 +380,7 @@
 all: all-a
 
 # Handle prerequisites (fetch and install the PDK and requested libraries)
-prerequisites: pdk-repo alpha-repo xschem-repo sram-repo
+prerequisites: pdk-repo alpha-repo xschem-repo sram-repo osu-repo osu-t12-repo osu-t15-repo osu-t18-repo
 
 pdk-repo:
 	if test "x${SKYWATER_PATH}" != "x" ; then \
@@ -370,9 +405,9 @@
 sram-repo:
 	if test "x${SRAM_PATH}" != "x" ; then \
 		if test -d "${SRAM_PATH}" ; then \
-			echo "Using existing installation of alphanumeric library from ${SRAM_PATH}" ; \
+			echo "Using existing installation of SRAM macro library from ${SRAM_PATH}" ; \
 		else \
-			echo "Downloading alphanumeric library from ${SRAM_URL}" ; \
+			echo "Downloading SRAM macro library from ${SRAM_URL}" ; \
 			../scripts/download.sh ${SRAM_URL} ${SRAM_PATH} ; \
 		fi ; \
 	fi
@@ -387,6 +422,46 @@
 		fi ; \
 	fi
 
+osu-repo:
+	if test "x${OSU_PATH}" != "x" ; then \
+		if test -d "${OSU_PATH}" ; then \
+			echo "Using existing installation of OSU standard cell library from ${OSU_PATH}" ; \
+		else \
+			echo "Downloading OSU standard cell library from ${OSU_URL}" ; \
+			../scripts/download.sh ${OSU_URL} ${OSU_PATH} 0 ; \
+		fi ; \
+	fi
+
+osu-t12-repo:
+	if test "x${OSU_T12_PATH}" != "x" ; then \
+		if test -d "${OSU_T12_PATH}" ; then \
+			echo "Using existing installation of OSU T12 standard cell library from ${OSU_T12_PATH}" ; \
+		else \
+			echo "Downloading OSU standard T12 cell library from ${OSU_T12_URL}" ; \
+			../scripts/download.sh ${OSU_T12_URL} ${OSU_T12_PATH} 0 ; \
+		fi ; \
+	fi
+
+osu-t15-repo:
+	if test "x${OSU_T15_PATH}" != "x" ; then \
+		if test -d "${OSU_T15_PATH}" ; then \
+			echo "Using existing installation of OSU T15 standard cell library from ${OSU_T15_PATH}" ; \
+		else \
+			echo "Downloading OSU standard T15 cell library from ${OSU_T15_URL}" ; \
+			../scripts/download.sh ${OSU_T15_URL} ${OSU_T15_PATH} 0 ; \
+		fi ; \
+	fi
+
+osu-t18-repo:
+	if test "x${OSU_T18_PATH}" != "x" ; then \
+		if test -d "${OSU_T18_PATH}" ; then \
+			echo "Using existing installation of OSU T18 standard cell library from ${OSU_T18_PATH}" ; \
+		else \
+			echo "Downloading OSU standard T18 cell library from ${OSU_T18_URL}" ; \
+			../scripts/download.sh ${OSU_T18_URL} ${OSU_T18_PATH} 0 ; \
+		fi ; \
+	fi
+
 all-a: prerequisites
 	echo "Starting sky130A PDK staging on "`date` > ${SKY130A}_make.log
 	${MAKE} general-a
@@ -591,8 +666,9 @@
 	${CPP} -quiet ${SKY130A_DEFS} openlane/sky130_osu_sc_t18/tracks.info \
 		${OPENLANE_STAGING_A}/sky130_osu_sc_t18/tracks.info
 
-vendor-a:
-	# Modify the LEF files to update hs and ms libraries
+vendor-a: primitive-a io-a digital-a alpha-a sram-a osu-base-a osu-t12-a osu-t15-a osu-t18-a
+
+primitive-a:
 	# Install device subcircuits from vendor files
 	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
 		-ngspice sky130_fd_pr/latest/models/* \
@@ -622,10 +698,12 @@
 	cat ./custom/models/spinit >> \
 		${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/spinit
 
+io-a:
 	# Install custom additions to I/O pad library
 	${STAGE} -source ./custom -target ${STAGING_PATH}/${SKY130A} \
 		-verilog %l/verilog/*.v \
 		-cdl %l/cdl/*.cdl \
+		-spice %l/spice/*.spice \
 		-gds %l/gds/*.gds options=custom/scripts/gds_import_setup.tcl \
 		-lef %l/lef/*.lef compile-only rename=sky130_ef_io \
 		-library general sky130_fd_io 2>&1 | tee -a ${SKY130A}_make.log
@@ -660,6 +738,8 @@
 	# when writing HVI to GDS during hierarchical adjustments.
 	${ADDPROP} ${STAGING_PATH}/${SKY130A} sky130_fd_io sky130_fd_io__top_gpiov2 \
 		"MASKHINTS_HVI 1346 17198 5828 19224 13700 1890 15920 2360 24 17522 1778 20612" -mag
+
+digital-a:
 	# Install all SkyWater digital standard cells.
 	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
 		-techlef %l/latest/tech/*.tlef \
@@ -710,10 +790,18 @@
 	patch -p1 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_fd_sc_hdll/techlef \
 		< custom/patches/hdll_minenclosed.squeaky.patch \
 		2>&1 | tee -a ${SKY130A}_make.log || true
+
+alpha-a:
 	# Install alphanumeric library.
 	${STAGE} -source ${ALPHA_PATH}/.. -target ${STAGING_PATH}/${SKY130A} \
 		-mag %l/mag/*.mag filter=custom/scripts/text2m5.py \
 		-library general sky130_ml_xx_hd 2>&1 | tee -a ${SKY130A}_make.log
+	# Install text2mag.py script for alphanumeric library
+	mkdir -p ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts
+	cp custom/scripts/text2mag.py \
+		${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts
+
+sram-a:
 	# Install SRAM library.
 	${STAGE} -source ${SRAM_PATH}/.. -target ${STAGING_PATH}/${SKY130A} \
 		-lef %l/*/*.lef \
@@ -729,19 +817,104 @@
 			rename=sram_1rw1r_32_256_8_sky130.spice \
 		-verilog %l/*/*.v \
 		-library general sky130_sram_macros 2>&1 | tee -a ${SKY130A}_make.log
-	# Install text2mag.py script for alphanumeric library
-	mkdir -p ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts
-	cp custom/scripts/text2mag.py \
-		${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts
+
+osu-base-a:
 	# Install OSU digital standard cells.
-	${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
-		-techlef %l/latest/lef/sky130_osu_sc.tlef rename=sky130_osu_sc_t18.tlef \
+	${STAGE} -source ${OSU_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef %l/tech/sky130_osu_sc.lef rename=sky130_osu_sc.tlef \
 		-cdl %l/latest/cdl/*.cdl ignore=topography compile-only \
 		-lef %l/latest/lef/*.lef compile-only \
 		-lib %l/latest/lib/*.lib \
 		-gds %l/latest/gds/*.gds compile-only \
 			options=custom/scripts/gds_import_setup.tcl \
-		-library digital sky130_osu_sc_t18 2>&1 | tee -a ${SKY130A}_make.log
+		-library digital sky130_osu_sc 2>&1 | tee -a ${SKY130A}_make.log
+
+osu-t12-a:
+	# Install OSU T12 hs digital standard cells.
+	${STAGE} -source ${OSU_T12_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_12T.tlef rename=sky130_osc_sc_12t_hs.tlef \
+		-spice 12T_hs/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 12T_hs/lef/*.lef \
+		-lib 12T_hs/lib/*.lib \
+		-gds 12T_hs/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_12t_hs 2>&1 | tee -a ${SKY130A}_make.log
+	# Install OSU T12 ms digital standard cells.
+	${STAGE} -source ${OSU_T12_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_12T.tlef rename=sky130_osc_sc_12t_ms.tlef \
+		-spice 12T_ms/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 12T_ms/lef/*.lef \
+		-lib 12T_ms/lib/*.lib \
+		-gds 12T_ms/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_12t_ms 2>&1 | tee -a ${SKY130A}_make.log
+	# Install OSU T12 ls digital standard cells.
+	${STAGE} -source ${OSU_T12_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_12T.tlef rename=sky130_osc_sc_12t_ls.tlef \
+		-spice 12T_ls/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 12T_ls/lef/*.lef \
+		-lib 12T_ls/lib/*.lib \
+		-gds 12T_ls/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_12t_ls 2>&1 | tee -a ${SKY130A}_make.log
+
+osu-t15-a:
+	# Install OSU T15 hs digital standard cells.
+	${STAGE} -source ${OSU_T15_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_15T.tlef rename=sky130_osc_sc_15t_hs.tlef \
+		-spice 15T_hs/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 15T_hs/lef/*.lef \
+		-lib 15T_hs/lib/*.lib \
+		-gds 15T_hs/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_15t_hs 2>&1 | tee -a ${SKY130A}_make.log
+	# Install OSU T15 ms digital standard cells.
+	${STAGE} -source ${OSU_T15_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_15T.tlef rename=sky130_osc_sc_15t_ms.tlef \
+		-spice 15T_ms/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 15T_ms/lef/*.lef \
+		-lib 15T_ms/lib/*.lib \
+		-gds 15T_ms/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_15t_ms 2>&1 | tee -a ${SKY130A}_make.log
+	# Install OSU T15 ls digital standard cells.
+	${STAGE} -source ${OSU_T15_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_15T.tlef rename=sky130_osc_sc_15t_ls.tlef \
+		-spice 15T_ls/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 15T_ls/lef/*.lef \
+		-lib 15T_ls/lib/*.lib \
+		-gds 15T_ls/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_15t_ls 2>&1 | tee -a ${SKY130A}_make.log
+
+osu-t18-a:
+	# Install OSU T18 hs digital standard cells.
+	${STAGE} -source ${OSU_T18_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_18T.tlef rename=sky130_osc_sc_18t_hs.tlef \
+		-spice 18T_hs/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 18T_hs/lef/*.lef \
+		-lib 18T_hs/lib/*.lib \
+		-gds 18T_hs/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_18t_hs 2>&1 | tee -a ${SKY130A}_make.log
+	# Install OSU T18 ms digital standard cells.
+	${STAGE} -source ${OSU_T18_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_18T.tlef rename=sky130_osc_sc_18t_ms.tlef \
+		-spice 18T_ms/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 18T_ms/lef/*.lef \
+		-lib 18T_ms/lib/*.lib \
+		-gds 18T_ms/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_18t_ms 2>&1 | tee -a ${SKY130A}_make.log
+	# Install OSU T18 ls digital standard cells.
+	${STAGE} -source ${OSU_T18_PATH} -target ${STAGING_PATH}/${SKY130A} \
+		-techlef sky130_osu_sc_18T.tlef rename=sky130_osc_sc_18t_ls.tlef \
+		-spice 18T_ls/cdl/*.spice compile-only exclude=*.*.spice \
+		-lef 18T_ls/lef/*.lef \
+		-lib 18T_ls/lib/*.lib \
+		-gds 18T_ls/gds/*.gds compile-only \
+			options=custom/scripts/gds_import_setup.tcl \
+		-library digital sky130_osu_sc_18t_ls 2>&1 | tee -a ${SKY130A}_make.log
 
 install:
 	if test "x${DIST_PATH}" == "x" ; then \
diff --git a/sky130/custom/sky130_fd_io/gds/sky130_ef_io__analog.gds b/sky130/custom/sky130_fd_io/gds/sky130_ef_io__analog.gds
new file mode 100644
index 0000000..1a0bfc8
--- /dev/null
+++ b/sky130/custom/sky130_fd_io/gds/sky130_ef_io__analog.gds
Binary files differ
diff --git a/sky130/custom/sky130_fd_io/lef/sky130_ef_io__analog_pad.lef b/sky130/custom/sky130_fd_io/lef/sky130_ef_io__analog_pad.lef
new file mode 100644
index 0000000..a7dd292
--- /dev/null
+++ b/sky130/custom/sky130_fd_io/lef/sky130_ef_io__analog_pad.lef
@@ -0,0 +1,345 @@
+VERSION 5.7 ;
+  NOWIREEXTENSIONATPIN ON ;
+  DIVIDERCHAR "/" ;
+  BUSBITCHARS "[]" ;
+MACRO sky130_fd_ef__analog_pad
+  CLASS BLOCK ;
+  FOREIGN sky130_ef_io__analog_pad ;
+  ORIGIN 0.000 0.000 ;
+  SIZE 75.000 BY 200.000 ;
+  PIN P_CORE
+    PORT
+      LAYER met3 ;
+        RECT 24.720 0.000 49.720 82.350 ;
+    END
+  END P_CORE
+  PIN VSSA
+    PORT
+      LAYER met4 ;
+        RECT 0.000 36.735 1.270 40.185 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 0.000 56.405 75.000 56.735 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 0.000 47.735 75.000 48.065 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 0.000 51.645 1.270 52.825 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 36.735 75.000 40.185 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 56.405 75.000 56.735 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 47.735 75.000 48.065 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 51.645 75.000 52.825 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 36.840 75.000 40.085 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 47.735 1.270 56.735 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 36.840 1.270 40.085 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 47.735 75.000 56.735 ;
+    END
+  END VSSA
+  PIN VSSD
+    PORT
+      LAYER met4 ;
+        RECT 0.000 41.585 1.270 46.235 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 41.585 75.000 46.235 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 41.685 1.270 46.135 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 41.685 75.000 46.135 ;
+    END
+  END VSSD
+  PIN AMUXBUS_B
+    PORT
+      LAYER met4 ;
+        RECT 0.000 48.365 75.000 51.345 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 48.365 75.000 51.345 ;
+    END
+  END AMUXBUS_B
+  PIN AMUXBUS_A
+    PORT
+      LAYER met4 ;
+        RECT 0.000 53.125 75.000 56.105 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 53.125 75.000 56.105 ;
+    END
+  END AMUXBUS_A
+  PIN VDDIO_Q
+    PORT
+      LAYER met4 ;
+        RECT 0.000 64.085 1.270 68.535 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 64.085 75.000 68.535 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 64.185 75.000 68.435 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 64.185 1.270 68.435 ;
+    END
+  END VDDIO_Q
+  PIN VDDIO
+    PORT
+      LAYER met4 ;
+        RECT 0.000 70.035 1.270 95.000 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 0.000 19.785 1.270 24.435 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 70.035 75.000 95.000 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 19.785 75.000 24.435 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 19.885 1.270 24.335 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 70.035 1.270 94.985 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 19.885 75.000 24.335 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 70.035 75.000 94.985 ;
+    END
+  END VDDIO
+  PIN VSWITCH
+    PORT
+      LAYER met4 ;
+        RECT 0.000 31.885 1.270 35.335 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 31.885 75.000 35.335 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 31.985 75.000 35.235 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 31.985 1.270 35.235 ;
+    END
+  END VSWITCH
+  PIN VSSIO
+    PORT
+      LAYER met4 ;
+        RECT 0.000 25.835 1.270 30.485 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 25.835 75.000 30.485 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 0.000 175.785 1.270 200.000 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 0.630 191.600 0.640 191.610 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 175.785 75.000 200.000 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 74.360 191.600 74.370 191.610 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 25.935 75.000 30.385 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 175.785 75.000 200.000 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 175.785 1.270 200.000 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 25.935 1.270 30.385 ;
+    END
+  END VSSIO
+  PIN VDDA
+    PORT
+      LAYER met4 ;
+        RECT 0.000 14.935 0.965 18.385 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 74.035 14.935 75.000 18.385 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 15.035 0.965 18.285 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 74.035 15.035 75.000 18.285 ;
+    END
+  END VDDA
+  PIN VCCD
+    PORT
+      LAYER met4 ;
+        RECT 0.000 8.885 1.270 13.535 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 8.885 75.000 13.535 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 8.985 1.270 13.435 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 8.985 75.000 13.435 ;
+    END
+  END VCCD
+  PIN VCCHIB
+    PORT
+      LAYER met4 ;
+        RECT 0.000 2.035 1.270 7.485 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 2.035 75.000 7.485 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 2.135 1.270 7.385 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 2.135 75.000 7.385 ;
+    END
+  END VCCHIB
+  PIN VSSIO_Q
+    PORT
+      LAYER met4 ;
+        RECT 0.000 58.235 1.270 62.685 ;
+    END
+    PORT
+      LAYER met4 ;
+        RECT 73.730 58.235 75.000 62.685 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 73.730 58.335 75.000 62.585 ;
+    END
+    PORT
+      LAYER met5 ;
+        RECT 0.000 58.335 1.270 62.585 ;
+    END
+  END VSSIO_Q
+  PIN P_PAD
+    PORT
+      LAYER met5 ;
+        RECT 7.050 105.120 67.890 165.945 ;
+    END
+  END P_PAD
+  OBS
+      LAYER li1 ;
+        RECT 2.905 48.265 72.045 181.100 ;
+      LAYER met1 ;
+        RECT 4.250 46.255 70.440 48.855 ;
+      LAYER met2 ;
+        RECT 4.250 46.255 70.440 48.855 ;
+      LAYER met3 ;
+        RECT 0.455 82.750 74.250 173.315 ;
+        RECT 0.455 14.905 24.320 82.750 ;
+        RECT 50.120 14.905 74.250 82.750 ;
+      LAYER met4 ;
+        RECT 1.670 175.385 73.330 200.000 ;
+        RECT 0.965 95.400 74.035 175.385 ;
+        RECT 1.670 69.635 73.330 95.400 ;
+        RECT 0.965 68.935 74.035 69.635 ;
+        RECT 1.670 63.685 73.330 68.935 ;
+        RECT 0.965 63.085 74.035 63.685 ;
+        RECT 1.670 57.835 73.330 63.085 ;
+        RECT 0.965 57.135 74.035 57.835 ;
+        RECT 1.670 51.745 73.330 52.725 ;
+        RECT 0.965 46.635 74.035 47.335 ;
+        RECT 1.670 41.185 73.330 46.635 ;
+        RECT 0.965 40.585 74.035 41.185 ;
+        RECT 1.670 36.335 73.330 40.585 ;
+        RECT 0.965 35.735 74.035 36.335 ;
+        RECT 1.670 31.485 73.330 35.735 ;
+        RECT 0.965 30.885 74.035 31.485 ;
+        RECT 1.670 25.435 73.330 30.885 ;
+        RECT 0.965 24.835 74.035 25.435 ;
+        RECT 1.670 19.385 73.330 24.835 ;
+        RECT 0.965 18.785 74.035 19.385 ;
+        RECT 1.365 14.535 73.635 18.785 ;
+        RECT 0.965 13.935 74.035 14.535 ;
+        RECT 1.670 8.485 73.330 13.935 ;
+        RECT 0.965 7.885 74.035 8.485 ;
+        RECT 1.670 2.035 73.330 7.885 ;
+      LAYER met5 ;
+        RECT 2.870 174.185 72.130 200.000 ;
+        RECT 0.000 167.545 75.000 174.185 ;
+        RECT 0.000 103.520 5.450 167.545 ;
+        RECT 69.490 103.520 75.000 167.545 ;
+        RECT 0.000 96.585 75.000 103.520 ;
+        RECT 2.870 36.840 72.130 96.585 ;
+        RECT 0.000 36.835 75.000 36.840 ;
+        RECT 2.870 18.285 72.130 36.835 ;
+        RECT 2.565 15.035 72.435 18.285 ;
+        RECT 2.870 2.135 72.130 15.035 ;
+  END
+END sky130_fd_io__analog_pad
+END LIBRARY
+
diff --git a/sky130/custom/sky130_fd_io/spice/sky130_ef_io__analog_pad.spice b/sky130/custom/sky130_fd_io/spice/sky130_ef_io__analog_pad.spice
new file mode 100644
index 0000000..ee7b06b
--- /dev/null
+++ b/sky130/custom/sky130_fd_io/spice/sky130_ef_io__analog_pad.spice
@@ -0,0 +1,40 @@
+* NGSPICE file created from sky130_ef_io__analog_pad.ext - technology: sky130A
+
+.subckt sky130_fd_io__pad_esd VSUBS m4_960_20297# m5_1354_20528#
+R0 m4_960_20297# m5_1354_20528# sky130_fd_pr__res_generic_m5 w=2.5284e+08u l=100000u
+.ends
+
+.subckt sky130_fd_io__com_busses_esd VSUBS sky130_fd_io__com_bus_hookup_0/VCCD sky130_fd_io__com_bus_hookup_0/VSWITCH
++ sky130_fd_io__com_bus_hookup_0/AMUXBUS_A sky130_fd_io__com_bus_hookup_0/VSSIO sky130_fd_io__com_bus_hookup_0/AMUXBUS_B
++ sky130_fd_io__com_bus_hookup_0/VDDA sky130_fd_io__com_bus_hookup_0/VDDIO sky130_fd_io__com_bus_hookup_0/VSSIO_Q
++ sky130_fd_io__pad_esd_0/m5_1354_20528# sky130_fd_io__pad_esd_0/m4_960_20297# sky130_fd_io__com_bus_hookup_0/VDDIO_Q
++ sky130_fd_io__com_bus_hookup_0/VSSA sky130_fd_io__com_bus_hookup_0/VSSD sky130_fd_io__com_bus_hookup_0/VCCHIB
+Xsky130_fd_io__pad_esd_0 VSUBS sky130_fd_io__pad_esd_0/m4_960_20297# sky130_fd_io__pad_esd_0/m5_1354_20528#
++ sky130_fd_io__pad_esd
+.ends
+
+.subckt sky130_fd_io__simple_pad_and_busses VSUBS sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSWITCH
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDA sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCHIB sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO
++ m3_99_16575# sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO_Q
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_A sky130_fd_io__com_busses_esd_0/sky130_fd_io__pad_esd_0/m5_1354_20528#
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_B sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSA
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO_Q sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSD
++ w_818_9944# sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCD
+Xsky130_fd_io__com_busses_esd_0 VSUBS sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCD
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSWITCH sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_A
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_B
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDA sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO_Q sky130_fd_io__com_busses_esd_0/sky130_fd_io__pad_esd_0/m5_1354_20528#
++ m3_99_16575# sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO_Q
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSA sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSD
++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCHIB sky130_fd_io__com_busses_esd
+.ends
+
+.subckt sky130_ef_io__analog_pad P_CORE VSSA VSSD AMUXBUS_B AMUXBUS_A VDDIO_Q VDDIO
++ VSWITCH VSSIO VDDA VCCD VCCHIB VSSIO_Q P_PAD
+Xsky130_fd_io__simple_pad_and_busses_0 sky130_fd_io__simple_pad_and_busses_0/VSUBS
++ VSWITCH VDDA VSSIO VCCHIB VDDIO P_CORE VSSIO_Q AMUXBUS_A P_PAD AMUXBUS_B VSSA VDDIO_Q
++ VSSD sky130_fd_io__simple_pad_and_busses_0/VSUBS VCCD sky130_fd_io__simple_pad_and_busses
+.ends
+
diff --git a/sky130/custom/sky130_fd_io/verilog/sky130_ef_io__analog_pad.v b/sky130/custom/sky130_fd_io/verilog/sky130_ef_io__analog_pad.v
new file mode 100644
index 0000000..f172cd5
--- /dev/null
+++ b/sky130/custom/sky130_fd_io/verilog/sky130_ef_io__analog_pad.v
@@ -0,0 +1,210 @@
+/**
+ * Copyright 2020 The SkyWater PDK Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+`ifndef SKY130_EF_IO__ANALOG_PAD_V
+`define SKY130_EF_IO__ANALOG_PAD_V
+
+/**
+ * analog_pad: Analog PAD.
+ *
+ * Verilog top module.
+ *
+ * WARNING: This file is autogenerated, do not modify directly!
+ */
+
+`timescale 1ns / 1ps
+`default_nettype none
+
+`ifdef USE_POWER_PINS
+
+`ifdef FUNCTIONAL
+
+/*
+ * Copyright 2020 The SkyWater PDK Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+*/
+
+module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE
+                                 ,VCCD, VCCHIB, VDDA, VDDIO, VDDIO_Q, VSSA, VSSD, VSSIO, VSSIO_Q, VSWITCH
+                                );
+inout AMUXBUS_A;
+inout AMUXBUS_B;
+inout P_PAD;
+inout P_CORE;
+inout VCCD;
+inout VCCHIB;
+inout VDDA;
+inout VDDIO;
+inout VDDIO_Q;
+inout VSSA;
+inout VSSD;
+inout VSSIO;
+inout VSSIO_Q;
+inout VSWITCH;
+wire pwr_good = VDDIO===1 && VSSIO===0;
+wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx;
+tranif1 x_pad (P_PAD, P_CORE, pad_sw);
+endmodule
+
+`else  // FUNCTIONAL
+
+/*
+ * Copyright 2020 The SkyWater PDK Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+*/
+
+module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE
+                                 ,VCCD, VCCHIB, VDDA, VDDIO, VDDIO_Q, VSSA, VSSD, VSSIO, VSSIO_Q, VSWITCH
+                                );
+inout AMUXBUS_A;
+inout AMUXBUS_B;
+inout P_PAD;
+inout P_CORE;
+inout VCCD;
+inout VCCHIB;
+inout VDDA;
+inout VDDIO;
+inout VDDIO_Q;
+inout VSSA;
+inout VSSD;
+inout VSSIO;
+inout VSSIO_Q;
+inout VSWITCH;
+wire pwr_good = VDDIO===1 && VSSIO===0;
+wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx;
+tranif1 x_pad (P_PAD, P_CORE, pad_sw);
+endmodule
+
+`endif // FUNCTIONAL
+
+`else  // USE_POWER_PINS
+
+`ifdef FUNCTIONAL
+
+/*
+ * Copyright 2020 The SkyWater PDK Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+*/
+
+module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE
+                                );
+inout AMUXBUS_A;
+inout AMUXBUS_B;
+inout P_PAD;
+inout P_CORE;
+supply1 VCCD;
+supply1 VCCHIB;
+supply1 VDDA;
+supply1 VDDIO;
+supply1 VDDIO_Q;
+supply0 VSSA;
+supply0 VSSD;
+supply0 VSSIO;
+supply0 VSSIO_Q;
+supply1 VSWITCH;
+wire pwr_good = 1;
+wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx;
+tranif1 x_pad (P_PAD, P_CORE, pad_sw);
+endmodule
+
+`else  // FUNCTIONAL
+
+/*
+ * Copyright 2020 The SkyWater PDK Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+*/
+
+module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE
+                                );
+inout AMUXBUS_A;
+inout AMUXBUS_B;
+inout P_PAD;
+inout P_CORE;
+supply1 VCCD;
+supply1 VCCHIB;
+supply1 VDDA;
+supply1 VDDIO;
+supply1 VDDIO_Q;
+supply0 VSSA;
+supply0 VSSD;
+supply0 VSSIO;
+supply0 VSSIO_Q;
+supply1 VSWITCH;
+wire pwr_good = 1;
+wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx;
+tranif1 x_pad (P_PAD, P_CORE, pad_sw);
+endmodule
+
+`endif // FUNCTIONAL
+
+`endif // USE_POWER_PINS
+
+`default_nettype wire
+`endif  // SKY130_EF_IO__ANALOG_PAD_V