Skip to content

Commit e1dfc16

Browse files
robertszczepanskitmichalak
authored andcommitted
Fix collision test for write and add test for read
1 parent 8a75a7c commit e1dfc16

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

verification/cocotb/block/axi_adapter/test_bus_stress.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ async def initialize(dut, timeout=50):
3333
cocotb.log.setLevel(logging.DEBUG)
3434

3535
# Start the background timeout task
36-
await cocotb.start(timeout_task(timeout))
36+
cocotb.start_soon(timeout_task(timeout))
3737

3838
# Initialize inputs
3939
dut.araddr.value = 0
@@ -86,10 +86,16 @@ async def writer():
8686
await tb.write_csr(fifo_addr, int2bytes(d))
8787

8888
async def reader(return_data):
89+
# Wait until there is data in FIFO
90+
read_offset = 2
91+
while int(dut.fifo_depth_o.value) < read_offset:
92+
await RisingEdge(tb.clk)
93+
8994
# Read sequence should read data on each write data
90-
for _ in test_data:
95+
for i in range(data_len):
9196
# Awaiting `awvalid` causes reading simultaneously with write data channel activity
92-
await RisingEdge(dut.awvalid)
97+
if i < (data_len - read_offset):
98+
await RisingEdge(dut.awvalid)
9399
return_data.append(dword2int(await tb.read_csr(fifo_addr)))
94100

95101
received_data = []
@@ -103,7 +109,7 @@ async def reader(return_data):
103109
tb.log.info("Test finished!")
104110

105111

106-
@cocotb.test(skip=True)
112+
@cocotb.test()
107113
async def test_collision_with_read(dut):
108114
tb, data_len, test_data = await initialize(dut)
109115

@@ -114,22 +120,22 @@ async def test_collision_with_read(dut):
114120
async def writer():
115121
# Write sequence should write data on each read data
116122
for i, d in enumerate(test_data):
117-
# Awaiting `arvalid` causes writing simultaneously with read data channel activity
118-
if i >= 2:
119-
await RisingEdge(dut.arvalid)
123+
# Awaiting read request causes writing simultaneously with read data channel activity
124+
if i > 2:
125+
await RisingEdge(dut.s_cpuif_req)
126+
assert not dut.s_cpuif_req_is_wr.value
120127
await tb.write_csr(fifo_addr, int2bytes(d))
121128

122129
async def reader(return_data):
123130
# Wait until there is data in FIFO
124-
while dut.fifo_depth_o.value < 2:
125-
continue
131+
read_offset = 2
132+
while int(dut.fifo_depth_o.value) < read_offset:
133+
await RisingEdge(tb.clk)
126134

127135
# Read sequence should just read data
128-
for i in range(data_len):
129-
wvalid = RisingEdge(dut.wvalid)
130-
wready = RisingEdge(dut.wready)
131-
await Combine(wvalid, wready)
136+
for _ in range(data_len):
132137
return_data.append(dword2int(await tb.read_csr(fifo_addr)))
138+
await RisingEdge(tb.clk)
133139

134140
received_data = []
135141
w = cocotb.start_soon(writer())

0 commit comments

Comments
 (0)