X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fspec%2Fgen.py;h=96843ce11764d34f795d20fe3557f5486ce1beca;hb=22dd76c81a6acfa06f709bf634a78bcf03b21a15;hp=cfc59a0565c88d0af0d80d5c090ebed8ac542c81;hpb=132e433aada704244aa29e24f3b049f5e64fb5de;p=pinmux.git diff --git a/src/spec/gen.py b/src/spec/gen.py index cfc59a0..96843ce 100644 --- a/src/spec/gen.py +++ b/src/spec/gen.py @@ -3,20 +3,43 @@ import os.path from spec.interfaces import Pinouts -def specgen(of, pth, pinouts, bankspec, pinbanks, fixedpins): +def specgen(of, pth, pinouts, bankspec, muxwidths, pinbanks, fixedpins, + fastbus): """ generates a specification of pinouts (tsv files) - for reading in by pinmux + for reading in by pinmux. + + files generated: + * interfaces.txt - contains name and number of interfaces + * {interfacename}.txt - contains name of pin, type, and bus + + type may be in, out or inout. + if type is "inout" then a THIRD optional parameter of type + "bus" indicates whether the bus is ganged together. in + future this may be "bus1", "bus2" and so on if an interface + contains more than one ganged group. + + basically if the function needs to control whether a group + of pins shall be switched from input to output (as opposed + to the *pinmux* via user control deciding that), bus is + the way to indicate it. """ pth = pth or '' #print bankspec.keys() #print fixedpins.keys() + #print pinouts.ganged.items() if not os.path.exists(pth): os.makedirs(pth) with open(os.path.join(pth, 'interfaces.txt'), 'w') as f: for k in pinouts.fnspec.keys(): s = pinouts.fnspec[k] - f.write("%s\t%d\n" % (k.lower(), len(s))) + 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 + gangedgroup = pinouts.ganged[k] with open(os.path.join(pth, '%s.txt' % k.lower()), 'w') as g: if len(s0.pingroup) == 1: # only one function, grouped higher for ks in s.keys(): # grouped by interface @@ -29,7 +52,10 @@ def specgen(of, pth, pinouts, bankspec, pinbanks, fixedpins): for pinname in s0.pingroup: fntype = s0.fntype.get(pinname, 'inout') pn = pinname.lower() - g.write("%s\t%s\n" % (pn, fntype)) + g.write("%s\t%s" % (pn, fntype)) + if fntype == 'inout' and pinname in gangedgroup: + g.write("\tbus") + g.write("\n") pks = sorted(pinouts.keys()) @@ -62,9 +88,9 @@ def specgen(of, pth, pinouts, bankspec, pinbanks, fixedpins): # lists bankspec, shows where the pin-numbers *start* of.write("# Pin Bank starting points and lengths\n\n") with open(os.path.join(pth, 'pinspec.txt'), 'w') as g: - keys = list(bankspec.keys()) - keys.sort() + keys = sorted(bankspec.keys()) for bank in keys: pinstart = bankspec[bank] - of.write("* %s %d %d\n" % (bank, pinstart, pinbanks[bank])) - g.write("%s\t%d\t%d\n" % (bank, pinstart, pinbanks[bank])) + wid = muxwidths[bank] + of.write("* %s %d %d %d\n" % (bank, pinstart, pinbanks[bank], wid)) + g.write("%s\t%d\t%d\t%d\n" % (bank, pinstart, pinbanks[bank], wid))