Pass through full address for unaligned operations
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -476,7 +476,7 @@ class AxiMasterWrite(Region, Reset):
|
||||
|
||||
cycles = (len(cmd.data) + (cmd.address % num_bytes) + num_bytes-1) // num_bytes
|
||||
|
||||
cur_addr = aligned_addr
|
||||
cur_addr = cmd.address
|
||||
offset = 0
|
||||
cycle_offset = aligned_addr-word_addr
|
||||
n = 0
|
||||
@@ -563,6 +563,9 @@ class AxiMasterWrite(Region, Reset):
|
||||
|
||||
await self.w_channel.send(w)
|
||||
|
||||
if k == 0:
|
||||
cur_addr = aligned_addr + num_bytes
|
||||
else:
|
||||
cur_addr += num_bytes
|
||||
cycle_offset = (cycle_offset + num_bytes) % self.byte_lanes
|
||||
|
||||
@@ -870,7 +873,7 @@ class AxiMasterRead(Region, Reset):
|
||||
|
||||
burst_list = []
|
||||
|
||||
cur_addr = aligned_addr
|
||||
cur_addr = cmd.address
|
||||
n = 0
|
||||
|
||||
burst_length = 0
|
||||
@@ -915,6 +918,9 @@ class AxiMasterRead(Region, Reset):
|
||||
self.log.info("Read burst start arid: 0x%x araddr: 0x%08x arlen: %d arsize: %d arprot: %s",
|
||||
arid, cur_addr, burst_length-1, cmd.size, cmd.prot)
|
||||
|
||||
if k == 0:
|
||||
cur_addr = aligned_addr + num_bytes
|
||||
else:
|
||||
cur_addr += num_bytes
|
||||
|
||||
resp_cmd = AxiReadRespCmd(cmd.address, cmd.length, cmd.size, cycles, cmd.prot, burst_list, cmd.event)
|
||||
|
||||
@@ -286,6 +286,9 @@ class AxiLiteMasterWrite(Region, Reset):
|
||||
offset += 1
|
||||
|
||||
aw = self.aw_channel._transaction_obj()
|
||||
if k == 0:
|
||||
aw.awaddr = cmd.address
|
||||
else:
|
||||
aw.awaddr = word_addr + k*self.byte_lanes
|
||||
aw.awprot = cmd.prot
|
||||
|
||||
@@ -494,6 +497,9 @@ class AxiLiteMasterRead(Region, Reset):
|
||||
|
||||
for k in range(cycles):
|
||||
ar = self.ar_channel._transaction_obj()
|
||||
if k == 0:
|
||||
ar.araddr = cmd.address
|
||||
else:
|
||||
ar.araddr = word_addr + k*self.byte_lanes
|
||||
ar.arprot = cmd.prot
|
||||
|
||||
|
||||
Reference in New Issue
Block a user