pass over config in json format
[pinmux.git] / src / spec / gen.py
index e1dc561111b6ffa425aed312ebb30e5b2cc4877c..492ba535074087c93ffb4a8d879082ba6b2c64d7 100644 (file)
@@ -1,10 +1,11 @@
 import os
+import json
 import os.path
 from spec.interfaces import Pinouts
 
 
 def specgen(of, pth, pinouts, bankspec, muxwidths, pinbanks, fixedpins,
-            fastbus):
+            configs):
     """ generates a specification of pinouts (tsv files)
         for reading in by pinmux.
 
@@ -29,16 +30,13 @@ def specgen(of, pth, pinouts, bankspec, muxwidths, pinbanks, fixedpins,
     #print pinouts.ganged.items()
     if not os.path.exists(pth):
         os.makedirs(pth)
-    with open(os.path.join(pth, 'muxwidths.txt'), 'w') as f:
-        for k, v in pinouts.muxwidths.items():
-            f.write("%s\t%d\n" % (k, v))
+    with open(os.path.join(pth, 'configs.txt'), 'w') as f:
+        f.write("%s\n" % json.dumps(configs))
+
     with open(os.path.join(pth, 'interfaces.txt'), 'w') as f:
         for k in pinouts.fnspec.keys():
             s = pinouts.fnspec[k]
             line = [k.lower(), str(len(s))]
-            for b in fastbus:
-                if b.startswith(k.lower()):
-                    line.append(b)
             line = '\t'.join(line)
             f.write("%s\n" % line)
             s0 = s[list(s.keys())[0]]  # hack, take first
@@ -60,18 +58,34 @@ def specgen(of, pth, pinouts, bankspec, muxwidths, pinbanks, fixedpins,
                             g.write("\tbus")
                         g.write("\n")
 
+    # work out range of bankspecs
+    bankpins = []
+    for k, v in bankspec.items():
+        bankpins.append((v, k))
+    bankpins.sort()
+    bankpins.reverse()
+    muxentries = {}
+    cellbank = {}
+
     pks = sorted(pinouts.keys())
 
     # truly dreadful way to work out the max mux size...
-    muxsz = 0
     for k in pks:
-        for m in pinouts[k].keys():
-            muxsz = max(muxsz, m + 1)
+        for (sz, bname) in bankpins:
+            print "keys", k, sz, bname
+            if k >= sz:
+                print "found", bname
+                muxentries[k] = muxwidths[bname]
+                cellbank[k] = bname
+                break
 
+    print muxentries
     # write out the mux...
     with open(os.path.join(pth, 'pinmap.txt'), 'w') as g:
         for k in pks:
-            res = [str(k)]
+            muxsz = muxentries[k]
+            bank = cellbank[k]
+            res = [str(k), bank, str(muxsz)]
             # append pin mux
             for midx in range(muxsz):
                 if midx in pinouts[k]: