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