23.12.2013, 03:07 PM
Wichtig ist die Zeit zwischen zwei Flanken im Signal - die liegt entweder bei 1x, 2x oder 3x einer halben Periode des ursprünglichen SPDIF-Takts.
Da das Design von vorn herein alle möglichen Sampleraten unterstürtzen soll, sehe ich eigentlich nur eine sinnvolle Möglichkeit:
1.) Signal mit interner Clock bei ca. 150MHz abtasten (resync)
2.) Dabei in einem Schieberegister 1 aktuellen und 2 alte Werte halten
3.) Aus den Werten im SR per XOR Flanken erkennen
-> Das signal, das eine Flanke signalisiert ist dann genau ein FPGA-clockcyle lang 1.
4.) Die Zeit zwischen zwei Flanken wird ständig gemessen. Ist der Wert kleiner als der aktuelle, dann wird er gespeichert -> in dem Register steht dann die Länge einer halben Periode des SPDIF-Takts als Vielfaches (counter-Wert) der FPGA-Taktperiode
5.) Wenn der Wert, der in 4.) gemessen wird nach ein paar Zyklen irgendwann stimmt, kann ich die Zeit zwischen zwei Flanken im SPDIF-Signal korrekt dem Faktor 1, 2 oder 3 zuordnen.
Damit lassen sich dann schonmal die Präambeln im Signal erkennen - es gibt 3 wichtige:
-Data Block, Links: 3, 1, 1, 3
-Links: 3, 3, 1, 1
-Rechts: 3, 2, 1, 2
-> ich brauche ein Schieberegister, in das ich 4 Übergangszeiten schreiben kann.
Habe ich eine Präambel erkannt, brauche ich mir eigentlich nur noch die 24 folgenden Bits ansehen...
Da das Design von vorn herein alle möglichen Sampleraten unterstürtzen soll, sehe ich eigentlich nur eine sinnvolle Möglichkeit:
1.) Signal mit interner Clock bei ca. 150MHz abtasten (resync)
2.) Dabei in einem Schieberegister 1 aktuellen und 2 alte Werte halten
3.) Aus den Werten im SR per XOR Flanken erkennen
-> Das signal, das eine Flanke signalisiert ist dann genau ein FPGA-clockcyle lang 1.
4.) Die Zeit zwischen zwei Flanken wird ständig gemessen. Ist der Wert kleiner als der aktuelle, dann wird er gespeichert -> in dem Register steht dann die Länge einer halben Periode des SPDIF-Takts als Vielfaches (counter-Wert) der FPGA-Taktperiode
5.) Wenn der Wert, der in 4.) gemessen wird nach ein paar Zyklen irgendwann stimmt, kann ich die Zeit zwischen zwei Flanken im SPDIF-Signal korrekt dem Faktor 1, 2 oder 3 zuordnen.
Damit lassen sich dann schonmal die Präambeln im Signal erkennen - es gibt 3 wichtige:
-Data Block, Links: 3, 1, 1, 3
-Links: 3, 3, 1, 1
-Rechts: 3, 2, 1, 2
-> ich brauche ein Schieberegister, in das ich 4 Übergangszeiten schreiben kann.
Habe ich eine Präambel erkannt, brauche ich mir eigentlich nur noch die 24 folgenden Bits ansehen...
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.