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 print "gpioslow", self
.peripheral
.configs
40 size
= len(self
.peripheral
.pinspecs
)
41 dflt_
= "%s" % ("0"*size
*2) # default if not set in spec
42 dflt
= self
.peripheral
.configs
[0].get("muxconfig", dflt_
)
43 return "MUX#(%d) mux{0} <- mkmux(`b%s);\n" % (size
, dflt
)+ \
44 "GPIO#(%d) gpio{0} <- mkgpio();" % size
46 def mk_connection(self
, count
, fabricname
, typ
):
47 print "GPIO mk_conn", self
.name
, count
49 dname
= self
.mksuffix(self
.name
, count
)
50 for i
, n
in enumerate(['gpio' + dname
, 'mux' + dname
]):
51 res
.append(PBase
.mk_connection(self
, count
, fabricname
, typ
, n
))
54 def _mk_connection(self
, name
=None, count
=0):
55 n
= self
.mksuffix(name
, count
)
56 if name
.startswith('gpio'):
57 return "gpio{0}.axi_slave".format(n
)
58 if name
.startswith('mux'):
59 return "mux{0}.axi_slave".format(n
)
61 def mksuffix(self
, name
, i
):
62 if name
.startswith('mux'):
66 def mk_cellconn(self
, cellnum
, name
, count
):
68 bank
= self
.mksuffix(name
, count
)
69 txt
= "pinmux.mux_lines.cell{0}_mux(mux{1}.mux_config.mux[{2}]);"
70 for p
in self
.peripheral
.pinspecs
:
71 ret
.append(txt
.format(cellnum
, bank
, p
['name'][1:]))
73 return ("\n".join(ret
), cellnum
)
75 def pinname_out(self
, pname
):
76 return "func.gpio_out[{0}]".format(pname
[1:])
78 def pinname_outen(self
, pname
):
79 return "func.gpio_out_en[{0}]".format(pname
[1:])
81 def _mk_pincon(self
, name
, count
, typ
):
82 #ret = [PBase.mk_pincon(self, name, count)]
83 # special-case for gpio in, store in a temporary vector
86 plen
= len(self
.peripheral
.pinspecs
)
87 template
= "mkConnection({0}.{1},\n\t\t\t{2}_{1});"
88 ps
= "pinmux.peripheral_side.%s" % name
89 n
= "{0}.func.gpio".format(name
)
90 for ptype
in ['out', 'out_en', 'in']:
91 ret
.append(template
.format(ps
, ptype
, n
))