Skip to content

Commit 266deb4

Browse files
committed
axi: use awuser and aruser signals for IDs
Signed-off-by: Karol Gugala <[email protected]>
1 parent 34ef11e commit 266deb4

File tree

9 files changed

+30
-25
lines changed

9 files changed

+30
-25
lines changed

src/hci/axi_adapter.sv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ module axi_adapter #(
6161

6262
`ifdef AXI_ID_FILTERING
6363
input logic disable_id_filtering_i,
64-
input logic [AxiIdWidth-1:0] priv_ids_i[NumPrivIds],
64+
input logic [AxiUserWidth-1:0] priv_ids_i[NumPrivIds],
6565
`endif
6666

6767
// I3C SW CSR access interface
@@ -123,8 +123,8 @@ module axi_adapter #(
123123
rsel[j] = '0;
124124
wsel[j] = '0;
125125
end else begin
126-
rsel[j] = arid_i == priv_ids_i[j];
127-
wsel[j] = awid_i == priv_ids_i[j];
126+
rsel[j] = aruser_i == priv_ids_i[j];
127+
wsel[j] = awuser_i == priv_ids_i[j];
128128
end
129129
end
130130
end

src/i3c.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ module i3c
179179
`ifdef AXI_ID_FILTERING
180180
// ID Filtering
181181
input logic disable_id_filtering_i,
182-
input logic [AxiIdWidth-1:0] priv_ids_i [NumPrivIds],
182+
input logic [AxiUserWidth-1:0] priv_ids_i [NumPrivIds],
183183
`endif
184184
`endif
185185

src/i3c_wrapper.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ module i3c_wrapper #(
9999

100100
`ifdef AXI_ID_FILTERING
101101
input logic disable_id_filtering_i,
102-
input logic [AxiIdWidth-1:0] priv_ids_i [NumPrivIds],
102+
input logic [AxiUserWidth-1:0] priv_ids_i [NumPrivIds],
103103
`endif
104104
`endif
105105

testbench/tb.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ logic rst_n;
8989

9090
`ifdef AXI_ID_FILTERING
9191
logic disable_id_filtering_i;
92-
logic [AxiIdWidth-1:0] priv_ids_i [NumPrivIds];
92+
logic [AxiUserWidth-1:0] priv_ids_i [NumPrivIds];
9393
`endif
9494
`endif
9595

verification/cocotb/block/axi_adapter_id_filter/test_bus_stress.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,11 @@ async def write_read_burst(dut, filter_off=False, awid_priv=True, arid_priv=True
171171
raddr = tb.reg_map.I3C_EC.SECFWRECOVERYIF.INDIRECT_FIFO_DATA.base_addr
172172

173173
# Run write burst to fill the FIFO
174-
write = tb.axi_m.write_dwords(waddr, test_data, burst=AxiBurstType.FIXED, awid=awid)
174+
write = tb.axi_m.write_dwords(waddr, test_data, burst=AxiBurstType.FIXED, user=awid)
175175
await with_timeout(write, 1, "us")
176176

177177
# Run read burst to empty the FIFO
178-
read = tb.axi_m.read_dwords(raddr, count=data_len, burst=AxiBurstType.FIXED, arid=arid)
178+
read = tb.axi_m.read_dwords(raddr, count=data_len, burst=AxiBurstType.FIXED, user=arid)
179179
received_data = await with_timeout(read, 1, "us")
180180

181181
verify_data(test_data, awids, received_data, arids, filter_off, priv_ids)
@@ -210,11 +210,11 @@ async def write_burst_collision_with_read(dut, filter_off=False, awid_priv=True,
210210
single_write_cycles = 3
211211

212212
async def writer():
213-
write = tb.axi_m.write_dwords(waddr, test_data, burst=AxiBurstType.FIXED, awid=awid)
213+
write = tb.axi_m.write_dwords(waddr, test_data, burst=AxiBurstType.FIXED, user=awid)
214214
await with_timeout(write, 1, "us")
215215

216216
async def reader(return_data):
217-
read = tb.axi_m.read_dwords(raddr, count=data_len, burst=AxiBurstType.FIXED, arid=arid)
217+
read = tb.axi_m.read_dwords(raddr, count=data_len, burst=AxiBurstType.FIXED, user=arid)
218218
return_data.extend(await with_timeout(read, 1, "us"))
219219

220220
received_data = []
@@ -237,7 +237,7 @@ async def test_write_burst_collision_with_read_id_filter_off(dut):
237237
await write_burst_collision_with_read(dut, True)
238238

239239

240-
@cocotb.test()
240+
@cocotb.test(skip=False)
241241
async def test_write_burst_collision_with_read_id_filter_on_priv(dut):
242242
await write_burst_collision_with_read(dut, False, Access.Priv, Access.Priv)
243243

@@ -261,11 +261,11 @@ async def read_burst_collision_with_write(dut, filter_off=False, awid_priv=True,
261261
single_write_cycles = 3
262262

263263
async def writer():
264-
write = tb.axi_m.write_dwords(waddr, test_data, burst=AxiBurstType.FIXED, awid=awid)
264+
write = tb.axi_m.write_dwords(waddr, test_data, burst=AxiBurstType.FIXED, user=awid)
265265
await with_timeout(write, 1, "us")
266266

267267
async def reader(return_data):
268-
read = tb.axi_m.read_dwords(raddr, count=data_len, burst=AxiBurstType.FIXED, arid=arid)
268+
read = tb.axi_m.read_dwords(raddr, count=data_len, burst=AxiBurstType.FIXED, user=arid)
269269
return_data.extend(await with_timeout(read, 1, "us"))
270270

271271
received_data1 = []
@@ -338,7 +338,7 @@ async def reader():
338338
_ = await tb.read_csr(raddr, arid=arids[i])
339339

340340
# Fill fifo halfway to avoid reads when empty
341-
await tb.axi_m.write_dwords(waddr, range(64), burst=AxiBurstType.FIXED, awid=priv_ids[0])
341+
await tb.axi_m.write_dwords(waddr, range(64), burst=AxiBurstType.FIXED, user=priv_ids[0])
342342

343343
w = cocotb.start_soon(writer())
344344
r = cocotb.start_soon(reader())
@@ -381,7 +381,7 @@ async def reader():
381381
_ = await tb.read_csr(raddr, arid=arids[i])
382382
await RisingEdge(tb.clk)
383383

384-
await tb.axi_m.write_dwords(waddr, range(64), burst=AxiBurstType.FIXED, awid=priv_ids[0])
384+
await tb.axi_m.write_dwords(waddr, range(64), burst=AxiBurstType.FIXED, user=priv_ids[0])
385385

386386
w = cocotb.start_soon(writer())
387387
r = cocotb.start_soon(reader())

verification/cocotb/block/hci_queues_axi/hci_queues_wrapper.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ module hci_queues_wrapper
111111

112112
`ifdef AXI_ID_FILTERING
113113
input logic disable_id_filtering_i,
114-
input logic [AxiIdWidth-1:0] priv_ids_i [NumPrivIds],
114+
input logic [AxiUserWidth-1:0] priv_ids_i [NumPrivIds],
115115
`endif
116116

117117
// HCI queues (FSM side)

verification/cocotb/block/lib_adapter/axi_adapter_wrapper.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ module axi_adapter_wrapper
7171
output logic fifo_full_o
7272
`ifdef AXI_ID_FILTERING,
7373
input logic disable_id_filtering_i,
74-
input logic [AxiIdWidth-1:0] priv_ids_i [NumPrivIds]
74+
input logic [AxiUserWidth-1:0] priv_ids_i [NumPrivIds]
7575
`endif
7676
);
7777
// I3C SW CSR access interface

verification/cocotb/common/bus2csr.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ async def write_csr_field(self, reg_addr, field, data, awid=None) -> None:
105105
await self.write_csr(reg_addr, int2bytes(value), awid=awid)
106106

107107
async def read_csr_field(self, reg_addr, field, arid=None) -> int:
108-
"""Read -> modify -> write CSR"""
109108
value = bytes2int(await self.read_csr(reg_addr, arid=arid))
110109
value = value & field.mask
111110
value = value >> field.low
@@ -159,7 +158,7 @@ async def read_csr(
159158
) -> List[int]:
160159
"""Send a read request & await the response for 'timeout' in 'units'."""
161160
if arid:
162-
self.dut._log.debug(f"AHB doesn't support transaction IDs, ignoring arid={arid}")
161+
self.dut._log.debug(f"AHB doesn't support user id, ignoring arid={arid}")
163162
self.AHBManager.read(addr, size)
164163
await with_timeout(self.AHBManager.transfer_done(), timeout, units)
165164
read = self.AHBManager.get_rsp(addr, self.data_byte_width)
@@ -176,7 +175,7 @@ async def write_csr(
176175
) -> None:
177176
"""Send a write request & await transfer to finish for 'timeout' in 'units'."""
178177
if awid:
179-
self.dut._log.debug(f"AHB doesn't support transaction IDs, ignoring awid={awid}")
178+
self.dut._log.debug(f"AHB doesn't support user_id, ignoring aw_user={awid}")
180179
data_len = len(data)
181180
# Extend bytes to size if there's less than that
182181
if data_len <= size:
@@ -218,7 +217,10 @@ async def read_csr(
218217
ret_data_only=True,
219218
) -> List[int]:
220219
"""Send a read request & await the response."""
221-
resp = await with_timeout(self.axi_m.read(addr, size, arid=arid), timeout, units)
220+
if arid is not None:
221+
resp = await with_timeout(self.axi_m.read(addr, size, user=arid), timeout, units)
222+
else:
223+
resp = await with_timeout(self.axi_m.read(addr, size), timeout, units)
222224
if ret_data_only:
223225
return resp.data
224226
return resp
@@ -234,7 +236,10 @@ async def write_csr(
234236
) -> None:
235237
"""Send a write request & await transfer to finish."""
236238
# assert not bytes(data)
237-
return await with_timeout(self.axi_m.write(addr, bytes(data), awid=awid), timeout, units)
239+
if awid is not None:
240+
return await with_timeout(self.axi_m.write(addr, bytes(data), user=awid), timeout, units)
241+
else:
242+
return await with_timeout(self.axi_m.write(addr, bytes(data)), timeout, units)
238243

239244
def _report_response(self, got, expected, is_read=False):
240245
op = "read" if is_read else "write"
@@ -259,7 +264,7 @@ async def read_access_monitor(self):
259264

260265
while not (self.dut.rvalid.value and self.dut.rready.value):
261266
await RisingEdge(self.dut.aclk)
262-
rid = self.dut.rid.value
267+
rid = self.dut.aruser.value
263268
rresp = self.dut.rresp.value
264269
if filter_off or rid in priv_ids:
265270
assert rresp == AxiResp.OKAY, self._report_response(rresp, AxiResp.OKAY, True)
@@ -284,7 +289,7 @@ async def write_access_monitor(self):
284289

285290
while not (self.dut.bvalid.value and self.dut.bready.value):
286291
await RisingEdge(self.dut.aclk)
287-
bid = self.dut.bid.value
292+
bid = self.dut.awuser.value
288293
bresp = self.dut.bresp.value
289294

290295
if filter_off or bid in priv_ids:

verification/cocotb/top/lib_i3c_top/i3c_test_wrapper.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ module i3c_test_wrapper #(
8989

9090
`ifdef AXI_ID_FILTERING
9191
input logic disable_id_filtering_i,
92-
input logic [AxiIdWidth-1:0] priv_ids_i [NumPrivIds],
92+
input logic [AxiUserWidth-1:0] priv_ids_i [NumPrivIds],
9393
`endif
9494
`endif
9595
// I3C Target Simulation model

0 commit comments

Comments
 (0)