uart

24
UART Diseño de Sistemas con FPGA 2 o cuatrimestre 2011 Patricia Borensztejn

Upload: eduuard-fraa-dedrick

Post on 29-Nov-2015

29 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: UART

UART

Diseño de Sistemas con FPGA

2o cuatrimestre 2011

Patricia Borensztejn

Page 2: UART

UART

• Universal Asynchronous receiver and transmitter: dispositivo que envía datos paralelos sobre una línea serie.

• RS-232: standard que especifica las características eléctricas, mecánicas, funcionales de los dos equipos que se comunican.

• Debido a que el nivel de voltaje definido en RS-232 es distinto al voltaje de los pines de E/S de la FPGA, es necesario un chip convertidor entre ambos (entre el puerto serie y los pines de la FPGA).

• En la placa S3 hay un puerto RS-232 con el conector standard de 9 pines, y la placa contiene el convertidor de tensión.

• Vamos a diseñar entonces la UART.

Page 3: UART

RS-232

• RS232 (Recommended Standard 232,

también conocido como Electronic

Industries Alliance RS-232C) es una

interfaz que designa una norma para el

intercambio de una serie de datos binarios

entre un DTE (Equipo terminal de datos) y

un DCE (Data Communication Equipment,

Equipo de Comunicación de datos),

aunque existen otras en las que también

se utiliza la interfaz RS-232.

Page 4: UART

Puertos RS-232

Page 5: UART

Puertos RS-232 de la

Spartan3e

• As shown in Figure 7-1, the Spartan-3E Starter Kit board

has two RS-232 serial ports: a female DB9 DCE

connector and a male DTE connector. The DCE-style

port connects directly to the serial port connector

available on most personal computers and workstations

via a standard straight-through serial cable.

• Use the DTE-style connector to control other RS-232

peripherals, such as modems or printers, or perform

simple loopback testing with the DCE connector.

Page 6: UART

Puertos RS-232

• Figure 7-1 shows the connection between the FPGA and

the two DB9 connectors. The FPGA supplies serial

output data using LVTTL or LVCMOS levels to the

Maxim device, which in turn, converts the logic value to

the appropriate RS-232 voltage level. Likewise, the

Maxim device converts the RS-232 serial input data to

LVTTL levels for the FPGA. A series resistor between

the Maxim output pin and the FPGA’s RXD pin protects

against accidental logic conflicts.

• Hardware flow control is not supported on the connector.

The port’s DCD, DTR, and DSR signals connect

together, as shown in Figure 7-1. Similarly, the port’s

RTS and CTS signals connect together.

Page 7: UART

Puerto Serie

Page 8: UART

UART • La UART incluye un transmisor y un receptor.

• El transmisor es básicamente un shift register que carga los datos en paralelo a transmitir y luego los shiftea uno a uno a una velocidad determinada (rate). Empezando por el LSB(Least Significand Bit)

• 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 de start (“0”), seguido por los bits de datos (6,7, o 8), un bit opcional de paridad (paridad par (igual a cero cuando hay un número par de unos) o impar) y finaliza con los bits de stop (1, 1.5 o 2).

– No se envía señal de clk.

– Antes de iniciarse la transferencia, el emisor y el transmisor deben ponerse de acuerdo en lo que se transmite y además en la velocidad de transmisión (baud rate: bits por segundo)

Page 9: UART

UART: Subsistema receptor • Módulo Generador de Baud Rate

– Debido a que no hay un reloj que permita decidir cuando el dato (bit) está disponible a la entrada, el receptor usará un sistema de “oversampling” que permite estimar el punto medio del bit transmitido y adquirirlo en ese instante. Este módulo es el encargado de generar las señales para el procedimiento de oversampling.

• Modulo Receptor – En función de los parámetros acordados (formato de la trama ) y del procedimiento de oversampling, se

van obteniendo los bits hasta completar el dato.

• Módulo Interface – Provee un mecanismo para señalizar al sistema la llegada de un nuevo dato, y previene que éste no

sea adquirido dos o mas veces.

– Provee buffers para almacenar los datos entre el sistema y el receptor.

FPGA

Page 10: UART

Procedimiento de Muestreo

• Dado el baud rate de transmisión, se genera una frecuencia que es 16 veces el baud rate, y se sigue el siguiente procedimiento:

1. Esperar que la señal se ponga a “0”, el principio del bit de start, e iniciar el conteo.

2. Cuando el conteo llega a 7, quiere decir que estamos en la mitad del start bit, se resetea el contador a cero.

3. Cuando el contador llega a 15, quiere decir que estamos en la mitad del primer bit de datos. Se obtiene el bit y se resetea el contador.

4. Repetir el paso 3 por cada bit de datos.

5. Si hay bit de paridad, repetir el paso 3 para el bit de paridad

6. Repetir el paso 3 para el bit de stop.

Page 11: UART

Módulo Generador de Baud Rate

• Su función será generar un “tick” 16 veces por baud rate.

• Si el baud rate es de 19.200 ciclos por segundo, la frecuencia de muestreo debe ser 19.200 *16= 307.200 ticks por segundo. Si el reloj de la placa (en spartan) es de 50 Mhz, entonces hay que generar un tick cada 163 ciclos de reloj.

• Para ello podemos utilizar un contador modulo 163.

• La señal generada, llamada “tick” no se comporta como un reloj, sino mas bien como un enable, porque valdrá “1” durante un ciclo de reloj, del reloj del sistema, y luego valdrá cero.

163307200

10*50 6

Page 12: UART

Módulo Generador de Baud Rate

• Usamos un contador módulo m genérico,

instanciado a mod 163(M) y 8 (N)bits

• Módulo Generador de Baud Rate

(mod_m_counter.v)

Page 13: UART

Módulo Receptor

• Este módulo es el responsable del

sampleo de la línea de datos serie, debe

seguir el procedimiento del muestreo

descrito anteriormente, de forma que será

necesario realizar una máquina de

estados o bien un diagrama de estados.

(ASMD: algorithmic state machine with

Data Path)

Page 14: UART

FSM y ASM

• Para representar Maquinas de Estados Finitas (FSM) se pueden utilizar: – Grados de Estado o Diagramas de Estado

– O bien ASM: Algorithmic State Machine

• Ambos tienen su extensión con Data Path: – FSMD

– ASMD

Page 15: UART

ASMD del Módulo Receptor

Page 16: UART

Modulo Receptor

• Módulo Receptor: uart_rx.v

Page 17: UART

Módulo Interface

– Provee un mecanismo para señalizar al sistema la llegada de un nuevo dato, y previene que éste no sea adquirido dos o mas veces.

– Provee buffers para almacenar los datos entre el sistema y el receptor.

Page 18: UART

Módulo Interface

• El módulo Interface utiliza una FIFO para

almacenar el dato (fifo.v)

Page 19: UART

Módulo Transmisor

• La organización del transmisor es similar a la del receptor, es decir, consiste de: – Transmisor:

• Es un shift register que envía hacia fuera uno a uno los bits a una determinada velocidad.

• Como aquí no hay muestreo de bits, la frecuencia de los ticks es 16 veces más lenta que en el caso del receptor.

• Usa el mismo generador de baud rate que el receptor pero se le agrega un contador de forma que cada bit es shifteado cada 16 ticks.

– Generador de baud rate

• El mismo módulo que usa el receptor.

– Interface:

• FIFO de transmisión

Page 20: UART

Módulo Transmisor

• Módulo Transmisor (uart_tx.v)

• Módulo Interface (fifo.v)

Page 21: UART

UART Completa

• Código UART (uart.v)

Page 22: UART

Prueba de la UART

• El circuito de prueba consiste en recibir desde la PC datos. Estos datos se incrementan en 1 y vuelven a ser transmitidos a la PC. Las señales de control de la FIFO (escribir en la FIFO de transmisión y eliminar de la FIFO de recepción) se generan al apretar el pushbottom. Los datos de entrada a la UART están conectados a los LEDS, y las señales tx_full y rx_empty a los dos segmentos horizontales del digito de la derecha de los 7 segmentos (todo un debugger).

Page 23: UART

HyperTerminal

• Configurar el Hyper Terminal a:

– 19.200 baudios, 8 bits de datos, 1 bit de stop

y no paridad.

Page 24: UART

Prueba de la UART

• Por ejemplo:

– Conectar el cable serie (o usb-serie) a la PC y

a la FPGA

– Abrir el Hiper Terminal y configurarlo para la

conexión

– Tipear HAL en el Hiper terminal

– Apretar el pushbottom 3 veces (cada vez que

se aprieta remueve un dato de la cola de

recepcion, y lo introduce, ya incrementado, en

la de transmisión)

– Debemos ver en la PC: IBM (la típica!)