Академический Документы
Профессиональный Документы
Культура Документы
ndice
Introduccin ................................................................................................................ 3
Introduccin
En este laboratorio se pretende realizar un diseo sintetizable mediante cdigo
VHDL para controlar un sistema integrado de la FPGA spartan 6, el LM4550,
un CODEC de audio. Para llevar a cabo este diseo se ha desglosado el
mismo en diferentes entidades, para facilitar el entendimiento de cada paso, y
hacer un anlisis localizado, que resulta ms sencillo a la hora de encontrar
posibles fallos durante su desarrollo.
El diseo consiste en un top system que engloba a todas las dems entidades,
y contiene el dcm, el codec_controller, y en la versin final del diseo tambin
incluye una entidad llamada vol_freq_control.
El dcm (digital clock manager) se utiliza como herramienta para alinear todos
los relojes internos del diseo. A veces puede existir cierto desfase entre
relojes y este mdulo lo corrige. Se genera utilizando un coregen, as que no
tiene mayor diseo propio.
para
sincronizar
todo
el
sistema
mediante
clock
enables
principalmente.
Como extra, y para realizar un mejor diseo, se expande el control del volumen
y frecuencia a una entidad, en lugar de unos switches de la FPGA. Se pretende
realizar lo que se hacia con 8 switches, ahora con 2 botones y 1 switch. Para
ello se incluye vol_freq_control, que estar formada por una mquina de
estados y unos contadores.
Todas estas entidades en conjunto van a realizar el control del cdec de audio
LM4550. Para cada entidad primero se va a proceder a realizar su traduccin a
componentes electrnicos en base a su funcionalidad. Y luego sern retraducidos a cdigo VHDL sintetizable. Cada entidad ser verificada con
simulaciones en bancos de prueba, inyectando distintos estmulos.
Seal
Valor
Valor
input_signal
din_r
r_edge
f_edge
0
Tabla1.1
Componente
Nmero
Biestable
Puerta AND
Multiplexor
Inversor
2
Tabla 1.2 Componentes usados
Para los estmulos se ha utiliza una seal de entrada que imita a la seal
bit_clk generada por el cdec, como se puede apreciar en la figura 1.4.
Figura 1.4
Una vez verificado el modelo vhdl, se adapta ligeramente para poder utilizarlo
en la construccin del detector doble de flancos. La seal mode pasa a ser un
genrico en lugar de un puerto. Todo lo dems sigue igual.
Sin embargo, se instancia dos veces, una para detectar el flanco de subida
cuando mode vale 1, y otra para que detecte el flanco de bajada cuando
mode vale 0. Su funcionalidad es la misma que la estudiada en el punto 1.
Ahora tenemos dos seales, una que detecta flancos solo de subida, y otra que
detecta flancos solo de bajada con sus latencias correspondientes.
Como todo es igual que en el apartado anterior, se han omitido las seales
internas que se estudiaron para ese caso.
Dado que este diseo no tiene seal mode, no ha sido necesario ponerla como
parte de los estmulos. Todo lo dems es idntico.
Ambas salidas, sync y reset, se registran con biestables de salida para evitar
glitches, y se controla sus clock enable con la propia seal de salida de reset.
El valor de cuenta de bits tambin se conecta a una salida, pasando por un
biestable. Todo lo descrito se puede comprobar en el siguiente esquema.
11
Figura 3.1 Esquema de componentes de esta entidad. **Nota: En el diseo original el contador de 9 bits no tenia clock
enable, y se controlaba su periocidad con un multiplexor, tras implementar el clock enable como mejor solucin, el mux
no fue removido, y ahora no fue removido por falta de tiempo, pero su comportamiento al ser redundante no afecta la
funcionalidad del sistema, solamente usa ms lgica.
12
En este zoom se aprecia que sync se activa cuando la cuenta es 255 (FF), y
finaliza cuando es 14 (0E). Tambien se puede ver que el tiempo total de esto
es 1.31 us, lo cual es bastante aceptable con lo que debera dar (1.3 us).
En esta otra captura estn presentes dos markers que nos dicen que el tiempo
en bajo de sync ha sido de 19,53 us (tambin aceptable, dado que debera dar
cercano a 19,5 us).
13
14
Y se siguen respedando los valores de cuenta para los cuales sync debe
activarse.
15
En el slot 0 se manda el tag, que sirve para indicar qu registros vamos a usar
del cdec y que informacin de manda de los canales de audio. El tag es el
mismo siempre en todas las tramas, y por tanto no forma parte de la mquina
de estados. Los slots 3 y 4 son para los datos de los canales de audio, en esta
prctica se ha optado por mandar la misma informacin por ambos canales.
Cada slot es para un canal.
Una vez que se tiene la trama, para evitar glitches nuevamente, la registramos,
y luego se procede a serializarla mediante un multiplexor de 256 entradas. Se
conecta dada bit de la trama a un canal del multiplexor, y se utiliza un contador
de 8 bits para ir cambiando de canal en canal, cosa de que en la seal nica de
salida se obtienen los distintos bits. El contador de 8 bits est sincronizado con
r_edge_b_clk por su puesto, ya que estamos contando bits.
Adicional a esto, en esta entidad existe un control de frecuencia del tono que
se pretende enviar, actuando sobre el contador que barre la memoria que
contiene las muestras de los valores de un seno. Para actuar sobre el contador
se utiliza un prescaler controlado por un codificador que a su vez est
controlado por freq_code, el valor que se desea de frecuencia. Ya que
freq_code es un std_logic_vecto de 4 bits, se tienen 16 posibles frecuencias a
seleccionar, y se desea que se correspondan con los valores mostrados en la
siguiente tabla:
Frecuencia(Hz) Frecuencia
primaria
99,6
198,5
297,7
393,8
498,2
697,5
976,6
1220,7
24414
24414
24414
24414
24414
24414
24414
24414
Valor decimal
Valor
Hexadecimal
245
122
82
61
49
35
24
20
F5
7A
52
3D
31
23
18
14
17
1627,6
1878
2441,4
3000
3487,7
4069
4882,8
6103,5
24414
24414
24414
24414
24414
24414
24414
24414
15
13
10
8
7
6
5
4
0F
0D
0A
08
07
06
05
04
18
19
Se puede ver que con cada sync, cambia el estado, lo cual es correcto, y
tambin se puede apreciar que cuando cambiamos el valor de frecuencia (los 4
ultimos bits de SW) a la mxima frecuencia, el prescaler empieza a activarse
mucho ms seguido, y con ello, la memoria se barre mucho ms rpido. Por lo
que se comprueba que el control de frecuencia funciona sin problemas.
Figura 4.7
por s solo. As que todas las capturas correspondes a simulaciones del cdec
controller.
22
Para apreciar lo que pasa con vol_code y freq_code, por recomendacin del
profesor se han puesto en leds la concatenacin de vol_code y freq_code.
Luego se ha procedido a estimular los botones de la FPGA primero ascendente
en frecuencia, luego descendente en frecuencia, despus ascendente en
volumen, y finalmente descendente en volumen. Todos hasta saturacin antes
de pasar a otro.
Las simulaciones temporales no salen igual pero pareciera que todo funciona.
No se pueden ver tan bien como las otras ya que es difcil encontrar las
seales internas en simulacin temporal.
24
25
26
7.- Conclusiones
En todo proyecto es clave tener las entidades claras y bien ordenadas para la
fcil comprensin y debug de errores. Tambien es importante ir haciendo las
simulaciones paso a paso, tanto las funcionales como las temporales, que son
muy importantes para ir verificando el funcionamiento del cdigo.
27