pmd_dp83223: Don't intentionally cause bit errors
On stretches without transitions, we can lose (or gain) a bit, depending on how the reciever is reckoning. This can cause spurious test failures when we get especially unlucky. Keep track of our running disparity (time-wise, not value-wise) and keep perfect time until we get a transition (or we start moving back in the right direction). Signed-off-by: Sean Anderson <seanga2@gmail.com>
This commit is contained in:
parent
63006ca9c0
commit
f4c2b1eb1f
|
@ -40,8 +40,23 @@ async def test_rx(pmd, delays):
|
||||||
# random phase
|
# random phase
|
||||||
await Timer(random.randrange(1, 8000), units='ps')
|
await Timer(random.randrange(1, 8000), units='ps')
|
||||||
pmd.signal_detect.value = 1
|
pmd.signal_detect.value = 1
|
||||||
|
|
||||||
|
last_bit = ins[0]
|
||||||
|
running_disparity = 0
|
||||||
for i, delay in zip(ins, delays(len(ins))):
|
for i, delay in zip(ins, delays(len(ins))):
|
||||||
pmd.indicate_data.value = i
|
pmd.indicate_data.value = i
|
||||||
|
# Keep track of how far off we are...
|
||||||
|
if i != last_bit:
|
||||||
|
running_disparity = 0
|
||||||
|
running_disparity += 8000 - delay
|
||||||
|
last_bit = i
|
||||||
|
|
||||||
|
# If we get more than a quarter cycle off, use perfect delay until
|
||||||
|
# we get a transition
|
||||||
|
if abs(running_disparity) >= 2000:
|
||||||
|
running_disparity -= 8000 - delay
|
||||||
|
delay = 8000
|
||||||
|
|
||||||
try:
|
try:
|
||||||
pmd.delay.value = delay
|
pmd.delay.value = delay
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
|
Loading…
Reference in New Issue