Return event object from init_read and init_write; remove get_write_resp and get_read_data
This commit is contained in:
@@ -64,7 +64,6 @@ class AxiMasterWrite(Reset):
|
||||
|
||||
self.write_command_queue = Queue()
|
||||
self.current_write_command = None
|
||||
self.write_resp_queue = Queue()
|
||||
|
||||
self.id_count = 2**len(self.aw_channel.bus.awid)
|
||||
self.cur_id = 0
|
||||
@@ -108,7 +107,10 @@ class AxiMasterWrite(Reset):
|
||||
def init_write(self, address, data, awid=None, burst=AxiBurstType.INCR, size=None, lock=AxiLockType.NORMAL,
|
||||
cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0, wuser=0, event=None):
|
||||
|
||||
if event is not None and not isinstance(event, Event):
|
||||
if event is None:
|
||||
event = Event()
|
||||
|
||||
if not isinstance(event, Event):
|
||||
raise ValueError("Expected event object")
|
||||
|
||||
if awid is None or awid < 0:
|
||||
@@ -140,6 +142,8 @@ class AxiMasterWrite(Reset):
|
||||
cache, prot, qos, region, user, wuser, event)
|
||||
self.write_command_queue.put_nowait(cmd)
|
||||
|
||||
return event
|
||||
|
||||
def idle(self):
|
||||
return not self.in_flight_operations
|
||||
|
||||
@@ -147,18 +151,9 @@ class AxiMasterWrite(Reset):
|
||||
while not self.idle():
|
||||
await self._idle.wait()
|
||||
|
||||
def write_resp_ready(self):
|
||||
return not self.write_resp_queue.empty()
|
||||
|
||||
def get_write_resp(self):
|
||||
if not self.write_resp_queue.empty():
|
||||
return self.write_resp_queue.get_nowait()
|
||||
return None
|
||||
|
||||
async def write(self, address, data, awid=None, burst=AxiBurstType.INCR, size=None,
|
||||
lock=AxiLockType.NORMAL, cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0, wuser=0):
|
||||
event = Event()
|
||||
self.init_write(address, data, awid, burst, size, lock, cache, prot, qos, region, user, wuser, event)
|
||||
event = self.init_write(address, data, awid, burst, size, lock, cache, prot, qos, region, user, wuser)
|
||||
await event.wait()
|
||||
return event.data
|
||||
|
||||
@@ -239,10 +234,6 @@ class AxiMasterWrite(Reset):
|
||||
if cmd.event:
|
||||
cmd.event.set(None)
|
||||
|
||||
while not self.write_resp_queue.empty():
|
||||
resp = self.write_resp_queue.get_nowait()
|
||||
self.log.warning("Flushed write response during reset: %s", resp)
|
||||
|
||||
self.in_flight_operations = 0
|
||||
self._idle.set()
|
||||
else:
|
||||
@@ -401,10 +392,7 @@ class AxiMasterWrite(Reset):
|
||||
|
||||
write_resp = AxiWriteResp(cmd.address, cmd.length, resp, user)
|
||||
|
||||
if cmd.event is not None:
|
||||
cmd.event.set(write_resp)
|
||||
else:
|
||||
self.write_resp_queue.put_nowait(write_resp)
|
||||
|
||||
self.current_write_resp_command = None
|
||||
|
||||
@@ -428,7 +416,6 @@ class AxiMasterRead(Reset):
|
||||
|
||||
self.read_command_queue = Queue()
|
||||
self.current_read_command = None
|
||||
self.read_data_queue = Queue()
|
||||
|
||||
self.id_count = 2**len(self.ar_channel.bus.arid)
|
||||
self.cur_id = 0
|
||||
@@ -470,7 +457,10 @@ class AxiMasterRead(Reset):
|
||||
def init_read(self, address, length, arid=None, burst=AxiBurstType.INCR, size=None,
|
||||
lock=AxiLockType.NORMAL, cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0, event=None):
|
||||
|
||||
if event is not None and not isinstance(event, Event):
|
||||
if event is None:
|
||||
event = Event()
|
||||
|
||||
if not isinstance(event, Event):
|
||||
raise ValueError("Expected event object")
|
||||
|
||||
if length < 0:
|
||||
@@ -497,6 +487,8 @@ class AxiMasterRead(Reset):
|
||||
cmd = AxiReadCmd(address, length, arid, burst, size, lock, cache, prot, qos, region, user, event)
|
||||
self.read_command_queue.put_nowait(cmd)
|
||||
|
||||
return event
|
||||
|
||||
def idle(self):
|
||||
return not self.in_flight_operations
|
||||
|
||||
@@ -504,18 +496,9 @@ class AxiMasterRead(Reset):
|
||||
while not self.idle():
|
||||
await self._idle.wait()
|
||||
|
||||
def read_data_ready(self):
|
||||
return not self.read_data_queue.empty()
|
||||
|
||||
def get_read_data(self):
|
||||
if not self.read_data_queue.empty():
|
||||
return self.read_data_queue.get_nowait()
|
||||
return None
|
||||
|
||||
async def read(self, address, length, arid=None, burst=AxiBurstType.INCR, size=None,
|
||||
lock=AxiLockType.NORMAL, cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0):
|
||||
event = Event()
|
||||
self.init_read(address, length, arid, burst, size, lock, cache, prot, qos, region, user, event)
|
||||
event = self.init_read(address, length, arid, burst, size, lock, cache, prot, qos, region, user)
|
||||
await event.wait()
|
||||
return event.data
|
||||
|
||||
@@ -595,10 +578,6 @@ class AxiMasterRead(Reset):
|
||||
if cmd.event:
|
||||
cmd.event.set(None)
|
||||
|
||||
while not self.read_data_queue.empty():
|
||||
resp = self.read_data_queue.get_nowait()
|
||||
self.log.warning("Flushed read response during reset: %s", resp)
|
||||
|
||||
self.in_flight_operations = 0
|
||||
self._idle.set()
|
||||
else:
|
||||
@@ -748,10 +727,7 @@ class AxiMasterRead(Reset):
|
||||
|
||||
read_resp = AxiReadResp(cmd.address, data, resp, user)
|
||||
|
||||
if cmd.event is not None:
|
||||
cmd.event.set(read_resp)
|
||||
else:
|
||||
self.read_data_queue.put_nowait(read_resp)
|
||||
|
||||
self.current_read_resp_command = None
|
||||
|
||||
@@ -771,11 +747,11 @@ class AxiMaster:
|
||||
|
||||
def init_read(self, address, length, arid=None, burst=AxiBurstType.INCR, size=None,
|
||||
lock=AxiLockType.NORMAL, cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0, event=None):
|
||||
self.read_if.init_read(address, length, arid, burst, size, lock, cache, prot, qos, region, user, event)
|
||||
return self.read_if.init_read(address, length, arid, burst, size, lock, cache, prot, qos, region, user, event)
|
||||
|
||||
def init_write(self, address, data, awid=None, burst=AxiBurstType.INCR, size=None, lock=AxiLockType.NORMAL,
|
||||
cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0, wuser=0, event=None):
|
||||
self.write_if.init_write(address, data, awid, burst, size, lock, cache, prot, qos, region, user, wuser, event)
|
||||
return self.write_if.init_write(address, data, awid, burst, size, lock, cache, prot, qos, region, user, wuser, event)
|
||||
|
||||
def idle(self):
|
||||
return (not self.read_if or self.read_if.idle()) and (not self.write_if or self.write_if.idle())
|
||||
@@ -791,18 +767,6 @@ class AxiMaster:
|
||||
async def wait_write(self):
|
||||
await self.write_if.wait()
|
||||
|
||||
def read_data_ready(self):
|
||||
return self.read_if.read_data_ready()
|
||||
|
||||
def get_read_data(self):
|
||||
return self.read_if.get_read_data()
|
||||
|
||||
def write_resp_ready(self):
|
||||
return self.write_if.write_resp_ready()
|
||||
|
||||
def get_write_resp(self):
|
||||
return self.write_if.get_write_resp()
|
||||
|
||||
async def read(self, address, length, arid=None, burst=AxiBurstType.INCR, size=None,
|
||||
lock=AxiLockType.NORMAL, cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0):
|
||||
return await self.read_if.read(address, length, arid,
|
||||
|
||||
@@ -60,7 +60,6 @@ class AxiLiteMasterWrite(Reset):
|
||||
|
||||
self.write_command_queue = Queue()
|
||||
self.current_write_command = None
|
||||
self.write_resp_queue = Queue()
|
||||
|
||||
self.int_write_resp_command_queue = Queue()
|
||||
self.current_write_resp_command = None
|
||||
@@ -88,7 +87,10 @@ class AxiLiteMasterWrite(Reset):
|
||||
self._init_reset(reset, reset_active_level)
|
||||
|
||||
def init_write(self, address, data, prot=AxiProt.NONSECURE, event=None):
|
||||
if event is not None and not isinstance(event, Event):
|
||||
if event is None:
|
||||
event = Event()
|
||||
|
||||
if not isinstance(event, Event):
|
||||
raise ValueError("Expected event object")
|
||||
|
||||
self.in_flight_operations += 1
|
||||
@@ -96,6 +98,8 @@ class AxiLiteMasterWrite(Reset):
|
||||
|
||||
self.write_command_queue.put_nowait(AxiLiteWriteCmd(address, bytearray(data), prot, event))
|
||||
|
||||
return event
|
||||
|
||||
def idle(self):
|
||||
return not self.in_flight_operations
|
||||
|
||||
@@ -103,17 +107,8 @@ class AxiLiteMasterWrite(Reset):
|
||||
while not self.idle():
|
||||
await self._idle.wait()
|
||||
|
||||
def write_resp_ready(self):
|
||||
return not self.write_resp_queue.empty()
|
||||
|
||||
def get_write_resp(self):
|
||||
if not self.write_resp_queue.empty():
|
||||
return self.write_resp_queue.get_nowait()
|
||||
return None
|
||||
|
||||
async def write(self, address, data, prot=AxiProt.NONSECURE):
|
||||
event = Event()
|
||||
self.init_write(address, data, prot, event)
|
||||
event = self.init_write(address, data, prot)
|
||||
await event.wait()
|
||||
return event.data
|
||||
|
||||
@@ -182,10 +177,6 @@ class AxiLiteMasterWrite(Reset):
|
||||
if cmd.event:
|
||||
cmd.event.set(None)
|
||||
|
||||
while not self.write_resp_queue.empty():
|
||||
resp = self.write_resp_queue.get_nowait()
|
||||
self.log.warning("Flushed write response during reset: %s", resp)
|
||||
|
||||
self.in_flight_operations = 0
|
||||
self._idle.set()
|
||||
else:
|
||||
@@ -268,10 +259,7 @@ class AxiLiteMasterWrite(Reset):
|
||||
|
||||
write_resp = AxiLiteWriteResp(cmd.address, cmd.length, resp)
|
||||
|
||||
if cmd.event is not None:
|
||||
cmd.event.set(write_resp)
|
||||
else:
|
||||
self.write_resp_queue.put_nowait(write_resp)
|
||||
|
||||
self.current_write_resp_command = None
|
||||
|
||||
@@ -295,7 +283,6 @@ class AxiLiteMasterRead(Reset):
|
||||
|
||||
self.read_command_queue = Queue()
|
||||
self.current_read_command = None
|
||||
self.read_data_queue = Queue()
|
||||
|
||||
self.int_read_resp_command_queue = Queue()
|
||||
self.current_read_resp_command = None
|
||||
@@ -321,7 +308,10 @@ class AxiLiteMasterRead(Reset):
|
||||
self._init_reset(reset, reset_active_level)
|
||||
|
||||
def init_read(self, address, length, prot=AxiProt.NONSECURE, event=None):
|
||||
if event is not None and not isinstance(event, Event):
|
||||
if event is None:
|
||||
event = Event()
|
||||
|
||||
if not isinstance(event, Event):
|
||||
raise ValueError("Expected event object")
|
||||
|
||||
self.in_flight_operations += 1
|
||||
@@ -329,6 +319,8 @@ class AxiLiteMasterRead(Reset):
|
||||
|
||||
self.read_command_queue.put_nowait(AxiLiteReadCmd(address, length, prot, event))
|
||||
|
||||
return event
|
||||
|
||||
def idle(self):
|
||||
return not self.in_flight_operations
|
||||
|
||||
@@ -336,17 +328,8 @@ class AxiLiteMasterRead(Reset):
|
||||
while not self.idle():
|
||||
await self._idle.wait()
|
||||
|
||||
def read_data_ready(self):
|
||||
return not self.read_data_queue.empty()
|
||||
|
||||
def get_read_data(self):
|
||||
if not self.read_data_queue.empty():
|
||||
return self.read_data_queue.get_nowait()
|
||||
return None
|
||||
|
||||
async def read(self, address, length, prot=AxiProt.NONSECURE):
|
||||
event = Event()
|
||||
self.init_read(address, length, prot, event)
|
||||
event = self.init_read(address, length, prot)
|
||||
await event.wait()
|
||||
return event.data
|
||||
|
||||
@@ -414,10 +397,6 @@ class AxiLiteMasterRead(Reset):
|
||||
if cmd.event:
|
||||
cmd.event.set(None)
|
||||
|
||||
while not self.read_data_queue.empty():
|
||||
resp = self.read_data_queue.get_nowait()
|
||||
self.log.warning("Flushed read response during reset: %s", resp)
|
||||
|
||||
self.in_flight_operations = 0
|
||||
self._idle.set()
|
||||
else:
|
||||
@@ -488,10 +467,7 @@ class AxiLiteMasterRead(Reset):
|
||||
|
||||
read_resp = AxiLiteReadResp(cmd.address, data, resp)
|
||||
|
||||
if cmd.event is not None:
|
||||
cmd.event.set(read_resp)
|
||||
else:
|
||||
self.read_data_queue.put_nowait(read_resp)
|
||||
|
||||
self.current_read_resp_command = None
|
||||
|
||||
@@ -510,10 +486,10 @@ class AxiLiteMaster:
|
||||
self.read_if = AxiLiteMasterRead(bus.read, clock, reset, reset_active_level)
|
||||
|
||||
def init_read(self, address, length, prot=AxiProt.NONSECURE, event=None):
|
||||
self.read_if.init_read(address, length, prot, event)
|
||||
return self.read_if.init_read(address, length, prot, event)
|
||||
|
||||
def init_write(self, address, data, prot=AxiProt.NONSECURE, event=None):
|
||||
self.write_if.init_write(address, data, prot, event)
|
||||
return self.write_if.init_write(address, data, prot, event)
|
||||
|
||||
def idle(self):
|
||||
return (not self.read_if or self.read_if.idle()) and (not self.write_if or self.write_if.idle())
|
||||
@@ -529,18 +505,6 @@ class AxiLiteMaster:
|
||||
async def wait_write(self):
|
||||
await self.write_if.wait()
|
||||
|
||||
def read_data_ready(self):
|
||||
return self.read_if.read_data_ready()
|
||||
|
||||
def get_read_data(self):
|
||||
return self.read_if.get_read_data()
|
||||
|
||||
def write_resp_ready(self):
|
||||
return self.write_if.write_resp_ready()
|
||||
|
||||
def get_write_resp(self):
|
||||
return self.write_if.get_write_resp()
|
||||
|
||||
async def read(self, address, length, prot=AxiProt.NONSECURE):
|
||||
return await self.read_if.read(address, length, prot)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user