Corrected the gf180mcu tech file for magic to add a spacing DRC
check between source/drain high-voltage (dual gate) diffusion and
low voltage tap, which is an allowed combination.  Added the
alphanumeric character layouts from the Caravel-gf180mcu project
to the "essential" build of gf180mcu, having collected them into
a separate repository gf180mcu_ocd_alpha.
diff --git a/VERSION b/VERSION
index e92bb06..0e3e0dd 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.547
+1.0.548
diff --git a/gf180mcu/Makefile.in b/gf180mcu/Makefile.in
index b4b8522..a9121a6 100644
--- a/gf180mcu/Makefile.in
+++ b/gf180mcu/Makefile.in
@@ -153,6 +153,7 @@
 GF180MCU_OSU_SC_PATH = @GF180MCU_OSU_SC_PATH@
 GF180MCU_AS_SC_PATH = @GF180MCU_AS_SC_PATH@
 GF180MCU_OCD_IO_PATH = @GF180MCU_OCD_IO_PATH@
+GF180MCU_OCD_ALPHA_PATH = @GF180MCU_OCD_ALPHA_PATH@
 
 USE_REFERENCE = @USE_REFERENCE@
 
@@ -183,6 +184,7 @@
 PDK_LIB_OSU_SC =   ${OSU_URL}/globalfoundries-pdk-libs-gf180mcu_osu_sc
 PDK_LIB_AS_SC =    ${AVALON_URL}/gf180mcu_as_sc_mcu7t3v3
 PDK_LIB_OCD_IO =   ${OCD_URL}/gf180mcu_ocd_io
+PDK_LIB_OCD_ALPHA =${OCD_URL}/gf180mcu_ocd_alpha
 
 # NOTE:  Install destination is the git repository of the technology platform.
 # Once updated in git, the git project can be distributed to all hosts.
@@ -489,7 +491,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 ocd-io-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 ocd-alpha-repo
 
 pr-repo:
 	if test "x${REFERENCE_JSON}" != "x"; then \
@@ -608,6 +610,20 @@
 		fi ; \
 	fi
 
+ocd-alpha-repo:
+	if test "x${REFERENCE_JSON}" != "x"; then \
+		OCD_ALPHA_COMMIT=`cat ${REFERENCE_JSON} | grep gf180mcu_ocd_alpha | grep -v COMMIT | cut -d'"' -f4` ; \
+	fi ; \
+	if test "x${GF180MCU_OCD_ALPHA_PATH}" != "x" ; then \
+		if test -d "${GF180MCU_OCD_ALPHA_PATH}" ; then \
+			echo "Using existing installation of Open Circuit Design alphanumeric library from ${GF180MCU_OCD_ALPHA_PATH}" ; \
+		else \
+			echo "Downloading Open Circuit Design alphanumeric library from ${GF180MCU_OCD_APHA_PATH}" ; \
+			../scripts/download.sh ${PDK_LIB_OCD_ALPHA} ${GF180MCU_OCD_ALPHA_PATH} $${OCD_ALPHA_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-ocd-io-repo
 
@@ -665,7 +681,12 @@
 		../scripts/update.sh ${GF180MCU_OCD_IO_PATH} ; \
 	fi
 
-all-%: prerequisites
+update-ocd-apha-repo:
+	if test "x${GF180MCU_OCD_ALPHA_PATH}" != "x" ; then \
+		echo "Updating GF180MCU Open Circuit Design alphanumeric library from ${PDK_LIB_OCD_ALPHA}" ; \
+		../scripts/update.sh ${GF180MCU_OCD_ALPHA_PATH} ; \
+	fi
+
 all-%: prerequisites
 	echo "Starting gf180mcu$* PDK staging on "`date` > ${GF180MCU$*}_make.log
 	${MAKE} general-$*
@@ -838,13 +859,13 @@
 		${OPENLANE_STAGING_$*}/rules.openrcx.gf180mcu$*.max ;\
 	fi
 
-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-A: primitive-build-A digital-7t5v0-build-A digital-9t5v0-build-A io-build-A ocd-io-build-A ocd-alpha-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 ocd-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 ocd-alpha-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 ocd-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 ocd-alpha-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 ocd-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 ocd-alpha-build-D sram-build-D digital-osu-build-D digital-avalon-build-D
 
 primitive-build-%:
 	if test "x${GF180MCU_PR_PATH}" != "x" ; then \
@@ -870,6 +891,14 @@
 		fi ;\
 	fi
 
+ocd-alpha-build-%:
+	if test "x${GF180MCU_OCD_ALPHA_PATH}" != "x" ; then \
+		if test -d ${GF180MCU_OCD_ALPHA_PATH} ; then \
+			echo "Building alphanumeric layout libraries" ;\
+			make ocd-alpha-$* ;\
+		fi ;\
+	fi
+
 digital-9t5v0-build-%:
 	if test "x${GF180MCU_SC_9T5V0_PATH}" != "x" ; then \
 		if test -d ${GF180MCU_SC_9T5V0_PATH} ; then \
@@ -1355,6 +1384,28 @@
 		-verilog cells/*/*.v compile-only \
 		-library general gf180mcu_ocd_io 2>&1 | tee -a ${GF180MCU$*}_make.log
 
+ocd-alpha-%:
+	# Install alphanumeric libraries.
+	${STAGE} -source ${GF180MCU_OCD_ALPHA_PATH} \
+		-target ${STAGING_PATH}/${GF180MCU$*} \
+		-mag small/magic/*.mag \
+		-library general gf180mcu_ocd_alpha_small \
+		2>&1 | tee -a ${GF180MCU$*}_make.log
+	${STAGE} -source ${GF180MCU_OCD_ALPHA_PATH} \
+		-target ${STAGING_PATH}/${GF180MCU$*} \
+		-mag large/magic/*.mag \
+		-library general gf180mcu_ocd_alpha_large \
+		2>&1 | tee -a ${GF180MCU$*}_make.log
+	${STAGE} -source ${GF180MCU_OCD_ALPHA_PATH} \
+		-target ${STAGING_PATH}/${GF180MCU$*} \
+		-mag misc/magic/*.mag \
+		-library general gf180mcu_ocd_alpha_misc \
+		2>&1 | tee -a ${GF180MCU$*}_make.log
+	# Install text2mag.py script for alphanumeric library
+	mkdir -p ${STAGING_PATH}/${GF180MCU$*}/libs.ref/gf180mcu_ocd_alpha_small/scripts
+	cp ${GF180MCU_OCD_ALPHA_PATH}/small/scripts/text2mag.py \
+		${STAGING_PATH}/${GF180MCU$*}/libs.ref/gf180mcu_ocd_alpha_small/scripts
+
 sram-%:
 	# Install SRAM macros from vendor files
 	${STAGE} -source ${GF180MCU_SRAM_PATH} \
diff --git a/gf180mcu/gf180mcu.json b/gf180mcu/gf180mcu.json
index 7c05343..e88ca3b 100644
--- a/gf180mcu/gf180mcu.json
+++ b/gf180mcu/gf180mcu.json
@@ -68,10 +68,10 @@
         "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"
+        "gf180mcu_ocd_io": "OCD_IO_COMMIT"
     },
     "primitive": {
         "gf180mcu_fd_pr": "FD_PR_COMMIT"
@@ -82,6 +82,9 @@
     "memory": {
         "gf180mcu_fd_ip_sram": "FD_IP_SRAM_COMMIT"
     },
+    "other": {
+	"gf180mcu_ocd_alpha": "OCD_ALPHA_COMMIT"
+    },
     "build": {
         "open_pdks": "OPEN_PDKS_VERSION",
         "magic": "MAGIC_VERSION"
@@ -102,6 +105,7 @@
         "gf180mcu_fd_ip_sram": "9c411928870ce15226228fa52ddb6ecc0ea4ffbe",
         "gf180mcu_as_sc_mcu7t3v3": "450f6039f6d7f556b47f74b456c010f424d9cfcd",
         "gf180mcu_ocd_io": "3c84d8ffd3fc9937a268ce44a6bea93e49bafee8",
+        "gf180mcu_ocd_alpha": "unknown",
         "gf180mcu_osu_sc_gf12t3v3": "aa2fa8cd1bcb8fe98669acd05c0b0c65879268b3",
         "gf180mcu_osu_sc_gf9t3v3": "aa2fa8cd1bcb8fe98669acd05c0b0c65879268b3"
     }
diff --git a/gf180mcu/magic/gf180mcu.tech b/gf180mcu/magic/gf180mcu.tech
index 2dd2335..4e18cb1 100644
--- a/gf180mcu/magic/gf180mcu.tech
+++ b/gf180mcu/magic/gf180mcu.tech
@@ -2954,6 +2954,11 @@
 	"Diffusion spacing < %d (DF.3a)"
  spacing alldiffmv,mvnvar,mvpvar alldiffmv,mvnvar,mvpvar 360 touching_ok \
 	"Diffusion spacing < %d (DF.3a)"
+ # Low voltage tap cannot abut high voltage source/drain
+ spacing *mvpdiff,mvpvar *nsd 360 touching_illegal \
+	"Diffusion spacing to tap < %d (DF.3a)"
+ spacing *mvndiff,mvnvar *psd 360 touching_illegal \
+	 "Diffusion spacing to tap < %d (DF.3a)"
 
  spacing *ndiff,*ndiode,nfet,nnfet,ncap allnwell 430 touching_illegal \
 	"N-Diffusion spacing to N-well < %d (DF.8)"
diff --git a/scripts/configure b/scripts/configure
index 380587a..04062d2 100755
--- a/scripts/configure
+++ b/scripts/configure
@@ -618,6 +618,7 @@
 GF180MCU_OCD_IO_PATH
 GF180MCU_AS_SC_PATH
 GF180MCU_OSU_SC_PATH
+GF180MCU_OCD_ALPHA_PATH
 GF180MCU_FD_IP_SRAM_PATH
 GF180MCU_FD_SC_MCU9T5V0_PATH
 GF180MCU_FD_SC_MCU7T5V0_PATH
@@ -751,6 +752,7 @@
 enable_sc_7t5v0_gf180mcu
 enable_sc_9t5v0_gf180mcu
 enable_sram_gf180mcu
+enable_alpha_gf180mcu
 enable_osu_sc_gf180mcu
 enable_avalon_sc_gf180mcu
 enable_ocd_io_gf180mcu
@@ -1490,6 +1492,9 @@
   --enable-sram-gf180mcu[=path]
                           Install gf180mcu_fd_ip_sram. If path is omitted, the repository
                           will be downloaded. [default=enabled]
+  --enable-alpha-gf180mcu[=path]
+                          Install gf180mcu_ocd_alpha. If path is omitted, the repository
+                          will be downloaded. [default=enabled]
   --enable-osu-sc-gf180mcu[=path]
                           Install gf180mcu_osu_sc. If path is omitted, the repository
                           will be downloaded. [default=enabled]
@@ -3953,6 +3958,50 @@
 
 
 
+
+
+
+
+
+    # echo target targetvar flag location
+
+    GF180MCU_OCD_ALPHA_PATH=""
+
+    # Check whether --enable-alpha-gf180mcu was given.
+if test ${enable_alpha_gf180mcu+y}
+then :
+  enableval=$enable_alpha_gf180mcu;
+            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&5
+printf "%s\n" "$as_me: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&6;}
+        	export GF180MCU_OCD_ALPHA_PATH=../sources/gf180mcu_ocd_alpha
+            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_ocd_alpha'" >&5
+printf "%s\n" "$as_me: Disabling package 'gf180mcu_ocd_alpha'" >&6;}
+    		export GF180MCU_OCD_ALPHA_PATH=""
+            else
+                GF180MCU_OCD_ALPHA_PATH=$enableval
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_ocd_alpha' at $GF180MCU_OCD_ALPHA_PATH" >&5
+printf "%s\n" "$as_me: Enabling package 'gf180mcu_ocd_alpha' at $GF180MCU_OCD_ALPHA_PATH" >&6;}
+            fi
+            GF180MCU_OCD_ALPHA_PATH=`realpath $GF180MCU_OCD_ALPHA_PATH`
+
+else case e in #(
+  e)
+            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&5
+printf "%s\n" "$as_me: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&6;}
+	    GF180MCU_OCD_ALPHA_PATH=../sources/gf180mcu_ocd_alpha
+
+     ;;
+esac
+fi
+
+
+
+
+
+
+
 # GlobalFoundries gf180mcu optional
 
 
diff --git a/scripts/configure.ac b/scripts/configure.ac
index 409a9f4..86bc355 100755
--- a/scripts/configure.ac
+++ b/scripts/configure.ac
@@ -259,6 +259,7 @@
 M4_GEN_INSTALLATION(gf180mcu_fd_sc_mcu7t5v0, sc-7t5v0-gf180mcu, ../sources)
 M4_GEN_INSTALLATION(gf180mcu_fd_sc_mcu9t5v0, sc-9t5v0-gf180mcu, ../sources)
 M4_GEN_INSTALLATION(gf180mcu_fd_ip_sram, sram-gf180mcu, ../sources)
+M4_GEN_INSTALLATION(gf180mcu_ocd_alpha, alpha-gf180mcu, ../sources)
 
 # GlobalFoundries gf180mcu optional
 M4_GEN_INSTALLATION(gf180mcu_osu_sc, osu-sc-gf180mcu, ../sources)