Forum: FPGA, VHDL & Co. Audioeingang.


von Pjay T. (pui)


Lesenswert?

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

von FPGA-Sultan (Gast)


Lesenswert?

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.

von TheMason (Gast)


Lesenswert?

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

von Pjay (Gast)


Lesenswert?

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..

von Mike (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

Was macht eigentlich der Audio-Code, wenn die Daten eh schon seriell 
kommen? Ist das nicht etwa dasselbe, wie SPDIF ?

von Pjay (Gast)


Lesenswert?

@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?

von TheMason (Gast)


Lesenswert?

@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 ...

von Mike (Gast)


Lesenswert?

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.

von Pjay (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.