Modified foundry_install.py to add SPICE/CDL port index annotation
to the generation of maglef files (which was done for layout views
in mag/ but had been missed for layout views in maglef/). Also:
Corrected a regexp for port labels that failed to match on labels
with a sticky bit set, which was causing port numbering to get
screwed up after being carefully set by the generation scripts.
Thanks to Mitch Bailey for the fix.
diff --git a/common/foundry_install.py b/common/foundry_install.py
index dca4029..731d07d 100755
--- a/common/foundry_install.py
+++ b/common/foundry_install.py
@@ -1550,16 +1550,22 @@
srclibdir = srcdir + '/' + destlib
maglibdir = magdir + '/' + destlib
cdllibdir = cdldir + '/' + destlib
+ clibdir = cdir + '/' + destlib
+ slibdir = sdir + '/' + destlib
else:
destdir = targetdir + '/libs.ref/' + destlib + '/maglef'
srcdir = targetdir + lef_reflib + destlib + '/lef'
magdir = targetdir + gds_reflib + destlib + '/mag'
cdldir = targetdir + cdl_reflib + destlib + '/cdl'
+ cdir = targetdir + cdl_reflib + destlib + '/cdl'
+ sdir = targetdir + cdl_reflib + destlib + '/spice'
destlibdir = destdir
srclibdir = srcdir
maglibdir = magdir
cdllibdir = cdldir
+ clibdir = cdir
+ slibdir = sdir
os.makedirs(destlibdir, exist_ok=True)
@@ -1635,10 +1641,26 @@
for leffile in leffiles:
print('lef read ' + srclibdir + '/' + leffile, file=ofile)
- for lefmacro in lefmacros:
+ # Use CDL or SPICE netlists to make sure that ports are
+ # present, and to set the port order
- # To be completed: Parse SPICE file for port order, make
- # sure ports are present and ordered.
+ if have_cdl or have_spice:
+ if have_cdl:
+ netdir = clibdir
+ else:
+ netdir = slibdir
+
+ # Find CDL/SPICE file names in the source
+ # Ignore "sources.txt" if it is in the list.
+ netfiles = os.listdir(netdir)
+ print('puts stdout "Annotating cells from CDL/SPICE"',
+ file=ofile)
+ for netfile in netfiles:
+ if os.path.split(netfile)[1] != 'sources.txt':
+ print('catch {readspice ' + netdir + '/' + netfile
+ + '}', file=ofile)
+
+ for lefmacro in lefmacros:
if pdklibrary and lefmacro in shortdevlist:
print('set cellname ' + lefmacro, file=ofile)
@@ -1743,7 +1765,7 @@
proprex = re.compile('<< properties >>')
endrex = re.compile('<< end >>')
rlabrex = re.compile('rlabel[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+([^ \t]+)')
- flabrex = re.compile('flabel[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+([^ \t]+)')
+ flabrex = re.compile('flabel[ \t]+.*[ \t]+([^ \t]+)[ \t]*')
portrex = re.compile('port[ \t]+([^ \t]+)[ \t]+(.*)')
gcellrex = re.compile('string gencell')
portnum = -1