assert tb.status_error_uncor_asserted

    await RisingEdge(dut.clk)
    await RisingEdge(dut.clk)


def cycle_pause():
    return itertools.cycle([1, 1, 1, 0])


if cocotb.SIM_NAME:

    for test in [run_test_write, run_test_bad_ops]:

        factory = TestFactory(test)
        factory.add_option(("idle_inserter", "backpressure_inserter"), [(None, None), (cycle_pause, cycle_pause)])
        factory.generate_tests()


# cocotb-test

tests_dir = os.path.dirname(__file__)
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))


@pytest.mark.parametrize("axis_pcie_data_width", [64, 128, 256, 512])
def test_pcie_us_axi_master_wr(request, axis_pcie_data_width):
    dut = "pcie_us_axi_master_wr"
    module = os.path.splitext(os.path.basename(__file__))[0]
    toplevel = dut
def size_list():
    return list(range(60, 128)) + [512, 1514, 9214] + [60] * 10


def incrementing_payload(length):
    return bytearray(itertools.islice(itertools.cycle(range(256)), length))


def cycle_en():
    return itertools.cycle([0, 0, 0, 1])


if cocotb.SIM_NAME:

    factory = TestFactory(run_test)
    factory.add_option("payload_lengths", [size_list])
    factory.add_option("payload_data", [incrementing_payload])
    factory.add_option("ifg", [12, 0])
    factory.generate_tests()

# cocotb-test

tests_dir = os.path.abspath(os.path.dirname(__file__))
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
lib_dir = os.path.abspath(os.path.join(rtl_dir, '..', 'lib'))
axis_rtl_dir = os.path.abspath(os.path.join(lib_dir, 'axis', 'rtl'))


def test_axis_baser_rx_64(request):
    dut = "axis_baser_rx_64"
    module = os.path.splitext(os.path.basename(__file__))[0]
Ejemplo n.º 3
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 cocotb.SIM_NAME:

    ports = len(cocotb.top.axis_demux_inst.m_axis_tvalid)

    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__)
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))


@pytest.mark.parametrize("tdest_route", [0, 1])
@pytest.mark.parametrize("data_width", [8, 16, 32])
@pytest.mark.parametrize("ports", [4])
Ejemplo n.º 4
0
@cocotb.coroutine
def run_test(dut, index=0):
    len_data = int((N + INPUT_WIDTH + KEY_WIDTH) / 8)
    with (open(abs_path_file_storage, "rb+")) as storage_file:
        '''
        msg = random.randint(0,(2**24)-1) 
        key = random.randint(0,(2**24)-1)
        hmac_impl = hmac_spongent.HMAC_Sponegnt(key,N,c,r,R)
        expected_value = hmac_impl.generate_MAC(msg,64)
        '''
        storage_file.seek((index * len_data))

        msg = int.from_bytes(storage_file.read(int(INPUT_WIDTH / 8)),
                             byteorder='little')
        key = int.from_bytes(storage_file.read(int(KEY_WIDTH / 8)),
                             byteorder='little')
        expected_result = int.from_bytes(storage_file.read(int(N / 8)),
                                         byteorder='little')

        setup_function(dut, key, msg)
        yield rst_function_test(dut)
        yield hmac_test(dut, expected_result)


n = 100
factory = TestFactory(run_test)

factory.add_option("index", range(0,
                                  n))  #array de 10 int aleatorios entre 0 y 31
factory.generate_tests()
    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 cocotb.SIM_NAME:

    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__)
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))


def test_axis_cobs_decode(request):
    dut = "axis_cobs_decode"
    module = os.path.splitext(os.path.basename(__file__))[0]
def cycle_pause():
    return itertools.cycle([1, 1, 1, 0])


def size_list():
    return list(range(1, 129))


def incrementing_payload(length):
    return bytes(itertools.islice(itertools.cycle(range(1, 256)), length))


if cocotb.SIM_NAME:

    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.generate_tests()

    factory = TestFactory(run_test_pad)
    factory.add_option("payload_data", [incrementing_payload])
    factory.add_option("idle_inserter", [None, cycle_pause])
    factory.generate_tests()


# cocotb-test

tests_dir = os.path.dirname(__file__)
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
lib_dir = os.path.abspath(os.path.join(rtl_dir, '..', 'lib'))
Ejemplo n.º 7
0

@cocotb.coroutine
def mux_function_test(dut, an_gen_i):
    dut.an_gen_i.value = an_gen_i
    expected_value = calculate_expected_result(an_gen_i)
    yield Timer(1000)
    if (dut.an.value.integer != expected_value):
        raise TestFailure("Error mux,wrong value = %s, expected = %s" %
                          hex(int(dut.an.value)) % hex(expected_value))

    print("Expected value = {0}, Value = {1}".format(hex(expected_value),
                                                     hex(int(dut.an.value))))


def calculate_expected_result(an_gen):
    return (0xFF ^ (0x1 << an_gen))


@cocotb.coroutine
def run_test(dut, ctrl_i=0):
    yield rst_function_test(dut)
    yield mux_function_test(dut, ctrl_i)


n = 10
factory = TestFactory(run_test)
factory.add_option("ctrl_i", np.random.randint(
    low=0, high=8, size=n))  #array de 10 int aleatorios entre 0 y 15
factory.generate_tests()
Ejemplo n.º 8
0
import operator
from cocotb.regression import TestFactory
from spinal.RiscvTester.RiscvTester import  isaTestsMemory, isaTestsMulDiv, isaTestsBase, testIsa


factory = TestFactory(testIsa)
factory.add_option("iHexPath",  map(lambda x : "../" + x,reduce(operator.add, [isaTestsBase, isaTestsMemory, isaTestsMulDiv])))
factory.generate_tests()
Ejemplo n.º 9
0
            # Override the driver's ARLEN value, forcing a wrong one
            await RisingEdge(dut.clk)
            arlen = burst_length - 1 + length_delta
            getattr(dut, AXI_PREFIX + '_ARLEN').value = arlen
            await axim.read(address, burst_length)

            raise TestFailure("Mismatch between ARLEN value ({}) and number "
                              "of read words ({}), but the driver did not "
                              "raise an exception".format(arlen, burst_length))

        except AXIReadBurstLengthMismatch:
            pass


single_beat = TestFactory(test_single_beat)
single_beat.add_option('driver', (AXI4Master, AXI4LiteMaster))
single_beat.add_option('address_latency', (0, ))
single_beat.add_option('data_latency', (0, ))
single_beat.generate_tests()

single_beat_with_latency = TestFactory(test_single_beat)
single_beat_with_latency.add_option('driver', (AXI4Master, ))
single_beat_with_latency.add_option('address_latency', (0, 5))
single_beat_with_latency.add_option('data_latency', (1, 10))
single_beat_with_latency.generate_tests(postfix="_latency")

incr_burst = TestFactory(test_incr_burst)
incr_burst.add_option('return_rresp', (True, False))
incr_burst.add_option('size', (None, ))
incr_burst.generate_tests()
Ejemplo n.º 10
0
def size_list():
    return list(range(60, 128)) + [512, 1514, 9214] + [60] * 10


def incrementing_payload(length):
    return bytearray(itertools.islice(itertools.cycle(range(256)), length))


def cycle_en():
    return itertools.cycle([0, 0, 0, 1])


if cocotb.SIM_NAME:

    factory = TestFactory(run_test)
    factory.add_option("payload_lengths", [size_list])
    factory.add_option("payload_data", [incrementing_payload])
    factory.add_option("ifg", [12])
    factory.add_option("enable_dic", [True, False])
    factory.add_option("force_offset_start", [False, True])
    factory.generate_tests()

    factory = TestFactory(run_test_alignment)
    factory.add_option("payload_data", [incrementing_payload])
    factory.add_option("ifg", [12])
    factory.add_option("enable_dic", [True, False])
    factory.add_option("force_offset_start", [False, True])
    factory.generate_tests()

# cocotb-test
Ejemplo n.º 11
0
    await tb.reset()

    dut.m_axis_tready <= 1;
    
    if backpressure_inserter is not None:
        tb.backpressure.start(backpressure_inserter())

    # Send in the packets
    for transaction in data_in(Sha.blocks512(codec)):
        tb.s_axis.bus.tuser <= BinaryValue(80*'0'+little_endian_codec(codec)+32*'0')
        await tb.s_axis.send(transaction)

    # Wait for last transmission
    while not ( dut.m_axis_tlast.value and dut.m_axis_tvalid.value and dut.m_axis_tready.value):
        await RisingEdge(dut.axis_aclk)
    await RisingEdge(dut.axis_aclk)
    
    
    dut._log.info("DUT testbench finished!")

    raise tb.scoreboard.result


# Register the test.
factory = TestFactory(run_test)
factory.add_option("codec", [0x12,0x13,0x09,0x10])
factory.add_option("data_in", [random_message])
factory.add_option("backpressure_inserter", 
                    [None, random_50_percent]) # Throtle tready: random_50_percent
factory.generate_tests()
    cocotb.fork(Clock(dut.clk, 100).start())

    driver = ImageDriver(dut)
    monitor = JpegMonitor(dut)

    if debug:  # pragma: no cover
        driver.log.setLevel(logging.DEBUG)
        monitor.log.setLevel(logging.DEBUG)

    stimulus = Image.open(filename)
    yield driver.send(stimulus)
    output = yield monitor.wait_for_recv()

    if debug:  # pragma: no cover
        output.save(filename + "_process.jpg")

    difference = compare(stimulus, output)

    dut.log.info("Compressed image differs to original by %f%%" % (difference))

    if difference > threshold:  # pragma: no cover
        raise TestFailure("Resulting image file was too different (%f > %f)" %
                          (difference, threshold))


tf = TestFactory(process_image)
tf.add_option(
    "filename",
    [os.path.join('test_images', f) for f in os.listdir('test_images')])
tf.generate_tests()
Ejemplo n.º 13
0
Tests of cocotb.regression.TestFactory functionality
"""
from collections.abc import Coroutine

import cocotb
from cocotb.regression import TestFactory

testfactory_test_args = set()


async def run_testfactory_test(dut, arg1, arg2, arg3):
    testfactory_test_args.add((arg1, arg2, arg3))


factory = TestFactory(run_testfactory_test)
factory.add_option("arg1", ["a1v1", "a1v2"])
factory.add_option(("arg2", "arg3"), [("a2v1", "a3v1"), ("a2v2", "a3v2")])
factory.generate_tests()


@cocotb.test()
async def test_testfactory_verify_args(dut):
    assert testfactory_test_args == {
        ("a1v1", "a2v1", "a3v1"),
        ("a1v2", "a2v1", "a3v1"),
        ("a1v1", "a2v2", "a3v2"),
        ("a1v2", "a2v2", "a3v2"),
    }


class TestClass(Coroutine):
Ejemplo n.º 14
0
        await workers.pop(0).join()

    await RisingEdge(dut.clk)
    await RisingEdge(dut.clk)


def cycle_pause():
    return itertools.cycle([1, 1, 1, 0])


if cocotb.SIM_NAME:

    for test in [run_test_write, run_test_read]:

        factory = TestFactory(test)
        factory.add_option("idle_inserter", [None, cycle_pause])
        factory.add_option("backpressure_inserter", [None, cycle_pause])
        factory.generate_tests()

    for test in [run_test_write_words, run_test_read_words]:

        factory = TestFactory(test)
        factory.generate_tests()

    factory = TestFactory(run_stress_test)
    factory.generate_tests()

# cocotb-test

tests_dir = os.path.dirname(__file__)
def size_list():
    return list(range(60, 128)) + [512, 1514] + [60] * 10


def incrementing_payload(length):
    return bytearray(itertools.islice(itertools.cycle(range(256)), length))


def cycle_en():
    return itertools.cycle([0, 0, 0, 1])


if cocotb.SIM_NAME:

    factory = TestFactory(run_test)
    factory.add_option("payload_lengths", [size_list])
    factory.add_option("payload_data", [incrementing_payload])
    factory.add_option("ifg", [12])
    factory.add_option("enable_gen", [None, cycle_en])
    factory.add_option("mii_sel", [False, True])
    factory.generate_tests()

# cocotb-test

tests_dir = os.path.abspath(os.path.dirname(__file__))
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
lib_dir = os.path.abspath(os.path.join(rtl_dir, '..', 'lib'))
axis_rtl_dir = os.path.abspath(os.path.join(lib_dir, 'axis', 'rtl'))


def test_axis_gmii_tx(request):
Ejemplo n.º 16
0
def random_packet_sizes(min_size=1, max_size=150, npackets=10):
    """random string data of a random length"""
    for i in range(npackets):
        yield get_bytes(random.randint(min_size, max_size), random_data())


@cocotb.coroutine
def randomly_switch_config(csr):
    """Twiddle the byteswapping config register"""
    while True:
        yield csr.write(0, random.randint(0, 1))


factory = TestFactory(run_test)
factory.add_option("data_in",
                   [random_packet_sizes])
factory.add_option("config_coroutine",
                   [None, randomly_switch_config])
factory.add_option("idle_inserter",
                   [None, wave, intermittent_single_cycles, random_50_percent])
factory.add_option("backpressure_inserter",
                   [None, wave, intermittent_single_cycles, random_50_percent])
factory.generate_tests()

import cocotb.wavedrom


@cocotb.test()
def wavedrom_test(dut):
    """
    Generate a JSON wavedrom diagram of a trace
Ejemplo n.º 17
0
@cocotb.coroutine
def process_image(dut, filename="", debug=False, threshold=0.22):
    """Run an image file through the jpeg encoder and compare the result"""
    cocotb.fork(Clock(dut.clk, 100).start())

    driver = ImageDriver(dut)
    monitor = JpegMonitor(dut)

    if debug:  # pragma: no cover
        driver.log.setLevel(logging.DEBUG)
        monitor.log.setLevel(logging.DEBUG)

    stimulus = Image.open(filename)
    yield driver.send(stimulus)
    output = yield monitor.wait_for_recv()

    if debug:  # pragma: no cover
        output.save(filename + "_process.jpg")

    difference = compare(stimulus, output)

    dut.log.info("Compressed image differs to original by %f%%" % (difference))

    if difference > threshold:  # pragma: no cover
        raise TestFailure("Resulting image file was too different (%f > %f)" % (difference, threshold))


tf = TestFactory(process_image)
tf.add_option("filename", [os.path.join("test_images", f) for f in os.listdir("test_images")])
tf.generate_tests()
Ejemplo n.º 18
0
import operator
from cocotb.regression import TestFactory
from spinal.RiscvTester.RiscvTester import  isaTestsMemory, isaTestsMulDiv, isaTestsBase, testIsa

from cocotblib.misc import cocotbXHack
cocotbXHack()

factory = TestFactory(testIsa)
factory.add_option("iHexPath",  reduce(operator.add, [isaTestsBase, isaTestsMemory, isaTestsMulDiv]))
factory.generate_tests()
Ejemplo n.º 19
0
            assert q.get_nowait() == k
    else:
        for k in range(QUEUE_SIZE):
            assert q.get_nowait() == k

    assert q.qsize() == 0
    assert q.empty()
    assert not q.full()

    # underflow
    with pytest.raises(QueueEmpty):
        q.get_nowait()


factory = TestFactory(run_queue_nonblocking_test)
factory.add_option("queue_type", [Queue, PriorityQueue, LifoQueue])
factory.generate_tests()


@cocotb.test()
async def test_queue_contention(dut):
    NUM_PUTTERS = 20
    QUEUE_SIZE = 10

    q = Queue(maxsize=QUEUE_SIZE)

    async def putter(lst, item):
        await q.put(item)
        lst.append(item)

    async def getter(lst, item):
Ejemplo n.º 20
0
    return itertools.cycle([1, 1, 1, 0])


if cocotb.SIM_NAME:

    s_count = int(os.getenv("PARAM_S_COUNT"))
    m_count = int(os.getenv("PARAM_M_COUNT"))

    data_width = int(os.getenv("PARAM_DATA_WIDTH"))
    byte_width = data_width // 8
    max_burst_size = (byte_width-1).bit_length()

    for test in [run_test_write, run_test_read]:

        factory = TestFactory(test)
        factory.add_option("idle_inserter", [None, cycle_pause])
        factory.add_option("backpressure_inserter", [None, cycle_pause])
        # factory.add_option("size", [None]+list(range(max_burst_size)))
        factory.add_option("s", range(min(s_count, 2)))
        factory.add_option("m", range(min(m_count, 2)))
        factory.generate_tests()

    factory = TestFactory(run_stress_test)
    factory.generate_tests()


# cocotb-test

tests_dir = os.path.abspath(os.path.dirname(__file__))
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
Ejemplo n.º 21
0
    ]
    for i in samples:
        await ff_driver.write(i, exit_full=False)
    assert (value := await ff_driver.write(
        samples[0],
        exit_full=True)) == "FULL", "AFIFO not signaling full correctly"
    # Testing FIFO empty flag
    await reset_dut(dut)
    assert (value := await
            ff_driver.read(exit_empty=True
                           )) == "EMPTY", "AFIFO not signaling empty correctly"


if cocotb.SIM_NAME:
    factory = TestFactory(run_test)
    factory.add_option('config_clock', [0, 1])
    factory.generate_tests()


#@pytest.mark.skipif(os.getenv("SIM") != "verilator", reason="Verilator is the only supported")
@pytest.mark.parametrize("slots", [2, 4, 8, 16, 32, 64, 128])
def test_fifo_async(slots):
    tests_dir = os.path.dirname(os.path.abspath(__file__))
    rtl_dir = tests_dir
    dut = "async_gp_fifo"
    module = os.path.splitext(os.path.basename(__file__))[0]
    toplevel = dut
    verilog_sources = [
        os.path.join(rtl_dir, f"../{dut}.sv"),
    ]
    parameters = {}
Ejemplo n.º 22
0
    output_w = len(dut.output)
    n_inputs = num_inputs(dut)

    yield init_test(dut)

    wr_data = []
    for _ in range(test_size):
        wr_data.append([signed_random(width_i) for _ in range(n_inputs)])
    expected = [sum(x) for x in wr_data]

    cocotb.fork(send(dut, wr_data))

    rd_data = yield recv(dut)

    assert len(rd_data) >= len(wr_data)
    assert subfinder(rd_data, expected), f'{expected} not in {rd_data}'


tf_test_data = TF(check_data)
tf_test_data.add_option('dummy', [0] * 5)
tf_test_data.generate_tests()

@pytest.mark.parametrize("width_i, stages", [(8, 4), (8, 2), (8, 1),])
def test_main(width_i, stages):
    core = TreeAdderSigned(width_i=width_i,
                           n_stages=stages,
                           reg_in=True, reg_out=True)
    ports = core.get_ports()
    vcd_file = vcd_only_if_env(f'./test_adder_i{width_i}_s{stages}.vcd')
    run(core, 'cnn.tests.test_tree_operations', ports=ports, vcd_file=vcd_file)
Ejemplo n.º 23
0
import operator
from cocotb.regression import TestFactory
from spinal.RiscvTester.RiscvTester import isaTestsMemory, isaTestsMulDiv, isaTestsBase, testIsa

from cocotblib.misc import cocotbXHack
cocotbXHack()

factory = TestFactory(testIsa)
factory.add_option(
    "iHexPath",
    map(lambda x: "../" + x,
        reduce(operator.add, [isaTestsBase, isaTestsMemory, isaTestsMulDiv])))
factory.generate_tests()
Ejemplo n.º 24
0
    if(dut.counter_o != 16):
            raise TestFailure("""Error WAIT_74_CYC, wrong counter_o value = {0}, expected value = {1}""".format(int(dut.counter_o.value),16)) 

    
           
    





@cocotb.coroutine
def n_cycles_clock(dut,n):
    for i in range(0,n):
        yield RisingEdge(dut.clk)
        yield FallingEdge(dut.clk)  
        

@cocotb.test()
def run_test(dut,n=0):
    setup_function(dut)
    yield from_reset_to_idle(dut)



n = 10
factory = TestFactory(run_test)

factory.add_option("n", np.random.randint(low=0,high=(2**32)-1,size=n)) #array de 10 int aleatorios entre 0 y 31
factory.generate_tests() 
Ejemplo n.º 25
0

def create_matrix(func, rows, cols):
    return [func(DATA_WIDTH) for row in range(rows) for col in range(cols)]


def create_a(func):
    return create_matrix(func, A_ROWS, A_COLUMNS_B_ROWS)


def create_b(func):
    return create_matrix(func, A_COLUMNS_B_ROWS, B_COLUMNS)


def gen_a(num_samples=NUM_SAMPLES, func=getrandbits):
    """Generate random matrix data for A"""
    for _ in range(num_samples):
        yield create_a(func)


def gen_b(num_samples=NUM_SAMPLES, func=getrandbits):
    """Generate random matrix data for B"""
    for _ in range(num_samples):
        yield create_b(func)


factory = TestFactory(test_multiply)
factory.add_option('a_data', [gen_a])
factory.add_option('b_data', [gen_b])
factory.generate_tests()
Ejemplo n.º 26
0
        await event.wait()


if cocotb.SIM_NAME:

    for test in [
            run_test_rc_mem,
            run_test_config,
            run_test_enumerate,
    ]:

        factory = TestFactory(test)
        factory.generate_tests()

    factory = TestFactory(run_test_ep_mem)
    factory.add_option("ep_index", range(4))
    factory.generate_tests()

    factory = TestFactory(run_test_p2p_dma)
    factory.add_option("ep1_index", [0, 1])
    factory.add_option("ep2_index", [2, 3])
    factory.generate_tests()

    factory = TestFactory(run_test_dma)
    factory.add_option("ep_index", range(4))
    factory.generate_tests()

    factory = TestFactory(run_test_msi)
    factory.add_option("ep_index", range(4))
    factory.generate_tests()
Ejemplo n.º 27
0
        yield RisingEdge(dut.clk)
        yield FallingEdge(dut.clk)


@cocotb.coroutine
def run_test(dut, text=0):

    #text = random.randint(0,(2**32)-1)

    salt = 0x123456789ABCDEF0
    count = 50
    user_password = 0xAAAA

    kdf_impl = keyDerivationFunction.KDF(count, salt, user_password)
    expected_value = kdf_impl.generate_derivate_key()

    first_value = (user_password << 96) + (salt << 32) + count

    setup_function(dut, salt, count, user_password)

    yield rst_function_test(dut, first_value)
    yield kdf_test(dut, expected_value)


n = 1
factory = TestFactory(run_test)

factory.add_option("text", np.random.randint(low=0, high=(2**32) - 1, size=n))
#factory.add_option("c", np.random.randint(low=0,high=(2**32)-1,size=n)) #array de 10 int aleatorios entre 0 y 31
factory.generate_tests()
Ejemplo n.º 28
0
@cocotb.coroutine
def run_test_single(dut, input_data):
    tb = NormalizeTestbench(dut)
    yield tb.initialize()

    op = input_data
    x, y, z = op
    result = normalize_vector_operation(pack_vector(x, y, z))

    yield tb.clock_input(op)
    yield tb.flush_pipeline()
    yield tb.clock_assert_result(unpack_vector(result))


tests = TestFactory(run_test_single)
tests.add_option('input_data', inputs)
generate_tests_for(tests)


@cocotb.test()
def pipeline_test(dut):
    tb = NormalizeTestbench(dut)
    yield tb.initialize()

    for i in range(min(fixed_w, len(inputs))):
        yield tb.clock_input(inputs[i])

    yield tb.flush_pipeline()

    for i in range(min(fixed_w, len(inputs))):
        x, y, z = inputs[i]
Ejemplo n.º 29
0
    yield RisingEdge(dut.read_clk)

@cocotb.coroutine
def check_data(dut, period_ns_w, period_ns_r, burps_in, burps_out, dummy=0):
    length = 200
    yield init_test(dut, period_ns_w, period_ns_r)
    input_stream = DataStreamDriver(dut, 'input_', dut.write_clk)
    output_stream = DataStreamDriver(dut, 'output_', dut.read_clk)
    data = [random.getrandbits(len(input_stream.bus.data)) for _ in range(length)]
    cocotb.fork(input_stream.send(data, burps=burps_in))
    rcv = yield output_stream.recv(burps=burps_out)
    assert data == rcv, f'\n{data}\n!=\n{rcv}'


tf_check = TF(check_data)
tf_check.add_option('period_ns_w', [10])
tf_check.add_option('period_ns_r', [10, 22, 3])
tf_check.add_option('burps_in',  [False, True])
tf_check.add_option('burps_out', [False, True])
tf_check.add_option('dummy', [0] * 3)
tf_check.generate_tests(postfix='_cdc')


@pytest.mark.parametrize("width, depth", [(random.randint(2, 20), random.randint(2, 10))])
def test_main(width, depth):
    fifo = StreamFifoCDC(input_stream=DataStream(width, 'sink', name='input'),
                         output_stream=DataStream(width, 'source', name='output'),
                         depth=depth,
                         r_domain='read',
                         w_domain='write')
    ports = [fifo.input[f] for f in fifo.input.fields]   
Ejemplo n.º 30
0
def cycle_pause():
    return itertools.cycle([1, 1, 1, 0])


def size_list():
    return list(range(1, 128)) + [512, 1500, 9200] + [46] * 10


def incrementing_payload(length):
    return bytes(itertools.islice(itertools.cycle(range(256)), length))


if cocotb.SIM_NAME:

    factory = TestFactory(run_test)
    factory.add_option("pkt_type", [Ether, IP, UDP, TCP])
    factory.add_option("payload_lengths", [size_list])
    factory.add_option("payload_data", [incrementing_payload])
    factory.add_option("idle_inserter", [None, cycle_pause])
    factory.generate_tests()

# cocotb-test

tests_dir = os.path.dirname(__file__)
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
lib_dir = os.path.abspath(os.path.join(rtl_dir, '..', 'lib'))
axi_rtl_dir = os.path.abspath(os.path.join(lib_dir, 'axi', 'rtl'))
axis_rtl_dir = os.path.abspath(os.path.join(lib_dir, 'axis', 'rtl'))
eth_rtl_dir = os.path.abspath(os.path.join(lib_dir, 'eth', 'rtl'))
pcie_rtl_dir = os.path.abspath(os.path.join(lib_dir, 'pcie', 'rtl'))
Ejemplo n.º 31
0

def incrementing_payload(length):
    return bytearray(itertools.islice(itertools.cycle(range(256)), length))


def cycle_en():
    return itertools.cycle([0, 0, 0, 1])


if cocotb.SIM_NAME:

    for test in [run_test_rx, run_test_tx]:

        factory = TestFactory(test)
        factory.add_option("payload_lengths", [size_list])
        factory.add_option("payload_data", [incrementing_payload])
        factory.add_option("ifg", [12])
        factory.add_option("speed", [1000e6, 100e6, 10e6])
        factory.generate_tests()

# cocotb-test

tests_dir = os.path.abspath(os.path.dirname(__file__))
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
lib_dir = os.path.abspath(os.path.join(rtl_dir, '..', 'lib'))
axis_rtl_dir = os.path.abspath(os.path.join(lib_dir, 'axis', 'rtl'))


def test_eth_mac_1g_gmii_fifo(request):
    dut = "eth_mac_1g_gmii_fifo"
Ejemplo n.º 32
0

def size_list():
    return list(range(60, 128)) + [512, 1514, 9214] + [60]*10


def incrementing_payload(length):
    return bytearray(itertools.islice(itertools.cycle(range(256)), length))


if cocotb.SIM_NAME:

    for test in [run_test_tx, run_test_rx]:

        factory = TestFactory(test)
        factory.add_option("payload_lengths", [size_list])
        factory.add_option("payload_data", [incrementing_payload])
        factory.add_option("speed", [10e9, 1e9])
        factory.generate_tests()


# cocotb-test

tests_dir = os.path.dirname(__file__)


def test_eth_mac(request):
    dut = "test_eth_mac"
    module = os.path.splitext(os.path.basename(__file__))[0]
    toplevel = dut
Ejemplo n.º 33
0

def random_packet_sizes(min_size=1, max_size=150, npackets=10):
    """random string data of a random length"""
    for i in range(npackets):
        yield get_bytes(random.randint(min_size, max_size), random_data())


async def randomly_switch_config(csr):
    """Twiddle the byteswapping config register"""
    while True:
        await csr.write(0, random.randint(0, 1))


factory = TestFactory(run_test)
factory.add_option("data_in", [random_packet_sizes])
factory.add_option("config_coroutine", [None, randomly_switch_config])
factory.add_option("idle_inserter",
                   [None, wave, intermittent_single_cycles, random_50_percent])
factory.add_option("backpressure_inserter",
                   [None, wave, intermittent_single_cycles, random_50_percent])
factory.generate_tests()

import cocotb.wavedrom


@cocotb.test()
async def wavedrom_test(dut):
    """
    Generate a JSON wavedrom diagram of a trace and save it to wavedrom.json
    """
Ejemplo n.º 34
0
    for index, values in enumerate(data_generator(bits=len(dut.in1))):
        expected.append(sorted(values))

        yield RisingEdge(dut.clk)
        dut.in1 = values[0]
        dut.in2 = values[1]
        dut.in3 = values[2]
        dut.in4 = values[3]
        dut.in5 = values[4]

        yield ReadOnly()
        expect = expected.pop(0)

        if expect is None: continue


        got = [int(dut.out5), int(dut.out4), int(dut.out3),
               int(dut.out2), int(dut.out1)]

        if got != expect:
            dut.log.error('Expected %s' % expect)
            dut.log.error('Got %s' % got)
            raise TestFailure("Output didn't match")

    dut.log.info('Sucessfully sent %d cycles of data' % (index + 1))

# Generate permutations of the test
tests = TestFactory(run_test)
tests.add_option('data_generator', [random_data, corner_cases])
tests.generate_tests()
Ejemplo n.º 35
0

def cycle_pause():
    return itertools.cycle([1, 1, 1, 0])


if cocotb.SIM_NAME:

    data_width = int(os.getenv("PARAM_AXI_DATA_WIDTH"))
    byte_width = data_width // 8
    max_burst_size = (byte_width-1).bit_length()

    for test in [run_test_write, run_test_read]:

        factory = TestFactory(test)
        factory.add_option("idle_inserter", [None, cycle_pause])
        factory.add_option("backpressure_inserter", [None, cycle_pause])
        factory.add_option("size", [None]+list(range(max_burst_size)))
        factory.generate_tests()

    factory = TestFactory(run_stress_test)
    factory.generate_tests()


# cocotb-test

tests_dir = os.path.dirname(__file__)
rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))


@pytest.mark.parametrize("axil_data_width", [8, 16, 32])
Ejemplo n.º 36
0
    """Run an image file through the jpeg encoder and compare the result"""
    cocotb.fork(Clock(dut.clk, 100).start())
    #Overwriting debug (original) with the one from env
    debug = os.getenv('COCOTB_DEBUG') # None/1

    driver = ImageDriver(dut)
    monitor = JpegMonitor(dut)

    if debug:                                            # pragma: no cover
        driver.log.setLevel(logging.DEBUG)
        monitor.log.setLevel(logging.DEBUG)

    stimulus = Image.open(filename)
    yield driver.send(stimulus)
    output = yield monitor.wait_for_recv()

    if debug:                                            # pragma: no cover
        output.save(filename + "_process.jpg")

    difference = compare(stimulus, output)

    dut.log.info("Compressed image differs to original by %f%%" % (difference))

    if difference > threshold:                           # pragma: no cover
        raise TestFailure("Resulting image file was too different (%f > %f)" %
                          (difference, threshold))

tf = TestFactory(process_image)
tf.add_option("filename", [os.path.join('test_images', f)
                            for f in os.listdir('test_images')])
tf.generate_tests()
Ejemplo n.º 37
0
import operator
from cocotb.regression import TestFactory
from spinal.RiscvTester.RiscvTester import  isaTestsMemory, isaTestsMulDiv, isaTestsBase, testIsa

from cocotblib.misc import cocotbXHack
cocotbXHack()

factory = TestFactory(testIsa)
factory.add_option("iHexPath",  map(lambda x : "../" + x,reduce(operator.add, [["../Pinsec/hex/dhrystone.hex"]])))
factory.generate_tests()