Hallo zusammen, ich habe ein Problem, was ich mit Hilfe eines Spartan 3A-DSP lösen möchte. Ich habe einen seriellen Datenstrom, der auf die steigende und fallende Flanke (DDR) des Taktes anliegt. In diesem Datenstrom möchte ich nun ein SYNC Word erkennen und die darauf folgenden Daten abspeichern. Ich habe mir dazu zwei Schieberegister erstellt. Das eine parallelisiert die Daten der steigenden Flanke und das andere die der fallenden Flanke (Datenstrom durch IDDR2 zerlegt). Dann setze ich die Daten wieder abwechselnd zu einem 8bit Wert zusammen. Das SYNC Word hat die Aufgabe, dass danach die gültigen Daten anliegen. Diese möchte ich vom ersten Bit an, immer wieder an der gleichen Stelle abspeichern. Bisher ist es mir nur gelungen, die Daten geschiftet abzuspeichern, weil ich immer irgendwo in den Datenstrom greife und zu keinem definierten Zeitpunkt anfange abzuspeichern. Nun möchte ich nach dem SYNC Word anfangen abzuspeichern und erhoffe mir so, dass die Daten so ausgelesen werden können, wie ich sie dem Sender vorgebe. Kann ich nun den Ausgang der Schieberegister einfach ständig mit dem Wert des SYNC Words vergleichen und darauf hin eine Speicherroutine starten, die die nachfolgenden Daten des Datenstromes abspeichert? Ich mache mir große Gedanken über das Timing, das wird sicher nicht einfach zu lösen sein. Hat jemand Ideen oder Hinweise dbzgl. oder so etwas schon einmal umgesetzt? Vielen Dank! MfG Andi
> Kann ich nun den Ausgang der Schieberegister einfach ständig mit dem > Wert des SYNC Words vergleichen und darauf hin eine Speicherroutine > starten, die die nachfolgenden Daten des Datenstromes abspeichert? Ja. > Ich mache mir große Gedanken über das Timing, das wird sicher nicht > einfach zu lösen sein. Setze doch einfach mal ein entsprechendes Timingconstraint auf den Takt und probiers einfach aus. Wenns nicht klappt bekommst du das gemeldet und mußt dir dann erst Gedanken machen... Welchen Takt hat dein Schieberegister?
Ich werde es erst einmal ausprobieren, mal schauen was ich zustande bekomme. Der Takt, auf dem die Daten ankommen und somit auch der der Schieberegister ist 160MHz. DANKE! MfG Andi
Ich habe noch ein Problem entdeckt. Ich habe jetzt erst einmal testweise mit einem Syncwort 0xFFFF getestet. Nun passiert es natürlich, dass das letzte gültige Bit (oder auch die letzten 2-3 Bits) eine 1 sind. Dahinter kommt wieder das SYNC Wort und schon ist das komplette Bitmuster incl. Sync Wort verschoben. Wie kann ich das abfangen? Eine andere Sync Bitfolge kann ja rein theoretisch auch vorkommen (meinetwegen am Ende eine 0, wenn das SYNC Wort mit einer 0 anfängt), so dass es immer passieren kann, dass ich falsche Daten auslese. Wie genau kann ich diesem Problem entgegenwirken? DANKE!
> Wie genau kann ich diesem Problem entgegenwirken?
Du brauchst einen Magic-Code, der in deinem "normalen" Datenstrom nicht
vorkommt. Auf jeden Fall darf das Sync-Wort nicht nur aus 1en oder 0en
bestehen.
Der Mindestfall müsste hier also z.B. so aussehen: 0x7FFF, damit ist das
Problem mit den vorhergehenden 1en erschlagen. Allerdings darf in diesem
Fall keine Daten hintereinander übertragen werden, die nur 1 Null
enthalten. Z.B. wirst du mit 0xffef und danach 0xffef wieder auf
Probleme stossn...
@Andreas B ist es dir eventuell möglich den seriellen Datenstrom zu erweitern, also mehr Bits pro Word zu senden ? Also etwa für 8 "Nutz" Bits 10 Bits seriell zu übertragen ? Dann könntest du so was wie die 8b/10b Kodierung verwenden. War hier kürzlich Thema: Beitrag "Spartan3AN und 8b/10b mit Coregen" Soweit ich den u.g. Wikipedia Artikel verstanden habe, gibt es in diesem Code unverwechselbare "Sync" Bitfolgen. "the unique comma sequences 0011111 or 1100000 cannot be found at any bit position within any combination of normal codes." http://en.wikipedia.org/wiki/8b/10b_encoding
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.