add axi4 reg #defines
[pinmux.git] / src / bsv / peripheral_gen.py
1 class PBase(object):
2 pass
3
4 def axibase(self, name, ifacenum):
5 name = name.upper()
6 return "%(name)s%(ifacenum)dBase" % locals()
7
8 def axiend(self, name, ifacenum):
9 name = name.upper()
10 return "%(name)s%(ifacenum)dEnd" % locals()
11
12 def axi_reg_def(self, start, name, ifacenum):
13 name=name.upper()
14 offs=self.num_axi_regs32() * 4 * 16
15 end=start + offs - 1
16 bname=self.axibase(name, ifacenum)
17 bend=self.axiend(name, ifacenum)
18 comment = "%d 32-bit regs" % self.num_axi_regs32()
19 return (" `define%(bname)s 'h%(start)08X\n"
20 " `define%(bend)s 'h%(end)08X // %(comment)s" % locals(),
21 offs)
22
23
24 class uart(PBase):
25 def importfn(self):
26 return " import Uart16550 :: *;"
27
28 def ifacedecl(self):
29 return " interface RS232_PHY_Ifc uart{0}_coe;\n" + \
30 " method Bit#(1) uart{0}_intr;"
31
32 def num_axi_regs32(self):
33 return 8
34
35
36 class rs232(PBase):
37 def importfn(self):
38 return " import Uart_bs::*;\n" + \
39 " import RS232_modified::*;"
40
41 def ifacedecl(self):
42 return " interface RS232 uart{0}_coe;"
43
44 def num_axi_regs32(self):
45 return 2
46
47
48 class twi(PBase):
49 def importfn(self):
50 return " import I2C_top :: *;"
51
52 def ifacedecl(self):
53 return " interface I2C_out i2c{0}_out;\n" + \
54 " method Bit#(1) i2c{0}_isint;"
55
56 def num_axi_regs32(self):
57 return 8
58
59
60 class qspi(PBase):
61 def importfn(self):
62 return " import qspi :: *;"
63
64 def ifacedecl(self):
65 return " interface QSPI_out qspi{0}_out;\n" + \
66 " method Bit#(1) qspi{0}_isint;"
67
68 def num_axi_regs32(self):
69 return 13
70
71
72 class pwm(PBase):
73 def importfn(self):
74 return " import pwm::*;"
75
76 def ifacedecl(self):
77 return " interface PWMIO pwm_o;"
78
79 def num_axi_regs32(self):
80 return 4
81
82
83 class gpio(PBase):
84 def importfn(self):
85 return " import pinmux::*;\n" + \
86 " import mux::*;\n" + \
87 " import gpio::*;\n"
88
89 def ifacedecl(self):
90 return " interface GPIO_config#({1}) pad_config{0};"
91
92 def num_axi_regs32(self):
93 return 2
94
95
96 class PFactory(object):
97 def getcls(self, name):
98 return {'uart': uart,
99 'rs232': rs232,
100 'twi': twi,
101 'qspi': qspi,
102 'pwm': pwm,
103 'gpio': gpio
104 }.get(name, None)