if name.startswith('mux'):
             return "mux{0}.axi_slave"
 
+    def mk_cellconn(self, cellnum, bank, count):
+        ret = []
+        bank = bank[4:] # strip off "gpio"
+        txt = "       pinmux.mux_lines.cell{0}_mux(mux{1}.mux_config.mux[{2}]);"
+        return txt.format(cellnum, bank, count)
+
 
 axi_slave_declarations = """\
 typedef  0  SlowMaster;
 
     def mk_cellconn(self):
         ret = []
-        txt = "        pinmux.mux_lines.cell{0}_mux(muxa.mux_config.mux[{0}]);"
+        cellcount = 0
         for (name, count) in self.ifacecount:
             for i in range(count):
-                ret.append(txt.format(i))
+                txt = self.data[name].mk_cellcon(cellcount, name, i)
+                cellcount += 1
+                ret.append(txt)
         ret = '\n'.join(list(filter(None, ret)))
         return pinmux_cellrule.format(ret)
 
 
     fnaddrmap = ifaces.axi_addr_map()
     mkslow = ifaces.mkslow_peripheral()
     mkcon = ifaces.mk_connection()
-    mkcellcon = iocells.mk_cellconn()
+    mkcellcon = ifaces.mk_cellconn()
     with open(slow, "w") as bsv_file:
         bsv_file.write(template.format(imports, ifdecl, regdef, slavedecl,
                                        fnaddrmap, mkslow, mkcon, mkcellcon))