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