1 # ================================== Steps to add peripherals ============
2 # Step-1: create interface declaration for the peripheral to be added.
3 # Remember these are interfaces defined for the pinmux and hence
4 # will be opposite to those defined at the peripheral.
5 # For eg. the output TX from the UART will be input (method Action)
7 # These changes will have to be done in interface_decl.py
8 # Step-2 define the wires that will be required to transfer data from the
9 # peripheral interface to the IO cell and vice-versa. Create a
10 # mkDWire for each input/output between the peripheral and the
11 # pinmux. Also create an implicit wire of GenericIOType for each cell
12 # that can be connected to a each bit from the peripheral.
13 # These changes will have to be done in wire_def.py
14 # Step-3: create the definitions for each of the methods defined above.
15 # These changes will have to be done in interface_decl.py
16 # ========================================================================
18 # default module imports
23 from spec
import modules
, specgen
, dummytest
27 print ('''pinmux_generator.py [-o outputdir] [-v|--validate] [-h|--help]
28 [-t outputtype] [-s|--spec spec]
29 -s | spec : generate from spec (python module)
30 -t | outputtype : outputtype, defaults to bsv
31 -o outputdir : defaults to bsv_src. also location for reading pinmux.txt
32 interfaces.txt and *.txt
33 -v | --validate : runs some validation on the pinmux
34 -h | --help : this help message
38 if __name__
== '__main__':
40 options
, remainder
= getopt
.getopt(
51 except getopt
.GetoptError
as err
:
52 print ("ERROR: %s" % str(err
))
62 for opt
, arg
in options
:
63 if opt
in ('-o', '--output'):
65 elif opt
in ('-s', '--spec'):
67 elif opt
in ('-t', '--outputtype'):
69 elif opt
in ('-v', '--validate'):
71 elif opt
in ('--test',):
73 elif opt
in ('-h', '--help'):
78 if pinspec
not in modules
:
79 print ("ERROR: spec type '%s' does not exist" % pinspec
)
82 module
= modules
[pinspec
]
84 fname
= os
.path
.join(output_dir
or '', "%s.mdwn" % pinspec
)
85 pyname
= os
.path
.join(output_dir
or '', "%s_pins.py" % pinspec
)
86 d
= os
.path
.split(fname
)[0]
87 if not os
.path
.exists(d
):
89 with
open(fname
, "w") as of
:
90 with
open(pyname
, "w") as pyf
:
92 pinout
, bankspec
, pin_spec
, fixedpins
= ps
.write(of
)
93 #chip['litex.map'] = litexmap
95 dummytest(ps
, output_dir
, output_type
)
97 specgen(of
, output_dir
, pinout
,
98 bankspec
, ps
.muxwidths
, pin_spec
, fixedpins
,
100 pm
, chip
= module
.pinparse(ps
, pinspec
)
101 litexmap
= ps
.pywrite(pyf
, pm
)
102 chip
= json
.dumps(chip
)
103 with
open("%s/litex_pinpads.json" % pinspec
, "w") as f
:
107 if output_type
== 'bsv':
108 from bsv
.pinmux_generator
import pinmuxgen
as gentypes
109 elif output_type
== 'myhdl':
110 from myhdlgen
.pinmux_generator
import pinmuxgen
as gentypes
112 print ("ERROR: output type '%s' does not exist" % output_type
)
116 gentypes(output_dir
, validate
)