Revised several custom sky130 scripts to accept the option "-ef_format"
and handle the syntax of the filesystem under libs.ref/ accordingly.
Change only affects installations using EF_STYLE=1.
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index a8ab1a4..81fcd3e 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -818,7 +818,7 @@
# Install device subcircuits from vendor files
${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \
-ngspice sky130_fd_pr/latest/models/* \
- filter=custom/scripts/rename_models.py \
+ filter=custom/scripts/rename_models.py ${EF_FORMAT} \
2>&1 | tee -a ${SKY130A}_make.log
# Install device layouts from custom sources
${STAGE} -source ./custom -target ${STAGING_PATH}/${SKY130A} \
@@ -867,12 +867,12 @@
tail -39 ${STAGING_PATH}/${SKY130A}/libs.ref/${PR_SPICE}/sky130_fd_pr__pnp_05v5_W3p40L3p40.model.spice >> ${STAGING_PATH}/${SKY130A}/libs.ref/${PR_SPICE}/temp
mv ${STAGING_PATH}/${SKY130A}/libs.ref/${PR_SPICE}/temp ${STAGING_PATH}/${SKY130A}/libs.ref/${PR_SPICE}/sky130_fd_pr__pnp_05v5_W3p40L3p40.model.spice
# Custom: Add the PNP 3.4x3.4um device model to the includes in "all.spice"
- ./custom/scripts/fix_spice_includes.py \
+ ./custom/scripts/fix_spice_includes.py ${EF_FORMAT} \
${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/all.spice \
2>&1 | tee -a ${SKY130A}_make.log || true
# Custom: Parse the (commented out) statistics blocks and generate
# ngspice-compatible monte carlo parameters for mismatch and process
- ./custom/scripts/mismatch_params.py \
+ ./custom/scripts/mismatch_params.py ${EF_FORMAT} \
2>&1 | tee -a ${SKY130A}_make.log || true
./custom/scripts/mismatch_params.py \
${STAGING_PATH}/${SKY130A}/libs.tech/ngspice \
@@ -903,7 +903,7 @@
2>&1 | tee -a ${SKY130A}_make.log || true
# Custom: Add special device ID layers to bipolar layouts in magic
# to make the extraction models correct.
- ./custom/scripts/add_bipolar_ids.py \
+ ./custom/scripts/add_bipolar_ids.py ${EF_FORMAT} \
2>&1 | tee -a ${SKY130A}_make.log || true
# Custom: Add "spinit" file
diff --git a/sky130/custom/scripts/add_bipolar_ids.py b/sky130/custom/scripts/add_bipolar_ids.py
index 1668ef4..247d522 100755
--- a/sky130/custom/scripts/add_bipolar_ids.py
+++ b/sky130/custom/scripts/add_bipolar_ids.py
@@ -11,10 +11,20 @@
import re
import sys
-magpath = 'sky130A/libs.ref/sky130_fd_pr/mag'
+options = []
+arguments = []
+for item in sys.argv[1:]:
+ if item.find('-', 0) == 0:
+ options.append(item[1:])
+ else:
+ arguments.append(item)
-if len(sys.argv) > 1:
- magpath = sys.argv[1]
+magpath = 'sky130A/libs.ref/sky130_fd_pr/mag'
+if len(options) > 0:
+ if options[0] == 'ef_format':
+ magpath = 'sky130A/libs.ref/mag/sky130_fd_pr'
+elif len(arguments) > 0:
+ magpath = arguments[0]
baserex = re.compile('<< [np]base >>')
diff --git a/sky130/custom/scripts/fix_spice_includes.py b/sky130/custom/scripts/fix_spice_includes.py
index 7465786..1aaa0b5 100755
--- a/sky130/custom/scripts/fix_spice_includes.py
+++ b/sky130/custom/scripts/fix_spice_includes.py
@@ -15,12 +15,25 @@
newdevs = []
newdevs.append('sky130_fd_pr__pnp_05v5_W3p40L3p40')
-if len(sys.argv) <= 1:
- print('Usage: fix_spice_includes.py <path_to_file>')
+options = []
+arguments = []
+for item in sys.argv[1:]:
+ if item.find('-', 0) == 0:
+ options.append(item[1:])
+ else:
+ arguments.append(item)
+
+if len(arguments) < 1:
+ print('Usage: fix_spice_includes.py <path_to_file> [-ef_format]')
sys.exit(1)
else:
- infile_name = sys.argv[1]
+ infile_name = arguments[0]
+
+ libpath = 'sky130_fd_pr/spice/'
+ if len(options) > 0:
+ if options[0] == 'ef_format':
+ libpath = 'spi/sky130_fd_pr/'
filepath = os.path.split(infile_name)[0]
outfile_name = os.path.join(filepath, 'temp')
@@ -36,7 +49,7 @@
if 'pnp_05v5' in line:
# Insert these additional lines
for newdev in newdevs:
- newline = '.include "../../libs.ref/sky130_fd_pr/spice/' + newdev + '.model.spice"\n'
+ newline = '.include "../../libs.ref/' + libpath + newdev + '.model.spice"\n'
outfile.write(newline)
replaced_something = True
diff --git a/sky130/custom/scripts/mismatch_params.py b/sky130/custom/scripts/mismatch_params.py
index b6616d7..c370c56 100755
--- a/sky130/custom/scripts/mismatch_params.py
+++ b/sky130/custom/scripts/mismatch_params.py
@@ -12,10 +12,21 @@
mm_switch_param = 'MC_MM_SWITCH'
+options = []
+arguments = []
+for item in sys.argv[1:]:
+ if item.find('-', 0) == 0:
+ options.append(item[1:])
+ else:
+ arguments.append(item)
+
walkpath = 'sky130A/libs.ref/sky130_fd_pr/spice'
-if len(sys.argv) > 1:
- walkpath = sys.argv[1]
+if len(options) > 0:
+ if options[0] == 'ef_format':
+ walkpath = 'sky130A/libs.ref/spi/sky130_fd_pr'
+elif len(arguments) > 0:
+ walkpath = arguments[0]
mismatch_params = []
diff --git a/sky130/custom/scripts/rename_models.py b/sky130/custom/scripts/rename_models.py
index 80e153c..b883be8 100755
--- a/sky130/custom/scripts/rename_models.py
+++ b/sky130/custom/scripts/rename_models.py
@@ -14,7 +14,12 @@
import os
import sys
-def filter(inname, outname):
+def filter(inname, outname, ef_format = True):
+
+ if ef_format:
+ libpath = 'spi/sky130_fd_pr/'
+ else:
+ libpath = 'sky130_fd_pr/spice/'
# Read input
try:
@@ -33,7 +38,7 @@
for line in spilines:
# Fix: Replace "../cells/<name>/" with "../../libs.ref/sky130_fd_pr/spice/"
- fixedline = re.sub('\.\./cells/[^/]+/', '../../libs.ref/sky130_fd_pr/spice/', line)
+ fixedline = re.sub('\.\./cells/[^/]+/', '../../libs.ref/' + libpath, line)
# This subsitution makes SPICE files compatible with Xyce without
# breaking ngspice compatibility ('$' comments changed to ';')
@@ -82,11 +87,19 @@
if len(arguments) > 0:
infilename = arguments[0]
+ else:
+ print('Usage: rename_models.py <filename> [<outfilename>] [-ef_format]')
+ sys.exit(1)
if len(arguments) > 1:
outfilename = arguments[1]
else:
outfilename = None
- result = filter(infilename, outfilename)
+ ef_format = False
+ if len(options) > 0:
+ if options[0] == 'ef_format':
+ ef_format = True
+
+ result = filter(infilename, outfilename, ef_format)
sys.exit(result)