- for row in range(self.n_rows):
- with module.If(addr == Const(row)):
- offset = row*self.wordsize
- for byte in range(self.wordsize):
- domain += multi[byte].oe.eq(gp[byte+offset].oe)
- domain += multi[byte].puen.eq(gp[byte+offset].puen)
- domain += multi[byte].pden.eq(gp[byte+offset].pden)
- # prevent output being set if GPIO configured as i
- # TODO: No checking is done if ie/oe high together
- with module.If(gp[byte+offset].oe):
- domain += multi[byte].io.eq(gp[byte+offset].o)
- with module.Else():
- domain += multi[byte].io.eq(gp[byte+offset].i)
- domain += multi[byte].bank.eq(gp[byte+offset].bank)
+ for byte in range(self.wordsize):
+ with module.If(addr[0]):
+ self.rd_connect_one_byte(module, domain, gp, multi, byte, self.wordsize)
+ with module.Else():
+ self.rd_connect_one_byte(module, domain, gp, multi, byte, 0)