Diseños con entrada/salida de audio

Anuncio
Diseños con entrada/salida
de audio
José Manuel Mendías Cuadros
Hortensia Mecha López
Dpto. Arquitectura de Computadores y Automática
Universidad Complutense de Madrid
Entrada/salida de audio
• Una señal audible es un onda formada por la suma de ondas puras con
frecuencias entre 0 y 4000 Hz (aunque dependiendo de la sensibilidad
de cada uno es posible oir señales de mayor frecuencia).
• La placa Xstend dispone de una entrada analógica que permiten
conectar la salida de un generador de música o de un micrófono, para
recibir una señal audible. También dispone de una salida analógica
donde se pueden conectar unos altavoces, con el fin de generar una
señal audible.
• Además, se dispone de un circuito conversor analógico digital (Codec
Ak4520A ) que permite convertir las señales analógicas en señales
digitales, que pueden procesarse en la FPGA. Este circuito es estéreo,
es decir, existen dos canales, uno izquierdo y otro derecho, capaces de
digitalizar dos señales analógicas de 20 bits de resolución, además de
generar dos señales analógicas a partir de valores de hasta 20 bits. La
comunicación del codec con la placa de FPGAs se establece mediante
un protocolo serie a través de dos líneas (una para entrada y otra para
salida), y se explica en detalle en este documento.
Entrada/salida de audio (2)
• El circuito codec está ya conectado a las entradas/salidas analógicas de
sonido por una parte, y a ciertos pines de la FPGA (para comunicar las
señales digitales). Para utilizar el conversor no es necesario realizar
físicamente ninguna conexión, sólo colocar el jumper J17 y poner todos los
switches de la placa a 1.
• Para procesar señales de audio será necesario:
– 1.- Por una parte diseñar un interfaz de comunicación con el codec para
recibir/transmitir las señal audible digitalizada. La realización del
circuito de comunicación se explica a continuación en este documento.
– 2.- Realizar un circuito que procese la señal digital.
Generación de sonido musical
• Para generar un sonido correspondiente a una nota musical hay que
generar una onda: su forma (sinusoidal, cuadrada, triangular, etc),
determina el timbre de la nota, la frecuencia es el tono, y la amplitud el
volumen. Como nota orientativa a continuación damos las frecuencias de
la escala natural:
fDo=261Hz
fRe=293Hz
fMi=330Hz
fFa=349H
fSol=392Hz
fLa=441Hz
fSi=495Hz
fDo=525Hz
• Para obtener la frecuencia de cualquier nota se puede utilizar la siguiente
fórmula:
– fNota=fDo*1.06 N donde N es el número de semitonos que separan
la Nota del Do
– Por ejemplo fRe= fDo*1.062
• Si el sonido que queremos generar está formado por varios armónicos,
hay que realizar una suma de todos ellos y el resultado enviarlo al codec.
¿Qué es?
Codec Ak4520A
Se trata de un conversor digital-analógico y analógico-digital estéreo que funciona en el rango
de señales audibles.
¿Qué hace?
El conversor lo podemos dividir en dos partes:
1.- Conversor analógico-digital: recibe dos entradas analógicas, una por el canal
izquierdo (AINL+, AINL-) y otra por el derecho (AINR+, AINR-). Realiza un muestreo de
dichas señales con una frecuencia fs, y transmite en serie alternativamente el resultado de las dos
muestras a través de STDO. Cada muestra se formatea dependiendo del valor de las entradas
(DIF1, DIF0). En la placa con la que vamos a trabajar el formato son 20 bits justificados según
MSB. El reloj MCLK determina la frecuencia de muestreo. El reloj LRCLK determina qué canal
se está enviando en cada instante (LRCLK=1 canal izdo y LRCLK=0 drcho) y el reloj SCLK
determina en qué instante se envía cada uno de los bits de la mu estra.
2.- Conversor digital - analógico: recibe una entrada digital (STDI), por donde se
transmite en serie el valor digital de una muestra de uno de los dos canales, según el valor del
reloj LRCLK. El formato de las muestras depende del valor de las entradas (DIF1, DIF0), y para
la placa xstend son 20 bits justificados según MSB. Los datos digitales se convierten en dos
señales analógicas que salen por AOUTL (canal izquierdo) y AOUTR (canal derecho).
Interfaz Codec Ak4520A
Interfaz analógico
Interfaz digital
AINL-
MCLK
Entradas
analógicas
AINL+
AINRAINR+
Voltajes de
referencia
VREFH
VREFL
LRCLK Selector de canal
Reloj de
SCLK
transmisión
de datos serie
Salidas
analógicas
AK4520A
AOUTR
Voltaje común VCOM
de salida
VD
DGND
Alim.
Digital
VA Alim.
AGND Analóg.
3 TEST
2 DEM Frec. de
énfasis
PWDA Modo
Power
down
PWAD
Salida de datos
serie
SDTI Entrada de datos
serie
DIF0
Formato de datos
DIF1
serie
CMODE Selector de
frecuencia de
muestreo
Alimentación y otros
SDTO
AOUTL
Reloj principal
Características del interfaz digital
CMODE: determina la relación entre el reloj master MCLK
y la frecuencia de muestreo (fs)
CMODE =0
FMCLK=256fs
CMODE=1
FMCLK=384fs
Al fijar desde el exterior la
frecuencia de MCLK queda fijada la
frecuencia de muestreo
DIF0 DIF1: determinan el formato de los datos serie. Hay 4 posibilidades
MODO DIF1 DIF0
0
00
1
01
2
10
3
11
Pinout
MCLK
LRCLK
SCLK
STDI
STDO
SDTO
SDTI
L/R
20 bit, justif.MSB 16 bit, justif.LSB H/L
20 bit, justif.MSB 20 bit, justif.LSB H/L
20 bit, justif.MSB 20 bit, justif.MSB H/L
IIS(I2s)
IIS(I2s)
L/H
fSCLK
>=32fs
>=40fs
>=40fs
32fs o >=40fs
En la placa XS40 tenemos cableado CMODE a 0 y DIF1, DIF0 A 10. Por tanto:
fMCLK=256fs
Formato de datos entrada/salida 20 bit, justif.MSB
fSCLK>=32fs
not (pin 9) coincide con switch 3 de la placa
not (pin 66) coincide con switch 7 de la placa
not (pin 77) coincide con switch 5 de la placa
not (pin 70) coincide con switch 6 de la placa
not (pin 6) coincide con switch 4 de la placa (es necesario poner el jumper 17)
Restricciones temporales
Para fMCLK=256fs
MCLK debe cumplir 4.096MHz<= fMCLK <=13.824MHz
Además:
MCLK debe estar a 0 al menos 27ns
MCLK debe estar a 1 al menos 27ns
1º restricción
LRCK
Como el periodo de este reloj debe ser suficiente para poder enviar o recibir una
muestra de cada canal, su frecuencia coincide con fs.
fLRCK=fs= fMCLK/256
Según el valor de MCLK debe cumplirse:
fMCLK =256fs
16kHz<= fs<=54kHz
El ciclo de trabajo de LRCK debe estar entre 45% y 55%
SCLK es el reloj que determina la lectura y escritura
de los datos serie.
Para poder enviar los 20 bits por canal debe cumplirse
fSCLK>40fs
fSCLK>40 fMCLK/256
En general fSCLK=64fs= fMCLK/4
Por tanto:
Tsck>=1/(13.824MHz/4)=289.4ns
SCLK debe estar a 0 al menos 120 ns
SCLK debe estar a 1 al menos 120ns
2º restricción
Restricción 3ª, 4ª y 5ª
Además existen las siguientes restricciones:
3.- Un flanco en LRCK debe estar al menos a
30ns del flanco de subida de SCLK
El flanco de subida de SCLK debe estar al
menos a 30ns del flanco de LRCK
4.-Datos de entrada. Se latchean con SCLK
Hold Time de SDTI 40ns
Setup Time de SDTI 40ns
5.- Datos de salida:
Desde que hay un flanco en LRCK hasta
que cambia SDTO pasan como mucho 100ns
Desde el flanco de bajada de SCLK hasta
que cambia SDTO pasan como mucho 100ns
Selección de frecuencias
1ª restricción 4.096MHz<= fMCLK<=13.824MHz
40>=27ns 40>=27ns
MCLK
Elegimos fMCLK=12.5MHz (reloj placa)
tMCLK=tciclo=80ns
fs=fLRCLK=fMCLK/256=48.8kHz
tRLCLK=20.48us
2ª restricción
fSCLK>40 fMCLK/256
320>=289ns
160>=120ns 160>=120ns
Elegimos fSCLK=64fs=fMCLK/4
tSCLK=320ns
SCLK
3ª restricción
SCLK
LRCLK
Los flancos de LRCLK no pueden coincidir con los flancos
de subida de SCLK
Como fLRCLK=fSCLK/64
decidimos que los flancos de
LRCLK se produzcan el los
flancos de bajada de SCLK
160>=30ns 160>=30ns
Selección de frecuencias (2)
Resumiendo: fMCLK=12.5MHz fSCLK=fMCLK/4 (Cada dos ciclos de MCLK cambia SCLK)
fLRCLK=fMCLK/256
S3
80ns
S0
S1
S2
S3
S0
S1
MCLK
Numeramos los cuatro
ciclos correspondientes a
un periodo de SCLK como
S0, S1, S2, S3
SCLK
320ns
Para generar los relojes necesitamos
un divisor de frecuencia
LRCLK
MCLK
Canal derecho
Canal izquierdo
LRCLK
256 ciclos de MCLK
64 ciclos de SCLK
128 ciclos de MCLK
32 ciclos de SCLK
Tiempo suficiente para
enviar/recibir los 20 bits de
una muestra
0
1
Contador 2
mod-256 3
4
5
6
7
2
S: Subciclo de MCLK
(S0, S1, S2, S3)
SCLK
5 NC: Ciclo de
SCLK dentro de
cada ciclo de canal
LRCLK
Como el contador es ascendente los
flancos en LRCK siempre ocurren
en los flancos de bajada de SCLK
Entrada/Salida de datos
4ª restricción
Datos de entrada: se latchean con flanco de subida de SCLK
S2
S3 S0 S1
S2 S3 S0 S1
S2 S3
Como el tiempo de ciclo
es de 80ns, para cumplir
los 40ns de hold y setup
basta con colocar los
datos en los estados S0,
S2 ó S3
MCLK
SCLK
>=40ns
STDI
>=40ns
5ª restricción Datos de salida: se estabilizan como mucho 100ns después de un
flanco en LRCLK o de un flanco de bajada en SCLK
80ns
S2
S3 S0 S1
S2 S3 S0 S1
MCLK
SCLK
LRCLK
STD0
<=100ns
<=100ns
S2 S3
Los flancos de bajada de SCLK
coinciden con los flancos de
LRCK
La restricción nos dice que los
datos están estables y por tanto
pueden leerse los ciclos S1 y S2
Conclusión: los datos
deben leerse y escribirse en
el estado S2
Protocolo de comunicación
Los datos se leen y escriben cada cuatro
ciclos de MCLK coincidiendo con el
estado S2
32 ciclos de SCLK
32 ciclos
LRCLK
SCLK
STDI
19
18
17
STDO
19
18
17
....
1
0
Do not care
19
18
17
1
0
Do not care
19
1
0
Do not care
19
18
17
1
0
Do not care
19
19 MSB, 0 LSB
Canal izquierdo
19 MSB, 0 LSB
Canal derecho
Nota: STDI son los datos de entrada al CODEC, salida de nuestro circuito
STDO son los datos de salida del CODEC, entrada de nuestro circuito
Circuito receptor
Recibe los 20 bits (0<=NC<=19)
de la muestra por STDO en el
subciclo S2 dentro del ciclo de
SCLK
RST
CLK
STDO
LRCLK
IN
SHIFTER
OUT
SE
2
=2
S (Subciclo S0,
S1, S2, S3)
20
Canal izquierdo
RST
CLK
IN
SHIFTER
OUT
20
Canal derecho
SE
>=0
<=19
NC
5 Cont[6..2]
Circuito transmisor
Transmite los 20 bits (0<=NC<=19) de la muestra por
STDI en el subciclo S2 dentro del ciclo de SCLK
Canal izquierdo
LRCLK
20
RST
LRCLK
CLK
STDI
L
SHIFTER
OUT
SE
=31
=2
5 NC
Cont[6..2]
2
S (Subciclo S0,
S1, S2, S3)
1
Canal derecho
0
>=0
20
RST
CLK
L
SHIFTER
OUT
SE
<=19
NC
5 Cont[6..2]
Descargar