manta/test/test_uart_rx_sim.py

59 lines
1.6 KiB
Python
Raw Permalink Normal View History

2023-12-28 23:22:29 +01:00
from manta.uart import UARTReceiver
from manta.utils import *
uart_rx = UARTReceiver(clocks_per_baud=10)
2024-06-20 20:47:34 +02:00
async def verify_receive(ctx, data):
2023-12-28 23:22:29 +01:00
# 8N1 serial, LSB sent first
data_bits = "0" + f"{data:08b}"[::-1] + "1"
data_bits = [int(bit) for bit in data_bits]
valid_asserted_before = False
2024-02-19 00:50:51 +01:00
for i in range(10 * uart_rx._clocks_per_baud):
bit_index = i // uart_rx._clocks_per_baud
2023-12-28 23:22:29 +01:00
# Every cycle, run checks on uart_rx:
2024-06-20 20:47:34 +02:00
if ctx.get(uart_rx.valid_o):
if ctx.get(uart_rx.data_o) != data:
a = ctx.get(uart_rx.data_o)
2023-12-28 23:22:29 +01:00
print(data_bits)
raise ValueError(
f"Incorrect byte presented - gave {hex(a)} instead of {hex(data)}!"
)
if bit_index != 9:
print(bit_index)
raise ValueError("Byte presented before it is complete!")
if not valid_asserted_before:
valid_asserted_before = True
else:
raise ValueError("Valid asserted more than once!")
2024-06-20 20:47:34 +02:00
ctx.set(uart_rx.rx, data_bits[bit_index])
await ctx.tick()
2023-12-28 23:22:29 +01:00
if not valid_asserted_before:
raise ValueError("Failed to assert valid!")
2024-03-03 11:14:12 +01:00
@simulate(uart_rx)
2024-06-20 20:47:34 +02:00
async def test_all_possible_bytes(ctx):
ctx.set(uart_rx.rx, 1)
await ctx.tick()
2023-12-28 23:22:29 +01:00
2024-03-03 11:14:12 +01:00
for i in range(0xFF):
2024-06-20 20:47:34 +02:00
await verify_receive(ctx, i)
2023-12-28 23:22:29 +01:00
2024-03-03 11:14:12 +01:00
@simulate(uart_rx)
2024-06-20 20:47:34 +02:00
async def test_bytes_random_sample(ctx):
ctx.set(uart_rx.rx, 1)
await ctx.tick()
2023-12-28 23:22:29 +01:00
2024-03-04 09:17:36 +01:00
for i in jumble(range(0xFF)):
2024-06-20 20:47:34 +02:00
await verify_receive(ctx, i)