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
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
> 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
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.
> 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.
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 :-))
Großen Dank an Rene und Lothar. Ihr seid SUPER. Danke. Grüße von den Brüdern Markus und Thorsten
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
>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 :-)
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.