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]