d86c5827a249b064fd59121ec8a881bccd3cb9fc
1 from bsv
.peripheral_gen
.base
import PBase
7 return "import pinmux::*;\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 dflt
= "'b%s" % ("0"*size
*2)
41 return "MUX#(%d) mux{0} <- mkmux(%s);\n" % (size
, dflt
)+ \
42 "GPIO#(%d) gpio{0} <- mkgpio();" % size
44 def mk_connection(self
, count
, fabricname
, typ
):
45 print "GPIO mk_conn", self
.name
, count
47 dname
= self
.mksuffix(self
.name
, count
)
48 for i
, n
in enumerate(['gpio' + dname
, 'mux' + dname
]):
49 res
.append(PBase
.mk_connection(self
, count
, fabricname
, typ
, n
))
52 def _mk_connection(self
, name
=None, count
=0):
53 n
= self
.mksuffix(name
, count
)
54 if name
.startswith('gpio'):
55 return "gpio{0}.axi_slave".format(n
)
56 if name
.startswith('mux'):
57 return "mux{0}.axi_slave".format(n
)
59 def mksuffix(self
, name
, i
):
60 if name
.startswith('mux'):
64 def mk_cellconn(self
, cellnum
, name
, count
):
66 bank
= self
.mksuffix(name
, count
)
67 txt
= "pinmux.mux_lines.cell{0}_mux(mux{1}.mux_config.mux[{2}]);"
68 for p
in self
.peripheral
.pinspecs
:
69 ret
.append(txt
.format(cellnum
, bank
, p
['name'][1:]))
71 return ("\n".join(ret
), cellnum
)
73 def pinname_out(self
, pname
):
74 return "func.gpio_out[{0}]".format(pname
[1:])
76 def pinname_outen(self
, pname
):
77 return "func.gpio_out_en[{0}]".format(pname
[1:])
79 def _mk_pincon(self
, name
, count
, typ
):
80 #ret = [PBase.mk_pincon(self, name, count)]
81 # special-case for gpio in, store in a temporary vector
84 plen
= len(self
.peripheral
.pinspecs
)
85 template
= "mkConnection({0}.{1},\n\t\t\t{2}_{1});"
86 ps
= "pinmux.peripheral_side.%s" % name
87 n
= "{0}.func.gpio".format(name
)
88 for ptype
in ['out', 'out_en', 'in']:
89 ret
.append(template
.format(ps
, ptype
, n
))