X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fpinmux_generator.py;h=b8afe99d69ccff76eb55a4ec58d77ed49233d882;hb=aaf02ca9531349d644e059f7cac9a11fcf6d25d2;hp=407314cd8d0153ced36a53150528dbe23c357cac;hpb=17ab361abe56c3311d39b4141a68aefca09119ca;p=pinmux.git diff --git a/src/pinmux_generator.py b/src/pinmux_generator.py index 407314c..b8afe99 100644 --- a/src/pinmux_generator.py +++ b/src/pinmux_generator.py @@ -19,12 +19,13 @@ import getopt import os.path import sys +from spec import modules, specgen, dummytest -from bsv.pinmux_generator import pinmuxgen as bsvgen def printhelp(): print ('''pinmux_generator.py [-o outputdir] [-v|--validate] [-h|--help] - [-t outputtype] + [-t outputtype] [-s|--spec spec] + -s | spec : generate from spec (python module) -t | outputtype : outputtype, defaults to bsv -o outputdir : defaults to bsv_src. also location for reading pinmux.txt interfaces.txt and *.txt @@ -37,36 +38,67 @@ if __name__ == '__main__': try: options, remainder = getopt.getopt( sys.argv[1:], - 'o:vht:', + 'o:vht:s:', ['output=', 'validate', + 'test', 'outputtype=', + 'spec=', 'help', 'version=', ]) except getopt.GetoptError as err: - print "ERROR: %s" % str(err) + print ("ERROR: %s" % str(err)) printhelp() sys.exit(1) output_type = 'bsv' output_dir = None validate = False + spec = None + pinspec = None + testing = False for opt, arg in options: if opt in ('-o', '--output'): output_dir = arg + elif opt in ('-s', '--spec'): + pinspec = arg elif opt in ('-t', '--outputtype'): output_type = arg elif opt in ('-v', '--validate'): validate = True + elif opt in ('--test',): + testing = True elif opt in ('-h', '--help'): printhelp() sys.exit(0) - gentypes = {'bsv': bsvgen} - if not gentypes.has_key(output_type): - print "ERROR: output type '%s' does not exist" % output_type - printhelp() - sys.exit(0) - gentypes[output_type](output_dir, validate) + if pinspec: + if pinspec not in modules: + print ("ERROR: spec type '%s' does not exist" % pinspec) + printhelp() + sys.exit(1) + module = modules[pinspec] + + fname = os.path.join(output_dir or '', "%s.mdwn" % pinspec) + d = os.path.split(fname)[0] + if not os.path.exists(d): + os.makedirs(d) + with open(fname, "w") as of: + ps = module.pinspec() + pinout, bankspec, pinspec, fixedpins = ps.write(of) + if testing: + dummytest(ps, output_dir, output_type) + else: + specgen(of, output_dir, pinout, bankspec, pinspec, fixedpins) + else: + if output_type == 'bsv': + from bsv.pinmux_generator import pinmuxgen as gentypes + elif output_type == 'myhdl': + from myhdlgen.pinmux_generator import pinmuxgen as gentypes + else: + print ("ERROR: output type '%s' does not exist" % output_type) + printhelp() + sys.exit(0) + gentypes(output_dir, validate)