Вы находитесь на странице: 1из 4

UNIVERSIDAD AUSTRAL DE CHILE

FACULTAD DE CIENCIAS DE LA INGENIERÍA


INSTITUTO DE ELECTRICIDAD Y ELECTRÓNICA
ELEL 220 Diseño de sistemas electrónicos digitales
Prof. David Ulloa
Estudiantes Cristian Catrilef, Beatriz Martis, Mathias Gutiérrez
31 de julio de 2019

Comunicación UART
Receptor

El protocolo de transmisión/recepción de datos UART, es una manera de enviar y recibir datos sin
la necesidad de un reloj que regule la comunicación, ya que esta parte se enfoca en el receptor, la
idea es tomar los datos entrantes, que vienen en forma serial, y construirlos en forma paralela, tal
como se transmitió, para lograrlo la sección del receptor UART es diseñada a partir de máquinas de
estado,

Como cualquier código en VHDL, necesitaremos nombrar las librerías a utilizar, las variables de
entrada y salida. Las librerías necesarias para esta parte son las siguientes:

*IEEE.STD_LOGIC_1164.ALL

*IEEE.STD_LOGIC_ARTITH.ALL

*IEEE.STD_LOGIC_UNSIGNED.ALL

*IEEE.NUMERIC_STD.ALL

Y en cuanto las variables a utilizar serian.

Clk In
Clr In
Rxd In
Rx_byte Out (vector)
Inicia Out

Como anteriormente se mencionó, el receptor está basado en una máquina de estados, para de esa
manera los datos recibidos se puedan ordenar, en este caso en particular, se utilizará una máquina
de tipo mealy, ya que la salida del estado depende de la entrada y del estado en el que se encuentra.
Los estados que se utilizarán serán los siguientes Mark, Start, Delay, shift, stop.

Cuando el estado es Mark, existirán variables señales que se pondrán en cero, para continuar en
este estado, Rxd debe ser ‘1’, de lo contrario, el estado siguiente será Start.

En el estado Start, se monitorea que el contador de baudios es mayor a la mitad de tiempo de bit,
entonces el contador de baudios será cero, y el estado siguiente será Delay en caso contrario, el
contador de baudios se irá actualizando, agregándose +1 el estado siguiente será Start.
En el estado Delay se monitoreará si el contador de baudios es mayor o igual a tiempo de bit, si lo
es entonces se presentan dos casos más, si el contador de bit es igual a 8(‘1000’) entonces el estado
siguiente será shift, en caso contrario el estado siguiente será stop. Ahora si el contador de baudios
aun no es mayor o igual al tiempo de bit, entonces el estado siguiente será Delay y el contador de
baudios se seguirá actualizando.

Si el estado actual es shift, entonces el propósito de este estado es el registro de corrimiento, es


decir, los bits que vayan llegando se van colocando en orden, de esta manera, se puede armar la
palabra de la manera en la que se envió.

En el estado Stop, se colocan todas las variables para terminar la comunicación en el estado
requerido, como, por ejemplo, la salida Inicia, ahora pasa estar en 1, además el estado siguiente
será Mark, a la espera de otro bit.

Transmisor

El trasmisor de la comunicación UART se realizó en una caja separada al emisor, esta caja se encarga
del envió de datos desde la FPGA hacia el computador. Los puertos del transmisor son cuatro, las
de entrada son clk (reloj), clr (clear) y data, y de salida txd. A la caja llega la información por el puerto
data en bits de forma paralela los cuales deben ser transmitidos de forma serial por el puerto txd,
el puerto clr sirve para resetear la caja y el puerto clk es para la entrada reloj que coordina cada
cuanto son transmitidos los bits del vector, a pesar de que la comunicación UART es asíncrona se
debe regular cada cuanto se transmite cada dato de la señal para asegurar que es transmitida
adecuadamente la información.

Para que la información sea transmitida en el orden y protocolo adecuado pasa por un proceso que
define una máquina de estados. Este proceso se define por el flanco de subida del reloj y un
contador que marca cada cuanto ciclo del reloj se debe transmitir el siguiente bit. EL primer estado
es mark, los contadores de bits y del ciclo para marcar los baudios son colocados en 0 y la señal tx
sigue en 1. Sigue el estado start la señal tx pasa a ser un cero, para definir que se comienza la
transmisión. En el estado delay comienza la cuenta del contador para los baudios, definiendo
cuando se realizan los cambios, mientras que en el estado shift se define que sale por el puerto txd,
siendo los bits del vector data. En shift va de a un bit cada vez que pasa por ese estado la máquina.
Cuando se ha transmitido todos los bits de data pasa al estado stop, en este estado se la salida Tx
es igual a 1 determinando que se termina la transmisión de datos por el tiempo que corresponde a
un baudio, luego se mantiene en ese valor.
I.(1)Diagrama de máquina de estados.

La máquina de estados anterior también depende de una señal denominada outp que cuando está
en cero, quiere decir que no hay data por transmitir. Esta señal es la resultante de un proceso que
regula cada cuanto tiempo se transmite información a la computadora, este tiempo es de 0.5
segundos.

Botones de la Spartan6

Cuatro de los botones y un switch presentes en la Spartan6 se utilizan para transmitir hacia el
computador. A cada botón y switch a utilizar se le designo un código ASCII, enviando finalmente a
la computadora lo que corresponde a cuadro letras (R-O-M-A) y a espacio (switch), por lo que por
medio de combinaciones se pueden obtener diferentes palabras.

Al presionar un botón pasa por un proceso de un ciclo if, dependiendo de que botón o switch fue
utilizado se designa como es la señal. Esta señal es de 8 bits la cual contiene el código ASCII
correspondiente a lo que se quiere representar en la pantalla del computador, luego esta señal llega
al transmisor.

Para el óptimo funcionamiento se agregaron los filtros para cada botón y el reloj para los filtros.

Cambio de sentido de luces

Se tiene ocho diodos leds que son recorridas por una luz a una velocidad constante las cuales al
recibir una indicación del computador toman una dirección. Para utilizar ocho diodos leds estos se
colocaron en un protoboard y se conectaron a los pins presentes en la Spartan6 y se hizo un
contador junto a un demultiplexor que hacen posible que la luz recorra los leds en orden.
Al presionar las teclas “a” o “d” en el teclado se envía a la FPGA de forma serial el código ASCII
correspondiente, siendo procesado por el receptor y luego transmitido hacia la caja processor. En
esta caja la data entra a un proceso que indica si el contador de 3 bits va aumentando o
disminuyendo. Si se presiona la misma tecla se mantiene la dirección en que son recorridas las luces,
al presionar la contraria se produce un cambio en el sentido.

Al contador que llega la señal que indica el sentido, es la entrada de updown del contador de 3 bits.
Luego sus salidas van conectadas a un demultiplexor, que es un proceso con un ciclo if que procesa
las entradas que son números en binario y va encendiendo la luz correspondiente a la posición
indicada en las entradas.

Вам также может понравиться