Hallo Forum =)! Ich habe hier ein VHDL-Design für das Xilinx-XUP-Board (Virtex2Pro). Es handelt sich um einen Decoder für ein bestimmtes Audio-Kompressionsformat. Es funktioniert soweit alles, nur möchte ich jetzt die dekomprimierten Audiodaten (PCM, 16 bit, 8kHz, mono) mit dem auf dem XUP-Board integrierten AC97-Audio-Codec wiedergeben. Meine Audiosamples liegen in einem Ringpuffer, aus dem ich mit beliebiger Taktgeschwindigkeit die 16 bit Samples auslesen kann. Auf der Xilinx-Seite habe ich ein Referenz-Design gefunden, wie man den AC97 ansteuert. Leider ist da nur ein völlig undokumentierter VHDL-Wrapper, mit dessen Hilfe man PCM-Daten abspielen können sollte. Nicht gezeigt ist jedoch dessen Verwendung. Wenn ich diesen einfach so "intuitiv" verwende (ihn also mit den AC97 HW-Pins verbinde), erhalte ich zwar eine Audio-Ausgabe, allerdings ist sie nicht korrekt: Die Tonhöe stimmt, die Wiedergabegeschwindigkeit ist leider fast doppelt so schnell. Es klingt fast so, als würde der AC97 immer nur kleine Sample-Pakete annehmen, und zwischendrin immer wieder welche verlieren. Momentan weise ich dem AC97-PCM-Eingang einfach im 8kHz-Takt meine Samples zu. Offensichtlich ist das noch nicht ganz korrekt. Der Wrapper verfügt auch über ein Playback-Accept-Signal. Evtl muss ich dieses noch beachten, aber wie/wann? Hat jemand Ahnung vom AC97...? wäre toll, wenn mich da jemand erhellen könnte. Ich habe mal die Wrapper-Dateien in den Anhang gepackt; diese sind aus dem Xilinx-Beispiel. Meine Ansteuerung des Wrappers sieht wie folgt aus: Ich instantiiere die AC97_if entity. ClkIn wird mit dem 66MHz Bustakt meiner IP beschickt, PCM_Playback_Left & PCM_Playback_Right erhalten im 8kHz-Takt eine neues 16bit-Sample zugewiesen (pcm_buffer_data_out ändert im 8KHz-Takt seinen Wert). PCM_Playback_Accept beachte ich momentan noch gar nicht, evtl liegt hier der Fehler? So sieht das aus: AC97_CTRL: process (Bus2IP_Clk) begin if rising_edge(Bus2IP_Clk) then PCM_Playback_Left <= pcm_buffer_data_out; PCM_Playback_Right <= pcm_buffer_data_out; end if; end process AC97_CTRL; Grüße, Florian
Ich plädiere ja immer wieder für gescheite Testbenches. Hast du eine? Ansonsten schnupper doch mal rein, wie das andere so lösen: http://www.google.com/codesearch?q=lang%3Avhdl+ac97 Duke
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.