4d5b13444e97c245411672cef14536e80234c378
[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 0x400000 # 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 "#(`PADDR, `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.m_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, typ):
38 ret = [PBase._mk_pincon(self, name, count, typ)]
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.get_iname(count)
43 # SLOW -->sname = self.peripheral.iname().format(count)
44 name = self.get_iname(count)
45 assert typ == 'fast' # TODO slow?
46 ps = "slow_peripherals.%s" % sname
47 n = "{0}".format(name)
48 for stype, ptype in [
49 ('cs', 'm_FBCSn'),
50 ('bwe', 'm_BWEn'),
51 ('tbst', 'm_TBSTn'),
52 ('tsiz', 'm_TSIZ'),
53 ('ad_out', 'm_AD'),
54 ('ad_in', 'm_din'),
55 ('ad_out_en', 'm_OE32n'),
56 ]:
57 ret.append(template.format(ps, ptype, n, stype))
58 return '\n'.join(ret)