Snake

From Qi-Hardware
Jump to: navigation, search

Proyecto Digital 2

Rafael Camargo .9

Leyner Camargo 1

Javier Araque .7

Para el curso Digital II planteamos como proyecto el juego de snake utilizando la tarjeta de desarrollo SIE


Contents

[edit] Calificación

Porcentaje Presentación 20% Informe 30% Funcionamiento 50%
1 Entrega 10% 0.5 0.5 0.5
2 Entrega 30% 1.7 1.7 1.7
3 Entrega 20% 4 4 5
4 Entrega 40% 5 5 5


[edit] Implementación

Para el desarrollo del proyecto trabajaremos con la tarjeta de desarrollo SIE la cual tiene una FPGA de la familia xc3s500e, memoria SDRAM de 64mb, memoria NAND, además consta con un procesador jz4725 el cual controla todos los puertos de entrada/salida y los diferentes periféricos con los que se puede comunicar, para el desarrollo de este proyecto solo trabajaremos con la FPGA utilizando el procesador de software libre Lattice Mico 32 el cual será embebido en esta FPGA, con el procesador LM32 podremos realizar las diferentes comunicaciones entre los periféricos necesarios para el funcionamiento del juego, los cuales son LCD grafico monocromatico de 240x128 pixeles de Texas Instruments y unos pulsadores estos dos perifericos se adicionaran a los puertos de entrada /salida que nos proporciona la FPGA de la tarjeta SIE.


Tareas Software.

En software estará programada toda la lógica del juego, el manejo de las diferentes atenciones a interrupciones que en nuestro caso son las de los pulsadores y el timer, la comunicación entre procesador y los diferentes periféricos

Tareas Hardware

Programación de los controladores de los periféricos como lo es el GLCD y los pulsadores, estas tareas srean programadas en verilog para el GLCD se utilizara la un sector de la ram interna de la FPGA como memoria de video para este periferico

[edit] Software para el desarrollo del proyecto

Xilinx ISE:

Entorno gráfico de desarrollo para FPGA con el cual se sintetizará y programará el LM32 para la tarjeta de desarrollo SIE, ademas de los módulos en hardware que se necesiten para la comunicación con los periféricos.

GNU Toolchain para el LM32

Es un conjunto de herramientas de programación usado principalmente para compilar y depurar el código C/C++ para la arquitectura del LM32

Icarus Verilog

Herramienta de simulación y síntesis de código verilog que se usará para facilitar la depuración del proyecto.

[edit] Diagrama de flujo

Dia flujo.jpg

[edit] Diagrama de Bloques

sistema embebido

[edit] Mapa de Memoria

Para el snake vamos a trabajar con el siguiente mapa de memoria.

Mapa de la memoria de programa

BRAMSTART     0x00000000  Memoria de programa 

Mapa del timer

TIMERBASE     0xf0010000   Dirección Base para el timer

TCR0         (TIMERBASE + 0x00)    Registro de configuracion del Timer 0
  TIMER_EN     (TCR0 & 0x08)    Enable Timer
  TIMER_AR     (TCR0 & 0x04)    Auto-Reload
  TIMER_IRQEN  (TCR0 & 0x02     IRQ Enable
  TIMER_TRIG   (TCR0 & 0x01)    Triggered (reset when writing to TCR)
COMPARE0     (TIMERBASE + 0x04)    Registro de comparación del Timer 0
COUNTER0     (TIMERBASE + 0x08)    Registro de contador del Timer 0

TCR1         (TIMERBASE + 0x0C)    Registro de configuración del Timer 1
  TIMER_EN     (TCR1 & 0x08)    Enable Timer
  TIMER_AR     (TCR1 & 0x04)    Auto-Reload
  TIMER_IRQEN  (TCR1 & 0x02     IRQ Enable
  TIMER_TRIG   (TCR1 & 0x01)    Triggered (reset when writing to TCR)
COMPARE1     (TIMERBASE + 0x10)    Registro de comparación del Timer 1
COUNTER1     (TIMERBASE + 0x14)    Registro de contador del Timer 1

Mapa de los pulsadores

PULS_BASE    0xf0030000  Dirección correspondiente a los pulsadores utilizados

BOTONES0     (PULS_BASE + 0x00)   Registro de estado de los pulsadores
  BOTON0       (BOTONES0 & 0x01)   Pulsador 0
  BOTON1       (BOTONES0 & 0x02)   Pulsador 1
  BOTON2       (BOTONES0 & 0x04)   Pulsador 2
  BOTON3       (BOTONES0 & 0x08)   Pulsador 3

Mapa del LCD

GLCD_BASE      0xf0040000  Direccion base para el GLCD 

registros GLCD

 GLCD_RAM       (LCD_BASE + 0x00)  // DATO A ESCRIBIR EN LA RAM DEL MODULO GLCD
 GLCD_INIT      (LCD_BASE + 0x02)  // BIT DE CONTROL PARA COPIAR LA MEMORIA RAM INTERNA DEL MODULO A 
                                   //  LA EXTERNA (LCD)

RAM:

  +----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
  |        25'b0         |  C/D  |   D7  |  D6   |  D5   |  D4   |  D3   |  D2   |  D1   |  D0   |  
  +----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+

[edit] GLCD

GLCD.jpeg

La vizualizaciòn de nuestro proyecto sera en un LCD gràfico(GLCD) de 240x128 podemos encontrarlo en internet por la referencia LCD240128A este GLCD utiliza un controlador de Texas Instruments t6963c este chip es bastante utilizado para el control de pantallas de cristal liquido, hace la comunicaciòn entre nuestro procesador y el GLCD interpretando los datos que enviamos desde el LM32 al t6963c

Para este periferico se programaran en hardware(HW) la comunicacion entre el procesador y el t6963c atravez del bus wishbone en software se programara el control del LCD mediante funciones que implementamos apartir del funcionamiento descrito en el datasheet del t6963c

[edit] Funciones pines de GLCD

los pines de control son activos bajo


[edit] Comandos de GLCD

la siguiente tabla nos muestra los comandos que tiene el t6963c para el GLCD apartir de estos comandos podemos configurar o inicializar el GLCD en el modo de trabajo deseado.

tabla comandos

[edit] Diagrama de bloques conexion wb_lcd (HW)

el wb_lcd_ctrl selecciona el bloque ram(fpga) o el bloque de estatus el cual lee un registro del GLCD este registro nos dice si podemos escribir en el. la memoria tiene un ancho del bus de datos de 10 bits de los cuales utilizamos 8bits para el envio de datos desde la memoria hacia el GLCD y los 2bits mas significativos van hacia el control del GLCD para decirle si escribimos un dato o un comando inicialmente este control esta configurado para activar la lectura del registro de status.



WB GLCD9.jpeg

[edit] RTL del periferico

Wb glcd rtl.jpeg

[edit] wb_lcd (HW)

para este periferico se crearon dos modulos independientes(ram,ctrl_glcd) que son controlados por wb_lcd, que es el que hace la comunicaciòn con el procesador LM32 por medio del bus wishbone.

para este periferico utilizamos la memoria ram de la FPGA la cual es de puerto dual, el Lm32 escribe en la memoria por el puerto A, el periferico tiene una maquina de control la cual lee la memoria por el puerto B independiente de la escritura del procesador sobre esta la lectura solo depende de la señal de estatus que no s da el GLCD la orden de recibir los datos.

[edit] Diagrama de estados para el control de memoria RAM FPGA y del GLCD

DIAGRAMA ESTADOS CTRL GLCD.jpeg

[edit] Diagrama de flujo modulos

[edit] Maquina de control

Maquina control.jpeg



[edit] ram y status_lcd

Ram & status.jpeg

[edit] ctrl_lcd

CTRL lcd9.jpeg

[edit] Diagrama de flujo wb_lcd

WISBONE LCD999.jpeg

[edit] Diagrama de flujo para el estado status

El registro de estatus necesita ser checkeado frecuentemente para tener buena comunicacion entre el LM32 y el GLCD en el mapa de memoria podemos ver la estructura del registro y la función de cada bit. El diagrama flujo correspondiente para checkear status se muestra a continuacion

Diagrama de flujo para leer "status"

[edit] Diagrama de flujo para el estado envio de datos o comandos

El controlador del GLCD t6963c tiene dos formas de recibir datos el envio de un dato se utiliza por lo general para configuración e inicializaciòn del GLCD el envio de dos datos se utiliza cuando se necesita escribir datos en el GLCD


DATOS SEND.jpeg

[edit] Pulsadores

Se utilizaron 4 pulsadores para controlar la dirección de la culebra. Éste módulo usa una interrupción para avisar al lm32 que el estado de los pulsadores ha cambiado.

[edit] Diagrama de Bloques

Diagrama de Bloques del periférico de control de los pulsadores

[edit] Diagrama de Estados

Diagrama de estados del módulo de los pulsadores

[edit] Diagrama de Flujo

Diagrama de flujo del control de los pulsadores

[edit] Lógica del Juego

La primera etapa del desarrollo de la lógica del juego se hecho para arquitectura x86 para facilitar la simulación y depuración, identificando rápidamente que periféricos nos hacen falta para el LM32.

[edit] Captura de Pantalla

Captura de la lógica del juego en funcionamiento.

Screenshot snake.png

[edit] Tareas por hacer

  • Usar los eventos de los pulsadores para manejar la culebra (Implementado)
  • Cambiar el timer de la librería SDL por el timer del LM32 (Implementado)
  • Incluir una rutina de generación de números aleatorios (Implementado)
  • Traducir las rutinas de dibujado en consola para dibujar en el LCD (Parcial)

[edit] PCB

PCB de la tarjeta

[edit] Esquematico

Esquematico de la tarjeta

[edit] Costos

se evaluó la realización del prototipo y la realización de 100 unidades de este.

Realización del prototipo:

Evaluación de las horas de trabajo:

El costo por hora de trabajo $25000

  • 12 horas de trabajo semanales
  • 3 integrantes
  • 16 semanas

Total: 576 horas de trabajo

Costo por hora laboral: $25.000 Valor de la mano de obra: $14.400.000 total de los 3 integrantes.

  • Por cada integrante: $4.800.000,($1.200.000 mensuales).

Componentes utilizados:

  • tarjeta SIE: $195.000
  • GLCD $200.000
  • PCB : $30.000
  • Tarjeta Hija $60.000
  • Otros(resistencias, pulsadores, condensadores): $30.000


Total prototipo: $14.925.000


Realización de 100 unidades:$51.500.000

Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export