def mkslow_peripheral(self):
         return ''
 
+    def mksuffix(self, name, i):
+        return i
+
     def __mk_connection(self, con, aname):
         txt =  "        mkConnection (slow_fabric.v_to_slaves\n" + \
                "                    [fromInteger(valueOf({1}))],\n" + \
             name = self.name
         print "PBase mk_conn", self.name, count
         aname = self.axi_slave_name(name, count)
-        con = self._mk_connection(name).format(count, aname)
+        #dname = self.mksuffix(name, count)
+        #dname = "{0}{1}".format(name, dname)
+        con = self._mk_connection(name, count).format(count, aname)
         return self.__mk_connection(con, aname)
 
-    def _mk_connection(self, name=None):
+    def _mk_connection(self, name=None, count=0):
         return ''
 
 
                "                mkUart16550(clocked_by uart_clock,\n" + \
                "                    reset_by uart_reset, sp_clock, sp_reset);"
 
-    def _mk_connection(self, name=None):
+    def _mk_connection(self, name=None, count=0):
         return "uart{0}.slave_axi_uart"
 
 
                "                mkUart_bs(clocked_by sp_clock,\n" + \
                "                    reset_by sp_reset, sp_clock, sp_reset);"
 
-    def _mk_connection(self, name=None):
+    def _mk_connection(self, name=None, count=0):
         return "uart{0}.slave_axi_uart"
 
 
     def mkslow_peripheral(self):
         return "        I2C_IFC i2c{0} <- mkI2CController();"
 
-    def _mk_connection(self, name=None):
+    def _mk_connection(self, name=None, count=0):
         return "i2c{0}.slave_i2c_axi"
 
 
     def mkslow_peripheral(self):
         return "        Ifc_qspi qspi{0} <-  mkqspi();"
 
-    def _mk_connection(self, name=None):
+    def _mk_connection(self, name=None, count=0):
         return "qspi{0}.slave"
 
 
     def mkslow_peripheral(self):
         return "        Ifc_PWM_bus pwm{0}_bus <- mkPWM_bus(sp_clock);"
 
-    def _mk_connection(self, name=None):
+    def _mk_connection(self, name=None, count=0):
         return "pwm{0}_bus.axi4_slave"
 
 
     def mk_connection(self, count):
         print "GPIO mk_conn", self.name, count
         res = []
-        for i, n in enumerate(['gpio', 'mux']):
+        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):
+    def _mk_connection(self, name=None, count=0):
+        n = self.mksuffix(name, count)
         if name.startswith('gpio'):
-            return "gpio{0}.axi_slave"
+            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 "mux{0}.axi_slave"
+            return name[3:]
+        return name[4:]
 
-    def mk_cellconn(self, cellnum, bank, count):
+    def mk_cellconn(self, cellnum, name, count):
         ret = []
-        bank = bank[4:] # strip off "gpio"
+        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:]))
         #print "PeripheralIface"
         #print dir(self)
 
+    def mksuffix(self, name, i):
+        if self.slow is None:
+            return i
+        return self.slow.mksuffix(name, i)
+
     def axi_reg_def(self, start, count):
         if not self.slow:
             return ('', 0)
                 print "mkslow", name, count
                 x = self.data[name].mkslow_peripheral()
                 print name, count, x
-                ret.append(x.format(i))
+                suffix = self.data[name].mksuffix(name, i)
+                ret.append(x.format(suffix))
         return '\n'.join(list(filter(None, ret)))
 
     def mk_connection(self, *args):