Added script to fix the issue with incorrect device names for the
parasitic diode and shorting resistor in the skywater-pdk digital
standard cell repositories.
diff --git a/VERSION b/VERSION
index ad18496..15bcce9 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.160
+1.0.161
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 9b821e2..3aecb93 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -827,6 +827,7 @@
 		-techlef %l/latest/tech/*.tlef \
 		-spice %l/latest/cells/*/*.spice compile-only \
 			sort=custom/scripts/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
 		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
 			sort=custom/scripts/sort_pdkfiles.py \
 		-lef %l/latest/cells/*/*.magic.lef compile-only \
diff --git a/sky130/custom/scripts/fix_device_models.py b/sky130/custom/scripts/fix_device_models.py
new file mode 100755
index 0000000..90a8434
--- /dev/null
+++ b/sky130/custom/scripts/fix_device_models.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+#
+# fix_device_models ---
+#
+# This script fixes the issue where devices in the digital libraries did
+# not get the proper name conversion;  specifically, the "conb" cell has
+# resistor type "short" which should be "sky130_fd_pr__res_generic_po",
+# and the pw2nd device model name is missing the suffix "_05v5".
+#
+# This script is a filter to be run by setting the name of this script as
+# the value to "filter=" for the model install in the sky130 Makefile.
+
+import re
+import os
+import sys
+
+def filter(inname, outname):
+
+    # Read input
+    try:
+        with open(inname, 'r') as inFile:
+            stext = inFile.read()
+            slines = stext.splitlines()
+    except:
+        print('fix_device_models.py: failed to open ' + fnmIn + ' for reading.', file=sys.stderr)
+        return 1
+
+    # Process input with regexp
+
+    fixedlines = []
+    modified = False
+
+    dioderex = re.compile('.*[ \t]+sky130_fd_pr__diode_pw2nd[ \t]+')
+    shortrex = re.compile('.*[ \t]+short[ \t]+')
+
+    for line in slines:
+
+        # Check for incorrect diode reference
+        dmatch = dioderex.match(line)
+        # Check for incorrect resistor reference
+        smatch = shortrex.match(line)
+        if dmatch:
+            fixedlines.append(re.sub('pw2nd', 'pw2nd_05v5', line))
+            modified = True
+        elif smatch:
+            fixedlines.append(re.sub('short', 'sky130_fd_pr__res_generic_po', line))
+            modified = True
+        else:
+            fixedlines.append(line)
+
+    # Write output
+    if outname == None:
+        for i in fixedlines:
+            print(i)
+    else:
+        # If the output is a symbolic link but no modifications have been made,
+        # then leave it alone.  If it was modified, then remove the symbolic
+        # link before writing.
+        if os.path.islink(outname):
+            if not modified:
+                return 0
+            else:
+                os.unlink(outname)
+        try:
+            with open(outname, 'w') as outFile:
+                for i in fixedlines:
+                    print(i, file=outFile)
+        except:
+            print('fix_device_models.py: failed to open ' + outname + ' for writing.', file=sys.stderr)
+            return 1
+
+
+if __name__ == '__main__':
+
+    # This script expects to get one or two arguments.  One argument is
+    # mandatory and is the input file.  The other argument is optional and
+    # is the output file.  The output file and input file may be the same
+    # name, in which case the original input is overwritten.
+
+    options = []
+    arguments = []
+    for item in sys.argv[1:]:
+        if item.find('-', 0) == 0:
+            options.append(item[1:])
+        else:
+            arguments.append(item)
+
+    if len(arguments) > 0:
+        infilename = arguments[0]
+
+    if len(arguments) > 1:
+        outfilename = arguments[1]
+    else:
+        outfilename = None
+
+    result = filter(infilename, outfilename)
+    sys.exit(result)