add master-only spi and quad-spi
[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 if masteronly:
9 name = "m" + name
10 self.ifndict = {'N': name.upper(), 'n': name}
11 self.masteronly = masteronly
12 assert masteronly, "Only master only %s supported for now" % name
13
14 def slowimport(self):
15 return " import %(n)s :: *;" % self.ifndict
16
17 def slowifdecl(self):
18 return " interface %(N)s_out %(n)s{0}_out;\n" + \
19 " method Bit#(1) %(n)s{0}_isint;" % self.ifndict
20
21 def num_axi_regs32(self):
22 return 13
23
24 def mkslow_peripheral(self, size=0):
25 return " Ifc_%(n)s %(n)s{0} <- mk%(n)s();" % self.ifndict
26
27 def _mk_connection(self, name=None, count=0):
28 return "%(n)s{0}.slave" % self.ifndict
29
30 def pinname_out(self, pname):
31 return {'ck': 'out.clk_o',
32 'nss': 'out.ncs_o',
33 }.get(pname, '')
34
35 def __disable_pinname_outen(self, pname):
36 return {'ck': 1,
37 'nss': 1,
38 }.get(pname, '')
39
40 def mk_pincon(self, name, count):
41 ret = [PBase.mk_pincon(self, name, count)]
42 # special-case for gpio in, store in a temporary vector
43 plen = len(self.peripheral.pinspecs)
44 template = " mkConnection({0}.{1},\n\t\t\t{2}.{1});"
45 sname = self.peripheral.iname().format(count)
46 name = self.get_iname(count)
47 ps = "pinmux.peripheral_side.%s" % sname
48 n = "{0}.out".format(name)
49 for ptype in ['io_out', 'io_out_en', 'io_in']:
50 ret.append(template.format(ps, ptype, n))
51 return '\n'.join(ret)
52
53 def num_irqs(self):
54 return 6
55
56 def plic_object(self, pname, idx):
57 return "{0}.interrupts()[{1}]".format(pname, idx)
58
59 def mk_ext_ifacedef(self, iname, inum):
60 name = self.get_iname(inum)
61 return " method {0}_isint = {0}.interrupts[5];".format(name)
62
63 def slowifdeclmux(self, name, count):
64 sname = self.get_iname(count)
65 return " method Bit#(1) %s_isint;" % sname