Skip to content

Commit c3cd676

Browse files
committed
Test DROP_WHEN_FULL parameter
Signed-off-by: Alex Forencich <[email protected]>
1 parent c4f298d commit c3cd676

File tree

4 files changed

+202
-52
lines changed

4 files changed

+202
-52
lines changed

tb/axis_async_fifo/test_axis_async_fifo.py

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -465,18 +465,36 @@ async def run_test_overflow(dut):
465465
for k in range(count):
466466
await tb.source.send(test_frame)
467467

468-
for k in range((depth//byte_lanes)*2):
468+
for k in range((depth//byte_lanes)*3):
469469
await RisingEdge(dut.s_clk)
470470

471-
assert not tb.source.idle()
471+
if dut.DROP_WHEN_FULL.value:
472+
assert tb.source.idle()
473+
else:
474+
assert not tb.source.idle()
472475

473476
tb.sink.pause = False
474477

475-
for k in range(count):
476-
rx_frame = await tb.sink.recv()
478+
if dut.DROP_WHEN_FULL.value:
479+
for k in range((depth//byte_lanes)*3):
480+
await RisingEdge(dut.s_clk)
477481

478-
assert rx_frame.tdata == test_data
479-
assert not rx_frame.tuser
482+
rx_count = 0
483+
484+
while not tb.sink.empty():
485+
rx_frame = await tb.sink.recv()
486+
487+
assert rx_frame.tdata == test_data
488+
assert not rx_frame.tuser
489+
490+
assert rx_count < count
491+
492+
else:
493+
for k in range(count):
494+
rx_frame = await tb.sink.recv()
495+
496+
assert rx_frame.tdata == test_data
497+
assert not rx_frame.tuser
480498

481499
assert tb.sink.empty()
482500

@@ -548,13 +566,32 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
548566

549567
cur_id = (cur_id + 1) % id_count
550568

551-
for test_frame in test_frames:
552-
rx_frame = await tb.sink.recv()
569+
if dut.DROP_WHEN_FULL.value:
570+
cycles = 0
571+
while cycles < 100:
572+
cycles += 1
573+
if not tb.source.idle() or dut.s_axis_tvalid.value.integer or dut.m_axis_tvalid.value.integer or dut.m_status_depth.value.integer:
574+
cycles = 0
575+
await RisingEdge(dut.m_clk)
553576

554-
assert rx_frame.tdata == test_frame.tdata
555-
assert rx_frame.tid == test_frame.tid
556-
assert rx_frame.tdest == test_frame.tdest
557-
assert not rx_frame.tuser
577+
while not tb.sink.empty():
578+
rx_frame = await tb.sink.recv()
579+
580+
while True:
581+
test_frame = test_frames.pop(0)
582+
if not rx_frame.tuser and rx_frame.tid == test_frame.tid and rx_frame.tdest == test_frame.tdest and rx_frame.tdata == test_frame.tdata:
583+
break
584+
585+
assert len(test_frames) < 512
586+
587+
else:
588+
for test_frame in test_frames:
589+
rx_frame = await tb.sink.recv()
590+
591+
assert rx_frame.tdata == test_frame.tdata
592+
assert rx_frame.tid == test_frame.tid
593+
assert rx_frame.tdest == test_frame.tdest
594+
assert not rx_frame.tuser
558595

559596
assert tb.sink.empty()
560597

@@ -617,7 +654,7 @@ def incrementing_payload(length):
617654

618655
@pytest.mark.parametrize(("s_clk", "m_clk"), [(10, 10), (10, 11), (11, 10)])
619656
@pytest.mark.parametrize(("frame_fifo", "drop_oversize_frame", "drop_bad_frame", "drop_when_full"),
620-
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0)])
657+
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0), (1, 1, 1, 1)])
621658
@pytest.mark.parametrize(("ram_pipeline", "output_fifo"),
622659
[(0, 0), (1, 0), (4, 0), (0, 1), (1, 1), (4, 1)])
623660
@pytest.mark.parametrize("data_width", [8, 16, 32, 64])

tb/axis_async_fifo_adapter/test_axis_async_fifo_adapter.py

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -462,18 +462,36 @@ async def run_test_overflow(dut):
462462
for k in range(count):
463463
await tb.source.send(test_frame)
464464

465-
for k in range((depth//byte_lanes)*2):
465+
for k in range((depth//byte_lanes)*3):
466466
await RisingEdge(dut.s_clk)
467467

468-
assert not tb.source.idle()
468+
if dut.DROP_WHEN_FULL.value:
469+
assert tb.source.idle()
470+
else:
471+
assert not tb.source.idle()
469472

470473
tb.sink.pause = False
471474

472-
for k in range(count):
473-
rx_frame = await tb.sink.recv()
475+
if dut.DROP_WHEN_FULL.value:
476+
for k in range((depth//byte_lanes)*3):
477+
await RisingEdge(dut.s_clk)
474478

475-
assert rx_frame.tdata == test_data
476-
assert not rx_frame.tuser
479+
rx_count = 0
480+
481+
while not tb.sink.empty():
482+
rx_frame = await tb.sink.recv()
483+
484+
assert rx_frame.tdata == test_data
485+
assert not rx_frame.tuser
486+
487+
assert rx_count < count
488+
489+
else:
490+
for k in range(count):
491+
rx_frame = await tb.sink.recv()
492+
493+
assert rx_frame.tdata == test_data
494+
assert not rx_frame.tuser
477495

478496
assert tb.sink.empty()
479497

@@ -545,13 +563,32 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
545563

546564
cur_id = (cur_id + 1) % id_count
547565

548-
for test_frame in test_frames:
549-
rx_frame = await tb.sink.recv()
566+
if dut.DROP_WHEN_FULL.value:
567+
cycles = 0
568+
while cycles < 100:
569+
cycles += 1
570+
if not tb.source.idle() or dut.s_axis_tvalid.value.integer or dut.m_axis_tvalid.value.integer or dut.m_status_depth.value.integer:
571+
cycles = 0
572+
await RisingEdge(dut.m_clk)
550573

551-
assert rx_frame.tdata == test_frame.tdata
552-
assert rx_frame.tid == test_frame.tid
553-
assert rx_frame.tdest == test_frame.tdest
554-
assert not rx_frame.tuser
574+
while not tb.sink.empty():
575+
rx_frame = await tb.sink.recv()
576+
577+
while True:
578+
test_frame = test_frames.pop(0)
579+
if not rx_frame.tuser and rx_frame.tid == test_frame.tid and rx_frame.tdest == test_frame.tdest and rx_frame.tdata == test_frame.tdata:
580+
break
581+
582+
assert len(test_frames) < 512
583+
584+
else:
585+
for test_frame in test_frames:
586+
rx_frame = await tb.sink.recv()
587+
588+
assert rx_frame.tdata == test_frame.tdata
589+
assert rx_frame.tid == test_frame.tid
590+
assert rx_frame.tdest == test_frame.tdest
591+
assert not rx_frame.tuser
555592

556593
assert tb.sink.empty()
557594

@@ -613,7 +650,7 @@ def incrementing_payload(length):
613650

614651

615652
@pytest.mark.parametrize(("frame_fifo", "drop_oversize_frame", "drop_bad_frame", "drop_when_full"),
616-
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0)])
653+
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0), (1, 1, 1, 1)])
617654
@pytest.mark.parametrize("m_data_width", [8, 16, 32])
618655
@pytest.mark.parametrize("s_data_width", [8, 16, 32])
619656
def test_axis_async_fifo_adapter(request, s_data_width, m_data_width, frame_fifo, drop_oversize_frame, drop_bad_frame, drop_when_full):

tb/axis_fifo/test_axis_fifo.py

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -251,18 +251,36 @@ async def run_test_overflow(dut):
251251
for k in range(count):
252252
await tb.source.send(test_frame)
253253

254-
for k in range((depth//byte_lanes)*2):
254+
for k in range((depth//byte_lanes)*3):
255255
await RisingEdge(dut.clk)
256256

257-
assert not tb.source.idle()
257+
if dut.DROP_WHEN_FULL.value:
258+
assert tb.source.idle()
259+
else:
260+
assert not tb.source.idle()
258261

259262
tb.sink.pause = False
260263

261-
for k in range(count):
262-
rx_frame = await tb.sink.recv()
264+
if dut.DROP_WHEN_FULL.value:
265+
for k in range((depth//byte_lanes)*3):
266+
await RisingEdge(dut.clk)
263267

264-
assert rx_frame.tdata == test_data
265-
assert not rx_frame.tuser
268+
rx_count = 0
269+
270+
while not tb.sink.empty():
271+
rx_frame = await tb.sink.recv()
272+
273+
assert rx_frame.tdata == test_data
274+
assert not rx_frame.tuser
275+
276+
assert rx_count < count
277+
278+
else:
279+
for k in range(count):
280+
rx_frame = await tb.sink.recv()
281+
282+
assert rx_frame.tdata == test_data
283+
assert not rx_frame.tuser
266284

267285
assert tb.sink.empty()
268286

@@ -334,13 +352,34 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
334352

335353
cur_id = (cur_id + 1) % id_count
336354

337-
for test_frame in test_frames:
338-
rx_frame = await tb.sink.recv()
355+
if dut.DROP_WHEN_FULL.value:
356+
cycles = 0
357+
while cycles < 100:
358+
cycles += 1
359+
if not tb.source.idle() or dut.s_axis_tvalid.value.integer or dut.m_axis_tvalid.value.integer or dut.status_depth.value.integer:
360+
cycles = 0
361+
await RisingEdge(dut.clk)
339362

340-
assert rx_frame.tdata == test_frame.tdata
341-
assert rx_frame.tid == test_frame.tid
342-
assert rx_frame.tdest == test_frame.tdest
343-
assert not rx_frame.tuser
363+
while not tb.sink.empty():
364+
rx_frame = await tb.sink.recv()
365+
366+
assert len(test_frames) > 0
367+
368+
while True:
369+
test_frame = test_frames.pop(0)
370+
if not rx_frame.tuser and rx_frame.tid == test_frame.tid and rx_frame.tdest == test_frame.tdest and rx_frame.tdata == test_frame.tdata:
371+
break
372+
373+
assert len(test_frames) < 512
374+
375+
else:
376+
for test_frame in test_frames:
377+
rx_frame = await tb.sink.recv()
378+
379+
assert rx_frame.tdata == test_frame.tdata
380+
assert rx_frame.tid == test_frame.tid
381+
assert rx_frame.tdest == test_frame.tdest
382+
assert not rx_frame.tuser
344383

345384
assert tb.sink.empty()
346385

@@ -396,7 +435,7 @@ def incrementing_payload(length):
396435

397436

398437
@pytest.mark.parametrize(("frame_fifo", "drop_oversize_frame", "drop_bad_frame", "drop_when_full"),
399-
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0)])
438+
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0), (1, 1, 1, 1)])
400439
@pytest.mark.parametrize(("ram_pipeline", "output_fifo"),
401440
[(0, 0), (1, 0), (4, 0), (0, 1), (1, 1), (4, 1)])
402441
@pytest.mark.parametrize("data_width", [8, 16, 32, 64])

tb/axis_fifo_adapter/test_axis_fifo_adapter.py

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -251,18 +251,36 @@ async def run_test_overflow(dut):
251251
for k in range(count):
252252
await tb.source.send(test_frame)
253253

254-
for k in range((depth//byte_lanes)*2):
254+
for k in range((depth//byte_lanes)*3):
255255
await RisingEdge(dut.clk)
256256

257-
assert not tb.source.idle()
257+
if dut.DROP_WHEN_FULL.value:
258+
assert tb.source.idle()
259+
else:
260+
assert not tb.source.idle()
258261

259262
tb.sink.pause = False
260263

261-
for k in range(count):
262-
rx_frame = await tb.sink.recv()
264+
if dut.DROP_WHEN_FULL.value:
265+
for k in range((depth//byte_lanes)*3):
266+
await RisingEdge(dut.clk)
263267

264-
assert rx_frame.tdata == test_data
265-
assert not rx_frame.tuser
268+
rx_count = 0
269+
270+
while not tb.sink.empty():
271+
rx_frame = await tb.sink.recv()
272+
273+
assert rx_frame.tdata == test_data
274+
assert not rx_frame.tuser
275+
276+
assert rx_count < count
277+
278+
else:
279+
for k in range(count):
280+
rx_frame = await tb.sink.recv()
281+
282+
assert rx_frame.tdata == test_data
283+
assert not rx_frame.tuser
266284

267285
assert tb.sink.empty()
268286

@@ -334,13 +352,32 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
334352

335353
cur_id = (cur_id + 1) % id_count
336354

337-
for test_frame in test_frames:
338-
rx_frame = await tb.sink.recv()
355+
if dut.DROP_WHEN_FULL.value:
356+
cycles = 0
357+
while cycles < 100:
358+
cycles += 1
359+
if not tb.source.idle() or dut.s_axis_tvalid.value.integer or dut.m_axis_tvalid.value.integer or dut.status_depth.value.integer:
360+
cycles = 0
361+
await RisingEdge(dut.clk)
339362

340-
assert rx_frame.tdata == test_frame.tdata
341-
assert rx_frame.tid == test_frame.tid
342-
assert rx_frame.tdest == test_frame.tdest
343-
assert not rx_frame.tuser
363+
while not tb.sink.empty():
364+
rx_frame = await tb.sink.recv()
365+
366+
while True:
367+
test_frame = test_frames.pop(0)
368+
if not rx_frame.tuser and rx_frame.tid == test_frame.tid and rx_frame.tdest == test_frame.tdest and rx_frame.tdata == test_frame.tdata:
369+
break
370+
371+
assert len(test_frames) < 512
372+
373+
else:
374+
for test_frame in test_frames:
375+
rx_frame = await tb.sink.recv()
376+
377+
assert rx_frame.tdata == test_frame.tdata
378+
assert rx_frame.tid == test_frame.tid
379+
assert rx_frame.tdest == test_frame.tdest
380+
assert not rx_frame.tuser
344381

345382
assert tb.sink.empty()
346383

@@ -396,7 +433,7 @@ def incrementing_payload(length):
396433

397434

398435
@pytest.mark.parametrize(("frame_fifo", "drop_oversize_frame", "drop_bad_frame", "drop_when_full"),
399-
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0)])
436+
[(0, 0, 0, 0), (1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0), (1, 1, 1, 1)])
400437
@pytest.mark.parametrize("m_data_width", [8, 16, 32])
401438
@pytest.mark.parametrize("s_data_width", [8, 16, 32])
402439
def test_axis_fifo_adapter(request, s_data_width, m_data_width, frame_fifo, drop_oversize_frame, drop_bad_frame, drop_when_full):

0 commit comments

Comments
 (0)