Forum: FPGA, VHDL & Co. I2S nach"TheMason" in Betrieb nehmen


von Markus S. (raptor23)


Angehängte Dateien:

Lesenswert?

Hallo ,
ich möchte den CODEC  TLV320aic23b auf meinem Altera Board als slave 
betrieben.

Bin allerdings Anfänger in Sachen VHDL und co.
Hab Beiträge im Forum und auf der Seite von Lothar Miller gelesen. 
(SUPER)
Dabei bin auf den Beitrag „Audio-DSP mit Spartan 3-FPGA“ von „TheMason“ 
gestoßen.(TOP)
Würde gerne den Code „I2S_SHIFTER_2x_SLAVE.VHDL „ zum lernen und 
verstehen verwenden.
Dazu wollte ich ihn erstmal zum laufen bringen.
Zum initialisieren hab ich den Code selbst geschrieben.
(:Ein großer schritt für mich aber die Menschheit interessiert es nich 
:)
Das I2S interface wollte ich am Anfang von „TheMason“ übernehmen (darf 
ich ?).
In meinem Projekt benutze ich 12 und 14 Bit Vektoren .
Der Codec unterstützt 16,20,24 und 32 Bit Wortbreite.
Also hab ich die Vektoren und Integer von 23 auf 15  abgeändert.
Den Clock Namen von 50MHz auf 100 MHz umbenannt.
Muss ich da noch was berücksichtigen?
Durch die Flankenabfrage von bclk und lrclk (bei mir 96KHz) wird ja das 
ganze dann gesteuert. (richtig ?)

Für was ist denn das Ausgangsignal „new_sample“ gut?

Würde mich gerne noch viel länger mit dem Teil befassen, bin aber gerade 
im Lernstress.
Mache gerade meine Fachhochschulreife in einem Jahr, um danach studieren 
zu dürfen.

Es lässt mich aber nicht in ruhe bis es einmal gelaufen ist.

Wenn ich zur Inbetriebnahme noch im VHDL Code was ändern müsste, BITTE 
ich Euch mir zu helfen.


Dank und Gruß

Thorsten

von J. S. (Gast)


Lesenswert?

Was ist denn "theMason"?

von Markus S. (raptor23) (Gast)


Lesenswert?

Hallo Jürgen,

"theMason" ist der Entwickler des I2S Protokolls hier im Forum.



>http://www.mikrocontroller.net/articles/Audio-DSP_mit_Spartan_3-FPGA

Mein Name ist Thorsten, mein Bruder Markus hat sich antscheinend hier im 
Forum angemeldet.
Wusste ich nicht.


Grüße

Thorsten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Bin allerdings Anfänger in Sachen VHDL und co.
Das war jeder mal...

> Hab Beiträge im Forum und auf der Seite von Lothar Miller gelesen.
> (SUPER)
Besten Dank für das Lob ;-)

> Würde gerne den Code I2S_SHIFTER_2x_SLAVE.VHDL zum lernen und
> verstehen verwenden.
Das Pflichtprogramm eines Anfängers (das "Hello World" der Hardware, ein 
Lauflicht auf 10 verschiedene Arten) hast du aber schon absolviert und 
verstanden? Und zwar incl. Simulation und RTL-Analyse? Sonst könnte die 
Lernkurve unerwartet steil werden   :-o

von Markus S. (raptor23) (Gast)


Lesenswert?

Hallo Lothar,

>Lauflicht incl. Simulation und RTL-Analyse?

Ja , nach dem wir :-o waren, haben wir das licht laufen lassen.

Hat unerwartet lange gedauert, aber sehr lehrreich.


Danke für den Tip.

Gruß

Thorsten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Den Clock Namen von 50MHz auf 100 MHz umbenannt.
> Muss ich da noch was berücksichtigen?
Dass die Taktteiler jetzt doppelt soviel zu teilen haben...
Und natürlich das Timing Constraint auf den schnelleren Takt anpassen.

von Rene B. (themason) Benutzerseite


Lesenswert?

Hallo Markus,

freut mich das dir die I2S Komponente gefällt. Diese darfst du für dein 
Projekt verwenden. Hoffe dahingehend auf Feedback wie es läuft bzw die 
Anbindung geklappt hat.
Zu deinen Fragen. Von 50 auf 100MHz zu gehen stellt bzw sollte kein 
Problem sein, da BCLK ja ohnehin an die Clock-Domäne angepasst 
(einsynchronisiert) wird. In meinem Projekt läuft die System-Clock 
momentan mit 83MHz und macht keinerlei Probleme. Die Anpassung der Länge 
kann u.u. etwas Problematischer sein. Dazu müsste dann evtl die 
Statemachine angepasst werden (ich weiß gerade nicht aus dem Kopf heraus 
ob I2S left oder right-aligned ist). Müsste aber machbar sein. Ohne 
anpassung würd ich einfach 24 Bit I2S-Länge im Codec einstellen (ich 
selbst benutze meine ich eh nur 20) und den 24-bit Vektor entsprechend 
auffüllen. Hat den Angenehmen nebeneffekt das man noch Dynamikreserven 
hat. Das Signal new_sample ist 1 System-Clock breit und zeigt an das der 
I2S_SHIFTER_2x_SLAVE zwei neue Stereo-Samples empfangen hat und dieses 
an sample_1_out bis sample_4_out anliegt. Gleichzeitig sind die an 
sample_1_in bis sample_4_in anliegenden Samples in die internen Register 
übernommen worden und werden mit den nächsten 64 BCLK's rausgeclockt.

Um einfach erstmal testen zu können lässt sich beispielsweise in einer 
Top-Level-Entity sample_x_out mit sample_x_in verbinden. Um dann noch 
ein bissl spielen zu können kann man die Verbindung unterbrechen (Mute) 
oder um ein paar bit nach links oder rechts schieben 
(Lautstärkeveränderung in 6dB schritten). So habe ich die Komponente 
damals getestet. Funktionierte auch auf anhieb :-)

Im übrigen bin ich nicht der Entwickler des I2S Protokolls sondern habe 
lediglich die I2S_Shifter Komponente geschrieben. Aber danke für die 
Blumen :-)

@Jürgen

>Was ist denn "theMason"?

Wohl eher "wer" ist "theMason". Und ich hoffe die Frage damit 
beantworten zu können :-))

von Markus S. (raptor23) (Gast)


Lesenswert?

Großen Dank an Rene und Lothar.

Ihr seid SUPER.

Danke.

Grüße
von den Brüdern

Markus und Thorsten

von Markus S. (raptor23)


Lesenswert?

Hallo Rene,


hab den Codec mit deiner Hilfe in Betrieb nehmen können.
Danke.

Ich hätte noch eine Frage:

wenn der Codec mit 96 KHz abtastet, wo liegen dann die Grenzfrequenzen 
des Anti-Aliasing TP
und Glättungsfilter?

Da steht was von 0.4 x fs

Das kann doch nicht sein ?
Oder?
Das währen ja 48 Khz.
Das ist doch zu hoch.

Gruss

von Markus S. (raptor23)


Lesenswert?

kann mir keiner helfen?

Gruß

von Roland (Gast)


Lesenswert?

>Mein Name ist Thorsten, mein Bruder Markus hat sich antscheinend hier im

Deshalb nennst Du Dich Makrus und Thomas zugleich?

So hat es bei meinem Onkel auch angefangen :-)

von Rene B. (themason) Benutzerseite


Lesenswert?

@markus

freut mich das du das i2s interface zum laufen gebracht hast.

zur frage max. wiedergabefrequenz ...

ich hab nicht ins datenblatt geguckt. üblicherweise ist die max. 
wiedergabefrequenz 0.45 oder 0.4 * samplefrequenz. und bei 96khz wären 
das 38,4khz (0.4) oder 43.2khz (0.45).
was soll daran nicht stimmen können ? immerhin nimmt man ja eine höhere 
abtastrate um auch noch die hohen frequenzen einigermaßen akkurat 
wiedergeben zu können. somit kann man einen kurvenzug mit 20khz mit 4 
punkten statt mit 2 punkten wiedergeben. warum sollte das zu hoch sein 
(mal abgesehen davon das 48khz nicht stimmt da es nicht 0.5*fs sondern 
eben 0.4 bzw 0.45*fs ist.

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.