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).