11.07.2015 Views

UART. Clase 9(28 de octubre, 2009)

UART. Clase 9(28 de octubre, 2009)

UART. Clase 9(28 de octubre, 2009)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>UART</strong>Diseño <strong>de</strong> Sistemas con FPGA2° cuatrimestre <strong>2009</strong>Patricia Borensztejn


<strong>UART</strong>• Universal Asynchronous receiver and transmitter:dispositivo que envía datos paralelos sobre una líneaserie.• RS-232: standard que especifica las característicaseléctricas, mecánicas, funcionales <strong>de</strong> los dos equiposque se comunican.• Debido a que el nivel <strong>de</strong> voltaje <strong>de</strong>finido en RS-232 esdistinto al voltaje <strong>de</strong> los pines <strong>de</strong> E/S <strong>de</strong> la FPGA, esnecesario un chip convertidor entre ambos (entre elpuerto serie y los pines <strong>de</strong> la FPGA).• En la placa S3 hay un puerto RS-232 con el conectorstandard <strong>de</strong> 9 pines, y la placa contiene el convertidor <strong>de</strong>tensión.• Vamos a diseñar entonces la <strong>UART</strong>.


<strong>UART</strong>• La <strong>UART</strong> incluye un transmisor y un receptor.• El transmisor es básicamente un shift register que carga los datos enparalelo a transmitir y luego los shiftea uno a uno a una velocidad<strong>de</strong>terminada (rate)• El receptor, recibe los bits uno a uno y reensambla el dato completo.• Procedimiento:– Cuando la línea serie no lleva datos (iddle) está a “1”.– La transmisión comienza con un bit <strong>de</strong> start (“0”), seguido por los bits <strong>de</strong> datos(6,7, o 8), un bit opcional <strong>de</strong> paridad (paridad par (igual a cero cuando hay unnúmero par <strong>de</strong> unos) o impar) y finaliza con los bits <strong>de</strong> stop (1, 1.5 o 2).– No se envía señal <strong>de</strong> clk.– Antes <strong>de</strong> iniciarse la transferencia, el emisor y el transmisor <strong>de</strong>ben ponerse <strong>de</strong>acuerdo en lo que se transmite y a<strong>de</strong>más en la velocidad <strong>de</strong> transmisión (baudrate)


<strong>UART</strong>: Subsistema receptor• Módulo Generador <strong>de</strong> Baud Rate– Debido a que no hay un reloj que permita <strong>de</strong>cidir cuando el dato (bit) está disponible a la entrada, elreceptor usará un sistema <strong>de</strong> “oversampling” que permite estimar el punto medio <strong>de</strong>l bit transmitido yadquirirlo en ese instante. Este módulo es el encargado <strong>de</strong> generar las señales para el procedimiento<strong>de</strong> oversampling.• Modulo Receptor– En función <strong>de</strong> los parámetros acordados (formato <strong>de</strong> la trama ) y <strong>de</strong>l procedimiento <strong>de</strong> oversampling,se van obteniendo los bits hasta completar el dato.• Módulo Interface– Provee un mecanismo para señalizar al sistema la llegada <strong>de</strong> un nuevo dato, y previene que éste nosea adquirido dos o mas veces.– Provee buffers para almacenar los datos entre el sistema y el receptor.


Procedimiento <strong>de</strong> Muestreo• Dado el baud rate <strong>de</strong> transmisión, se genera unafrecuencia que es 16 veces el baud rate, y se sigue elsiguiente procedimiento:1. Esperar que la señal se ponga a “0”, el principio <strong>de</strong>l bit <strong>de</strong>start, e iniciar el conteo.2. Cuando el conteo llega a 7, quiere <strong>de</strong>cir que estamos en lamitad <strong>de</strong>l start bit, se resetea el contador a cero.3. Cuando el contador llega a 15, quiere <strong>de</strong>cir que estamos en lamitad <strong>de</strong>l primer bit <strong>de</strong> datos. Se obtiene el bit y se resetea elcontador.4. Repetir el paso 3 por cada bit <strong>de</strong> datos.5. Si hay bit <strong>de</strong> paridad, repetir el paso 3 para el bit <strong>de</strong> paridad6. Repetir el paso 3 para el bit <strong>de</strong> stop.


Módulo Generador <strong>de</strong> Baud Rate• Su función será generar un “tick” 16 veces por baudrate.• Si el baud rate es <strong>de</strong> 19.200 ciclos por segundo, lafrecuencia <strong>de</strong> muestreo <strong>de</strong>be ser 19.200 *16= 307.200ticks por segundo. Si el reloj <strong>de</strong> la placa (en spartan)es <strong>de</strong> 50 Mhz, entonces hay que generar un tick cada163 ciclos <strong>de</strong> reloj.650*10307200163• Para ello po<strong>de</strong>mos utilizar un contador modulo 163.• La señal generada, llamada “tick” no se comportacomo un reloj, sino mas bien como un enable, porquevaldrá “1” durante un ciclo <strong>de</strong> reloj, <strong>de</strong>l reloj <strong>de</strong>lsistema, y luego valdrá cero.≅


Módulo Generador <strong>de</strong> Baud Rate• Usamos un contador módulo m genérico,instanciado a mod 163.• Módulo Generador <strong>de</strong> Baud Rate


Módulo Receptor• Este módulo es el responsable <strong>de</strong>lsampleo <strong>de</strong> la línea <strong>de</strong> datos serie, <strong>de</strong>beseguir el procedimiento <strong>de</strong>l muestreo<strong>de</strong>scrito anteriormente, <strong>de</strong> forma que seránecesario realizar una máquina <strong>de</strong>estados o bien un diagrama <strong>de</strong> estados.(ASMD: algorithmic state machine withData Path)


FSM y ASM• Para representar Maquinas <strong>de</strong> Estados Finitas (FSM) se pue<strong>de</strong>n utilizar:– Grados <strong>de</strong> Estado o Diagramas <strong>de</strong> Estado– O bien ASM: Algorithmic State Machine• Ambos tienen su extensión con Data Path:– FSMD– ASMD


ASMD <strong>de</strong>l Módulo Receptor


Control y Data Pathestado+1r_nextr_regrEstado Futuroy ControlDel DP+1srxb


Módulo Interface• Una posibilidad es un esquema con un flag y un buffer <strong>de</strong> unaentrada.• El flag FF tiene dos entradas y una salida– set_flag: proviene <strong>de</strong>l módulo receptor, se pone a 1 cuando se acabó<strong>de</strong> recibir el dato– clr_flag: cuando el sistema obtuvo el dato– flag: indica si hay o no dato en el buffer


Módulo Interface• El módulo Interface podría cambiarse parautilizar una FIFO en lugar <strong>de</strong>l buffer <strong>de</strong>una palabra.


Módulo Transmisor• La organización <strong>de</strong>l transmisor es similar a la <strong>de</strong>lreceptor, es <strong>de</strong>cir, consiste <strong>de</strong>:– Un transmisor:• Es un shift register que envía hacia fuera uno a uno los bits a una<strong>de</strong>terminada velocidad.• Como aquí no hay muestreo <strong>de</strong> bits, la frecuencia <strong>de</strong> los ticks es 16veces más lenta que en el caso <strong>de</strong>l receptor.• Usa el mismo generador <strong>de</strong> baud rate que el receptor pero se leagrega un contador <strong>de</strong> forma que cada bit es shifteado cada 16ticks.– Un generador <strong>de</strong> baud rate• El mismo módulo que usa el receptor.– Una interface:• Es el sistema el que setea el flag FF y escribe el dato en el buffer, yla <strong>UART</strong> pone a cero el flag y lee el dato <strong>de</strong>l buffer


• Código <strong>UART</strong><strong>UART</strong> Completa


Prueba <strong>de</strong> la <strong>UART</strong>• El circuito <strong>de</strong> prueba consiste en recibir <strong>de</strong>s<strong>de</strong> la PC datos. Estosdatos se incrementan en 1 y vuelven a ser transmitidos a la PC. Lasseñales <strong>de</strong> control <strong>de</strong> la FIFO (escribir en la FIFO <strong>de</strong> transmisión yeliminar <strong>de</strong> la FIFO <strong>de</strong> recepción) se generan al apretar elpushbottom. Los datos <strong>de</strong> entrada a la <strong>UART</strong> están conectados alos LEDS, y las señales tx_full y rx_empty a los dos segmentoshorizontales <strong>de</strong>l digito <strong>de</strong> la <strong>de</strong>recha <strong>de</strong> los 7 segmentos (todo un<strong>de</strong>bugger).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!