jhkhkjhk
DESCRIPTION
kljlkjkljlkTRANSCRIPT
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.
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.
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.
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.
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;