Snake
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
[edit] Diagrama de Bloques
[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
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
[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.
[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.
[edit] RTL del periferico
[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
[edit] Diagrama de flujo modulos
[edit] Maquina de control
[edit] ram y status_lcd
[edit] ctrl_lcd
[edit] Diagrama de flujo wb_lcd
[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
[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
[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
[edit] Diagrama de Estados
[edit] Diagrama de Flujo
[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.
[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
[edit] Esquematico
[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







