mikrocontroller.net

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


Autor: Marc Z. (fpga-fragender)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: adi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marc Z. (fpga-fragender)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: adi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Marc Z. (fpga-fragender)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo adi,

super ! und herzlichen Dank.

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

Gruß vom FPGA-Fragenden

Autor: FPGA-Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: adi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc Z. (fpga-fragender)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo adi,

Hier meine E-Mail Adresse

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

herzlichen Dank für Deine Antwort.

Gruß FPGA-Fragender

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.