+ def mkslow_peripheral(self, size=0):
+ print "gpioslow", self.peripheral, dir(self.peripheral)
+ size = len(self.peripheral.pinspecs)
+ return " MUX#(%d) mux{0} <- mkmux();\n" % size + \
+ " GPIO#(%d) gpio{0} <- mkgpio();" % size
+
+ def mk_connection(self, count):
+ print "GPIO mk_conn", self.name, count
+ res = []
+ dname = self.mksuffix(self.name, count)
+ for i, n in enumerate(['gpio' + dname, 'mux' + dname]):
+ res.append(PBase.mk_connection(self, count, n))
+ return '\n'.join(res)
+
+ def _mk_connection(self, name=None, count=0):
+ n = self.mksuffix(name, count)
+ if name.startswith('gpio'):
+ return "gpio{0}.axi_slave".format(n)
+ if name.startswith('mux'):
+ return "mux{0}.axi_slave".format(n)
+
+ def mksuffix(self, name, i):
+ if name.startswith('mux'):
+ return name[3:]
+ return name[4:]
+
+ def mk_cellconn(self, cellnum, name, count):
+ ret = []
+ bank = self.mksuffix(name, count)
+ txt = " pinmux.mux_lines.cell{0}_mux(mux{1}.mux_config.mux[{2}]);"
+ for p in self.peripheral.pinspecs:
+ ret.append(txt.format(cellnum, bank, p['name'][1:]))
+ cellnum += 1
+ return ("\n".join(ret), cellnum)
+
+ def pinname_out(self, pname):
+ return "func.gpio_out[{0}]".format(pname[1:])
+
+ def pinname_outen(self, pname):
+ return {'sda': 'out.sda_outen',
+ 'scl': 'out.scl_outen'}.get(pname, '')
+
+ def mk_pincon(self, name, count):
+ ret = [PBase.mk_pincon(self, name, count)]
+ # special-case for gpio in, store in a temporary vector
+ plen = len(self.peripheral.pinspecs)
+ ret.append(" rule con_%s%d_in;" % (name, count))
+ ret.append(" Vector#({0},Bit#(1)) temp;".format(plen))
+ for p in self.peripheral.pinspecs:
+ typ = p['type']
+ pname = p['name']
+ idx = pname[1:]
+ n = name
+ sname = self.peripheral.pname(pname).format(count)
+ ps = "pinmux.peripheral_side.%s_in" % sname
+ ret.append(" temp[{0}]={1};".format(idx, ps))
+ ret.append(" {0}.func.gpio_in(temp);".format(name))
+ ret.append(" endrule")
+ return '\n'.join(ret)