49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
#!/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
|