axis: Update testbenches to use cocotb.parametrize

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2026-08-15 16:11:04 -07:00
parent 9f3685fa01
commit 32d838e602
17 changed files with 556 additions and 655 deletions

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -57,6 +56,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = max(len(cocotb.top.s_axis.tdata), len(cocotb.top.m_axis.tdata))
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -100,6 +120,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -121,6 +142,11 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -163,39 +189,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = max(len(cocotb.top.s_axis.tdata), len(cocotb.top.m_axis.tdata))
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [run_test_tuser_assert]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge, Event
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -58,6 +57,33 @@ class TB(object):
await RisingEdge(self.dut.clk)
ports = 1
if getattr(cocotb, 'top', None) is not None:
ports = len(cocotb.top.s_axis)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
("port", list(range(ports))),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None, port=0):
tb = TB(dut)
@@ -107,6 +133,10 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("port", list(range(ports))),
)
async def run_test_tuser_assert(dut, port=0):
tb = TB(dut)
@@ -128,6 +158,7 @@ async def run_test_tuser_assert(dut, port=0):
await RisingEdge(dut.clk)
@cocotb.test(skip=(ports < 2))
async def run_arb_test(dut):
tb = TB(dut)
@@ -191,6 +222,11 @@ async def run_arb_test(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -252,47 +288,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
ports = len(cocotb.top.s_axis)
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.add_option("port", list(range(ports)))
factory.generate_tests()
for test in [run_test_tuser_assert]:
factory = TestFactory(test)
factory.add_option("port", list(range(ports)))
factory.generate_tests()
if ports > 1:
factory = TestFactory(run_arb_test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -89,6 +88,27 @@ class TB(object):
await RisingEdge(self.dut.m_clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -128,6 +148,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -154,6 +175,7 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause(dut):
tb = TB(dut)
@@ -182,6 +204,7 @@ async def run_test_init_sink_pause(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause_reset(dut):
tb = TB(dut)
@@ -210,6 +233,7 @@ async def run_test_init_sink_pause_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause_source_reset(dut):
tb = TB(dut)
@@ -242,6 +266,7 @@ async def run_test_init_sink_pause_source_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause_sink_reset(dut):
tb = TB(dut)
@@ -270,6 +295,7 @@ async def run_test_init_sink_pause_sink_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_in_source_reset(dut):
tb = TB(dut)
@@ -302,6 +328,7 @@ async def run_test_shift_in_source_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_in_sink_reset(dut):
tb = TB(dut)
@@ -326,6 +353,7 @@ async def run_test_shift_in_sink_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_out_source_reset(dut):
tb = TB(dut)
@@ -356,6 +384,7 @@ async def run_test_shift_out_source_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_out_sink_reset(dut):
tb = TB(dut)
@@ -382,6 +411,7 @@ async def run_test_shift_out_sink_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_pause(dut):
tb = TB(dut)
@@ -432,6 +462,7 @@ async def run_test_pause(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_overflow(dut):
tb = TB(dut)
@@ -493,6 +524,7 @@ async def run_test_overflow(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_oversize(dut):
tb = TB(dut)
@@ -532,6 +564,11 @@ async def run_test_oversize(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -598,53 +635,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.s_clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [
run_test_tuser_assert,
run_test_init_sink_pause,
run_test_init_sink_pause_reset,
run_test_init_sink_pause_source_reset,
run_test_init_sink_pause_sink_reset,
run_test_shift_in_source_reset,
run_test_shift_in_sink_reset,
run_test_shift_out_source_reset,
run_test_shift_out_sink_reset,
run_test_pause,
run_test_overflow,
run_test_oversize
]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -89,6 +88,27 @@ class TB(object):
await RisingEdge(self.dut.m_clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = max(len(cocotb.top.s_axis.tdata), len(cocotb.top.m_axis.tdata))
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -128,6 +148,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -154,6 +175,7 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause(dut):
tb = TB(dut)
@@ -182,6 +204,7 @@ async def run_test_init_sink_pause(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause_reset(dut):
tb = TB(dut)
@@ -210,6 +233,7 @@ async def run_test_init_sink_pause_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause_source_reset(dut):
tb = TB(dut)
@@ -242,6 +266,7 @@ async def run_test_init_sink_pause_source_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_init_sink_pause_sink_reset(dut):
tb = TB(dut)
@@ -270,6 +295,7 @@ async def run_test_init_sink_pause_sink_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_in_source_reset(dut):
tb = TB(dut)
@@ -302,6 +328,7 @@ async def run_test_shift_in_source_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_in_sink_reset(dut):
tb = TB(dut)
@@ -326,6 +353,7 @@ async def run_test_shift_in_sink_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_out_source_reset(dut):
tb = TB(dut)
@@ -356,6 +384,7 @@ async def run_test_shift_out_source_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_shift_out_sink_reset(dut):
tb = TB(dut)
@@ -382,6 +411,7 @@ async def run_test_shift_out_sink_reset(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_pause(dut):
tb = TB(dut)
@@ -432,6 +462,7 @@ async def run_test_pause(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_overflow(dut):
tb = TB(dut)
@@ -493,6 +524,7 @@ async def run_test_overflow(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
async def run_test_oversize(dut):
tb = TB(dut)
@@ -532,6 +564,11 @@ async def run_test_oversize(dut):
await RisingEdge(dut.s_clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -598,53 +635,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.s_clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = max(len(cocotb.top.m_axis.tdata), len(cocotb.top.s_axis.tdata))
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [
run_test_tuser_assert,
run_test_init_sink_pause,
run_test_init_sink_pause_reset,
run_test_init_sink_pause_source_reset,
run_test_init_sink_pause_sink_reset,
run_test_shift_in_source_reset,
run_test_shift_in_sink_reset,
run_test_shift_out_source_reset,
run_test_shift_out_sink_reset,
run_test_pause,
run_test_overflow,
run_test_oversize
]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -19,7 +19,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -57,6 +56,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis[0].tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -98,30 +118,6 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.s_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -18,7 +18,6 @@ import cocotb_test.simulator
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -123,34 +122,6 @@ class TB(object):
await RisingEdge(self.dut.clk)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
await tb.reset()
tb.set_idle_generator(idle_inserter)
tb.set_backpressure_generator(backpressure_inserter)
test_frames = [payload_data(x) for x in payload_lengths()]
for test_data in test_frames:
enc = cobs_encode(test_data)
test_frame = AxiStreamFrame(enc)
await tb.source.send(test_frame)
for test_data in test_frames:
rx_frame = await tb.sink.recv()
assert rx_frame.tdata == test_data
assert not rx_frame.tuser
assert tb.sink.empty()
await RisingEdge(dut.clk)
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
@@ -180,14 +151,39 @@ def prbs_payload(length):
return bytearray([next(gen) for x in range(length)])
if getattr(cocotb, 'top', None) is not None:
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [zero_payload, nonzero_incrementing_payload, nonzero_incrementing_payload_zero_framed, prbs_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [zero_payload, nonzero_incrementing_payload, nonzero_incrementing_payload_zero_framed, prbs_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
tb = TB(dut)
await tb.reset()
tb.set_idle_generator(idle_inserter)
tb.set_backpressure_generator(backpressure_inserter)
test_frames = [payload_data(x) for x in payload_lengths()]
for test_data in test_frames:
enc = cobs_encode(test_data)
test_frame = AxiStreamFrame(enc)
await tb.source.send(test_frame)
for test_data in test_frames:
rx_frame = await tb.sink.recv()
assert rx_frame.tdata == test_data
assert not rx_frame.tuser
assert tb.sink.empty()
await RisingEdge(dut.clk)
await RisingEdge(dut.clk)
# cocotb-test

View File

@@ -19,7 +19,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -124,6 +123,42 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
return list(range(1, 33))+list(range(253, 259))+[512]+[1]*64
def zero_payload(length):
return bytearray(length)
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
def nonzero_incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(1, 256)), length))
def nonzero_incrementing_payload_zero_framed(length):
return bytearray([0]+list(itertools.islice(itertools.cycle(range(1, 256)), length))+[0])
def prbs_payload(length):
gen = prbs31()
return bytearray([next(gen) for x in range(length)])
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [zero_payload, nonzero_incrementing_payload, nonzero_incrementing_payload_zero_framed, prbs_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -158,45 +193,6 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
return list(range(1, 33))+list(range(253, 259))+[512]+[1]*64
def zero_payload(length):
return bytearray(length)
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
def nonzero_incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(1, 256)), length))
def nonzero_incrementing_payload_zero_framed(length):
return bytearray([0]+list(itertools.islice(itertools.cycle(range(1, 256)), length))+[0])
def prbs_payload(length):
gen = prbs31()
return bytearray([next(gen) for x in range(length)])
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [zero_payload, nonzero_incrementing_payload, nonzero_incrementing_payload_zero_framed, prbs_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -19,8 +19,7 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge, Event
from cocotb.regression import TestFactory
from cocotb.triggers import RisingEdge
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -58,6 +57,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*3+1))
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -100,6 +120,11 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -146,35 +171,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*3+1))
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -19,7 +19,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -61,6 +60,33 @@ class TB(object):
await RisingEdge(self.dut.clk)
ports = 1
if getattr(cocotb, 'top', None) is not None:
ports = len(cocotb.top.m_axis)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.s_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
("port", list(range(ports))),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None, port=0):
tb = TB(dut)
@@ -110,33 +136,6 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.s_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
ports = len(cocotb.top.m_axis)
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.add_option("port", list(range(ports)))
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -59,6 +58,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -98,6 +118,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -124,6 +145,7 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_init_sink_pause(dut):
tb = TB(dut)
@@ -152,6 +174,7 @@ async def run_test_init_sink_pause(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_init_sink_pause_reset(dut):
tb = TB(dut)
@@ -180,6 +203,7 @@ async def run_test_init_sink_pause_reset(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_pause(dut):
tb = TB(dut)
@@ -218,6 +242,7 @@ async def run_test_pause(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_overflow(dut):
tb = TB(dut)
@@ -279,6 +304,7 @@ async def run_test_overflow(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_oversize(dut):
tb = TB(dut)
@@ -318,6 +344,11 @@ async def run_test_oversize(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -386,47 +417,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [
run_test_tuser_assert,
run_test_init_sink_pause,
run_test_init_sink_pause_reset,
run_test_pause,
run_test_overflow,
run_test_oversize
]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -59,6 +58,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = max(len(cocotb.top.s_axis.tdata), len(cocotb.top.m_axis.tdata))
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -98,6 +118,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -124,6 +145,7 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_init_sink_pause(dut):
tb = TB(dut)
@@ -152,6 +174,7 @@ async def run_test_init_sink_pause(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_init_sink_pause_reset(dut):
tb = TB(dut)
@@ -180,6 +203,7 @@ async def run_test_init_sink_pause_reset(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_pause(dut):
tb = TB(dut)
@@ -218,6 +242,7 @@ async def run_test_pause(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_overflow(dut):
tb = TB(dut)
@@ -279,6 +304,7 @@ async def run_test_overflow(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_oversize(dut):
tb = TB(dut)
@@ -318,6 +344,11 @@ async def run_test_oversize(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -384,47 +415,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = max(len(cocotb.top.m_axis.tdata), len(cocotb.top.s_axis.tdata))
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [
run_test_tuser_assert,
run_test_init_sink_pause,
run_test_init_sink_pause_reset,
run_test_pause,
run_test_overflow,
run_test_oversize
]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -19,7 +19,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -60,6 +59,33 @@ class TB(object):
await RisingEdge(self.dut.clk)
ports = 1
if getattr(cocotb, 'top', None) is not None:
ports = len(cocotb.top.s_axis)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
("port", list(range(ports))),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None, port=0):
tb = TB(dut)
@@ -102,6 +128,10 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("port", list(range(ports))),
)
async def run_test_tuser_assert(dut, port=0):
tb = TB(dut)
@@ -126,38 +156,6 @@ async def run_test_tuser_assert(dut, port=0):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
ports = len(cocotb.top.s_axis)
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.add_option("port", list(range(ports)))
factory.generate_tests()
for test in [run_test_tuser_assert]:
factory = TestFactory(test)
factory.add_option("port", list(range(ports)))
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge, FallingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -79,6 +78,36 @@ class TB(object):
self.stats[stat] += int(getattr(self.dut, stat).value)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, max(byte_lanes*4, 128))) + [512, 1514, 9214] + [1]*10
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
underflow_drop = False
idle_list = [None, cycle_pause]
if getattr(cocotb, 'top', None) is not None:
if cocotb.top.UNDERFLOW_DROP_EN.value:
underflow_drop = True
idle_list = [None]
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("pad_en", [True, False]),
("idle_inserter", idle_list),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, pad_en=True, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -128,6 +157,12 @@ async def run_test(dut, pad_en=True, payload_lengths=None, payload_data=None, id
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("pad_en", [True, False]),
("idle_inserter", idle_list),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test_pad(dut, pad_en=True, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -202,6 +237,12 @@ async def run_test_pad(dut, pad_en=True, idle_inserter=None, backpressure_insert
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("pad_en", [True, False]),
("idle_inserter", idle_list),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test_tuser_assert(dut, pad_en=True, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -284,6 +325,11 @@ async def run_test_tuser_assert(dut, pad_en=True, idle_inserter=None, backpressu
await RisingEdge(dut.clk)
@cocotb.test(skip=(not underflow_drop))
@cocotb.parametrize(
("pad_en", [True, False]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test_underflow(dut, pad_en=True, backpressure_inserter=None):
tb = TB(dut)
@@ -386,6 +432,12 @@ async def run_test_underflow(dut, pad_en=True, backpressure_inserter=None):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("pad_en", [True, False]),
("idle_inserter", idle_list),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, pad_en=True, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -438,58 +490,6 @@ async def run_stress_test(dut, pad_en=True, idle_inserter=None, backpressure_ins
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, max(byte_lanes*4, 128))) + [512, 1514, 9214] + [1]*10
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("pad_en", [True, False])
factory.add_option("payload_data", [incrementing_payload])
if not cocotb.top.UNDERFLOW_DROP_EN.value:
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [
run_test_pad,
run_test_tuser_assert,
]:
factory = TestFactory(test)
factory.add_option("pad_en", [True, False])
if not cocotb.top.UNDERFLOW_DROP_EN.value:
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
if cocotb.top.UNDERFLOW_DROP_EN.value:
for test in [run_test_underflow]:
factory = TestFactory(test)
factory.add_option("pad_en", [True, False])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("pad_en", [True, False])
if not cocotb.top.UNDERFLOW_DROP_EN.value:
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -57,6 +56,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -96,6 +116,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -117,6 +138,7 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_init_sink_pause(dut):
tb = TB(dut)
@@ -145,6 +167,7 @@ async def run_test_init_sink_pause(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_init_sink_pause_reset(dut):
tb = TB(dut)
@@ -173,6 +196,7 @@ async def run_test_init_sink_pause_reset(dut):
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_overflow(dut):
tb = TB(dut)
@@ -201,6 +225,11 @@ async def run_test_overflow(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -243,45 +272,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [
run_test_tuser_assert,
run_test_init_sink_pause,
run_test_init_sink_pause_reset,
run_test_overflow
]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -57,6 +56,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -96,6 +116,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -117,6 +138,11 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -159,39 +185,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [run_test_tuser_assert]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -57,6 +56,27 @@ class TB(object):
await RisingEdge(self.dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -96,6 +116,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
async def run_test_tuser_assert(dut):
tb = TB(dut)
@@ -117,6 +138,11 @@ async def run_test_tuser_assert(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -159,39 +185,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis.tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
for test in [run_test_tuser_assert]:
factory = TestFactory(test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)

View File

@@ -20,7 +20,6 @@ import pytest
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import RisingEdge, Event
from cocotb.regression import TestFactory
from cocotbext.axi import AxiStreamBus, AxiStreamFrame, AxiStreamSource, AxiStreamSink
@@ -59,6 +58,36 @@ class TB(object):
await RisingEdge(self.dut.clk)
s_count = 1
m_count = 1
if getattr(cocotb, 'top', None) is not None:
s_count = len(cocotb.top.s_axis)
m_count = len(cocotb.top.m_axis)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.m_axis[0].tdata)
byte_lanes = data_width // 8
return list(range(1, byte_lanes*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
@cocotb.test()
@cocotb.parametrize(
("payload_lengths", [size_list]),
("payload_data", [incrementing_payload]),
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
("s", range(min(s_count, 2))),
("m", range(min(m_count, 2))),
)
async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=None, backpressure_inserter=None, s=0, m=0):
tb = TB(dut)
@@ -110,6 +139,11 @@ async def run_test(dut, payload_lengths=None, payload_data=None, idle_inserter=N
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("s", range(min(s_count, 2))),
("m", range(min(m_count, 2))),
)
async def run_test_tuser_assert(dut, s=0, m=0):
tb = TB(dut)
@@ -134,6 +168,7 @@ async def run_test_tuser_assert(dut, s=0, m=0):
await RisingEdge(dut.clk)
@cocotb.test(skip=(s_count < 2))
async def run_arb_test(dut):
tb = TB(dut)
@@ -199,6 +234,11 @@ async def run_arb_test(dut):
await RisingEdge(dut.clk)
@cocotb.test()
@cocotb.parametrize(
("idle_inserter", [None, cycle_pause]),
("backpressure_inserter", [None, cycle_pause]),
)
async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
tb = TB(dut)
@@ -264,50 +304,6 @@ async def run_stress_test(dut, idle_inserter=None, backpressure_inserter=None):
await RisingEdge(dut.clk)
def cycle_pause():
return itertools.cycle([1, 1, 1, 0])
def size_list():
data_width = len(cocotb.top.s_axis[0].tdata)
byte_width = data_width // 8
return list(range(1, byte_width*4+1))+[512]+[1]*64
def incrementing_payload(length):
return bytearray(itertools.islice(itertools.cycle(range(256)), length))
if getattr(cocotb, 'top', None) is not None:
s_count = len(cocotb.top.s_axis)
m_count = len(cocotb.top.m_axis)
factory = TestFactory(run_test)
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.add_option("s", range(min(s_count, 2)))
factory.add_option("m", range(min(m_count, 2)))
factory.generate_tests()
for test in [run_test_tuser_assert]:
factory = TestFactory(test)
factory.add_option("s", range(min(s_count, 2)))
factory.add_option("m", range(min(m_count, 2)))
factory.generate_tests()
if s_count > 1:
factory = TestFactory(run_arb_test)
factory.generate_tests()
factory = TestFactory(run_stress_test)
factory.add_option("idle_inserter", [None, cycle_pause])
factory.add_option("backpressure_inserter", [None, cycle_pause])
factory.generate_tests()
# cocotb-test
tests_dir = os.path.dirname(__file__)