Lupa

From Qi-Hardware
Jump to: navigation, search

Contents

[edit] Calificación

Porcentaje Presentación 20% Informe 30% Funcionamiento 50%
1 Entrega 10% 0.5 0.5 0.5
2 Entrega 30% 0 0 0 NO ASISTIERON A LA ENTREGA OCTUBRE 8
3 Entrega 20% 0 0 0
4 Entrega 40% 2 2 2


[edit] Introducción

El objetivo de nuestro proyecto es diseñar e implementar en la tarjeta de desarrollo SIE un zoom de imagen ajustable a la sección del gráfico que desee el usuario; para ello será necesario utilizar la pantalla LCD disponible en SIE y un mouse PS/2 que será el que definirá la zona de la imagen que quiere ser ampliada. Se desea que el usuario vea la imagen original y junto a ella un recuadro mostrando la ampliación, de nuevo, según la posición del mouse.

[edit] Requerimientos

El proyecto será montado en la tarjeta de desarrollo SIE, específicamente se hará uso del procesador LatticeMico32 el cuál se sintetizará en la FPGA. Adicionalmente se agregaran dos módulos los cuales se encargarán del manejo del mouse y de la pantalla. La imagen que usaremos será en escala de grises con una resolución de 8bits y con un tamaño igual o menor al de la pantalla, es decir 320x240 lo cual da como resultado la necesidad de una memoria de video de 320x240=76800 bytes. La imagen provendrá de una memoria ROM. Una parte fundamental de los requerimientos se basa en el hardware disponible, es decir SIE. SIE dispone de 24 salidas digitales y 8 análogas. Por la naturaleza y diseño de este proyecto solo se hará uso de las digitales. Debido a esto y considerando que una parte vital del proyecto es la pantalla LCD y el mouse, es necesario restringir el número de pines destinados al uso de una memoria SRAM externa. Las memorias SRAM seriales externas en el mercado son de hasta 32KB por lo cual la imagen final debe ser de 160x120=19.2KB lo cual se ajusta a los requerimientos.

[edit] Especificaciones

Una vez analizados los requerimientos se establece el diseño del proyecto. Se usará una interfaz como se muestra en la siguiente figura.

La imagen será como se puede apreciar en escala de grises y tendrá un tamaño de 120x120, el espacio restante de la pantalla tendrá la ampliación de los pixeles vecinos a la posición del mouse. Se usará una memoria externa SRAM 23k256 de 32KB del fabricante Microchip. Para la alimentación de la pantalla y la memoria (3.3V) y del mouse (5V) se implementará una conexión USB con 2 reguladores para los 2 niveles de voltaje requeridos.

[edit] Diagrama de Flujo

[edit] Diagrama de Bloques

En total hay 4 módulos o bloques importantes dentro del diseño tal y como se muestra en la siguiente figura:

Ls tareas Hardware son los módulos PS/2, ROM y LCD, mientras que las tareas Software son las adquisición de la imagen y el cálculo del zoom.

[edit] Mapa De Memoria

Nuestro proyecto cuenta con dos periféricos un mouse PS/2 y una memoria de video, desde el mouse ps2 recibimos la posición en tiempo real del mouse y en la memoria de la LCD se almacena y realiza el refresco dinámico de la visualización del recuadro de la lupa.

  • MEMORIA ROM

Por ser una memoria de solo lectura y que permite sólo la lectura de la información y no su borrado, independientemente de la presencia o no de una fuente de energía que la alimente, es ideal para guardar la imagen que utilizáremos para ampliarla mediante la lupa, la memoria ROM especifica que vamos a utilizar en es una EEPROM serial.

  • MEMORIA BRAM

Este es el espacio designado para realizar el refresco dinámico de la LCD este espacio lo tomaremos desde los bloques internos de la fpga designados como bloque (BRAM), en total existen 20 bloques cada unos de aproximadamente de 16kbits consideramos que serán suficiente para realizar nuestro proyecto estos bloque los sintetizaremos desde Xilinx. A continuacion mostramos el mapa de memoria desarrollado


[edit] Memoria ROM

Según el diseño descrito mas arriba el proyecto tiene 2 entradas importantes: el mouse y la imagen que va a ser ampliada parcialmente. La imagen provendrá de una memoria EEPROM AT24C128 de comunicación serial. El protocolo usado es I2C el cual está ampliamente documentado asi que no se entrará a dar detalles al respecto mas que la siguiente imagen que muestra las condiciones principales. Para ahorrar tiempo y trabajo se utilizó un core disponible en opencores.org el cual tenia el código del protocolo y la interfaz WISHBONE. Dicho core tenia 3 salidas y tres entradas, por lo cual fue necesario adicionar un tristate.

Como puede verse se define un maestro y un esclavo, una condición de inicio, una condición de parada, un nivel bajo de SCL para el cambio de SDA y un bit de reconocimiento o acknowledge. En nuestro caso el periférico encargado de controlar la memoria será el maestro y la memoria el esclavo. Por medio de WISHBONE el periférico recibirá por parte del procesador la dirección de memoria del pixel que requiera para procesar y posteriormente mostrar. La imagen es de 120x120 asi que habrá 14400 posiciones de memoria diferentes cada una con un byte de información correspondiente a un pixel en escala de grises de la imagen. Teniendo en cuenta los requerimientos del protocolo se tiene el siguiente diagrama de flujo el cual es la base para la escritura del código en Verilog.

Adicionalmente es necesario incorporar la interfaz WISHBONE para la comunicación con el procesador, para lograr compatibilidad perfecta nos basamos en la interfaz WISHBONE de otros periféricos del LM32 que ya venian instanciados y funcionando en la carpeta del proyecto. El diagrama de bloques del periférico total se muestra a continuación.

Los datos llegan y se mandan de manera serial asi que aparte de cumplir con los requisitos de la gráfica del protocolo es necesario asignar SDA a un registro que tiene un corrimiento a medida que un nuevo bit llega. Por lo demas como se ha dicho se manejan los requisitos del protocolo y la interfaz con el procesador, es decir, el WISHBONE.

[edit] Mouse PS/2

El funcionamiento o protocolo de comunicación de un mouse PS/2 se realiza en forma serie a través de dos líneas bidireccionales (clock y data) lo que permite sincronizar el envió de datos. Esta forma de comunicación exige que el protocolo de comunicación se base en comandos, por ejemplo el de forzar a cero las líneas de clock y data para indicar quien debe transmitir: si el mouse o el controlador. El ratón debe recibir una alimentación inicial esta alimentación es de 5 VDC para enviar un byte de identificación y esperar un comando que le indicará en qué modo debe funcionar. Después de lo cual funcionará en modo normal, enviando en forma periódica información sobre el estado de los botones y los desplazamientos. Para el envío de la información se emplean 3 bytes, los cuales se trasmiten de a uno por vez agregando un bit de paridad.

  • Espicificaciones del mouse

1m.jpg


Esencialmente la interfaz estándar del mouse, soporta las siguientes funciones: posicionamiento o movimiento en X (derecha / izquierda), movimiento, Y (arriba / abajo), activación del botón izquierdo y el botón de la derecha. El controlador del ratón debe leer periódicamente estas entradas y actualizar los diversos contadores y banderas dentro del código fuente para reflejar el movimiento y estados de los botónes. El protocolo de comunicación estándar tiene dos contadores que mantienen un registro de movimiento: tanto en x como en y. Esto se realiza con 9-bits. Además hay un envió del estado de los botones del ratón, estos datos se transmiten es paquetes de 3 bits. Cuando se lee las entradas del ratón se registra permanentemente el estado actual de los botones y de los incrementos o disminuciones de los contadores de movimiento de acuerdo a la cantidad de movimiento que se ha producido desde la última entrada de la muestra. Si cualquiera de los contadores se ha desbordado, el indicador de desbordamiento se activa. el contador se desactiva hasta que los contadores se restablecen. La resolución del mouse generalmente se trabaja a 4 conteos/mm a un que estas se pueden cambiar. Los modos básicos de funcionamiento son:

  • Reset - El modo inicial, en el que se lleva a cabo la inicialización del ratón y el reconocimiento
  • Stream - El modo operativo predeterminado o por defecto, en el cual el mouse envía sus paquetes de datos cuando ocurre algún movimiento o cambia algún estado de los botones
  • Remote: El controlador hace un sondeo de los paquetes de datos en movimiento.
  • Wrap: Es un modo de diagnóstico en donde el mouse y el controlador están enviándose datos constantemente en forma de eco.

Para nuestro proyecto necesitamos que el mouse ps2 funcione en modo stream, previo a ello se debe inicializar y reconocer el mouse y el host haya enviado la información de que este puede empezar a operar. Por tanto como solo tenemos dos formas de funcionamiento del mouse ps2 necesitaremos dos comandos de operación de este, los comandos son:

  • 0xF4 Habilita su envió de datos.
  • 0xEA El mouse funciona en modo stream

a continuacion mostramos el codifo utilizado para realizar el protocolo basico de comunicacion del mouse ps2

A continuacion presentamos el RTL del codigo desarrollado

[edit] Memoria BRAM

Este es el espacio designado para realizar el refresco dinámico de la LCD este espacio lo tomaremos desde los bloques internos de la FPGA, designados como bloque (BRAM), en total existen 20 bloques cada unos de aproximadamente de 16kbits consideramos que serán suficiente para realizar nuestro proyecto estos bloque los sintetizaremos desde xilinx.

Los datos en el bus de entrada DI se escriben en la ubicación de la RAM, esto especificado por el bus direcciones de entrada, ADDR, esto se realiza durante un estado de bajo a alto en el CLK. El bus de la salida de los representado por DO, presenta el contenido en memoria que es referenciado por el bus de direcciones ADDR, esto se realiza para la lectura para ello el reloj debe estar activo

  • Señales de Control
  • RELOJ-CLK

Cada señal está completamente sincronizada con el reloj. Y todas las entradas poseen una configuración respecto al clk .la polaridad del reloj es configurable y con la polaridad por defecto, que es de bajo a alto en el reloj (CLK) se realiza la lectura, escritura y las operaciones de reset..

  • Enable — EN

Es la entrada de habilitación EN, controla las operaciones de lectura, escritura, set/reset. EN Cuando EN esta bajo, no existen datos escritos y salidas de la DO conservar su último estado, cuando está en estado alto se puede realizar todas las operaciones y esta es su forma predeterminada.

  • Write Enable — WE

Es la entrada de habilitación para escribir los datos WE. Esto se realiza cuando EN/WE estén habilitados y cuando el reloj posea un flanco positivo. Set/Reset — SSR Es la entrada de sincronización set/reset, obliga a la salida a tomar un valor definido por el parámetro SRVAL. Cuando las señales SRR y EN están en alto, la salida de datos DO son sincrónicamente establecidos en un '0 'o '1' de acuerdo al parámetro SRVAL. Existen tres modos de funcionamiento de la memoria RAM, de lo cuales deben tener una inicialización previa. A continuación se muestra un diagrama de tiempos para las operaciones de lectura y escritura en el modo por defecto.

[edit] LCD

Este módulo recibe del procesador una matriz de 160x120 donde cada pixel es un byte, dicha información es guardada en la memoria RAM y enviada a la pantalla para su presentación final. Dentro de esta parte es importante establacer tiempos de lectura y escritura de la SRAM puesto que no puede hacer ambas operaciones al tiempo, es claro que mientras no lleguen nuevos datos provenientes del procesador se desplegará la misma información sin importar que no se refresque puesto que se trata de una memoria RAM estática. Para facilitar el desarrollo del proyecto hemos utilizado un core disponible en opencores.org que contiene todo lo necesario para el manejo tanto de los bloques RAM de la FPGA, la interfaz WISHBONE necesaria para la comunicación con el procesador y las señales que requiere la pantalla para poder desplegar los datos. Lo único que deberá ser implementado por aparte serán los comandos de inicialización por medio de I2C, tarea para la cual nuevamente se hará uso de un core y se modificará para utilizar solo lo necesario.

El core a usar se llama VGA/LCD y fue realizado por RIchard Herveille. Afortunadamente el autor lo hizo pensando en la compatibilidad con WISHBONE y aprovechando el uso de los bloques de memoria RAM internos que proveen FPGA's como las de XIlinx y Altera. Al revisar los diagramas de tiempos, la manera como el core maneja las señales se ajusta a lo requerido por la pantalla LCD para su correcto funcionamiento; adicionalmente las señales del WISHBONE del procesador y el modo de operación también son compatibles. El único inconveniente del core es que, por ser para uso genérico, implementa varios modos de color e incluso un CLUT (Color Look-Up Table). Debido a que nuestro diseño solo requiere escala de grises de 8 bits, una gran parte de todo el codigo será removido incluyendo buffers que gastarian recursos de la FPGA que no podemos desperdiciar. El siguiente es el diagrama de bloques de LCD.



[edit] Esquemático

Para el desarrollo de la tarjeta hija incluimos un conector usb con el proposito de que ya cargado el programa en la SIE, podamos desconectarla del computador y alimentarla desde la tarjeta hija.


[edit] Costos De Producción

Para crear nuestro prototipo, Utilizamos los elementos mencionados en la siguiente tabla. es importante señalar que estos costos son altos debido a la importación de los elementos que utilizamos

Alex Bernal M.

Carlos Iván Castellanos

Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export