jhkhkjhk

50
Teclado PS/2 M. C. Felipe Santiago Espinosa Enero – 2015 Manejo de Periféricos con la Tarjeta Nexys - 2

Upload: adilene-santiago

Post on 06-Dec-2015

2 views

Category:

Documents


1 download

DESCRIPTION

kljlkjkljlk

TRANSCRIPT

Teclado PS/2

M. C. Felipe Santiago Espinosa

Enero – 2015

Manejo de Periféricos

con la Tarjeta Nexys - 2

El puerto PS/2

El puerto PS2 fue introducido en las computadoras personales de IBM

como una interfaz para la comunicación de un teclado o ratón.

El puerto PS2 contiene dos líneas para establecer la comunicación; una

para Datos, en la cual puede haber un flujo serial bidireccional; y la otra

es para reloj, con ésta se indica cuando un dato válido puede ser

recuperado.

La información es transmitida en un “paquete” de 11 bits que contiene:

Bit de Inicio, 8 bits de datos, bis de paridad impar y bit de paro.

Aunque el formato básico es idéntico para un teclado y un ratón, la

interpretación de los bits de datos es diferente.

La tarjeta Nexys 2 tiene un puerto PS2 , la tarjeta actúa como anfitrión y

el FPGA debe contener el controlador del puerto.

El teclado PS/2

El teclado es uno de los principales dispositivos periféricos para

introducir datos en un sistema. Básicamente realiza dos funciones, para

ejemplificarlas, se considera que está conectado a un controlador (de

una PC o de un FPGA); así, las funciones que realiza son:

Envío de códigos. Cuando el usuario presiona una tecla, el teclado envía un

código al controlador, correspondiente a la tecla presionada, éste recibe el

código y decide si va a realizar una acción o si permanecerá sin cambios.

Ejecución de comandos. Cuando el controlador desea que el teclado realice una

acción, como encender sus LEDs, debe enviar un comando para que el

teclado lo ejecute.

La comunicación de un anfitrión con el teclado por medio del puerto

PS/2 es bidireccional, sin embargo, con el FPGA se manejará un

controlador simplificado con un flujo de información unidireccional.

Terminales del teclado

Se utilizan cuatro terminales en un puerto PS/2:

Terminales de alimentación y tierra. Sirven para suministrar voltaje al teclado, el controlador debe proporcionar el nivel de voltaje adecuado (5V ó 3.3V) y tierra.

Terminal de datos. Se emplea para enviar y recibir datos, de manera bidireccional. Cuando el teclado se conecta al controlador y no hay datos a enviar o recibir, esta terminal tendrá un nivel lógico alto. Para el intercambio de datos se emplea un protocolo serial, cuando el teclado o el controlador envían datos, pueden forzar a que la línea tenga un nivel lógico bajo si colocan un ‘0’ o mantienen el nivel lógico alto si colocan un ‘1’.

Terminal de reloj. En el envío y recepción de datos, el teclado cuenta con una señal de reloj para la transmisión serial previamente mencionada. La frecuencia máxima de la señal es de 33 kHz, sin embargo, la mayoría de los dispositivos operan dentro del rango de los 10 kHz a 20 kHz. Al igual que en la terminal de datos, la señal de reloj normalmente se encuentra en un nivel lógico alto.

Conexión de un teclado PS/2

Datos

Teclado

Reloj

Datos

Controlador

Reloj

Códigos que el teclado envía Código de Rastreo. El código de rastreo es la representación de la

tecla presionada. Cada tecla tiene un código de rastreo único. Si el usuario mantiene presionada una tecla, el teclado se mantiene enviando al controlador su código de rastreo, hasta el momento en que la tecla se suelta.

El código de rastreo no es código ASCII, por lo que, si el controlador necesita el código ASCII de una tecla presionada, debe capturar el código de rastreo y posteriormente realizar la conversión de código de rastreo a código ASCII.

Código de Liberación. Al momento de soltar la tecla presionada, el teclado envía al sistema controlador el código de liberación. Con éste, el controlador se entera de que se liberó la tecla presionada.

Códigos de Rastreo Existen 3 conjuntos de códigos de rastreo:

Conjunto de Códigos de Rastreo 1: Utilizado en el teclado XT de IBM, el cual consta de 83 teclas, este teclado es obsoleto.

Conjunto de Códigos de Rastreo 2: Este conjunto es el más usado por los teclados modernos. Se emplea en teclados AT o PS/2.

Conjunto de Códigos de Rastreo 3: Esta representación de códigos es opcional. Se creó para los teclados PS/2 con el objeto de soportar algunas órdenes adicionales al conjunto de códigos de rastreo 2.

El conjunto 3 difiere del conjunto de códigos de rastreo 2 en que todos sus códigos de rastreo son de 1 byte y sus códigos de liberación de 2 bytes, con lo cual resulta más fácil el desarrollo del controlador, el conjunto de códigos de rastreo 3 se muestra en las tablas siguientes.

Conjunto de Códigos de Rastreo 2

Es la configuración por default en los teclados modernos.

Funcionamiento del teclado

Cuando se presiona una tecla, el teclado envía al controlador tramas de 11 con el orden siguiente:

Bit de inicio. La línea de datos normalmente está en un nivel lógico alto, por lo que el bit de inicio obliga que ésta pase a un nivel lógico bajo con el objeto de indicar al controlador el inicio de la trama.

Byte de datos. Es la representación de la información que el teclado envía al controlador. El dato se envía desde el bit menos significativo (LSB) al bit más significativo (MSB).

Bit de paridad. Este bit lo utiliza el controlador para identificar si la trama es válida. Se utiliza paridad impar.

Bit de paro. Después del bit de paridad, este bit coloca la línea de datos a un nivel lógico alto para indicar el final de la trama.

Sincronización La señal de reloj es generada por el teclado y se utiliza para la

sincronización durante el envío serial de bits.

El teclado coloca los bits de información en los flancos de subida, por lo

que el controlador debe leer la línea de datos sincronizando con flanco

de bajada.

Cuando se termina el envío de todos los bits de la trama (incluyendo el

bit de paridad) el teclado deja de generar la señal de reloj.

Ejecución de comandos Los comandos, al igual que los códigos de rastreo, son datos de 1 byte, la

trama se forma de manera similar: Bit de inicio. Con la línea de datos en un nivel lógico bajo. Byte de datos. Bits que representan la orden enviada al teclado del LSB al

MSB. Bit de paridad. Debe ser impar. Bit de paro. Con la línea de datos en un nivel lógico alto.

Después del envío del bit de paro, el teclado envía al controlador un bit de reconocimiento para indicarle que recibió la orden de manera exitosa.

Para el envío de comandos del controlador al teclado –al igual que en el envío de códigos del teclado al controlador– la señal de reloj también la genera el teclado.

El controlador debe seguir los siguientes pasos para el envío de comandos al teclado:

1. Poner la línea de reloj en un nivel lógico bajo, por lo menos 100 μs, con esto el controlador toma el control sobre la comunicación.

2. Terminado ese lapso debe liberar la señal de reloj, esto porque el teclado es el único que genera la señal de reloj.

3. Poner la señal de datos en un nivel lógico bajo, lo cual interpretará el teclado como una petición del controlador para enviar datos. Con esto el teclado comenzará a generar las señales de reloj para los 8 bits de datos, el bit de paridad y el bit de paro.

4. Para el envío de los bits, el controlador debe esperar a que el teclado ponga la línea de reloj en alto. En cada flanco de subida el controlador debe colocar un 1 bit, comenzando con el bit menos significativo y finalizando con el bit de paro.

5. Por último, el controlador debe esperar a que el teclado ponga la línea de reloj en un nivel lógico bajo, que es una indicación de reconocimiento, además de generar el último pulso de reloj.

Las señales durante el envío de comandos del controlador al teclado:

Existen además 2 parámetros en el teclado:

El retardo typematic, el cual es un tiempo corto entre el primer y el

segundo código de rastreo (de 0.25 segundos a 1.00 segundos), La frecuencia typematic rate, que indica cuantos caracteres por

segundo se enviarán después del retardo typematic (2.0 a 30.0 caracteres por segundo).

Cuando el controlador envía una orden, debe esperar a recibir el byte de reconocimiento 0xFA.

Diseño del controlador Un controlador completo debe contar con las siguientes características:

Recepción de datos provenientes del teclado. Envío de comandos para la configuración y manejo del teclado, por ejemplo,

para solicitar al teclado que encienda uno de sus LEDs. Detección de errores de Paridad. Detección de errores en la trama, debidos a bits de paro incorrectos.

Sin embargo, se presenta el diseño básico de un controlador simplificado que espera los flancos en la señal de reloj, para sincronizar la captura serial de datos.

El controlador notifica cuando hay un código de rastreo listo, en la aplicación deberá ignorarse al carácter 0xF0, que es parte de los códigos de liberación.

Diseño del controlador

Idle

Start

Rec

Ready

Sync Parity

flanco = '0'

flanco = '1' and dato_ser = '0'

cnt_bits <= cnt_bits; cnt_bits <= cnt_bits;

flanco = '0'

CR <= cr_int;

cnt_bits <= 0;

cr_listo <= '0';

CR <= cr_int;

cnt_bits <= 0;

cr_listo <= '0';

flanco = '1'

cr_int <= dato_ser & cr_int(7 downto 1);

cnt_bits <= cnt_bits + 1;

cr_int <= dato_ser & cr_int(7 downto 1);

cnt_bits <= cnt_bits + 1;

cnt_bits < 8 Stop

flanco = '0'

flanco = '0'

rst = '1'

cnt_bits = 8

cr_listo <= '1'; cr_listo <= '1';

flanco = '1'

flanco = '1'

Ratón PS/2

M. C. Felipe Santiago Espinosa

Enero – 2015

Manejo de Periféricos

con la Tarjeta Nexys - 2

El ratón PS/2 El ratón o Mouse es un periférico de computadora que se considera, al mismo

tiempo, un dispositivo de entrada de datos y de control, dependiendo de las rutinas que maneje a cada momento.

Tiene su origen en el proyecto dirigido por Douglas C. Engelbart durante la década de 1960 en el Instituto de Investigación de Stanford (SRI, Stanford Research Institute), donde se buscaban métodos de apuntar y señalar en un monitor de tubos de rayos catódicos.

El principio de funcionamiento de este dispositivo es simple, consiste en asumir un sistema de coordenadas relativo en los planos X e Y, en el cuál, los desplazamientos del ratón son traducidos a valores numéricos que representan tanto la magnitud del desplazamiento como la dirección del mismo.

En la actualidad existen otros dispositivos señaladores derivados del concepto de funcionamiento del ratón: el track-ball, track-point, glide-point, lápiz señalador, pantallas táctiles, etc.

Comunicación Ratón PS2 - Controlador

Es similar a la comunicación del controlador con el teclado PS2.

El ratón puede enviar datos:

El controlador puede enviar comandos:

La información del desplazamiento y el estado de los botones se agrupa en un

paquete de 3 bytes, que se trasmite al controlador en la secuencia siguiente:

De los datos que se transmiten, la magnitud de los índices en los

campos X e Y representa la cantidad de movimiento que el ratón

ha experimentado desde el último reporte, por lo que no

representan posiciones absolutas, así cuanto más rápido se mueva

el ratón mayor será el número generado, pudiendo exceder el

rango de valores que se comprende de -255 a 255, lo que causa

que se active la bandera de sobre-flujo asociada a ese eje.

Adicionalmente, es posible configurar el comportamiento del

ratón, para brindarle flexibilidad en la aplicación que se

desempeñe mediante la asignación de un modo de operación.

Modos de operación del ratón Modo de flujo continúo

Este modo (Stream Mode) es el más común y por lo tanto predefinido, una vez inicializado el ratón, éste envía al controlador o anfitrión un reporte cada vez que detecta un movimiento o un cambio en el estado de los botones. La máxima frecuencia a la que se reportan esos datos se conoce como tasa de muestreo, este parámetro se encuentra en el rango de 10 a 200 muestras/seg.

Modo Remoto

En este modo (Remote Mode), las entradas del ratón, movimientos y botones, son leídas en la tasa de muestreo actual, actualizando contadores y banderas; pero la notificación del estado de los mismos se realiza sólo cuando es requerido por el anfitrión, haciendo uso del comando read data.

Modo de retorno automático

En este modo (Wrap Mode), el ratón entra en modo eco, ya que repite todos los bytes recibidos directamente al anfitrión, sin respuesta adicional o posterior, incluso si el byte representa un comando válido. Dos excepciones a esto son los comandos reinicio (FFh) y reinicio en modo Wrap (ECh).

Inicialización La secuencia de interacción básica de inicialización que se da entre

el ratón PS/2 y el controlador consiste en los siguientes eventos:

Al alimentarse, el mouse ejecuta una rutina interna de comprobación del dispositivo. Envía una 1 byte (AAh) indicando que el test se ha realizado satisfactoriamente, y envía 1 byte más con el identificador (ID) del dispositivo; que en este caso corresponde al dispositivo señalizador compatible con el estándar PS/2 (00h).

El controlador debe enviar el comando (F4h) , habilitando el reporte de datos del modo stream, que por defecto se encuentra desactivado. El ratón confirma el comando mediante el byte de reconocimiento (FEh).

El ratón entra en Modo Stream y envía el reporte de los datos por cada evento que registre el dispositivo.

Así mismo, de ser necesario es posible forzar al ratón a

regresar al estado inicial enviando el comando de reset:

El controlador envía el comando reset (FFh), indicando la

secuencia de inicialización del dispositivo; el ratón confirma

el comando mediante el byte de reconocimiento (FEh).

El ratón ejecuta la rutina de comprobación interna y envía 1

byte con el dato AAh y un byte con el dato 00h. El Modo

Stream se deshabilita durante este proceso.

Comandos que el ratón envía

Código Descripción

00h Identificación del Ratón (Mouse ID)

AAh Prueba básica de integridad Post Alimentación exitosa

FCh Prueba básica de integridad Post Alimentación fallida

FAh Acuse de recibo de Comando

FEh Reenvío. Tras la recepción de este código, el controlador

PS2 retransmite el byte previo.

Comandos que el controlador envía

Código Descripción y Acción del ratón

E6h

Este comando se emplea para fijar la escala 1:1. Después de la recepción del

comando, el ratón responde con el código de reconocimiento (FAh) y habilita

la escala 1:1 (escala por defecto).

E7h

Este comando se emplea para fijar la escala 2:1. Después de la recepción del

comando, el ratón responde con el código de reconocimiento (FAh) y fija la

escala 2:1.

E8h

Este comando se emplea para fijar la resolución del ratón. El ratón envía el

código de reconocimiento (FAh) y después espera por otro byte de datos del

anfitrión, en el cuál se especifica la resolución a ser empleada:

00h – 1 incremento por milímetro.

01h – 2 incrementos por milímetro.

02h – 4 incrementos por milímetro. (default)

03h – 8 incrementos por milímetro.

Después de la recepción de este segundo byte, el ratón envía nuevamente el

código de reconocimiento y reinicia los contadores de movimiento.

E9h

Este comando se emplea para solicitar el estado actual del ratón. Después

que recibe el comando, el ratón envía el código de reconocimiento (FAh),

seguido por el paquete de estado en tres Bytes, estructurado de la siguiente

forma: Byte 1

Bit0 – Estado del botón derecho del ratón (1=presionado; 0=no presionado)

Bit1 – Estado del botón medio del ratón (1=presionado; 0=no presionado)

Bit2 – Estado del botón izquierdo del ratón (1=presionado; 0=no presionado)

Bit3 – No empleado (fijado a 0)

Bit4 – Escala actual (1=2:1; 0=1:1);

Bit5 – Estado del reporte de datos (1=habilitado; 0=deshabilitado)

Bit6 – Modo actual (1=modo remoto; 0=modo stream)

Bit7 – No empleado (fijado a 0)

Byte 2 – Resolución actual

Byte 3 – Tasa de muestreo actual

Después de enviar el paquete de estado, el ratón reinicia los contadores de

movimiento.

EAh

Este comando se emplea para fijar al ratón en modo Stream. El ratón

responde enviado el código de reconocimiento (FAh), reinicia los contadores

de movimiento y habilita el modo stream.

EBh

Este comando se emplea para leer la tasa de muestreo del ratón mientras se

encuentra en modo remoto. El ratón responde enviando el código de

reconocimiento (FAh) y el paquete actual de los datos de movimiento. Los

contadores de movimiento se reinician posteriormente.

ECh

Este comando se emplea para reiniciar el modo wrap. El ratón responde

enviando el código de reconocimiento (FAh), reinicia los contadores de

movimiento y regresa al modo en que se encontraba antes de habilitar el modo

el Wrap (remoto o stream)

EEh

Este comando se emplea para fijar el ratón en modo wrap. El ratón responde

enviando el código de reconocimiento (FAh), reinicia los contadores de

movimiento y entra en modo wrap.

F0h

Este comando se emplea para fijar el ratón en modo remoto. El ratón responde

enviando el código de reconocimiento (FAh), reinicia los contadores de

movimiento y habilita el modo remoto.

F2h

Este comando se emplea para leer el ID (identificador) del ratón. El ratón

responde con el código de reconocimiento (FAh), seguido por el código que

representa su identificador y lo distingue como un ratón estándar PS/2 – 00h;

los contadores de movimiento también son reiniciados en este momento.

F3h

Este comando es empleado para fijar la tasa de muestreo para el ratón. El

Mouse envía en respuesta el código de reconocimiento (FAh) y entonces

espera del anfitrión otro byte de datos especificando la tasa de muestreo a

emplear, como sigue:

0Ah – 10 muestras por segundo.

14h – 20 muestras por segundo.

28h – 40 muestras por segundo.

3Ch – 60 muestras por segundo.

50h – 80 muestras por segundo.

64h – 100 muestras por segundo. (default)

C8h – 200 muestras por segundo.

Después de la recepción de este segundo byte, el ratón envía nuevamente el

código de reconocimiento y reinicia los contadores de movimiento.

F4h

Este comando se emplea para habilitar el reporte de datos cuando el ratón

se encuentra en modo Stream. Tras la recepción del comando, el ratón

responde enviando el código de reconocimiento (FAh) y reinicia los

contadores de movimiento.

F5h

Este comando se emplea para deshabilitar el reporte de datos cuando el

ratón se encuentra en modo Stream. Una vez recibido el comando, el ratón

responde enviando el código de reconocimiento (FAh) y reinicia los

contadores de movimiento.

F6h

Este comando se emplea para cargar el ratón con los valores por defecto.

Una vez reconocido el comando, el ratón responde con el código de

reconocimiento (FAh) y entonces es inicializado con lo siguiente:

Tasa de muestreo – 100 muestras por segundo.

Resolución – 4 incrementos por milímetro.

Escala – 1:1

Reporte de datos – Deshabilitado

Después de cargar los valores, el ratón reinicia los contadores de

movimiento y entra en modo Stream.

FEh

Este es el comando de reenvío y se emplea cuando el anfitrión requiere

que el ratón retransmita el último paquete de los datos enviados.

Después de reconocer el comando, el ratón transmite el paquete enviado

previamente.

FFh

Este comando es empleado para reiniciar el ratón. Después de que el

comando es identificado, el ratón se reinicia y posteriormente entra en

modo de reset.

Controlador para el Mouse El controlador se diseñó de manera que:

Ignora los caracteres que envía el ratón al ser

energizado. Envía el carácter 0xF4 para habilitar el modo

Stream y cuando recibe respuesta, inicia un par de contadores (POS_X y POS_Y).

POS_X toma valores en un intervalo entre 0 y 640, iniciando con 320 (0x140).

POS_Y toma valores en un intervalo entre 0 y 480, iniciando con 240 (0xF0).

En forma continua se espera el paquete de 3 bytes con la información necesaria para actualizar los contadores y reflejar el estado de los botones.

C L K L B

R S T P O S_ X(9 :0 )

P O S _Y(9:0 )

P S 2_ CL K

P S 2_ D AT A

R B

U1

MOUSE

Pantalla VGA

M. C. Felipe Santiago Espinosa

Enero – 2015

Manejo de Periféricos

con la Tarjeta Nexys - 2

Displays VGA Los displays VGA (Video Graphics Adapter) basados en CRT (Tubos

de Rayos Catódicos) utilizan modulación en amplitud para mover un flujo de electrones (rayos catódicos) para mostrar la información en una pantalla cubierta de fósforo.

Los LCD del mismo tipo usan arreglos de interruptores con los que se impone un voltaje que cruza una cantidad pequeña de cristal líquido, cambiando la permisividad de la luz en cada pixel.

Los LCD se han acondicionado para usar las mismas señales de temporización que los CRT, por lo que un Controlador desarrollado para un CRT funcionará sin problemas en un LCD del tipo VGA.

Display VGA basado en CRT

Operación del CRT Los CRT de color usan tres flujos de electrones (rojo, azul y verde) para energizar

el fósforo que cubre el lado interno del tubo de rayos catódicos.

Los flujos de electrones emanan de 3 cañones y son dirigidos al calentar cátodos

positivamente cargados ubicados en una malla.

La fuerza electrostática impuesta por la malla arrastra los rayos de electrones

energizados, estos rayos son estimulados por la corriente que fluye en los cátodos.

Estas partículas pronto caen bajo la influencia de una fuerza electrostática mucho

mayor, que resulta de la superficie completamente cubierta de fósforo del CRT,

siendo de 20kV (o más).

Los rayos son enfocados en un flujo fino cuando pasan a través de los centros de la

malla, y entonces son acelerados para impactar sobre la superficie de fósforo.

La pantalla de fósforo resplandece brillantemente en el punto de impacto y así

continúa durante algunos cientos de microsegundos después de que el flujo es

removido.

Si es mayor la corriente que alimenta al cátodo, el fósforo será más brillante.

Operación del CRT

Entre la malla y la superficie del display, el flujo de electrones pasa por un cuello en donde dos bobinas de alambre producen campos electromagnéticos ortogonales.

Los rayos catódicos realizan una deflexión por los campos electromagnéticos.

La magnitud de la corriente que circula en las bobinas hace que los campos magnéticos produzcan un patrón de barrido de los rayos catódicos en la superficie del display, horizontalmente de izquierda a derecha y verticalmente de arriba abajo.

Mientras los rayos catódicos se mueven en la superficie del display, la corriente enviada a los cañones de electrones se puede incrementar o disminuir para cambiar el brillo del display en el punto de impacto del rayo catódico.

La información se muestra cuando el flujo se está moviendo hacia “adelante” (de izquierda a derecha y de arriba a abajo), y no durante el tiempo en que el flujo regresa a la izquierda o a la esquina superior del display.

A estos periodos en donde el flujo se reinicia y se estabiliza para iniciar con una nueva pasada horizontal o vertical, se le conoce como tiempo de blanqueo.

Características de un display

La intensidad del flujo, la frecuencia a la cual el flujo electrónico cruza el display y la frecuencia a la cual puede ser modulado, determinan la resolución del display.

Los modernos displays VGA pueden aceptar diferentes resoluciones y el Controlador VGA determina la resolución temporizando las señales para el patrón de barrido.

El controlador debe producir pulsos de sincronización de 3.3 V (ó 5 V) para ajustar la frecuencia a la cual la corriente fluye en las bobinas de deflexión y se debe asegurar que los datos de video sean aplicados al cañón de electrones en el tiempo correcto.

El patrón de barrido del display define el número de “renglones” que corresponde con el número de pasadas horizontales y el número de “columnas” que corresponde a un área de cada renglón que es asignado a un “elemento de imagen” o pixel.

Los displays típicos manejan de 240 a 1200 renglones y de 320 a 1600 columnas.

El tamaño del display y el número de renglones y columnas determinan el tamaño de cada pixel.

Características de un display Los datos de video típicamente se conservan en una memoria de refresco, con

uno o más bytes asignados a cada pixel.

El controlador debe indexar a la memoria conforme el flujo se mueve a través del display, y recuperar y aplicar los datos de video al display en el tiempo preciso en que el flujo electrónico se está moviendo por el pixel dado.

Un circuito controlador VGA debe generar las señales de temporización HS y VS, y coordinar el manejo de los datos de video con el reloj del pixel.

El reloj del pixel define el tiempo disponible para mostrar un pixel de información.

La señal VS define la frecuencia de “refresco” del display o la frecuencia a la cual la información es redibujada.

La frecuencia de refresco mínima es una función del fósforo del display y de la intensidad del flujo de electrones, las frecuencias típicas de refresco caen en el rango de 50 Hz a 120 Hz.

El número de líneas a mostrar para una frecuencia de refresco define la frecuencia de sincronización horizontal .

Para un display con 640-pixeles por 480-renglones usando un reloj

a 25MHz y una frecuencia de refresco de 60 +/-1Hz, la

temporización de las señales es:

El ancho del pulso de sincronía y los intervalos del tiempo adyacentes (intervalos porch: tiempo anterior y posterior al pulso de sincronía, durante el cual la información no puede ser mostrada) están basados en observaciones tomadas sobre displaysVGA reales.

El circuito controlador VGA debe incluir un contador de sincronía horizontal manejado por el reloj del display para generar la señal de temporización HS. Este contador puede utilizarse para localizar cualquier pixel sobre un renglón dado.

Además, la salida de un contador de sincronía vertical, que se incremente con cada pulso HS, puede utilizarse para generar la señal de temporización VS, y este contador sirve para localizar un renglón dado

Estos dos contadores, continuamente incrementándose, pueden emplearse para direccionar la RAM de video.

No hay una relación de tiempo entre el comienzo de un pulso HS y el comienzo de un pulso VS, de manera que el diseñador puede arreglar los contadores para facilitar el acceso a la RAM de video, o para minimizar la lógica para la generación de los pulsos de sincronía.

Generación de pulsos de sincronía

Terminales del puerto VGA de la Tarjeta Nexys2

La tarjeta Nexys2 destina 10 señales para el puerto VGA: 8 bits para el color y

2 para la sincronía (HS- Sincronía Horizontal y VS- Sincronía Vertical).

Las señales de color utilizan una red resistiva para crear 8 niveles en los colores

Rojo y Verde, y 4 niveles en el azul (el ojo humano es menos sensitivo a los

niveles de azul).

Red resistiva

El circuito divisor resistivo trabaja en conjunción con la

resistencia de terminación de 75 Ω del display VGA.

Produce señales de color con incrementos iguales entre 0

(completamente apagado) y 0.7 V (completamente

encendido).

Se pueden generar 256 colores diferentes, uno para cada

patrón de 8 bits.

El controlador de video debe generar las señales de sincronía

y las señales de color con la correcta temporización.

Controlador VGA

HSYNC y VSYNC son las señales de sincronía para la pantalla VGA.

PIXEL_H es un contador que indica la posición horizontal del pixel actual.

PIXEL_V es un contador que indica la posición vertical del pixel actual.

RGB contiene el valor del pixel actual.

V_AREA: Es una señal auxiliar que se pone en alto cuando el barrido de la salida se encuentra en el área visible de la pantalla.

C L K H S YN C

P IXE L _R G B(7 :0 ) P IX EL _ H(9 :0 )

R S T P IX EL _ V(8 :0 )

R G B (7:0 )

V S YN C

V _ A RE A

U2

vga

Memoria RAM externa

M. C. Felipe Santiago Espinosa

Enero – 2015

Manejo de Periféricos

con la Tarjeta Nexys - 2

Memoria Externa La tarjeta Nexys 2 tiene un dispositivo RAM y otro ROM para almacenamiento

masivo. La RAM es marca Micron de 128 Mbits con numero de serie

M45W8MW16 del tipo DRAM Cellular pseudo-estática, organizada como una

matriz de 8 M Words de 16 bits.

La RAM puede operar como una típica SRAM asíncrona con ciclos de lectura y

escritura de 70 ns, o como una memoria síncrona con un bus de 80 MHz.

Cuando es operada como SRAM, la memoria automáticamente refresca sus

arreglos DRAM internos, permitiendo su manejo con un controlador

simplificado (similar al de una SRAM).

Cuando está operando en modo síncrono, es posible realizar transferencias

continuas hasta de 80 MHz.

La ROM externa es una Strata Flash de Intel con número de serie

TE28F128J3D75-110, con una capacidad de 128 Mbits organizados como 8

Mword de 16 bits.

Memoria RAM

Los buses de Datos (16 bits) y de direcciones (24 bits) son compartidos por las

dos memorias, por lo que al tener acceso a una de ellas la otra debe ser

inhabilitada.

Lecturas y escrituras asíncronas

Ciclo de Lectura Ciclo de Escritura

tRC (mínimo) = 70 nS tWC (mínimo) = 70 nS

Acceso a la memoria Las operaciones de Lectura y Escritura son excluyentes, la

memoria sólo podría estar en uno de esos estados.

wr = '1'

rd = '0' and wr = '0'

Lee Escribe

Espera

rd = '0'

rd = '1'

rd = '1'

def_IO <= '0';

ramCE <= '1';

ramOE <= '1';

ramWE <= '1';

def_IO <= '0';

ramCE <= '1';

ramOE <= '1';

ramWE <= '1';

def_IO <= '1';

ramCE <= '0';

ramOE <= '1';

ramWE <= '0';

def_IO <= '1';

ramCE <= '0';

ramOE <= '1';

ramWE <= '0'; def_IO <= '0';

ramCE <= '0';

ramOE <= '0';

ramWE <= '1';

def_IO <= '0';

ramCE <= '0';

ramOE <= '0';

ramWE <= '1';

rst = '1'

clk def_IO

rd ramCE

rst ramOE

wr ramWE

U1

man_mem_ext

Dirección del Flujo de Datos

El bus de Datos es bidireccional:

En una operación de escritura (def_IO = ‘1’) el puerto es de salida.

En una operación de lectura (def_IO = ‘0’) el puerto es de entrada y

la salida debe ponerse en alta impedancia para evitar cortos circuitos.

DOUT(7:0)

DIN(7:0) g

PBID(7:0)

U2

control_Z

MemDB(7:0)

PBID <= DOUT when g = '1' else "ZZZZZZZZ";

DIN <= PBID;