Forum: FPGA, VHDL & Co. SPDIF Sound Delay per FPGA


von Marc Z. (fpga-fragender)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe bereits ein fertiges Spartan 3 FPGA Projekt mit einem EVAL 
Board am laufen.

Ich besitze einen Sound Receiver ohne Time Delay und möchte deshalb 
zusätzlich ein Sound Delay über den FPGA realisieren.

Die Bildnachbearbeitung per FPGA führt zu ca. 80 ms Delay

Überblick
=========

In der Anlage ist ein Überblick über die Codierung des Datensignals.

Bandbreite Audio Signal ca. 3 MHz

Bandbreite Signal SPDIF doppelt so hoch also ca. 6 Mhz

Der eigentliche Takt muss aus dem 6 Mhz Signal zurückgewonnen werden.


Meine geplante Vorgehensweise:
==============================


A. Einlesevorgang:
=================

1. Das Eingangssinal wird mit meinem Systemtakt von 50 MHz abgetastet.

2. Ein Vergleich Altes Sample / Neues Sample ergibt eine Flanken 
Erkennung

3. Aus der Information wie viel Takte seit der letzten Flanke vergangen 
sind erhalte ich die Information ob es sich bei dem neuen Sample um eine 
einfache 1 bzw. 0 oder eine doppelte 1 bzw. 0 handelt.

B. Zwischenspeichern
=====================

Ist kein Problem, weil ich bereits einen SRAM Ctrl im FPGA implementiert 
hab, der einen weiteren Client erhält und einen Zeitschlitz zur 
Verfügung gestellt bekommt, um Daten zu lesen bzw. zu schreiben.

C. Schreiben:
=============

Nun mein Hauptproblem:

Als Takt verwende ich die Flankenerkennung des Eingangs-Signals.

Allerdings müssen ja auch Daten geschrieben werden, in denen das 
Eingangssignal gerade KEINE Flanke liefert.

Über einen Zähler, der über jede erkannte Eingangsflanke gestartet wird, 
wird die fehlende Ausgangs-Flanke dann interpoliert.


Fragestellung:
==============

Durch die Tatsache, dass der 50 Mhz Takt der Abtastung nicht exakt ein 
Vielfaches des Eingangstaktes ist erzeuge ich einen Jitter von +/- 1 
oder 2 Takten des 50 MHz Signales.

Wird dadurch vorraussichtlich das Signal nicht mehr richtig von meinem 
Receiver erkannt ??

Wer kann hier eine Prognose abgeben ? Ich möchte mich ungern an die 
ganze Implementierung setzen, wenn bereits vorab systembedingt das ganze 
nicht funktionieren kann.

Sind meine Überlegungen sonst in Ordnung. Welche Denkfehler hab ich 
evtl. gemacht ?

Wie würdet Ihr das Problem lösen ?

Gruß vom FPGA-Fragenden

von adi (Gast)


Lesenswert?

Hallo,

genau so ein Projekt habe ich gerade (erfolgreich) abgeschlossen:
+ Xilinx CPLD XC9572XL (bzw. 144),
+ 2 * 512 KByte SRAM,
+ 40 MHz Oszillator
(optional für Coax Ein-/Ausgang 74AC06)

Es werden gleichzeitig zwei SPDIF Signale mit 20 MHz abgetastet und in 
das RAM geschrieben, ausgelesen und wieder mit 20 MHz ausgegeben. Ergibt 
dann eine Verzögerung von ca. 200 ms.
Es findet keine Synchronisation/ bzw. Aufbereitung mit dem SPDIF Signal 
statt, sondern es wird einfach abgetastet und so wieder ausgegeben, d.h. 
eine allgemeine digitale Verzögerungsleitung.
Der dabei entstehende Jitter ist unproblematisch, da das Empfangsgerät 
normalerweise über eine PLL den Takt wieder vernünftig aufbereitet. In 
der Praxis konnte ich keine Probleme festellen, d.h. es funktioniert mit 
den Signalen PCM, AC3 und DTS.

Ich hoffe, das beantwortet einige Deiner Fragen.

von Marc Z. (fpga-fragender)


Lesenswert?

Hallo adi,

das freut mich zu hören. Ist dein Projekt kommerziel oder kannst du mir 
den VHDL code zukommen lassen ? Ich weiß, ich bin dreist :))

Ist mein o.g. Schaltungsansatz korrekt ?

Wie hast Du die quasi Taktgenerierung konkret gelöst ?

Gruß vom FPGA-Fragenden

von adi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Marc,
wie schon geschrieben, habe ich keine Taktwiedergewinnung, da das (bzw. 
die zwei unabhängigen) Eingangssignal(e) mit dem 20 MHz freilaufenden 
Oszillatortakt abgetastet und genau so auch dann wieder verzögert 
ausgegeben werden. Dadurch benötige ich zwar viel mehr Speicher als es 
für die eigentlichen Daten notwendig wäre, aber es ist wesentlich 
einfacher.

PS.: mein VHDL Code ist angehängt und kann auch frei verwendet werden.

von Marc Z. (fpga-fragender)


Lesenswert?

Hallo adi,

super ! und herzlichen Dank.

Ich werde mir den code mal anschauen und bei Fragen nochmals melden.

Gruß vom FPGA-Fragenden

von FPGA-Fragender (Gast)


Lesenswert?

Hallo Adi,

ich hab mir Deinen Code mal angeschaut und jetzt ist mir erst klar 
geworden wie Du das gemacht hast.

Diese Lösung braucht natürlich für FPGA embedded Verhältnisse sehr viel 
Speicher ist allerdings narrensicher und einfach zu implementieren.

Du hast mich da erhlich gesagt auf eine Idee gebracht.

Möglicherweise wäre es für mich ( bin ja Hobby Bastler ) günstiger, wenn 
ich mir eine Universal Delay Box bauen würde, die nicht an mein großes 
Projekt gebunden ist. ( Kommerziell hab die Teile ab 150 Euro gefunden )

Hintergrund ist folgender: Mein Spartan 3 / 1000 ist schon mächtig 
belegt.

Jede Änderung am HDL code benötigt geschätzt 1 Stunde bis die Xilinx 
Software das place and route usw. durch hat.

In diesem Stadium des Projektes machen kleine Änderungen überhaupt 
keinen Spass mehr. Das ist halt ein großer Nachteil bei den FPGAs.

Es muss jedesmal alles neu gerechnet werden bevor man den Baustein neu 
laden kann.

Hast du Dein Project als Einzelplatine aufgebaut ?

Kann ich das Teil nachbauen ? Was haben denn die Bauteile zusammen 
ungefähr gekostet ?

Würde mich über eine positive Antwort freuen

Gruß vom FPGA-Fragenden, der sich einen 50 Gigaherz Rechner wünscht

von adi (Gast)


Lesenswert?

Hallo Marc,

>Hast du Dein Project als Einzelplatine aufgebaut ?
ja

>Kann ich das Teil nachbauen ? Was haben denn die Bauteile zusammen
>ungefähr gekostet ?
Gerne kannst Du das nachbauen. Wenn Du mir Deine Email-Adresse angibst, 
kann ich Dir das Layout und die Project-Files schicken. Du muesstest 
allerdings noch kleine Modifikationen am Layout vornehmen und die 
Sourcen auf Deine Befürfnisse anpassen (mit oder ohne In-/Out Treiber, 
ein oder zwei Eingänge etc.)

Die Bauteile kosten zusammen ca 10 EUR bis 20 EUR (je nach Ausstattung: 
ein/zwei Kanäle, 72er oder 144er CPLD, mit/ohne 3,3V Versorgung). Alle 
wichtigen Teile bekommt man bei Reichelt (SRAM, CPLD, OSC).

Bin übrigens auch nur "Hobby Bastler",
Gruß, Andreas

von Marc Z. (fpga-fragender)


Lesenswert?

Hallo adi,

Hier meine E-Mail Adresse

"micro" & "_" & "bastler" & "@freenet.de"

herzlichen Dank für Deine Antwort.

Gruß FPGA-Fragender

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
Noch kein Account? Hier anmelden.