Source code for usbcore.rx.detect_test

#!/usr/bin/env python3

import unittest

from migen import *
from migen.genlib import cdc

from migen.fhdl.decorators import ResetInserter

from ..test.common import BaseUsbTestCase
from .detect import RxPacketDetect


[docs]class TestRxPacketDetect(BaseUsbTestCase):
[docs] def packet_detect_test(self, vector, short_name): def send(value, valid): value += "_" pkt_start = "" pkt_active = "" for i in range(len(value)): if i < len(value): yield dut.i_data.eq(value[i] == '1') yield dut.i_valid.eq(valid[i] == '-') yield dut.reset.eq(value[i] == '_' and valid[i] == '-') yield pkt_start += { 1 : "S", 0 : " ", }[(yield dut.o_pkt_start)] pkt_active += { 1 : "-", 0 : "_", }[(yield dut.o_pkt_active)] return pkt_start, pkt_active def stim(value, valid, pkt_start, pkt_active): actual_pkt_start, actual_pkt_active = yield from send(value, valid) self.assertSequenceEqual(pkt_start, actual_pkt_start) self.assertSequenceEqual(pkt_active, actual_pkt_active) with self.subTest(short_name=short_name, vector=vector): dut = RxPacketDetect() run_simulation( dut, stim(**vector), vcd_name=self.make_vcd_name(testsuffix=short_name), )
[docs] def test_se0_idle(self): return self.packet_detect_test( dict( # SE0, Idle value = "______________111111111111111", valid = "------------------------------", pkt_start = " ", pkt_active = "______________________________" ), "se0-idle")
[docs] def test_idle_packet_idle(self): return self.packet_detect_test( dict( # Idle, Packet, Idle value = "11111000000011111111101__11111", valid = "-------------------------------", pkt_start = " S ", pkt_active = "_____________-----------_______" ), "idle-packet-idle")
[docs] def test_idle_packet_idle_stall(self): return self.packet_detect_test( dict( # Idle, Packet, Idle (pipeline stall) value = "111110000000111111111101__11111", valid = "--------------------------------", pkt_start = " S ", pkt_active = "_____________------------_______" ), "idle-packet-idle-stall")
[docs] def test_idle_packet_idle_stalls(self): return self.packet_detect_test( dict( # Idle, Packet, Idle (pipeline stalls) value = "11111000000011111111111101__11111", valid = "----------------------------------", pkt_start = " S ", pkt_active = "_____________--------------_______" ), "idle-packet-idle-stalls")
[docs] def test_idle_packet_idle_packet_idle(self): return self.packet_detect_test( dict( # Idle, Packet, Idle, Packet, Idle value = "11111000000011111111101__1111111111000000011111111101__11111", valid = "-------------------------------------------------------------", pkt_start = " S S ", pkt_active = "_____________-----------___________________-----------_______" ), "idle-packet-idle-packet-idle")
[docs] def test_idle_sync_idle(self): return self.packet_detect_test( dict( # Idle, Short Sync Packet, Idle value = "111110000011111111101__11111", valid = "-----------------------------", pkt_start = " S ", pkt_active = "___________-----------_______" ), "idle-shortsyncpacket-idle")
[docs] def test_idle_glitch(self): return self.packet_detect_test( dict( # Idle Glitch value = "11111111110011111111_1111__111", valid = "-------------------------------", pkt_start = " ", pkt_active = "_______________________________" ), "idle-glitch")
[docs] def test_valid_idle_packet_idle_packet_idle(self): return self.packet_detect_test( dict( # Idle, Packet, Idle, Packet, Idle value = "11111100100000011111111110101___111111111110000000011111111101___11111", valid = "----_---_--_---_------_--_----_-----_----------_--------------_--------", pkt_start = " S S ", pkt_active = "_________________-------------______________________------------_______" ), "valid-idle-packet-idle-packet-idle")
if __name__ == "__main__": unittest.main()