Corrected more python strings which needed to be made into "r-strings"
to keep python from issuing error messages about them. Finished
changing the repository locations in github from efabless to
fossi-foundation. Rebuilt both open PDKs and regenerated the
reference hashes.
diff --git a/common/create_verilog_library.py b/common/create_verilog_library.py
index 3761540..39d671b 100755
--- a/common/create_verilog_library.py
+++ b/common/create_verilog_library.py
@@ -133,21 +133,21 @@
def create_blackboxes(ntext):
updated = []
- modrex = re.compile('^[ \t]*module[ \t\n]+')
- endrex = re.compile('^[ \t]*endmodule[ \t\n]+')
- inrex = re.compile('^[ \t]*input[ \t\n]+')
- outrex = re.compile('^[ \t]*output[ \t\n]+')
- inoutrex = re.compile('^[ \t]*inout[ \t\n]+')
- ifrex = re.compile('^[ \t]*`if')
- elsrex = re.compile('^[ \t]*`els')
- endifrex = re.compile('^[ \t]*`end')
- suprex = re.compile('^[ \t]*supply')
+ modrex = re.compile(r'^[ \t]*module[ \t\n]+')
+ endrex = re.compile(r'^[ \t]*endmodule[ \t\n]+')
+ inrex = re.compile(r'^[ \t]*input[ \t\n]+')
+ outrex = re.compile(r'^[ \t]*output[ \t\n]+')
+ inoutrex = re.compile(r'^[ \t]*inout[ \t\n]+')
+ ifrex = re.compile(r'^[ \t]*`if')
+ elsrex = re.compile(r'^[ \t]*`els')
+ endifrex = re.compile(r'^[ \t]*`end')
+ suprex = re.compile(r'^[ \t]*supply')
in_mod = False
depth = 0
for line in ntext.splitlines():
# Strip any comments from line before checking
- nocline = re.sub('[ \t]*//.*', '', line)
+ nocline = re.sub(r'[ \t]*//.*', '', line)
if not in_mod:
mmatch = modrex.match(nocline)
if mmatch:
diff --git a/common/find_all_devices.py b/common/find_all_devices.py
index 71c27c5..59c6ebd 100755
--- a/common/find_all_devices.py
+++ b/common/find_all_devices.py
@@ -207,8 +207,8 @@
allcells = os.listdir(cellspath)
- subcktrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+', re.IGNORECASE)
- includerex = re.compile('\.include[ \t]+([^ \t]+)', re.IGNORECASE)
+ subcktrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+', re.IGNORECASE)
+ includerex = re.compile(r'\.include[ \t]+([^ \t]+)', re.IGNORECASE)
filesdict = {}
subcktdict = {}
@@ -291,7 +291,7 @@
# of all primitive devices used in the file by cross-checking against
# the dictionary of subcircuits.
- devrex = re.compile('x([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
+ devrex = re.compile(r'x([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
incfiles = []
with open(sourcefile, 'r') as ifile:
diff --git a/common/fix_subckt_params.py b/common/fix_subckt_params.py
index f961326..e5fcb18 100755
--- a/common/fix_subckt_params.py
+++ b/common/fix_subckt_params.py
@@ -38,10 +38,10 @@
def param_split(line, params, debug):
# Regexp patterns
- parm1rex = re.compile('(\.param[ \t]+)(.*)')
- parm2rex = re.compile('(\+[ \t]*)(.*)')
- parm3rex = re.compile('([^= \t]+)([ \t]*=[ \t]*[^ \t]+[ \t]*)(.*)')
- parm4rex = re.compile('([^= \t]+)([ \t]*)(.*)')
+ parm1rex = re.compile(r'(\.param[ \t]+)(.*)')
+ parm2rex = re.compile(r'(\+[ \t]*)(.*)')
+ parm3rex = re.compile(r'([^= \t]+)([ \t]*=[ \t]*[^ \t]+[ \t]*)(.*)')
+ parm4rex = re.compile(r'([^= \t]+)([ \t]*)(.*)')
part1 = ''
part2 = ''
@@ -95,11 +95,11 @@
def convert_file(in_file, out_path, params, debug):
# Regexp patterns
- paramrex = re.compile('\.param[ \t]+(.*)')
- subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
- modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
- endsubrex = re.compile('\.ends[ \t]+(.+)')
- increx = re.compile('\.include[ \t]+')
+ paramrex = re.compile(r'\.param[ \t]+(.*)')
+ subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+ modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+ endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+ increx = re.compile(r'\.include[ \t]+')
with open(in_file, 'r') as ifile:
inplines = ifile.read().splitlines()
diff --git a/common/fixspice.py b/common/fixspice.py
index dc2fd04..6d0756a 100755
--- a/common/fixspice.py
+++ b/common/fixspice.py
@@ -74,14 +74,14 @@
modified = False
# Regular expression to find 'agauss(a,b,c)' lines and record a, b, and c
- grex = re.compile('[^{]agauss\(([^,]*),([^,]*),([^)]*)\)', re.IGNORECASE)
+ grex = re.compile(r'[^{]agauss\(([^,]*),([^,]*),([^)]*)\)', re.IGNORECASE)
# Regular expression to determine if the line is a .PARAM card
- paramrex = re.compile('^\.param', re.IGNORECASE)
+ paramrex = re.compile(r'^\.param', re.IGNORECASE)
# Regular expression to determine if the line is a .MODEL card
- modelrex = re.compile('^\.model', re.IGNORECASE)
+ modelrex = re.compile(r'^\.model', re.IGNORECASE)
# Regular expression to detect a .SUBCKT card
- subcktrex = re.compile('^\.subckt', re.IGNORECASE)
+ subcktrex = re.compile(r'^\.subckt', re.IGNORECASE)
for line in spilines:
devtype = line[0].upper() if len(line) > 0 else 0
@@ -130,21 +130,21 @@
# Fixes related specifically to MOS models:
# Fix: Look for hspver=98.2 in FET model
- altered = re.sub(' hspver[ ]*=[ ]*98\.2', ' ', fixedline, flags=re.IGNORECASE)
+ altered = re.sub(r' hspver[ ]*=[ ]*98\.2', ' ', fixedline, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
if debug:
print('Removed hspver=98.2 from ' + modeltype + ' model')
# Fix: Change level 53 FETs to level 49
- altered = re.sub(' (level[ ]*=[ ]*)53', ' \g<1>49', fixedline, flags=re.IGNORECASE)
+ altered = re.sub(r' (level[ ]*=[ ]*)53', ' \g<1>49', fixedline, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
if debug:
print('Changed level 53 ' + modeltype + ' to level 49')
# Fix: Look for version=4.3 or 4.5 FETs, change to 4.8.0 per recommendations
- altered = re.sub(' (version[ ]*=[ ]*)4\.[35]', ' \g<1>4.8.0',
+ altered = re.sub(r' (version[ ]*=[ ]*)4\.[35]', ' \g<1>4.8.0',
fixedline, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
@@ -209,7 +209,7 @@
print('Removed tref= from ' + modeltype + ' model')
# Fix: Look for double-dot model binning and replace with single dot
- altered = re.sub('\.\.([0-9]+)', '.\g<1>', fixedline, flags=re.IGNORECASE)
+ altered = re.sub(r'\.\.([0-9]+)', '.\g<1>', fixedline, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
if debug:
@@ -220,30 +220,30 @@
# usual numeric assignments.
if devtype == 'M':
- altered = re.sub(' nf=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
- altered = re.sub(' nf=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+ altered = re.sub(r' nf=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+ altered = re.sub(r' nf=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
if debug:
print('Removed nf= from MOSFET device instance')
- altered = re.sub(' mulu0=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
- altered = re.sub(' mulu0=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+ altered = re.sub(r' mulu0=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+ altered = re.sub(r' mulu0=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
if debug:
print('Removed mulu0= from MOSFET device instance')
- altered = re.sub(' s[abcd]=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
- altered = re.sub(' s[abcd]=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+ altered = re.sub(r' s[abcd]=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+ altered = re.sub(r' s[abcd]=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
if debug:
print('Removed s[abcd]= from MOSFET device instance')
# Remove tref= from all device type instances
- altered = re.sub(' tref=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
- altered = re.sub(' tref=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+ altered = re.sub(r' tref=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+ altered = re.sub(r' tref=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
if altered != fixedline:
fixedline = altered
if debug:
diff --git a/common/print_subckt_params.py b/common/print_subckt_params.py
index 66786ca..b26339a 100755
--- a/common/print_subckt_params.py
+++ b/common/print_subckt_params.py
@@ -21,9 +21,9 @@
def parse_pins(line, debug):
# Regexp patterns
- subrex = re.compile('\.subckt[ \t]+[^ \t]+[ \t]+(.*)')
- parm1rex = re.compile('([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
- parm2rex = re.compile('([^= \t]+)[ \t]*(.*)')
+ subrex = re.compile(r'\.subckt[ \t]+[^ \t]+[ \t]+(.*)')
+ parm1rex = re.compile(r'([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
+ parm2rex = re.compile(r'([^= \t]+)[ \t]*(.*)')
params = []
@@ -58,10 +58,10 @@
def param_parse(line, debug):
# Regexp patterns
- parm1rex = re.compile('\.param[ \t]+(.*)')
- parm2rex = re.compile('\+[ \t]*(.*)')
- parm3rex = re.compile('([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
- parm4rex = re.compile('([^= \t]+)[ \t]*(.*)')
+ parm1rex = re.compile(r'\.param[ \t]+(.*)')
+ parm2rex = re.compile(r'\+[ \t]*(.*)')
+ parm3rex = re.compile(r'([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
+ parm4rex = re.compile(r'([^= \t]+)[ \t]*(.*)')
if debug:
print('Diagnostic: param line in = "' + line + '"')
@@ -97,11 +97,11 @@
def parse_file(in_file, debug):
# Regexp patterns
- paramrex = re.compile('\.param[ \t]+(.*)')
- subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
- modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
- endsubrex = re.compile('\.ends[ \t]+(.+)')
- increx = re.compile('\.include[ \t]+')
+ paramrex = re.compile(r'\.param[ \t]+(.*)')
+ subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+ modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+ endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+ increx = re.compile(r'\.include[ \t]+')
with open(in_file, 'r') as ifile:
inplines = ifile.read().splitlines()
diff --git a/common/remove_specify.py b/common/remove_specify.py
index 746a06f..b26805f 100755
--- a/common/remove_specify.py
+++ b/common/remove_specify.py
@@ -34,10 +34,10 @@
# case that has been seen seems to work under the assumption that leading
# whitespace is ignored up to the amount used by the last indentation.
- vlines = re.sub('\\\\\n[ \t]*', '', vtext)
+ vlines = re.sub(r'\\\\\n[ \t]*', '', vtext)
- specrex = re.compile('\n[ \t]*specify[ \t\n]+')
- endspecrex = re.compile('\n[ \t]*endspecify')
+ specrex = re.compile(r'\n[ \t]*specify[ \t\n]+')
+ endspecrex = re.compile(r'\n[ \t]*endspecify')
smatch = specrex.search(vlines)
while smatch:
specstart = smatch.start()
diff --git a/common/save_commit_refs.py b/common/save_commit_refs.py
index c226313..d1179a5 100755
--- a/common/save_commit_refs.py
+++ b/common/save_commit_refs.py
@@ -83,8 +83,8 @@
print("Error: Cannot open file " + outputfile + " for writing.\n", file=sys.stderr)
return
- keyrex = re.compile('[ \t]*"([^"]+)":[ \t]*"[^"]+"')
- valuerex = re.compile('[ \t]*"[^"]+":[ \t]*"([a-z0-9]+)"')
+ keyrex = re.compile(r'[ \t]*"([^"]+)":[ \t]*"[^"]+"')
+ valuerex = re.compile(r'[ \t]*"[^"]+":[ \t]*"([a-z0-9]+)"')
distdefs = {}
defs = []
diff --git a/common/spectre_to_spice.py b/common/spectre_to_spice.py
index 52698e0..136f2a4 100755
--- a/common/spectre_to_spice.py
+++ b/common/spectre_to_spice.py
@@ -30,13 +30,13 @@
def parse_param_line(line, inparam, insub, iscall, ispassed, inmod, linenum):
# Regexp patterns
- parm1rex = re.compile('[ \t]*parameters[ \t]*(.*)')
- parm2rex = re.compile('[ \t]*params:[ \t]*(.*)')
- parm3rex = re.compile('[ \t]*\+[ \t]*(.*)')
- parm4rex = re.compile('[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
- parm5rex = re.compile('[ \t]*([^= \t]+)[ \t]*(.*)')
- parm6rex = re.compile('[ \t]*([^= \t]+)[ \t]*=[ \t]*([\'{][^\'}]+[\'}])[ \t]*(.*)')
- rtok = re.compile('([^ \t\n]+)[ \t]*(.*)')
+ parm1rex = re.compile(r'[ \t]*parameters[ \t]*(.*)')
+ parm2rex = re.compile(r'[ \t]*params:[ \t]*(.*)')
+ parm3rex = re.compile(r'[ \t]*\+[ \t]*(.*)')
+ parm4rex = re.compile(r'[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
+ parm5rex = re.compile(r'[ \t]*([^= \t]+)[ \t]*(.*)')
+ parm6rex = re.compile(r'[ \t]*([^= \t]+)[ \t]*=[ \t]*([\'{][^\'}]+[\'}])[ \t]*(.*)')
+ rtok = re.compile(r'([^ \t\n]+)[ \t]*(.*)')
fmtline = []
@@ -73,7 +73,7 @@
# Parameter expression given with no braces or quotes around
# the expression. Fix the expression by removing the spaces
# around '*'.
- rest = re.sub('[ \t]*([\*\+\-])[ \t]*', '\g<1>', rest)
+ rest = re.sub(r'[ \t]*([\*\+\-])[ \t]*', '\g<1>', rest)
pmatch = parm4rex.match(rest)
if pmatch:
@@ -173,20 +173,20 @@
# ngspice does not understand round(), so replace it with the equivalent
# floor() expression.
- finalline = re.sub('round\(', 'floor(0.5+', finalline)
+ finalline = re.sub(r'round\(', 'floor(0.5+', finalline)
# use of "no" and "yes" as parameter values is not allowed in ngspice.
- finalline = re.sub('sw_et[ \t]*=[ \t]*{no}', 'sw_et=0', finalline)
- finalline = re.sub('sw_et[ \t]*=[ \t]*{yes}', 'sw_et=1', finalline)
- finalline = re.sub('isnoisy[ \t]*=[ \t]*{no}', 'isnoisy=0', finalline)
- finalline = re.sub('isnoisy[ \t]*=[ \t]*{yes}', 'isnoisy=1', finalline)
+ finalline = re.sub(r'sw_et[ \t]*=[ \t]*{no}', 'sw_et=0', finalline)
+ finalline = re.sub(r'sw_et[ \t]*=[ \t]*{yes}', 'sw_et=1', finalline)
+ finalline = re.sub(r'isnoisy[ \t]*=[ \t]*{no}', 'isnoisy=0', finalline)
+ finalline = re.sub(r'isnoisy[ \t]*=[ \t]*{yes}', 'isnoisy=1', finalline)
# Use of "m" in parameters is forbidden. Specifically look for "{N*m}".
# e.g., replace "mult = {2*m}" with "mult = 2". Note that this usage
# is most likely an error in the source.
- finalline = re.sub('\{([0-9]+)\*[mM]\}', r'\1', finalline)
+ finalline = re.sub(r'\{([0-9]+)\*[mM]\}', r'\1', finalline)
return finalline, ispassed
@@ -198,7 +198,7 @@
# model name. There are only a few instances of this, so this
# routine is not rigorously checking all parameters, just entries
# on lines with ".param".
- parmrex = re.compile('[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
+ parmrex = re.compile(r'[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
rest = line
paramnames = []
while rest != '':
@@ -214,7 +214,7 @@
# binned model
def addmodel(modellines, linenum):
- typerex = re.compile('([ \t]*type[ \t]*=[ \t]*)([^ \t]+)[ \t]*', re.IGNORECASE)
+ typerex = re.compile(r'([ \t]*type[ \t]*=[ \t]*)([^ \t]+)[ \t]*', re.IGNORECASE)
# 'ZYXW' was left as a placeholder for the device type
if len(modellines) > 0:
@@ -249,31 +249,31 @@
def convert_file(in_file, out_file):
# Regexp patterns
- statrex = re.compile('[ \t]*statistics[ \t]*\{(.*)')
- simrex = re.compile('[ \t]*simulator[ \t]+([^= \t]+)[ \t]*=[ \t]*(.+)')
- insubrex = re.compile('[ \t]*inline[ \t]+subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
- cdlsubrex = re.compile('\.?subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
- endsubrex = re.compile('[ \t]*ends[ \t]+(.+)')
- endonlysubrex = re.compile('[ \t]*ends[ \t]*')
- modelrex = re.compile('[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+\{(.*)')
- cdlmodelrex = re.compile('[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
- binrex = re.compile('[ \t]*([0-9]+):[ \t]*(.*)')
- shincrex = re.compile('\.inc[ \t]+')
- isexprrex = re.compile('[^0-9a-zA-Z_]')
- paramrex = re.compile('\.param[ \t]+(.*)')
+ statrex = re.compile(r'[ \t]*statistics[ \t]*\{(.*)')
+ simrex = re.compile(r'[ \t]*simulator[ \t]+([^= \t]+)[ \t]*=[ \t]*(.+)')
+ insubrex = re.compile(r'[ \t]*inline[ \t]+subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
+ cdlsubrex = re.compile(r'\.?subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
+ endsubrex = re.compile(r'[ \t]*ends[ \t]+(.+)')
+ endonlysubrex = re.compile(r'[ \t]*ends[ \t]*')
+ modelrex = re.compile(r'[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+\{(.*)')
+ cdlmodelrex = re.compile(r'[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
+ binrex = re.compile(r'[ \t]*([0-9]+):[ \t]*(.*)')
+ shincrex = re.compile(r'\.inc[ \t]+')
+ isexprrex = re.compile(r'[^0-9a-zA-Z_]')
+ paramrex = re.compile(r'\.param[ \t]+(.*)')
- stdsubrex = re.compile('\.?subckt[ \t]+([^ \t]+)[ \t]+(.*)')
- stdmodelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
- stdendsubrex = re.compile('\.ends[ \t]+(.+)')
- stdendonlysubrex = re.compile('\.ends[ \t]*')
+ stdsubrex = re.compile(r'\.?subckt[ \t]+([^ \t]+)[ \t]+(.*)')
+ stdmodelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
+ stdendsubrex = re.compile(r'\.ends[ \t]+(.+)')
+ stdendonlysubrex = re.compile(r'\.ends[ \t]*')
# Devices (resistor, capacitor, subcircuit as resistor or capacitor)
- caprex = re.compile('c([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*capacitor[ \t]*(.*)', re.IGNORECASE)
- resrex = re.compile('r([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*resistor[ \t]*(.*)', re.IGNORECASE)
- cdlrex = re.compile('[ \t]*([npcrdlmqx])([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
- stddevrex = re.compile('[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
- stddev2rex = re.compile('[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t\'{]+[\'{][^\'}]+[\'}])[ \t]*(.*)', re.IGNORECASE)
- stddev3rex = re.compile('[ \t]*([npcrdlmqx])([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
+ caprex = re.compile(r'c([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*capacitor[ \t]*(.*)', re.IGNORECASE)
+ resrex = re.compile(r'r([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*resistor[ \t]*(.*)', re.IGNORECASE)
+ cdlrex = re.compile(r'[ \t]*([npcrdlmqx])([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+ stddevrex = re.compile(r'[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+ stddev2rex = re.compile(r'[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t\'{]+[\'{][^\'}]+[\'}])[ \t]*(.*)', re.IGNORECASE)
+ stddev3rex = re.compile(r'[ \t]*([npcrdlmqx])([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
with open(in_file, 'r') as ifile:
try:
@@ -287,7 +287,7 @@
# because any subcircuit call could be a forward reference.
#---------------------------------------------------------------
- allsubrex = re.compile('.*subckt[ \t]+([^ \t\(]+)')
+ allsubrex = re.compile(r'.*subckt[ \t]+([^ \t\(]+)')
subnames = []
for line in speclines:
testline = line.strip()
@@ -492,9 +492,9 @@
ispassed = True
subname = imatch.group(1)
if isspectre:
- devrex = re.compile('[ \t]*' + subname + '[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+ devrex = re.compile(r'[ \t]*' + subname + r'[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
else:
- devrex = re.compile('[ \t]*' + subname + '[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+ devrex = re.compile(r'[ \t]*' + subname + r'[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
# If there is no close-parenthesis then we should expect it on
# a continuation line
inpinlist = True if ')' not in line else False
@@ -795,20 +795,20 @@
# (NOTE: Need more generic handling here, as perimeter parameter
# could be in a continuation line)
- perimrex = re.compile('perim([ \t]*=[ \t]*)', re.IGNORECASE)
+ perimrex = re.compile(r'perim([ \t]*=[ \t]*)', re.IGNORECASE)
for j in range(len(spicelines)):
line = spicelines[j]
if len(line) > 1 and line[0].lower() == 'd':
- spicelines[j] = perimrex.sub('pj\g<1>', line)
+ spicelines[j] = perimrex.sub(r'pj\g<1>', line)
# Catching the spectre use of "m" is difficult, so do another pass
# on "spicelines" to catch which subcircuits use "*m" expressions,
# then for those subcircuits, add "mult=1" to the subcircuit
# parameters. (NOTE: Need a more generic regular expression here)
- sqrtrex = re.compile('.*(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
- sqsubrex = re.compile('(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
- subrex = re.compile('\.subckt[ \t]+([^ \t\(]+)[ \t]*', re.IGNORECASE)
+ sqrtrex = re.compile(r'.*(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
+ sqsubrex = re.compile(r'(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
+ subrex = re.compile(r'\.subckt[ \t]+([^ \t\(]+)[ \t]*', re.IGNORECASE)
needmult = []
for j in range(len(spicelines)):
line = spicelines[j]
@@ -817,7 +817,7 @@
cursub = smatch.group(1)
smatch = sqrtrex.match(line)
if smatch:
- spicelines[j] = sqsubrex.sub('\g<1>mult)', line)
+ spicelines[j] = sqsubrex.sub(r'\g<1>mult)', line)
needmult.append(cursub)
# Now add "mult=1" parameter to any subcircuit in the "needmult" list
@@ -828,12 +828,12 @@
spicelines[j] = line + ' mult=1'
# Check for resistor models using "tc1r" and "tc2r"
- rmodrex = re.compile('.*[ \t]+tc[12]r[ \t]+=', re.IGNORECASE)
+ rmodrex = re.compile(r'.*[ \t]+tc[12]r[ \t]+=', re.IGNORECASE)
for j in range(len(spicelines)):
line = spicelines[j]
rmatch = rmodrex.match(line)
if rmatch:
- spicelines[j] = re.sub('([ \t]+tc[12])r([ \t])', '\g<1>\g<2>', line)
+ spicelines[j] = re.sub(r'([ \t]+tc[12])r([ \t])', '\g<1>\g<2>', line)
# Output the result to out_file.
with open(out_file, 'w') as ofile:
diff --git a/common/split_one_spice.py b/common/split_one_spice.py
index be87d7a..723c77d 100755
--- a/common/split_one_spice.py
+++ b/common/split_one_spice.py
@@ -22,11 +22,11 @@
def convert_file(in_file, out_path):
# Regexp patterns
- paramrex = re.compile('\.param[ \t]+(.*)')
- subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
- modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
- endsubrex = re.compile('\.ends[ \t]+(.+)')
- increx = re.compile('\.include[ \t]+')
+ paramrex = re.compile(r'\.param[ \t]+(.*)')
+ subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+ modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+ endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+ increx = re.compile(r'\.include[ \t]+')
with open(in_file, 'r') as ifile:
inplines = ifile.read().splitlines()
@@ -205,7 +205,7 @@
linedest[tline] = fileno
tline += 1;
- devrex = re.compile(subname + '[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+ devrex = re.compile(subname + r'[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
inpinlist = True
linedest[lineno] = fileno
continue
diff --git a/common/split_spice.py b/common/split_spice.py
index dedad24..c278252 100755
--- a/common/split_spice.py
+++ b/common/split_spice.py
@@ -26,11 +26,11 @@
def convert_file(in_file, out_path, out_file):
# Regexp patterns
- paramrex = re.compile('\.param[ \t]+(.*)')
- subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
- modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
- endsubrex = re.compile('\.ends[ \t]+(.+)')
- increx = re.compile('\.include[ \t]+')
+ paramrex = re.compile(r'\.param[ \t]+(.*)')
+ subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+ modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+ endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+ increx = re.compile(r'\.include[ \t]+')
with open(in_file, 'r') as ifile:
inplines = ifile.read().splitlines()
@@ -115,7 +115,7 @@
if imatch:
insubckt = True
subname = imatch.group(1)
- devrex = re.compile(subname + '[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+ devrex = re.compile(subname + r'[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
inpinlist = True
subcktlines.append(line)
continue
diff --git a/gf180mcu/Makefile.in b/gf180mcu/Makefile.in
index d2a303e..1d5b4aa 100644
--- a/gf180mcu/Makefile.in
+++ b/gf180mcu/Makefile.in
@@ -171,16 +171,16 @@
# Path to GF180MCU library sources
PDK_URL = https://github.com/google
OSU_URL = https://github.com/stineje
-EF_URL = https://github.com/efabless
+FOSSI_URL = https://github.com/fossi-foundation
# Names of library repositories
# NOTE: Switching PDK_LIB_PR and PDK_LIB_SC_7T5V0 to Efabless versions
# having "quick fixes" under development.
-PDK_LIB_PR = ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pr
-PDK_LIB_PV = ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pv
-PDK_LIB_IO = ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_io
-PDK_LIB_SC_7T5V0 = ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu7t5v0
-PDK_LIB_SC_9T5V0 = ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu9t5v0
+PDK_LIB_PR = ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pr
+PDK_LIB_PV = ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pv
+PDK_LIB_IO = ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_io
+PDK_LIB_SC_7T5V0 = ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu7t5v0
+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
diff --git a/gf180mcu/custom/scripts/convert_io_cdl.py b/gf180mcu/custom/scripts/convert_io_cdl.py
index fcbc9b3..30e3786 100755
--- a/gf180mcu/custom/scripts/convert_io_cdl.py
+++ b/gf180mcu/custom/scripts/convert_io_cdl.py
@@ -28,8 +28,8 @@
fixedlines = []
modified = False
- resrex = re.compile('^R', re.IGNORECASE)
- caprex = re.compile('^C', re.IGNORECASE)
+ resrex = re.compile(r'^R', re.IGNORECASE)
+ caprex = re.compile(r'^C', re.IGNORECASE)
for line in spilines:
fixedline = line
@@ -40,14 +40,14 @@
# 1) Lines starting with R, C, or M --> change to X
fixedline = re.sub('^[RCM]', 'X', fixedline, flags=re.IGNORECASE)
# 2) Names in $[...] --> remove the delimiter
- fixedline = re.sub(' \$\[', ' ', fixedline, flags=re.IGNORECASE)
- fixedline = re.sub('\] ', ' ', fixedline, flags=re.IGNORECASE)
+ fixedline = re.sub(r' \$\[', ' ', fixedline, flags=re.IGNORECASE)
+ fixedline = re.sub(r'\] ', ' ', fixedline, flags=re.IGNORECASE)
# 3) Remove $SUB=
- fixedline = re.sub('\$SUB=', '', fixedline, flags=re.IGNORECASE)
+ fixedline = re.sub(r'\$SUB=', '', fixedline, flags=re.IGNORECASE)
# 4) Handle $W and $L for resistors
if isres:
- fixedline = re.sub('\$W', 'r_width', fixedline, flags=re.IGNORECASE)
- fixedline = re.sub('\$L', 'r_length', fixedline, flags=re.IGNORECASE)
+ fixedline = re.sub(r'\$W', 'r_width', fixedline, flags=re.IGNORECASE)
+ fixedline = re.sub(r'\$L', 'r_length', fixedline, flags=re.IGNORECASE)
if iscap:
fixedline = re.sub('w=', 'c_width=', fixedline, flags=re.IGNORECASE)
fixedline = re.sub('l=', 'c_length=', fixedline, flags=re.IGNORECASE)
diff --git a/gf180mcu/custom/scripts/fix_digital_lef.py b/gf180mcu/custom/scripts/fix_digital_lef.py
index 1bb9ad1..387038b 100755
--- a/gf180mcu/custom/scripts/fix_digital_lef.py
+++ b/gf180mcu/custom/scripts/fix_digital_lef.py
@@ -29,8 +29,8 @@
fixedlines = []
modified = False
- endrex = re.compile('[ \t]*END[ \t]+VSS')
- macrorex = re.compile('^MACRO[ \t]+([^ \t\n]+)')
+ endrex = re.compile(r'[ \t]*END[ \t]+VSS')
+ macrorex = re.compile(r'^MACRO[ \t]+([^ \t\n]+)')
macroname = None
for line in llines:
diff --git a/gf180mcu/custom/scripts/fix_io_lef.py b/gf180mcu/custom/scripts/fix_io_lef.py
index 661e4f8..402e214 100755
--- a/gf180mcu/custom/scripts/fix_io_lef.py
+++ b/gf180mcu/custom/scripts/fix_io_lef.py
@@ -42,10 +42,10 @@
fixedlines = []
modified = False
- macrorex = re.compile('[ \t]*MACRO[ \t]+([^ \t\n]+)')
- pinrex = re.compile('[ \t]*PIN[ \t]+([^ \t\n]+)')
- userex = re.compile('[ \t]*USE[ \t]+([^ \t\n]+)')
- endrex = re.compile('[ \t]*END[ \t]+([^ \t\n]+)')
+ macrorex = re.compile(r'[ \t]*MACRO[ \t]+([^ \t\n]+)')
+ pinrex = re.compile(r'[ \t]*PIN[ \t]+([^ \t\n]+)')
+ userex = re.compile(r'[ \t]*USE[ \t]+([^ \t\n]+)')
+ endrex = re.compile(r'[ \t]*END[ \t]+([^ \t\n]+)')
macroidx = -1
pinidx = -1
diff --git a/gf180mcu/custom/scripts/fix_related_bias_pins.py b/gf180mcu/custom/scripts/fix_related_bias_pins.py
index 19b4c05..e491778 100755
--- a/gf180mcu/custom/scripts/fix_related_bias_pins.py
+++ b/gf180mcu/custom/scripts/fix_related_bias_pins.py
@@ -37,8 +37,8 @@
power_types = ['primary_power', 'primary_ground', 'backup_power',
'internal_power', 'internal_ground']
- pg_re = re.compile('\s*pg_pin\s*\(\s*"?([^\s]+)"?\s*\)\s*{')
- well_re = re.compile('\s*pg_type\s*:\s*"?([^\s]+)"?\s*;')
+ pg_re = re.compile(r'\s*pg_pin\s*\(\s*"?([^\s]+)"?\s*\)\s*{')
+ well_re = re.compile(r'\s*pg_type\s*:\s*"?([^\s]+)"?\s*;')
for line in slines:
pmatch = pg_re.match(line)
diff --git a/gf180mcu/custom/scripts/fix_techlef.py b/gf180mcu/custom/scripts/fix_techlef.py
index 3874d8e..f704feb 100755
--- a/gf180mcu/custom/scripts/fix_techlef.py
+++ b/gf180mcu/custom/scripts/fix_techlef.py
@@ -27,7 +27,7 @@
fixedlines = []
modified = False
- layerrex = re.compile('[ \t]*LAYER ([^ \t\n]+)')
+ layerrex = re.compile(r'[ \t]*LAYER ([^ \t\n]+)')
for line in llines:
diff --git a/gf180mcu/custom/scripts/inc_verilog.py b/gf180mcu/custom/scripts/inc_verilog.py
index 2ea70be..fc5ad6b 100755
--- a/gf180mcu/custom/scripts/inc_verilog.py
+++ b/gf180mcu/custom/scripts/inc_verilog.py
@@ -44,8 +44,8 @@
fixedlines = []
modified = False
- increx = re.compile('[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
- endrex = re.compile('[ \t]*endmodule')
+ increx = re.compile(r'[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
+ endrex = re.compile(r'[ \t]*endmodule')
inpath = os.path.split(inname)[0]
for line in vlines:
diff --git a/gf180mcu/custom/scripts/make_minmax_techlef.py b/gf180mcu/custom/scripts/make_minmax_techlef.py
index de106e3..aff01bb 100755
--- a/gf180mcu/custom/scripts/make_minmax_techlef.py
+++ b/gf180mcu/custom/scripts/make_minmax_techlef.py
@@ -54,10 +54,10 @@
tlefbase = 'gf180mcu_fd_sc_mcu' + lib + '__'
tlefnom = tlefbase + 'nom.tlef'
-resrex1 = re.compile('^[ \t]*RESISTANCE RPERSQ')
-resrex2 = re.compile('^[ \t]*ARRAYSPACING')
-layerrex = re.compile('^[ \t]*LAYER ([^ \t\n]+)')
-caprex = re.compile('^[ \t]*CAPACITANCE CPERSQDIST')
+resrex1 = re.compile(r'^[ \t]*RESISTANCE RPERSQ')
+resrex2 = re.compile(r'^[ \t]*ARRAYSPACING')
+layerrex = re.compile(r'^[ \t]*LAYER ([^ \t\n]+)')
+caprex = re.compile(r'^[ \t]*CAPACITANCE CPERSQDIST')
#--------------------------------------------------------------------
# Resistance values, by layer
diff --git a/gf180mcu/gf180mcu.json b/gf180mcu/gf180mcu.json
index d6d30a6..625e0b8 100644
--- a/gf180mcu/gf180mcu.json
+++ b/gf180mcu/gf180mcu.json
@@ -89,11 +89,11 @@
"magic": "MAGIC_COMMIT"
},
"reference": {
- "open_pdks": "c10a581884a4373c1a48b18ea3fc02c19d8d5c88",
- "magic": "4445663cb1b2de1eb9818cfe89f60ed7659335f3",
+ "open_pdks": "ca4dc508d0b95eb84e4b6d79ae7011b849063a18",
+ "magic": "02669de267fb4b658306946d36323b6601df639d",
"gf180mcu_pdk": "a897aa30369d3bcec87d9d50ce9b01f320f854ef",
- "gf180mcu_fd_pr": "a11222d681f2134ab28e97f97b9b99b6af188f88",
- "gf180mcu_fd_pv": "e9410df04da5b64a1053aa6e5180dc144b8a12a2",
+ "gf180mcu_fd_pr": "aacc04cc30ed119baaa616dff266cca7006dc3d6",
+ "gf180mcu_fd_pv": "10ee7fc75437edafa56f29f2b1872e95c9f22b71",
"gf180mcu_fd_io": "f84fe10e67a5cb9002e9ae8210f58e570726c366",
"gf180mcu_fd_sc_mcu7t5v0": "8743b6f9641eb8707179c4e51703380d4dc90f16",
"gf180mcu_fd_sc_mcu9t5v0": "376ea56fa36ce7702595ce4e0e3c9357ee38c81c",
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 44e64ef..45fa6f9 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -302,7 +302,6 @@
REFERENCE_JSON =
endif
-EF_URL = https://github.com/efabless
FOSSI_URL = https://github.com/fossi-foundation
GOOGLE_URL = https://foss-eda-tools.googlesource.com
@@ -319,8 +318,8 @@
ALPHA_URL = https://github.com/PaulSchulz/sky130_pschulz_xx_hd
XSCHEM_URL = https://github.com/StefanSchippers/xschem_sky130
-KLAYOUT_URL = ${EF_URL}/sky130_klayout_pdk
-PRECHECK_URL = ${EF_URL}/mpw_precheck
+KLAYOUT_URL = ${FOSSI_URL}/sky130_klayout_pdk
+PRECHECK_URL = ${FOSSI_URL}/mpw_precheck
SRAM_URL = ${FOSSI_URL}/sky130_sram_macros
SRAM_SPACE_URL = ${GOOGLE_URL}/skywater-pdk/libs/sky130_fd_bd_sram
RERAM_URL = ${GOOGLE_URL}/skywater-pdk/libs/sky130_fd_pr_reram
diff --git a/sky130/custom/scripts/fix_io_lef.py b/sky130/custom/scripts/fix_io_lef.py
index d15b0f2..4cac891 100755
--- a/sky130/custom/scripts/fix_io_lef.py
+++ b/sky130/custom/scripts/fix_io_lef.py
@@ -34,11 +34,11 @@
modified = False
inpin = False
- macrorex = re.compile('^MACRO[ \t]+([^ \t\n]+)')
- pinrex = re.compile('^[ \t]*PIN[ \t]+[PG]_CORE')
- endrex = re.compile('[ \t]*END[ \t]+[PG]_CORE')
- rectrex = re.compile('^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
- rect2rex = re.compile('^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
+ macrorex = re.compile(r'^MACRO[ \t]+([^ \t\n]+)')
+ pinrex = re.compile(r'^[ \t]*PIN[ \t]+[PG]_CORE')
+ endrex = re.compile(r'[ \t]*END[ \t]+[PG]_CORE')
+ rectrex = re.compile(r'^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
+ rect2rex = re.compile(r'^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
macroname = None
for line in llines:
diff --git a/sky130/custom/scripts/inc_verilog.py b/sky130/custom/scripts/inc_verilog.py
index df3e4af..457469f 100755
--- a/sky130/custom/scripts/inc_verilog.py
+++ b/sky130/custom/scripts/inc_verilog.py
@@ -41,10 +41,10 @@
fixedlines = []
modified = False
- increx = re.compile('[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
- ddotrex = re.compile('[^\.]+\.[^\.]+\.v')
- tdotrex = re.compile('[^\.]+\.[^\.]+\.[^\.]+\.v')
- endrex = re.compile('[ \t]*endmodule')
+ increx = re.compile(r'[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
+ ddotrex = re.compile(r'[^\.]+\.[^\.]+\.v')
+ tdotrex = re.compile(r'[^\.]+\.[^\.]+\.[^\.]+\.v')
+ endrex = re.compile(r'[ \t]*endmodule')
inpath = os.path.split(inname)[0]
for line in vlines:
diff --git a/sky130/custom/scripts/mismatch_params.py b/sky130/custom/scripts/mismatch_params.py
index 47cb853..2fee7c7 100755
--- a/sky130/custom/scripts/mismatch_params.py
+++ b/sky130/custom/scripts/mismatch_params.py
@@ -36,8 +36,8 @@
mismatch_params = []
-mmrex = re.compile('^\*[ \t]*mismatch[ \t]*\{')
-endrex = re.compile('^\*[ \t]*\}')
+mmrex = re.compile(r'^\*[ \t]*mismatch[ \t]*\{')
+endrex = re.compile(r'^\*[ \t]*\}')
filelist = []
@@ -70,7 +70,7 @@
state = 'after_mismatch'
else:
# Make sure all "A = B" syntax closes up around the equal sign.
- newline = re.sub('[ \t]*=[ \t]*', '=', line)
+ newline = re.sub(r'[ \t]*=[ \t]*', '=', line)
tokens = newline.split()
if 'vary' in tokens:
if ('dist=gauss' in tokens) or ('gauss' in tokens):
@@ -116,11 +116,11 @@
# a number of places in the models.
#--------------------------------------------------------------------
-gaussrex = re.compile('\'[ \t]+dev\/gauss=\'', re.IGNORECASE)
+gaussrex = re.compile(r'\'[ \t]+dev\/gauss=\'', re.IGNORECASE)
# Same as above, for parameters that are not already expressions.
-gauss2rex = re.compile('=[ \t]*([^ \t]+)[ \t]+dev\/gauss=\'', re.IGNORECASE)
+gauss2rex = re.compile(r'=[ \t]*([^ \t]+)[ \t]+dev\/gauss=\'', re.IGNORECASE)
#--------------------------------------------------------------------
# Step 2. Make replacements
@@ -152,7 +152,7 @@
gmatch = gauss2rex.search(newline)
if gmatch:
- newline = gauss2rex.sub("='\g<1>+" + mm_switch_param + '*AGAUSS(0,1.0,1)*', newline)
+ newline = gauss2rex.sub(r"='\g<1>+" + mm_switch_param + '*AGAUSS(0,1.0,1)*', newline)
replaced_something = True
print(" Line {}: Found PSPICE dev/gauss and replaced.".format(line_number))
diff --git a/sky130/custom/scripts/process_params.py b/sky130/custom/scripts/process_params.py
index c822b7e..0026487 100755
--- a/sky130/custom/scripts/process_params.py
+++ b/sky130/custom/scripts/process_params.py
@@ -42,9 +42,9 @@
process_params = []
-parmrex = re.compile('^\.param[ \t]+')
-prrex = re.compile('^\*[ \t]*process[ \t]*\{')
-endrex = re.compile('^\*[ \t]*\}')
+parmrex = re.compile(r'^\.param[ \t]+')
+prrex = re.compile(r'^\*[ \t]*process[ \t]*\{')
+endrex = re.compile(r'^\*[ \t]*\}')
filelist = []
@@ -77,7 +77,7 @@
state = 'after_process'
else:
# Make sure all "A = B" syntax closes up around the equal sign.
- newline = re.sub('[ \t]*=[ \t]*', '=', line)
+ newline = re.sub(r'[ \t]*=[ \t]*', '=', line)
tokens = newline.split()
if 'vary' in tokens:
if ('dist=gauss' in tokens) or ('gauss' in tokens):
diff --git a/sky130/custom/scripts/sp_to_spice.py b/sky130/custom/scripts/sp_to_spice.py
index b97e7d5..ee8d31c 100755
--- a/sky130/custom/scripts/sp_to_spice.py
+++ b/sky130/custom/scripts/sp_to_spice.py
@@ -46,8 +46,8 @@
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)
+ newline = re.sub(r'([ \t][lL]=[0-9\.]*)u', r'\1', line)
+ newline = re.sub(r'([ \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 "):
diff --git a/sky130/sky130.json b/sky130/sky130.json
index 4800903..ed2e077 100644
--- a/sky130/sky130.json
+++ b/sky130/sky130.json
@@ -94,8 +94,8 @@
"magic": "MAGIC_COMMIT"
},
"reference": {
- "open_pdks": "c10a581884a4373c1a48b18ea3fc02c19d8d5c88",
- "magic": "4445663cb1b2de1eb9818cfe89f60ed7659335f3",
+ "open_pdks": "ca4dc508d0b95eb84e4b6d79ae7011b849063a18",
+ "magic": "02669de267fb4b658306946d36323b6601df639d",
"sky130_fd_pr": "1232782c1b9fab3aacda74d67ce7c92bf7da8105",
"sky130_fd_io": "b9c10d039816c4026f9a10cf8a200b9b5caa1b63",
"sky130_fd_sc_hs": "9a855e97aa75f8a14be7eadc365c28d50045d5fc",
@@ -108,12 +108,12 @@
"sky130_osu_sc_t12": "ac90ef0c622a9377a16b5218d9da3ac4169eeaaf",
"sky130_osu_sc_t15": "95d1c19abb47e1b2945847acb4e817b1b8417c43",
"sky130_osu_sc_t18": "aa2b509f3c8f32ea94fdb55ac9768754667c1658",
- "sky130_sram_macros": "ebfbf5775c8cd433ad38a4d825e46c2275231511",
+ "sky130_sram_macros": "250e0234c456f5da500f0ca90435f1275c5e255d",
"sky130_fd_bd_sram": "be33adbcf188fdeab5c061699847d9d440f7a084",
"sky130_fd_pr_reram": "d6d2a3c6960aac0a0b12fc21221c31777bbf284d",
"sky130_ml_xx_hd": "6eb3b0718552b034f1bf1870285ff135e3fb2dcb",
- "xschem_sky130": "0597d6cd26ad460d3f4d689f9e6a11f33dc262ff",
- "klayout_sky130": "68b8aa87c129191f642da662d348e9ca6930581b",
- "precheck_sky130": "0941bdc1b62b5c3f99c8683bd11199d330af2ef3"
+ "xschem_sky130": "7d19acb9fc9c54f6de86345e454dc59e57418a26",
+ "klayout_sky130": "9861f40ff389c86fbe082122ee868a065cd4cfd4",
+ "precheck_sky130": "7eb869a4b6a5807f49d5ae738c541cce39c41ba5"
}
}