#!/usr/bin/env python import cocotb from cocotb.triggers import * from cocotb.result import * from cocotb.queue import Queue from cocotb_helpers import buffers ETH_HEAD = b'\x55\x55\x55\x55\xD5' async def timeout(dut): await Timer(1, units="ms") assert False, "Timeout" async def rxprinter(dut, rx): while True: frame = await rx.queue.get() dut._log.info("RX Frame: " + str(frame)) @cocotb.test() async def my_test(dut): """TBD description.""" # Start verification components eth_tx = buffers.tx_buffer(dut, "cocovc_eth_inst.cocotb_tx_") await eth_tx.start() eth_rx = buffers.rx_buffer(dut, "cocovc_eth_inst.cocotb_rx_") await eth_rx.start() # Start local monitors await cocotb.start(rxprinter(dut, eth_rx)) # Start timeout await cocotb.start(timeout(dut)) # Wait for VHDL part to be ready await Edge(dut.bench_ready) # Start test procedure await Timer(400, units="us") # The device will send a frame at startup dut._log.info("Send first frame"); # This will trigger a response frame await eth_tx.send(ETH_HEAD + b'\x00\xff\xff\x11"3\x00\xff\xff\xaa\xbb\xcc\x00\n\n\t\x08\x07\x06\x05\x04\x03\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\x10\x90\xe0'); dut._log.info("Send second frame"); await eth_tx.send(ETH_HEAD + b'World'); await Timer(400, units="us") # Wait for response