2. Diseño
En esta sección se terminarán de diseñar dos circuitos que permitan la comunicación entre la
computadora y la tarjeta de desarrollo (FPGA) La base de esta comunicación es un circuito UART
(Transmisor-Receptor Asíncrono Universal). Tal como su nombre lo dice es uno de los circuitos
más utilizados para transmisión y recepción de información de forma asíncrona, esto significa que
no se utiliza un reloj dentro de la señal, sino que las señales de transmisión (Tx) y recepción (Rx)
tienen un bit de start y otro de stop para saber cuándo empieza y termina la Data.
Algunas de las especificaciones del circuito a diseñar son: la frecuencia de transmisión y
recepción será de 115200Hz, el FIFO tiene un tamaño de 128 posiciones, el ancho de los datos es
de 8 bits, el circuito Loopback debe almacenar en el FIFO hasta recibir el carácter ‘\n’ o que se
llene la FIFO (cuando se hayan recibido 128 caracteres) y el número de caracteres recibidos debe
ser mostrado en el display 7-segementos.
Para esto se nos hizo entrega del módulo del UART (para la comunicación con la PC) al cual
le faltaba el circuito Tx, el módulo del FIFO para el almacenamiento de los datos recibidos y el
módulo del driver 7 segmentos para mostrar el número de datos almacenados en la FIFO. Además
del circuito Tx, faltaba el Loopback, el circuito principal que conecta el UART con el FIFO.
En la figura #2 se muestra el código diseñado del Tx en lenguaje Python. Note que se decidió
shiftear la data para que en cada tick el valor a mostrar estuviera guardado en dat[0]. Asegurese de
leer con detenimiento los comentarios realizados en el mismo.
Figura #6: Señales del circuito en función del tiempo a través del simulador “GTK Wave”
Una vez chequeado el correcto funcionamiento de los códigos diseñados, se procedió a
grabar el programa en el FPGA. Luego de grabado, se probó con la ayuda del programa
“Realterm”, de esta forma se comprobó que aunque el programa enviaba y transmitía tal y como
debía, no mostraba en el display del FPGA el número de caracteres (bytes) que ingresaba el
usuario.
Una de las especificaciones del diseño era precisamente esa, que se mostrara en la pantalla
del FPGA el número de caracteres ingresados, sin embargo, que esto no sucediera no era
consecuencia de nuestro diseño, sino de alguno de los códigos que se nos fue entregado,
específicamente el Driver del 7 segmento. En tal sentido, se dispuso a arreglar este problema.
El problema era consecuencia de que la lógica en la que fue escrito el driver 7 segmentos
fue inversa a la que utiliza la tableta de desarrollo. El FPGA del laboratorio es ánodo común, por
lo que si el ánodo está en TRUE, significa que está apagado, mientras si está en FALSE, significa
que está encendido. El driver debía encender secuencialmente un ánodo a la vez, pero por cómo
fue escrito, encendía 3 ánodos a la vez. Luego de cambiar esta lógica y el valor inicial de los
ánodos (de 0001 a 1110), se volvió a quemar el programa en el FPGA y se logró que cumpliera
con todas las especificaciones, ahora si mostraba en el display el número de caracteres ingresados.
De manera adjunta a este informe se envía el código del 7 segmentos modificado.
4. Discusiones :
Los objetivos del laboratorio fueron logrados satisfactoriamente, sin embargo en el proceso se
tuvieron algunos problemas ligados al poco conocimiento del lenguaje de programación (Python)
y al pequeño error del código del 7 segmentos que fue solventado exitosamente.
5. Referencias :
Manual de usuario de la tarjeta. XLINX: Spartan-3 FPGA Starter Kit Board User Guide (v1.2)
2008.
Digital Design and Computer Architecture (Second Edition). David Money Harris & Sarah L.
Harris. 2013.