Passt das so AUDIO CODEC

Gast #1473087
Lesenswert?

Hallo,


Auf meinem Entwicklungsboard  ist ein Audio CODEC von Ti verbaut.
Dieser soll über den LINE  IN erstmal Daten einlesen können.

Da er bei mir im slave Mode arbeitet , muss vom FPGA das LRCOUT und der 
BCLK kommen.
Das LRCOUT = 1/fs bestimmt den Takt mit dem der AD Wandler arbeiten 
soll.

LRCOUT  = (1/fs) = (1/ 97,656 KHz )= 10,24µs.
Der bit clk(bclk) ist 12.5MHz. Also werden 128 Bits pro Periode gesendet 
bzw. empfangen. Davon sind 16 Informationsbits für den Linken und 16 für 
den rechten.
Der restlichen sind zum füllen.

Das serielle Daten einlesen habe ich mir so gedacht :
 Wenn ich mich für den Right- justifiert Mode entscheide (Bild), dann 
kann ich 64 bit pro Kanal,  in ein 16 Bit Register schieben. Die 
Füllbits „fallen vorne wieder raus“ und im Register bleiben die 16 
Nutzbits. Von Dort greife ich die Bits parallel ab, während der andere 
Kanal gelesen wird.

Das mir nicht so klar?

Im Moment erzeuge ich das LRCOUT Signal selbst.
 Außerhalb des Protokolls gibt es das Enable Signal mit den Takt von 
97.6KHz. (LRCOUT).
Welches die Daten parallel weitertakten soll.

Nehme ich gleich das Externe signal als LRCOUT, oder wie ich es gemacht 
habe .Ein internes über den Zähler generiert.und am Ausgang auf das 
externe syncronisiert.

Ich habe keine Ahnung in welchem Format seriell gesendet wird.?
Im Datenblat finde ich nichts?

Schaut bitte mal den von mir geschriebenen Code an .


Vielen Dank
Angehängte Dateien:
#1473124
Lesenswert?

hey,

also ich hab mir das datenblatt zwar nur mal kurz angeschaut, aber steht 
da nicht dass der dir die daten schon seriel rausgibt (bei FEATURES)? 
dann müsstest du ja nix mehr serialisieren.

bei deinem code in zeile 44 sollte 63 stehen und nicht 64. sonst hättest 
du ja 65 bit...
wie bist du auf die 64 bit gekommen? pro word gibts doch max 32 bit denk 
ich.

wenn du ein mux bastelst dann ist es glaub ich nicht sehr gut es in 
einem getakteten process zu machen. lieber ausserhalb durch ein "with 
'signal' select <= sig1 when '0', sig2 when '1'; " oder so ähnlich.

wäre auch gut wenn du über jedem process vllt ne beschreibung machst. 
dann weiss man was der prozess im allgemeinen macht.

ausserdem versteh ich deine problematik nicht so ganz ;)

ich bastel gerade auch mit dem protokoll rum...

mfg

Andi
Gast #1473171
Lesenswert?

Hallo  Andi Z.

Das Board habe ich gebrauch für 300 Euro gekauft.

>wie bist du auf die 64 bit gekommen? pro word gibts doch max 32 bit denk
>ich.


 Für ein fs von 97.656 Khz und einen BCLK con 12.5 MHz gibt doch der 
codec durchgehend  48 Füllbits + 16 Datenbits pro Kanal aus. ODER?
Meine Wordtbreite ist 16 Bit .

Gruß

DANK
Gast #1473179
Lesenswert?

Sorry für meine unvollständige Antwort,

es handelt sich um ein Stratix II EP2S60 von Altera.

 Der Codec leifert mit doch einen Serielllen Datenstrom über DOUT
(Pin I2S format serial data output from the sigma-delta stereo ADC).

Diesen möchte ich paralell abgreifen können.

mfg
#1473194
Lesenswert?

ok,

sowas in der art mach ich auch gerade. bei mir ist es allerdings so dass 
ein word aus 32bit besteht. also eine left-right-priode = 64 datenbits.
im datenblatt steht doch aber das man max. 32 bit pro word. (bei 1.1 )
die LR-clock und die bitclock bekomme ich auch. dann lese ich den 
datenstrom ein und puffere es in einem ram.

wenn du die parallel abgreifen willst kannst du ein bit speichern und es 
dann beim nächsten bit erst auslesen und auf den nächst höheren 
dateneingang schieben. also den ausgang wieder auf den eingang zurück 
führen. und immer an die selbe  adresse speichern. wenn die LR-clock 
einen anderen zustand annimmt dann wechselst du auf die nächste adresse. 
so liegen deine daten dann parallel im ram und du musst nurnoch die 
adresse ansprechen und der wert kommt dann komplet raus.

mfg

Andi
Gast #1473215
Lesenswert?

Hallo Andi Z.,

ich glaub ich steh auf dem Schlauch?
Wie du die Daten paralell abgreifen würdest, hab ich noch nicht ganz 
verstanden.?





> das man max. 32 bit pro word. (bei 1.1 )


Ich benutze nur 16 pro wort.

Ich verstehe das Bild right-justified  so, dass 12.5 MHz / 97.656KHz 
=128

Dass in einer Periode von 97.656KHz 128 Perioden von BCLK passen.

DANKE

GRUSS
#1473227
Lesenswert?

hey,


mh ja stimmt. du hast ja eine feste bitclock. also das mit dem 
parallelisieren musst du dir schon selber überlegen wie du es 
letztendlich machst.
was ich gerade mach ist, die samples zu parallelisieren. nicht fragen 
warum! :)

ich hab am anfang glaub ich einen fifo verwendet weiss aber grad auch 
nicht mehr genau wie und was.

das mit dem parallelisieren meinte ich so wie im bild. sieht auf dem 
bild halt scheisse aus :-D
Angehängte Dateien:
#1473238
Lesenswert?

also wenn ein bit ankommt dann schreibst du es an eine adresse. dann 
liest du diese adresse so aus, dass der wert an den nächsten eingang 
gelegt wird wenn das 2. bit kommt. dann schreibst du wieder an die 
gleiche adresse. usw. bis alle datenbits parallel an einer adresse 
liegen. das kannst du dann so machen, dass du das rechte und das linke 
sample einliest und dann über einen adressaufruf rausliest.

ich hoffe ich habs jetzt nicht so kompliziert geschrieben. ich denke 
sowas geht auch irgendwie anderst. mir fällt grad aber nix ein :)

mfg

Andi
Gast #1475553
Lesenswert?

Hallo ,

durch einsatz eines Logic Analysators hab ich herausgefunden wo meine 
Bits beim paralellisieren landen(nicht da wo ich sie vermutet habe)und 
das der Codec seine Daten im 2er-Komplement liefert. Glaube ich?

Was ich blos nicht verstehe.

Wenn ich nur das MSB drehe bekomme ich das Eingangssignal nur 
invertiert.
also  not(not INPUT(15) & INPUT (14 downto 0)).
Dann bekomme ich das richtige signal (SINUS).

 Gruß

Raptor23

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