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