cores/code_8b10b/Decoder: add basic invalid symbols detection
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 8 Nov 2019 18:43:01 +0000 (19:43 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 8 Nov 2019 18:43:01 +0000 (19:43 +0100)
Check that we have 4,5 or 6 ones in the symbol. This does not report all
invalid symbols but still allow detecting issues with the link.

litex/soc/cores/code_8b10b.py

index 894449f0780d9aea85051a554ac8adc14184f8dc..552297c4671831b82394405dbee05bca774c1ddd 100644 (file)
@@ -1,4 +1,5 @@
 # This file is Copyright (c) 2016-2017 Sebastien Bourdeauducq <sb@m-labs.hk>
+# This file is Copyright (c) 2019 Florent Kermarrec <florent@enjoy-digital.fr>
 # License: BSD
 
 """
@@ -15,6 +16,9 @@ Note: This encoding is *not* used by DVI/HDMI (that uses a *different* 8b/10b
 scheme called TMDS).
 """
 
+from functools import reduce
+from operator import add
+
 from migen import *
 
 
@@ -267,6 +271,7 @@ class Decoder(Module):
         self.input = Signal(10)
         self.d = Signal(8)
         self.k = Signal()
+        self.invalid = Signal()
 
         # # #
 
@@ -304,3 +309,9 @@ class Decoder(Module):
         ]
 
         self.comb += self.d.eq(Cat(code5b, code3b))
+
+        # Basic invalid symbols detection: check that we have 4,5 or 6 ones in the symbol. This does
+        # not report all invalid symbols but still allow detecting issues with the link.
+        ones = Signal(4)
+        self.sync += ones.eq(reduce(add, [self.input[i] for i in range(10)]))
+        self.comb += self.invalid.eq((ones != 4) & (ones != 5) & (ones != 6))