1 from bsv
.peripheral_gen
.base
import PBase
7 return " import pinmux::*;\n" + \
8 " import mux::*;\n" + \
11 def slowifdeclmux(self
):
12 size
= len(self
.peripheral
.pinspecs
)
13 return " interface GPIO_config#(%d) pad_config{0};" % size
15 def num_axi_regs32(self
):
18 def axi_slave_idx(self
, idx
, name
, ifacenum
):
19 """ generates AXI slave number definition, except
20 GPIO also has a muxer per bank
23 mname
= 'mux' + name
[4:]
25 print "AXIslavenum", name
, mname
26 (ret
, x
) = PBase
.axi_slave_idx(self
, idx
, name
, ifacenum
)
27 (ret2
, x
) = PBase
.axi_slave_idx(self
, idx
+ 1, mname
, ifacenum
)
28 return ("%s\n%s" % (ret
, ret2
), 2)
30 def mkslow_peripheral(self
, size
=0):
31 print "gpioslow", self
.peripheral
, dir(self
.peripheral
)
32 size
= len(self
.peripheral
.pinspecs
)
33 return " MUX#(%d) mux{0} <- mkmux();\n" % size
+ \
34 " GPIO#(%d) gpio{0} <- mkgpio();" % size
36 def mk_connection(self
, count
):
37 print "GPIO mk_conn", self
.name
, count
39 dname
= self
.mksuffix(self
.name
, count
)
40 for i
, n
in enumerate(['gpio' + dname
, 'mux' + dname
]):
41 res
.append(PBase
.mk_connection(self
, count
, n
))
44 def _mk_connection(self
, name
=None, count
=0):
45 n
= self
.mksuffix(name
, count
)
46 if name
.startswith('gpio'):
47 return "gpio{0}.axi_slave".format(n
)
48 if name
.startswith('mux'):
49 return "mux{0}.axi_slave".format(n
)
51 def mksuffix(self
, name
, i
):
52 if name
.startswith('mux'):
56 def mk_cellconn(self
, cellnum
, name
, count
):
58 bank
= self
.mksuffix(name
, count
)
59 txt
= " pinmux.mux_lines.cell{0}_mux(mux{1}.mux_config.mux[{2}]);"
60 for p
in self
.peripheral
.pinspecs
:
61 ret
.append(txt
.format(cellnum
, bank
, p
['name'][1:]))
63 return ("\n".join(ret
), cellnum
)
65 def pinname_out(self
, pname
):
66 return "func.gpio_out[{0}]".format(pname
[1:])
68 def pinname_outen(self
, pname
):
69 return "func.gpio_out_en[{0}]".format(pname
[1:])
71 def mk_pincon(self
, name
, count
):
72 #ret = [PBase.mk_pincon(self, name, count)]
73 # special-case for gpio in, store in a temporary vector
75 plen
= len(self
.peripheral
.pinspecs
)
76 template
= " mkConnection({0}.{1},\n\t\t\t{2}_{1});"
77 ps
= "pinmux.peripheral_side.%s" % name
78 n
= "{0}.func.gpio".format(name
)
79 for ptype
in ['out', 'out_en', 'in']:
80 ret
.append(template
.format(ps
, ptype
, n
))