Updated the configure script and Makefiles for gf180mcu to
include the gf180mcu_ocd_io dual-voltage I/O library.
diff --git a/VERSION b/VERSION
index 5d166d7..e92bb06 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.546
+1.0.547
diff --git a/gf180mcu/Makefile.in b/gf180mcu/Makefile.in
index ff11fe7..b4b8522 100644
--- a/gf180mcu/Makefile.in
+++ b/gf180mcu/Makefile.in
@@ -152,6 +152,7 @@
 GF180MCU_SRAM_PATH = @GF180MCU_FD_IP_SRAM_PATH@
 GF180MCU_OSU_SC_PATH = @GF180MCU_OSU_SC_PATH@
 GF180MCU_AS_SC_PATH = @GF180MCU_AS_SC_PATH@
+GF180MCU_OCD_IO_PATH = @GF180MCU_OCD_IO_PATH@
 
 USE_REFERENCE = @USE_REFERENCE@
 
@@ -166,6 +167,7 @@
 # Path to GF180MCU library sources
 PDK_URL = https://github.com/google
 OSU_URL = https://github.com/stineje
+OCD_URL = https://github.com/RTimothyEdwards
 AVALON_URL = https://github.com/AvalonSemiconductors
 FOSSI_URL = https://github.com/fossi-foundation
 
@@ -179,7 +181,8 @@
 PDK_LIB_SC_9T5V0 = ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu9t5v0
 PDK_LIB_SRAM =     ${PDK_URL}/globalfoundries-pdk-ip-gf180mcu_fd_ip_sram
 PDK_LIB_OSU_SC =   ${OSU_URL}/globalfoundries-pdk-libs-gf180mcu_osu_sc
-PDK_LIB_AS_SC = ${AVALON_URL}/gf180mcu_as_sc_mcu7t3v3
+PDK_LIB_AS_SC =    ${AVALON_URL}/gf180mcu_as_sc_mcu7t3v3
+PDK_LIB_OCD_IO =   ${OCD_URL}/gf180mcu_ocd_io
 
 # NOTE:  Install destination is the git repository of the technology platform.
 # Once updated in git, the git project can be distributed to all hosts.
@@ -268,6 +271,12 @@
 else
     COMMIT_DEFS += -DAS_SC_MCU7T3V3_COMMIT=$(shell cd ${GF180MCU_AS_SC_PATH} ; git rev-parse HEAD)
 endif
+ifeq (${GF180MCU_OCD_IO_PATH},)
+    COMMIT_DEFS += -DOCD_IO_COMMIT="unknown"
+else
+    COMMIT_DEFS += -DOCD_IO_COMMIT=$(shell cd ${GF180MCU_OCD_IO_PATH} ; git rev-parse HEAD)
+endif
+
 
 COMMIT_DEFS += -DMAGIC_COMMIT=$(shell magic -dnull -noconsole --commit)
 COMMIT_DEFS += -DMAGIC_VERSION=$(shell magic -dnull -noconsole --version)
@@ -480,7 +489,7 @@
 	../common/save_commit_refs.py ${COMMIT_DEFS} ${TECH}.json
 
 # Handle prerequisites
-prerequisites: pr-repo pv-repo io-repo sc-7t-repo sc-9t-repo sram-repo osu-sc-repo avalon-sc-repo
+prerequisites: pr-repo pv-repo io-repo sc-7t-repo sc-9t-repo sram-repo osu-sc-repo avalon-sc-repo ocd-io-repo
 
 pr-repo:
 	if test "x${REFERENCE_JSON}" != "x"; then \
@@ -586,8 +595,21 @@
 		fi ; \
 	fi
 
+ocd-io-repo:
+	if test "x${REFERENCE_JSON}" != "x"; then \
+		OCD_IO_COMMIT=`cat ${REFERENCE_JSON} | grep gf180mcu_ocd_io | grep -v COMMIT | cut -d'"' -f4` ; \
+	fi ; \
+	if test "x${GF180MCU_OCD_IO_PATH}" != "x" ; then \
+		if test -d "${GF180MCU_OCD_IO_PATH}" ; then \
+			echo "Using existing installation of Open Circuit Design dual-voltage I/O library from ${GF180MCU_OCD_IO_PATH}" ; \
+		else \
+			echo "Downloading Open Circuit Design dual-voltage I/O library from ${GF180MCU_OCD_IO_PATH}" ; \
+			../scripts/download.sh ${PDK_LIB_OCD_IO} ${GF180MCU_OCD_IO_PATH} $${OCD_IO_COMMIT} ; \
+		fi ; \
+	fi
+
 # Update prerequisites
-update: update-pr-repo update-pv-repo update-io-repo update-sc-7t-repo update-sc-9t-repo update-sram-repo update-osu-sc-repo update-avalon-sc-repo
+update: update-pr-repo update-pv-repo update-io-repo update-sc-7t-repo update-sc-9t-repo update-sram-repo update-osu-sc-repo update-avalon-sc-repo update-ocd-io-repo
 
 update-pr-repo:
 	if test "x${GF180MCU_PR_PATH}" != "x" ; then \
@@ -637,6 +659,13 @@
 		../scripts/update.sh ${GF180MCU_AS_SC_PATH} ; \
 	fi
 
+update-ocd-io-repo:
+	if test "x${GF180MCU_OCD_IO_PATH}" != "x" ; then \
+		echo "Updating GF180MCU Open Circuit Design dual-voltage I/O library from ${PDK_LIB_OCD_IO}" ; \
+		../scripts/update.sh ${GF180MCU_OCD_IO_PATH} ; \
+	fi
+
+all-%: prerequisites
 all-%: prerequisites
 	echo "Starting gf180mcu$* PDK staging on "`date` > ${GF180MCU$*}_make.log
 	${MAKE} general-$*
@@ -809,13 +838,13 @@
 		${OPENLANE_STAGING_$*}/rules.openrcx.gf180mcu$*.max ;\
 	fi
 
-vendor-A: primitive-build-A digital-7t5v0-build-A digital-9t5v0-build-A io-build-A sram-build-A digital-osu-build-A digital-avalon-build-A
+vendor-A: primitive-build-A digital-7t5v0-build-A digital-9t5v0-build-A io-build-A ocd-io-build-A sram-build-A digital-osu-build-A digital-avalon-build-A
 
-vendor-B: primitive-build-B digital-7t5v0-build-B digital-9t5v0-build-B io-build-B sram-build-B digital-osu-build-B digital-avalon-build-B
+vendor-B: primitive-build-B digital-7t5v0-build-B digital-9t5v0-build-B io-build-B ocd-io-build-B sram-build-B digital-osu-build-B digital-avalon-build-B
 
-vendor-C: primitive-build-C digital-7t5v0-build-C digital-9t5v0-build-C io-build-C sram-build-C digital-osu-build-C digital-avalon-build-C
+vendor-C: primitive-build-C digital-7t5v0-build-C digital-9t5v0-build-C io-build-C ocd-io-build-C sram-build-C digital-osu-build-C digital-avalon-build-C
 
-vendor-D: primitive-build-D digital-7t5v0-build-D digital-9t5v0-build-D io-build-D sram-build-D digital-osu-build-D digital-avalon-build-D
+vendor-D: primitive-build-D digital-7t5v0-build-D digital-9t5v0-build-D io-build-D ocd-io-build-D sram-build-D digital-osu-build-D digital-avalon-build-D
 
 primitive-build-%:
 	if test "x${GF180MCU_PR_PATH}" != "x" ; then \
@@ -833,6 +862,14 @@
 		fi ;\
 	fi
 
+ocd-io-build-%:
+	if test "x${GF180MCU_OCD_IO_PATH}" != "x" ; then \
+		if test -d ${GF180MCU_OCD_IO_PATH} ; then \
+			echo "Building dual-voltage padframe I/O libraries" ;\
+			make ocd-io-$* ;\
+		fi ;\
+	fi
+
 digital-9t5v0-build-%:
 	if test "x${GF180MCU_SC_9T5V0_PATH}" != "x" ; then \
 		if test -d ${GF180MCU_SC_9T5V0_PATH} ; then \
@@ -1269,6 +1306,55 @@
 		-verilog cells/*/*.v compile-only \
 		-library general gf180mcu_fd_io 2>&1 | tee -a ${GF180MCU$*}_make.log
 
+ocd-io-%:
+	# Install the Open Circuit Design dual-voltage I/O library
+	${STAGE} -source ${GF180MCU_OCD_IO_PATH} \
+		-target ${STAGING_PATH}/${GF180MCU$*} \
+		-lib cells/*/*_ff_125C_2v75.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ff_125C_2v75.lib \
+			rename=gf180mcu_ocd_io__ff_125C_2v75 \
+		-lib cells/*/*_ff_n40C_2v75.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ff_n40C_2v75.lib \
+			rename=gf180mcu_ocd_io__ff_n40C_2v75 \
+		-lib cells/*/*_ff_125C_3v63.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ff_125C_3v63.lib \
+			rename=gf180mcu_ocd_io__ff_125C_3v63 \
+		-lib cells/*/*_ff_n40C_3v63.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ff_n40C_3v63.lib \
+			rename=gf180mcu_ocd_io__ff_n40C_3v63 \
+		-lib cells/*/*_ff_125C_5v50.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ff_125C_5v50.lib \
+			rename=gf180mcu_ocd_io__ff_125C_5v50 \
+		-lib cells/*/*_ff_n40C_5v50.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ff_n40C_5v50.lib \
+			rename=gf180mcu_ocd_io__ff_n40C_5v50 \
+		-lib cells/*/*_ss_125C_2v25.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ss_125C_2v25.lib \
+			rename=gf180mcu_ocd_io__ss_125C_2v25 \
+		-lib cells/*/*_ss_125C_2v97.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ss_125C_2v97.lib \
+			rename=gf180mcu_ocd_io__ss_125C_2v97 \
+		-lib cells/*/*_ss_125C_4v50.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__ss_125C_4v50.lib \
+			rename=gf180mcu_ocd_io__ss_125C_4v50 \
+		-lib cells/*/*_tt_025C_2v50.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__tt_025C_2v50.lib \
+			rename=gf180mcu_ocd_io__tt_025C_2v50 \
+		-lib cells/*/*_tt_025C_3v30.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__tt_025C_3v30.lib \
+			rename=gf180mcu_ocd_io__tt_025C_3v30 \
+		-lib cells/*/*_tt_025C_5v00.lib compile-only \
+                        header=liberty/gf180mcu_ocd_io__tt_025C_5v00.lib \
+			rename=gf180mcu_ocd_io__tt_025C_5v00 \
+		-spice netlist/layout/*.spice compile-only  \
+		-gds cells/*/*_${$*_STACK}.gds.gz compile-only \
+			options=custom/scripts/gds_import_io.tcl \
+		-lef cells/*/*_${$*_STACK}.lef compile-only \
+		-xschem cells/*/*.sym \
+			filter=custom/scripts/make_primitive.py \
+		-verilog cells/*/*.v compile-only \
+		-library general gf180mcu_ocd_io 2>&1 | tee -a ${GF180MCU$*}_make.log
+
 sram-%:
 	# Install SRAM macros from vendor files
 	${STAGE} -source ${GF180MCU_SRAM_PATH} \
diff --git a/gf180mcu/gf180mcu.json b/gf180mcu/gf180mcu.json
index 666748c..7c05343 100644
--- a/gf180mcu/gf180mcu.json
+++ b/gf180mcu/gf180mcu.json
@@ -68,6 +68,7 @@
         "gf180mcu_osu_sc_gf12t3v3": "OSU_SC_COMMIT",
         "gf180mcu_osu_sc_gf9t3v3": "OSU_SC_COMMIT"
         "gf180mcu_as_sc_mcu7t3v3": "AS_SC_MCU7T3V3_COMMIT"
+        "gf180mcu_ocd_io": "OCD_IO_COMMIT"
     },
     "iocells": {
         "gf180mcu_fd_io": "FD_IO_COMMIT"
@@ -90,16 +91,17 @@
         "magic": "MAGIC_COMMIT"
     },
     "reference": {
-        "open_pdks": "8283f1a6a695a5b41f6aea468385ced78c7a934e",
+        "open_pdks": "b4013a19712005969787a16f5ab3a502303f7a14",
         "magic": "5de118b7626cf74084078d888f3e95af1f2e689f",
         "gf180mcu_pdk": "a897aa30369d3bcec87d9d50ce9b01f320f854ef",
-        "gf180mcu_fd_pr": "b6d94d3a4f0aa15ee6971194385ab6cd82bd54e1",
+        "gf180mcu_fd_pr": "13e4b0e81d1a3c993c603a286b939afe70c52cc9",
         "gf180mcu_fd_pv": "10ee7fc75437edafa56f29f2b1872e95c9f22b71",
         "gf180mcu_fd_io": "1d291daa9368bd404c71ff768b3f2e073b62f298",
         "gf180mcu_fd_sc_mcu7t5v0": "8743b6f9641eb8707179c4e51703380d4dc90f16",
         "gf180mcu_fd_sc_mcu9t5v0": "e0e80f5a6522f10b82165d3aeab9b8ee28e89849",
         "gf180mcu_fd_ip_sram": "9c411928870ce15226228fa52ddb6ecc0ea4ffbe",
         "gf180mcu_as_sc_mcu7t3v3": "450f6039f6d7f556b47f74b456c010f424d9cfcd",
+        "gf180mcu_ocd_io": "3c84d8ffd3fc9937a268ce44a6bea93e49bafee8",
         "gf180mcu_osu_sc_gf12t3v3": "aa2fa8cd1bcb8fe98669acd05c0b0c65879268b3",
         "gf180mcu_osu_sc_gf9t3v3": "aa2fa8cd1bcb8fe98669acd05c0b0c65879268b3"
     }
diff --git a/gf180mcu/magic/gf180mcu.magicrc b/gf180mcu/magic/gf180mcu.magicrc
index 4cda6f7..0960e6b 100644
--- a/gf180mcu/magic/gf180mcu.magicrc
+++ b/gf180mcu/magic/gf180mcu.magicrc
@@ -58,4 +58,5 @@
 addpath ${PDK_ROOT}/TECHNAME/libs.ref/gf180mcu_fd_io/${MAGTYPE}
 addpath ${PDK_ROOT}/TECHNAME/libs.ref/gf180mcu_fd_ip_sram/${MAGTYPE}
 addpath ${PDK_ROOT}/TECHNAME/libs.ref/gf180mcu_as_sc_mcu7t3v3/${MAGTYPE}
+addpath ${PDK_ROOT}/TECHNAME/libs.ref/gf180mcu_ocd_io/${MAGTYPE}
 
diff --git a/scripts/configure b/scripts/configure
index d086bf9..380587a 100755
--- a/scripts/configure
+++ b/scripts/configure
@@ -615,6 +615,7 @@
 ENABLED_TECHS
 EF_STYLE
 USE_REFERENCE
+GF180MCU_OCD_IO_PATH
 GF180MCU_AS_SC_PATH
 GF180MCU_OSU_SC_PATH
 GF180MCU_FD_IP_SRAM_PATH
@@ -752,6 +753,7 @@
 enable_sram_gf180mcu
 enable_osu_sc_gf180mcu
 enable_avalon_sc_gf180mcu
+enable_ocd_io_gf180mcu
 with_reference
 with_ef_style
 '
@@ -1494,6 +1496,9 @@
   --enable-avalon-sc-gf180mcu[=path]
                           Install gf180mcu_as_sc. If path is omitted, the repository
                           will be downloaded. [default=enabled]
+  --enable-ocd-io-gf180mcu[=path]
+                          Install gf180mcu_ocd_io. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -4040,6 +4045,50 @@
 
 
 
+
+
+
+    # echo target targetvar flag location
+
+    GF180MCU_OCD_IO_PATH=""
+
+    # Check whether --enable-ocd-io-gf180mcu was given.
+if test ${enable_ocd_io_gf180mcu+y}
+then :
+  enableval=$enable_ocd_io_gf180mcu;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&5
+printf "%s\n" "$as_me: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&6;}
+        	export GF180MCU_OCD_IO_PATH=../sources/gf180mcu_ocd_io
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_ocd_io'" >&5
+printf "%s\n" "$as_me: Disabling package 'gf180mcu_ocd_io'" >&6;}
+    		export GF180MCU_OCD_IO_PATH=""
+            else
+                GF180MCU_OCD_IO_PATH=$enableval
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_ocd_io' at $GF180MCU_OCD_IO_PATH" >&5
+printf "%s\n" "$as_me: Enabling package 'gf180mcu_ocd_io' at $GF180MCU_OCD_IO_PATH" >&6;}
+            fi
+            GF180MCU_OCD_IO_PATH=`realpath $GF180MCU_OCD_IO_PATH`
+
+else case e in #(
+  e)
+            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&5
+printf "%s\n" "$as_me: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&6;}
+	    GF180MCU_OCD_IO_PATH=../sources/gf180mcu_ocd_io
+
+     ;;
+esac
+fi
+
+
+
+
+
+
+
+
+
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem xcircuit" >&5
 printf "%s\n" "$as_me: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem xcircuit" >&6;}
 
diff --git a/scripts/configure.ac b/scripts/configure.ac
index c8fe516..409a9f4 100755
--- a/scripts/configure.ac
+++ b/scripts/configure.ac
@@ -263,6 +263,7 @@
 # GlobalFoundries gf180mcu optional
 M4_GEN_INSTALLATION(gf180mcu_osu_sc, osu-sc-gf180mcu, ../sources)
 M4_GEN_INSTALLATION(gf180mcu_as_sc, avalon-sc-gf180mcu, ../sources)
+M4_GEN_INSTALLATION(gf180mcu_ocd_io, ocd-io-gf180mcu, ../sources)
 
 AC_DEFUN([M4_GEN_WITH_TOOLS], [
     m4_foreach_w(tool, $1, [
diff --git a/sky130/sky130.json b/sky130/sky130.json
index 8e720ba..b48e117 100644
--- a/sky130/sky130.json
+++ b/sky130/sky130.json
@@ -94,7 +94,7 @@
         "magic": "MAGIC_COMMIT"
     },
     "reference": {
-        "open_pdks": "8283f1a6a695a5b41f6aea468385ced78c7a934e",
+        "open_pdks": "b4013a19712005969787a16f5ab3a502303f7a14",
         "magic": "5de118b7626cf74084078d888f3e95af1f2e689f",
         "sky130_fd_pr": "1232782c1b9fab3aacda74d67ce7c92bf7da8105",
         "sky130_fd_io": "e60737bf624df95c211fe99c007ddec78e3e081d",
@@ -105,12 +105,12 @@
         "sky130_fd_sc_hd": "aed07ad6d4eff1861cb9d10f102d247231e3645c",
         "sky130_fd_sc_hdll": "f67521458137f30a01ec76aad3028e77581446ae",
         "sky130_fd_sc_hvl": "e5413e01fa071029ba84d9faa98d9acd80e75a38",
-        "sky130_osu_sc_t12": "unknown",
-        "sky130_osu_sc_t15": "unknown",
-        "sky130_osu_sc_t18": "unknown",
-        "sky130_sram_macros": "unknown",
+        "sky130_osu_sc_t12": "ac90ef0c622a9377a16b5218d9da3ac4169eeaaf",
+        "sky130_osu_sc_t15": "95d1c19abb47e1b2945847acb4e817b1b8417c43",
+        "sky130_osu_sc_t18": "aa2b509f3c8f32ea94fdb55ac9768754667c1658",
+        "sky130_sram_macros": "c1e25c953f9502aed940810ce4b00bda000c69bb",
         "sky130_fd_bd_sram": "be33adbcf188fdeab5c061699847d9d440f7a084",
-        "sky130_fd_pr_reram": "unknown",
+        "sky130_fd_pr_reram": "d6d2a3c6960aac0a0b12fc21221c31777bbf284d",
         "sky130_ml_xx_hd": "6eb3b0718552b034f1bf1870285ff135e3fb2dcb",
         "xschem_sky130": "7d19acb9fc9c54f6de86345e454dc59e57418a26",
         "klayout_sky130": "9861f40ff389c86fbe082122ee868a065cd4cfd4",