Changes for sky130_sram macros.

Changed sram spice source from *.sp to *.lvs.sp because *.sp doesn’t have the correct memory cell parasitic devices.
Changed l and w units from meters to micrometers.
Reversed bus order in sram top subckt pins.
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 32bd1a0..fae19ff 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -1331,7 +1331,7 @@
 		-lef %l/*/*.lef \
 		-lib %l/*/*.lib \
 		-gds %l/*/*.gds options=custom/scripts/gds_import_sram.tcl \
-		-spice %l/*/*[0-9].sp filter=custom/scripts/sp_to_spice.py \
+		-spice %l/*/*.lvs.sp filter=custom/scripts/sp_to_spice.py \
 		-verilog %l/*/*.v \
 		-library general sky130_sram_macros 2>&1 | tee -a ${SKY130A}_make.log
 
diff --git a/sky130/custom/scripts/sp_to_spice.py b/sky130/custom/scripts/sp_to_spice.py
index bbcc641..1d0c91d 100755
--- a/sky130/custom/scripts/sp_to_spice.py
+++ b/sky130/custom/scripts/sp_to_spice.py
@@ -10,6 +10,7 @@
 # the value to "filter=" for the model install in the sky130 Makefile.
 
 import os
+import re
 import sys
 
 def filter(inname):
@@ -24,9 +25,69 @@
         print('No such file ' + inname)
         return 1
 
-    print('Renaming file ' + filename + ' to ' + newname)
-    os.rename(inname, outname)
-    return 0
+    print('Converting file ' + filename + ' to ' + newname + ' by reversing buses and scaling l and w.')
+    # Read input
+    try:
+        with open(inname, 'r') as inFile:
+            stext = inFile.read()
+            slines = stext.splitlines()
+    except:
+        print('sp_to_spice.py: failed to open ' + inname + ' for reading.', file=sys.stderr)
+        return 1
+
+    fixedlines = []
+    modified = False
+    base_rex = re.compile(r'([^\[]*).*')  # regular expression for matching base signal
+
+    for line in slines:
+
+        # remove 'u' suffix from 'l' and 'w' parameters
+        newline = re.sub('([ \t][lL]=[0-9\.]*)u', r'\1', line)
+        newline = re.sub('([ \t][wW]=[0-9\.]*)u', r'\1', newline)
+
+        # reverse bus indices - NOTE: Only works if all ports are on the subckt line
+        if newline.startswith(".subckt ") or newline.startswith(".SUBCKT "):
+            tokens = newline.split()
+            if tokens[1] == filebits[0]:  # top subckt
+                bus_start = 2
+                last_base = base_rex.match(tokens[2])[1]
+                i = 3
+                while i < len(tokens):
+                    base_match = base_rex.match(tokens[i])  # always matches one base net
+                    if last_base != base_match[1]:
+                        tokens[bus_start:i] = tokens[i-1:bus_start-1:-1]  # reverse the bus indices
+                        bus_start = i
+                        last_base = base_match[1]
+                    i += 1
+                tokens[bus_start:i] = tokens[i-1:bus_start-1:-1]
+                newline = " ".join(tokens)
+
+        if line != newline:
+            modified = True
+
+        fixedlines.append(newline)
+
+    # 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('sp_to_spice.py: failed to open ' + outname + ' for writing.', file=sys.stderr)
+            return 1
+
 
 if __name__ == '__main__':