58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
from amaranth import *
|
|
from amaranth.sim import *
|
|
from amlib.io.serial import *
|
|
from uart import *
|
|
from tests import BaseTestClass, provide_testcase_name
|
|
|
|
|
|
__all__ = ["TestHarness", "TestUART"]
|
|
|
|
|
|
class TestHarness(Elaboratable):
|
|
def __init__(self):
|
|
self.uut = UART(10e6, fifo_depth=16)
|
|
self.uart = AsyncSerial(divisor=int(10e6 // 115200), divisor_bits=16, data_bits=8, parity="none")
|
|
|
|
|
|
def elaborate(self, platform):
|
|
assert platform is None
|
|
|
|
m = Module()
|
|
m.submodules.uut = self.uut
|
|
m.submodules.uart = self.uart
|
|
|
|
# Connect UART lines
|
|
m.d.comb += [
|
|
self.uut.rx.eq(self.uart.tx.o),
|
|
self.uart.rx.i.eq(self.uut.tx),
|
|
]
|
|
|
|
# Connect the data lines so we are always pulling data out... for now
|
|
m.d.comb += [
|
|
self.uart.rx.ack.eq(1),
|
|
]
|
|
|
|
return m
|
|
|
|
|
|
class TestUART(BaseTestClass):
|
|
def setUp(self):
|
|
self.harness = TestHarness()
|
|
|
|
|
|
@provide_testcase_name
|
|
def test_operation(self, test_name):
|
|
def test():
|
|
for i in range(20):
|
|
yield from self._write_csr(self.harness.uut.bus, 2, i)
|
|
|
|
for _ in range(2000):
|
|
yield Tick()
|
|
|
|
yield from self._write_csr(self.harness.uut.bus, 0, 1000)
|
|
|
|
for _ in range(20000):
|
|
yield Tick()
|
|
|
|
self._run_test(test, test_name)
|