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
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, ps.muxwidths, pinspec, fixedpins, ps.fastbus)
+ 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)