Hallo alle zusammen! Ich bin Neuling im Gebiet der FPGAs und habe für meine Projektarbeit ein "XtremeDSP Spartan-3A DSP Development Board" von Xilinx zur Verfügung gestellt bekommen.. ich soll auf dem dort vorhandenen FPGA (Spartan-3A DSP 3400A) über Simulink Modelle zur Audiofilterung generieren (über den VHDL Coder). Mein erstes Ziel ist es aber einfach, ein Ausgangssignal am "Line in" Eingang des vorhandenen Audio Codes anzulegen und es am "Line out" Ausgang über einen Kopfhöhrer hören zu können... Ich weiß vom Datenblatt, welche Pins ich ansteuern muss, um Line In und out zu "aktivieren". Mein Problem ist, dass ich nicht weiß, wo die eingelesen Audiodaten landen.. Beim Mikroprozessor lädt man die ja vom A/D Wandler in ein Register und kann sie von dort aus wieder ausgeben.. Aber wie mache ich das beim FPGA? Bin für Hilfe dankbar, die Infos zu Xilinx boards scheinen ja mehr als dürftig zu sein... Hier die Angaben zum Audio Codec aus dem User Guide: AC’97 SoundMAX codec Analog Devices AD1981B. The device supports 16-bit stereo audio and sampling rates up to 48 kHz. The sampling rate for recording and playback may also be different. Table 2 FPGA AC’97 SoundMAX codec interface pin assignements FPGA pin Description AC14 CODEC_BIT_CLK AC15 CODEC_RESET_B AB6 CODEC_SDATA_IN AD14 CODEC_SDATA_OUT W15 CODEC_SYNC
Soweit mir bekannt (den AC97 kenne ich nicht so genau) ist es bei den Audio-ADCDACs so, daß die mit einem kontinuierlichen Datenstrom von z.B. 44,1kHz x 16 Bit getrieben werden. Du musst dann ein paralleles ADC-Interface bauen, das mir 44,1kHz ins / vom Ram schreibt.
kenne den ac97-standard jetzt nicht, aber ich arbeite mit i2s. du brauchst dazu ein 2x24 (bzw. 2x32) bit schieberegister zum parallelisieren des datenstromes und ein 2x24 (bzw. 2x32) bit schieberegister zum serialisieren des parallelen audiosignales. du kannst dir in dem audio-projekt hier im forum (Audio-DSP mit Spartan3 FPGA) den code für den i2s-teil mal anschauen. vllt kann man diesen code recht einfach für ac97 anpassen. gruß rene
Zunächst einmal danke für die Antworten.. Mein Problem ist aber zunächst einmal, die Daten überhaupt irgendwo abzugreifen (WO ist die Frage). Durch das User Guide weiß ich, dass der jeweilige Pin für den 'Line in'-Eingang des Development-Boards AB6 (CODEC_SDATA_IN) ist und derjenige für den Ausgang AD14. Muss ich nur den Pin (z.B. AB6) aktivieren, indem ich ihn auf 1 setze, oder muss ich da direkt die abgetasteten (16 Bit?) Daten ablesen? Zweiteres wollte ich versuchen, allerdings fordert Xilinx ISE bei einem 16 Bit Input für jedes einzelne Bit (z.B. für EIN (15..0)) eine Pinzuweisung.. Ist ein wenig schwierig, mein Problem zu formlurieren... Hat denn irgendjemand ein ISE Projekt oder einen VHDL code zu einem vergleichbaren FPGA (z.B. Spartan-3), mit welchem Audiodateien einfach nur eingelesen und wieder ausgegeben werden? Es ist chwierig, etwas dazu zu finden..
I2S und AC97 Codecs übertragen ihre Daten seriell. D.h. du brauchst keine 16 Ein- und Ausgänge. Du solltest wirklich mal in das Datenblatt des AD1981B schauen.
Was macht eigentlich der Audio-Code, wenn die Daten eh schon seriell kommen? Ist das nicht etwa dasselbe, wie SPDIF ?
@Mike: So meinte ich das ja auch nicht mit den 16 Werten.. Im Datasheet des AD1981B steht, dass der integrierte ANALOG-TO-DIGITAL CONVERTER das analoge Eingangssignal mit bis zu 48khZ abtastet und in Bitfolgen der Wortbreite 16 Bit umwandelt.. Ich habe aber nur EINEN Pin, um überhaupt "einzustellen", dass die Daten vom Line In Eingang ins FPGA fließen. Aber: Wo sind die Audiodateien an sich (seriell - 16 bitweise) abgreifbar?
@gast spdif ist im "prinzip" ein serieller audio datenstrom. nur das halt clock und sync (sowie weitere user-daten) mitübertragen werden, die empfangsseitig aufbereitet und gefiltert werden müssen. (da im prinzip 3 leitungen und user-daten über 1 leitung gehen) @pjay kenne das datenblatt jetzt nicht, aber die konfiguration des codecs kann evtl. über den reset-pin aktiviert werden. und im "nicht-reset" mode sind die leitungen dann für die serielle übertragung von audio-daten eingestellt ... ich denke du empfängst die daten über CODEC_DATA_IN, sendest die daten über CODEC_DATA_OUT, hast den clock fürs schieberegister auf CODEC_BIT_CLK und die synchronisation auf CODEC_SYNC. würde jedenfalls sinn machen ...
Ich habe mal in das Datenblatt reingeschaut. Das ist ausgesprochen wenig hilfreich ;). Wenn man etwas googlet, dann findet man das hier: http://download.intel.com/support/motherboards/desktop/sb/ac97_r23.pdf Da scheint alles drin zu sein was man braucht.
Danke an alle, insbesondere Mike für's Ansehen des tollen Datenblatts.. Ich habe nach langer Suche ein IP-Core gefunden, welches die Funktion des Audio-Controllers enthält.. habe den audio-loop-back erfolgreich getestet :) Auch wenn es bei meiner Projektarbeit eigentlich um Rapid-Prototyping mittels Simulink gehen sollte, werde ich mich nun erst einmal in VHDL einlesen, um das IP-Core nachvollziehen und es optimal verwenden zu können. Ich werde mal hier im Forum schauen, welche VHDL-Bücher oder Tutorials (auch auf dieser Seite) besonders empfehlenswert sind.. vllt. melde ich mich zu einem späteren Zeitpunkt nochmal hier ;) Bis dann ma, thx
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.