diff --git a/cocotbext/axi/apb.py b/cocotbext/axi/apb.py index 4a0d462..c302f56 100644 --- a/cocotbext/axi/apb.py +++ b/cocotbext/axi/apb.py @@ -146,6 +146,9 @@ class ApbMaster(ApbPause, Region, Reset): self.command_queue.queue_occupancy_limit = 2 self.current_command = None + self.read_resp = None + self.write_resp = None + self.in_flight_operations = 0 self._idle = Event() self._idle.set() @@ -268,7 +271,7 @@ class ApbMaster(ApbPause, Region, Reset): await self.command_queue.put(ApbWriteCmd(address, data, prot, event)) await event.wait() - return event.data + return self.write_resp async def _write_wrapper(self, address, data, prot, event): event.set(await self.write(address, data, prot)) @@ -294,7 +297,7 @@ class ApbMaster(ApbPause, Region, Reset): await self.command_queue.put(ApbReadCmd(address, length, prot, event)) await event.wait() - return event.data + return self.read_resp async def _read_wrapper(self, address, length, prot, event): event.set(await self.read(address, length, prot)) @@ -436,14 +439,14 @@ class ApbMaster(ApbPause, Region, Reset): if pwrite: self.log.info("Write complete addr: 0x%08x prot: %s resp: %s length: %d", cmd.address, cmd.prot, resp, length) - write_resp = ApbWriteResp(cmd.address, length, resp) - cmd.event.set(write_resp) + self.write_resp = ApbWriteResp(cmd.address, length, resp) + cmd.event.set() else: if self.log.isEnabledFor(logging.INFO): self.log.info("Read complete addr: 0x%08x prot: %s resp: %s data: %s", cmd.address, cmd.prot, resp, ' '.join((f'{c:02x}' for c in read_data))) - read_resp = ApbReadResp(cmd.address, bytes(read_data), resp) - cmd.event.set(read_resp) + self.read_resp = ApbReadResp(cmd.address, bytes(read_data), resp) + cmd.event.set() self.current_write_command = None diff --git a/cocotbext/axi/reset.py b/cocotbext/axi/reset.py index 8d11fa3..959b3fa 100644 --- a/cocotbext/axi/reset.py +++ b/cocotbext/axi/reset.py @@ -56,7 +56,7 @@ class Reset: async def _run_reset(self, reset_signal, active_level): while True: - await Edge(reset_signal) + await reset_signal.value_change try: level = bool(int(reset_signal.value)) except ValueError: