Fehlerhandling bei Serdes Verbindung

Gast #3097349
Lesenswert?

Hallo Zusammen,

ich will eine Serdes Verbindung zwischen zwei Spartan 6 aufbauen, die 
Daten mit 4b/5b überträgt. Wenn ich über den Core-Generator die 
Eingangsseite über ein SelectIO Interface erstelle, wird intern eine Art 
Frame-Signal für die 5 Bit breiten Datenpakete durch einen BUFIO2, der 
durch 5 teilt, erstellt. Hinter dem SelectIO/Serdes würde ich nun einen 
4b/5b decoder setzen. Was ist aber, wenn im Fehlerfall der Eingang z.B. 
am Takteingang eine "Extraflanke" sieht oder eine Flanke übersieht - ab 
dem Moment würden alle 4b/5b Datenpakete Empfängerseitig ein Bit 
verschoben und komplett falsch ankommen. Habe ich da einen Denkfehler 
und wenn nein, wie fängt man sowas ab?

Danke und viele Grüße

Achim
Gast #3097470
Lesenswert?

pks schrieb:
> Du musst Dein Signal entweder über-abtasten oder mit einem externen
> Baustein den Takt aus dem Datenstrom zurückgewinnen.

Den Takt will ich mit übertragen, also Clock und Daten getrennt - in dem 
Fall kann ich mir die Taktrückgewinnung sparen.

8b/10b wäre auch eine Möglichkeit, da stoße ich aber 1. an die Grenzen 
der Breite des SelectIOs mit SDR und 2. brauche ich es eigentlich nicht, 
da ich wie oben beschrieben keine Taktrückgewinnung mache.
#3097501
Lesenswert?

Nee, im Normalfall kommt der (HighSpeed) Takt zu dem die Daten und das 
Frame Sync synchron sind aus der Quelle. Mit dem Takt betreibst du die 
ISERDES über die BUFIO2 Geschichte.
Das Frame Sync dient nur dazu beim Starten die Bits richtig zu schieben, 
das geht über das BitSlip. Wenn das einmal ausgrichtet ist, kann 
eigentlich bei so einer source synchronous Strecke nicht mehr viel 
passieren. Siehe XAPP1064
Gast #3097508
Lesenswert?

Dieter schrieb:
> nein, der Takt bei ist mehr ein Frame Sync als ein Takt. Du musst daraus
> Deinen Takt generieren.

Wenn ich mich an den Core-Generator halte, ist er das nicht - da ist der 
Takt ein Takt und im Empfangs-FPGA wird dieser runter geteilt um ein 
Frame Sync daraus zu machen. Daher rührt meine Frage oben. Ist der 
Ansatz vom CoreGen grundsätzlich falsch und man sollte den Weg gehen, 
ein langsames Frame Sync (im Fall von 4b/5b Rechteck in 5 Datenbit 
Breite) übertragen und dann im Empfangs-FPGA via DCM auf Datenfrequenz 
multiplizieren?
#3097587
Lesenswert?

Das Frame Sync intern erzeugen bringt ja nichts. Das muss der Sender 
erzeugen, damit der Empfänger weiß, wann ein neues Byte anfängt (oder 
bei dir halt wann das MSB/LSB des nächsten 5 Bit Wortes kommt). Du musst 
das Frame Sync vom Sender ausgeben und ein konstantes Muster einstellen, 
anhand dessen du im Empfänger zweifelsfrei feststellen kannst, wann die 
Bits ausgerichtet sind. Am LTC2175 ADC wird das beispielsweise so 
gemacht wie im Bild. Mit jeder Flanke des High Speed Cloks wird ein 
Datenbit abgetastet und das Frame Signal zeigt eindeutig die Lage an. 
Intern musst du dann beim Starten solange das Bit Slip machen bis die 
Lage stimmt, also am Frame Sync Parallel Vektor dein am Sender 
eingestelltes konstantes Muster anliegt.
Angehängte Dateien:
Gast #3097949
Lesenswert?

Christian R. schrieb:
> Du musst
> das Frame Sync vom Sender ausgeben und ein konstantes Muster einstellen,
> anhand dessen du im Empfänger zweifelsfrei feststellen kannst, wann die
> Bits ausgerichtet sind.

Das klingt gut und sinnvoll, nur brauche ich dann für das FS extra Pins, 
auf die ich gerne verzichten würde (muss). Ich hatte grade die Idee, in 
regelmäßigen Abständen, also vor jedem größeren "Datenblock" eine 
Sync-Sequenz aus 5x Steuerwörtern zu schicken (z.B. J -> 11000). Dann 
könnte der Empfänger darauf warten, maximal 5x Bit Slippen und wäre dann 
für den nächsten größeren Traffic im FS. Gute oder schlechte Idee? ;)
Gast #3098076
Lesenswert?

Achim schrieb:
> Christian R. schrieb:
>> Du musst
>> das Frame Sync vom Sender ausgeben und ein konstantes Muster einstellen,
>> anhand dessen du im Empfänger zweifelsfrei feststellen kannst, wann die
>> Bits ausgerichtet sind.
>
> Das klingt gut und sinnvoll, nur brauche ich dann für das FS extra Pins,
> auf die ich gerne verzichten würde (muss). Ich hatte grade die Idee, in
> regelmäßigen Abständen, also vor jedem größeren "Datenblock" eine
> Sync-Sequenz aus 5x Steuerwörtern zu schicken (z.B. J -> 11000). Dann
> könnte der Empfänger darauf warten, maximal 5x Bit Slippen und wäre dann
> für den nächsten größeren Traffic im FS. Gute oder schlechte Idee? ;)

Genau das meinte Christian auch so.
Wenn man noch sicherstellt, dass auch ein verschobenes Sync kein legales 
Symbol ist, wird ein Versatz einfach detektier- und korrigierbar.
Gast #3098212
Lesenswert?

Stimmt, ich hätte besser lesen/verstehen sollen. Mein J-Symbol muss auch 
nicht 5x gesendet werden, sondern nur ein mal beim Start jedes 
Datenblocks - so wie auch in der xapp495 beschrieben.

Also, danke und Euch ein schönes Wochenende!

Viele Grüße

Achim

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren