From a285f008ca728e076b78b8043e0cc76ce5baf3c6 Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Mon, 22 Mar 2021 22:02:53 -0700 Subject: [PATCH] Refactor reset handling code --- cocotbext/axi/axi_master.py | 38 +++++++++++++++--------------------- cocotbext/axi/axil_master.py | 38 +++++++++++++++--------------------- 2 files changed, 32 insertions(+), 44 deletions(-) diff --git a/cocotbext/axi/axi_master.py b/cocotbext/axi/axi_master.py index a0b4ac9..f3724c0 100644 --- a/cocotbext/axi/axi_master.py +++ b/cocotbext/axi/axi_master.py @@ -208,31 +208,28 @@ class AxiMasterWrite(Reset): self.w_channel.clear() self.b_channel.clear() - while not self.write_command_queue.empty(): - cmd = self.write_command_queue.get_nowait() + def flush_cmd(cmd): self.log.warning("Flushed write operation during reset: %s", cmd) if cmd.event: cmd.event.set(None) + while not self.write_command_queue.empty(): + cmd = self.write_command_queue.get_nowait() + flush_cmd(cmd) + if self.current_write_command: cmd = self.current_write_command self.current_write_command = None - self.log.warning("Flushed write operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) while not self.int_write_resp_command_queue.empty(): cmd = self.int_write_resp_command_queue.get_nowait() - self.log.warning("Flushed write operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) if self.current_write_resp_command: cmd = self.current_write_resp_command self.current_write_resp_command = None - self.log.warning("Flushed write operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) for q in self.int_write_resp_queue_list: while not q.empty(): @@ -559,31 +556,28 @@ class AxiMasterRead(Reset): self.ar_channel.clear() self.r_channel.clear() - while not self.read_command_queue.empty(): - cmd = self.read_command_queue.get_nowait() + def flush_cmd(cmd): self.log.warning("Flushed read operation during reset: %s", cmd) if cmd.event: cmd.event.set(None) + while not self.read_command_queue.empty(): + cmd = self.read_command_queue.get_nowait() + flush_cmd(cmd) + if self.current_read_command: cmd = self.current_read_command self.current_read_command = None - self.log.warning("Flushed read operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) while not self.int_read_resp_command_queue.empty(): cmd = self.int_read_resp_command_queue.get_nowait() - self.log.warning("Flushed read operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) if self.current_read_resp_command: cmd = self.current_read_resp_command self.current_read_resp_command = None - self.log.warning("Flushed read operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) for q in self.int_read_resp_queue_list: while not q.empty(): diff --git a/cocotbext/axi/axil_master.py b/cocotbext/axi/axil_master.py index 0179db7..c7e7fac 100644 --- a/cocotbext/axi/axil_master.py +++ b/cocotbext/axi/axil_master.py @@ -151,31 +151,28 @@ class AxiLiteMasterWrite(Reset): self.w_channel.clear() self.b_channel.clear() - while not self.write_command_queue.empty(): - cmd = self.write_command_queue.get_nowait() + def flush_cmd(cmd): self.log.warning("Flushed write operation during reset: %s", cmd) if cmd.event: cmd.event.set(None) + while not self.write_command_queue.empty(): + cmd = self.write_command_queue.get_nowait() + flush_cmd(cmd) + if self.current_write_command: cmd = self.current_write_command self.current_write_command = None - self.log.warning("Flushed write operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) while not self.int_write_resp_command_queue.empty(): cmd = self.int_write_resp_command_queue.get_nowait() - self.log.warning("Flushed write operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) if self.current_write_resp_command: cmd = self.current_write_resp_command self.current_write_resp_command = None - self.log.warning("Flushed write operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) self.in_flight_operations = 0 self._idle.set() @@ -371,31 +368,28 @@ class AxiLiteMasterRead(Reset): self.ar_channel.clear() self.r_channel.clear() - while not self.read_command_queue.empty(): - cmd = self.read_command_queue.get_nowait() + def flush_cmd(cmd): self.log.warning("Flushed read operation during reset: %s", cmd) if cmd.event: cmd.event.set(None) + while not self.read_command_queue.empty(): + cmd = self.read_command_queue.get_nowait() + flush_cmd(cmd) + if self.current_read_command: cmd = self.current_read_command self.current_read_command = None - self.log.warning("Flushed read operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) while not self.int_read_resp_command_queue.empty(): cmd = self.int_read_resp_command_queue.get_nowait() - self.log.warning("Flushed read operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) if self.current_read_resp_command: cmd = self.current_read_resp_command self.current_read_resp_command = None - self.log.warning("Flushed read operation during reset: %s", cmd) - if cmd.event: - cmd.event.set(None) + flush_cmd(cmd) self.in_flight_operations = 0 self._idle.set()