fix(iomux): Fix port signal length (given mux size non-power of 2)
[pinmux.git] / src / bsv / peripheral_gen / nspi.py
1 from bsv.peripheral_gen.base import PBase
2
3
4 class nspi(PBase):
5
6 def __init__(self, name, masteronly):
7 PBase.__init__(self, name)
8 self.ifndict = {'N': name.upper(), 'n': name}
9 self.masteronly = masteronly
10 assert masteronly, "Only master only %s supported for now" % name
11
12 def slowimport(self):
13 return "import %(n)s :: *;" % self.ifndict
14
15 def irq_name(self):
16 return "%(n)s{0}_isint" % self.ifndict
17
18 def slowifdecl(self):
19 return "interface %(N)s_out %(n)s{0}_out;\n" + \
20 "method Bit#(1) %s;" % self.irq_name
21
22 def num_axi_regs32(self):
23 return 13
24
25 def mkslow_peripheral(self, size=0):
26 return "Ifc_%(n)s %(n)s{0} <- mk%(n)s();" % self.ifndict
27
28 def _mk_connection(self, name=None, count=0):
29 return "%(n)s{0}.slave" % self.ifndict
30
31 def pinname_out(self, pname):
32 return {'ck': 'out.clk_o',
33 'nss': 'out.ncs_o',
34 }.get(pname, '')
35
36 def __disable_pinname_outen(self, pname):
37 return {'ck': 1,
38 'nss': 1,
39 }.get(pname, '')
40
41 def _mk_pincon(self, name, count, typ):
42 assert typ == 'slow', "TODO, make slow mkConnection"
43 ret = [PBase._mk_pincon(self, name, count, typ)]
44 # special-case for gpio in, store in a temporary vector
45 plen = len(self.peripheral.pinspecs)
46 template = "mkConnection({0}.{1},\n\t\t\t{2}.{1});"
47 sname = self.peripheral.iname().format(count)
48 name = self.get_iname(count)
49 ps = "pinmux.peripheral_side.%s" % sname
50 n = "{0}.out".format(name)
51 for ptype in ['io_out', 'io_out_en', 'io_in']:
52 ret.append(template.format(ps, ptype, n))
53 return '\n'.join(ret)
54
55 def num_irqs(self):
56 return 6
57
58 def plic_object(self, pname, idx):
59 return "{0}.interrupts()[{1}]".format(pname, idx)
60
61 def mk_ext_ifacedef(self, iname, inum):
62 name = self.get_iname(inum)
63 return "method {0}_isint = {0}.interrupts[5];".format(name)
64
65 def slowifdeclmux(self, name, count):
66 sname = self.get_iname(count)
67 return "method Bit#(1) %s_isint;" % sname