7302d469f2e0ed65fa4d65e3ccd3b2266c0e5da9
[pinmux.git] / src / bsv / peripheral_gen / flexbus.py
1 from bsv.peripheral_gen.base import PBase
2
3
4 class flexbus(PBase):
5
6 def slowimport(self):
7 return "import FlexBus_Types::*;"
8
9 def num_axi_regs32(self):
10 return 0x4000000 # defines an entire memory range
11
12 def extfastifinstance(self, name, count):
13 return self._extifinstance(name, count, "_out", "", True,
14 ".flexbus_side")
15
16 def fastifdecl(self, name, count):
17 return "interface FlexBus_Master_IFC fb{0}_out;".format(count)
18
19 def mkfast_peripheral(self):
20 return "AXI4_Slave_to_FlexBus_Master_Xactor_IFC " + \
21 "#(`ADDR, `DATA, `USERSPACE)\n" + \
22 " fb{0} <- mkAXI4_Slave_to_FlexBus_Master_Xactor;"
23
24 def _mk_connection(self, name=None, count=0):
25 return "fb{0}.axi_side"
26
27 def pinname_in(self, pname):
28 return {'ta': 'flexbus_side.tAn',
29 }.get(pname, '')
30
31 def pinname_out(self, pname):
32 return {'ale': 'flexbus_side.m_ALE',
33 'oe': 'flexbus_side.m_OEn',
34 'rw': 'flexbus_side.m_R_Wn',
35 }.get(pname, '')
36
37 def mk_pincon(self, name, count):
38 ret = [PBase.mk_pincon(self, name, count)]
39 # special-case for gpio in, store in a temporary vector
40 plen = len(self.peripheral.pinspecs)
41 template = "mkConnection({0}.{3},\n\t\t\t{2}.flexbus_side.{1});"
42 sname = self.peripheral.iname().format(count)
43 name = self.get_iname(count)
44 ps = "pinmux.peripheral_side.%s" % sname
45 n = "{0}".format(name)
46 for stype, ptype in [
47 ('cs', 'm_FBCSn'),
48 ('bwe', 'm_BWEn'),
49 ('tbst', 'm_TBSTn'),
50 ('tsiz', 'm_TSIZ'),
51 ('ad_in', 'm_AD'),
52 ('ad_out', 'm_din'),
53 ('ad_en', 'm_OE32n'),
54 ]:
55 ret.append(template.format(ps, ptype, n, stype))
56 return '\n'.join(ret)