Está en la página 1de 13

Sistemas digitales programables-MUISE P5 Daniel Vidal León – Jorge Navarro Deltell

En la siguiente memoria se mostrarán y explicarán individualmente cada uno de los módulos


utilizados, para finalmente visualizar el módulo de Top Level en el que convergen todos.

Introducción
En primer lugar, para esta tarea 5 se proponía realizar un diseño con temática libre en el que se
utilizara todo lo aprendido a lo largo de las diferentes sesiones de prácticas. En este caso, se ha
realizado un diseño de una versión del popular juego “Simon” pero sin que realice sonidos. El
juego trata de que se muestre un patrón de colores, el cual habrá que memorizar, para
posteriormente pulsar en la pantalla en los respectivos colores.

Dentro de este sencillo diseño, se utilizan los siguientes conocimientos de las diferentes
prácticas:

- Tarea 2: Máquinas de estado.


- Tarea 3: Control y visualización en una pantalla.
- Tarea 4: Comunicación serie con la pantalla para recibir las coordenadas de pulsación.

Máquina de estados combinaciones


En primer lugar, se muestra el diagrama de bloques de la máquina de estados de las diferentes
combinaciones:

El juego de luces consta de 4 combinaciones distintas de luces, 4 patrones distintos. La finalidad


de esta máquina de estados es la de indicar el orden en el que se tienen que ejecutar dichas
combinaciones, esperando a que se reciba la señal de finalización de una para dar paso a la
siguiente. O bien que se haya realizado un reset, mediante el cual se volverá al principio y se
ejecutará la primera combinación.

A continuación, se puede ver el código de la máquina de estados de las combinaciones:


El funcionamiento de la máquina de estados es simple. Por un lado, en función del estado en el
que se encuentra, N_patron tendrá un valor u otro, el cual recibirán tanto la máquina de estados
de secuencias como la máquina de estados de patrones. Y, por otro lado, se cambiará al estado
siguiente si se recibe la señal de que se ha finalizado la secuencia en curso.

Máquina de estados secuencias


En primer lugar, se muestra el diagrama de bloques de la máquina de estados de las diferentes
secuencias:

En este caso, se puede ver el diagrama de la secuencia de la combinación uno. Siendo esta
replicada para cada una de las combinaciones, ya que parten del mismo funcionamiento, pero
cada combinación con sus propias coordenadas objetivo marcadas por el patrón definido para
cada una.

En primer lugar, se recibe el número de patrón que se va a seguir. Y se procede a habilitar la


señal ena_patron mediante la cual se habilitará el funcionamiento de la máquina de estados de
patrones. Una vez finalizada la muestra del patrón a seguir y se reciba la señal de fin_patron,
para ir avanzando de estado en estado habrá que ir pulsando en la pantalla en las coordenadas
correspondientes a cada uno de los objetivos marcados por el patron.

Para ello, se explicará la distribución de las coordenadas de la pantalla y los patrones de cada
una de las secuencias:
Como se puede ver, las coordenadas de la pantalla vienen dadas en formato Hexadecimal,
pudiendo ser desde 0 hasta FFF. Lo cual en formato decimal sería desde 0 hasta 4095, quedando
de la siguiente manera:

En el diagrama de bloques de la máquina de estados de las diferentes secuencias, por no saturar


la imagen con cada una de las coordenadas, se han puesto como condición de transición al
siguiente estado las siglas P1C1, P1C2, etc. Haciendo referencia a Patrón 1 Coordenadas objetivo
1, Patrón 1 Coordenadas objetivo 2, etc. Y a continuación se dejarán fijadas tanto las
coordenadas objetivo de cada una de las posibles combinaciones de columna y fila objetivos,
como los patrones seguidos en cada una de las secuencias.

En primer lugar, las coordenadas objetivo de cada una de las combinaciones:

Columna Fila Rango coordenada X Rango coordenada Y


0 0 {2175,3967} {77,1288}
0 1 {128,1919} {77,1288}
1 0 {2175,3967} {1442,2655}
1 1 {128,1919} {1442,2655}
2 0 {2175,3967} {2807,4018}
2 1 {128,1919} {2807,4018}

Y los patrones de cada una de las combinaciones son los siguientes:

Patrón 1 Patrón 2 Patrón 3 Patrón 4


Objetivo 1 00 11 21 00
Objetivo 2 20 01 20 01
Objetivo 3 11 21 11 10
Objetivo 4 21 00 11 11
Objetivo 5 00 11 10 20
Objetivo 6 01 10 00 21

Una vez mostrados las coordenadas y los distintos objetivos a pulsar, volviendo al diagrama de
bloques de la máquina de estados de las diferentes secuencias, cada vez que se acierte en las
coordenadas correspondientes al estado en el que se encuentre se avanzará al siguiente y se
activará uno de los LEDs por cada acierto, hasta completar el patrón y tener los 6 LEDs activados.
Una vez suceda esto, se realizará un tiempo de espera para que el usuario le de tiempo a poder
ver los LEDs encendidos y saber que ha completado la secuencia. Una vez finalizado dicho
tiempo de espera, se activará la señal de fin de secuencia para que se inicie la siguiente.
A continuación, se puede ver el código de la máquina de estados de las secuencias:
Dado que ya se ha realizado la explicación del funcionamiento general de la máquina de estados
antes, ahora se procederá a dar pequeños matices en relación al código de programación.

En primer lugar, se definen los estados para cada una de las secuencias. A continuación, se
define el contador para la espera que se realizará al finalizar la secuencia, el cual tiene de módulo
150 millones de cuentas para que la espera sea de 3 segundos (dado que el reloj de la placa es
de 50 MHz). En cuanto a la lógica del cambio de estado siguiente, en primer lugar, se recibe el
número de patrón a seguir por parte de la máquina de estado de las combinaciones, y en función
de su valor se irá al primer estado de la secuencia correspondiente. Dado que el diagrama de
bloques hacía referencia a la primera secuencia, se ha añadido el código correspondiente a dicha
secuencia. Ahí se puede ver como si el valor de coordenadas recibido por el convertidor ADC se
encuentra dentro de dichos rangos de valores, se habrá acertado el patrón y se procederá al
siguiente objetivo. Por último, la lógica de cambio de salidas se puede ver que es la misma que
la vista en el diagrama de bloques de secuencias visto anteriormente.
Por último, añadir una captura de una simulación realizada mediante TestBench de dicho
módulo, en el que se puede visualizar el funcionamiento de la máquina de estados al introducirle
las coordenadas manualmente mediante dicho TestBench (el módulo del contador en este caso
es de 4 cuentas):

Máquina de estados patrón


En primer lugar, se muestra el diagrama de bloques de la máquina de estados de los diferentes
patrones:

En este caso, se puede ver el diagrama de la secuencia del patrón uno. Siendo esta replicada
para cada uno de los patrones, ya que parten del mismo funcionamiento, pero cada patrón con
sus propias coordenadas objetivo.

En primer lugar, se reciba el número de patrón que se va a seguir, en este caso el 0 hace
referencia al primer patrón. Por lo que se procederá a enviar los valores de a y b, y se habilitará
el funcionamiento del contador mediante el cual se establecerá el tiempo que se muestrea cada
uno de los objetivos del patrón. Las variables a y b, hacen referencia al número de columna y de
fila, respectivamente, que deberá de resaltarse en verde por parte del módulo de visualización
de la pantalla. Finalmente, una vez finalizado el patrón, se activará la señal fin_patron para
informar al módulo de las secuencias de que puede continuar con la secuencia y la búsqueda de
acertar las coordenadas por parte del usuario.

A continuación, se puede ver el código de la máquina de estados de los patrones:


En primer lugar, se definen los estados para cada uno de los patrones. A continuación, se define
el contador para la espera que se realizará durante la muestra de cada uno de los objetivos del
patrón, el cual tiene de módulo 100 millónes de cuentas para que la espera sea de 2 segundos
(dado que el reloj de la placa es de 50 MHz). En cuanto a la lógica del cambio de estado siguiente,
en primer lugar, se recibe el número de patrón a seguir por parte de la máquina de estado de
las combinaciones, y en función de su valor se irá al primer estado del patrón correspondiente.
Dado que el diagrama de bloques hacía referencia al primer patrón, se ha añadido el código
correspondiente a dicho patrón. Ahí se puede ver como simplemente espera a que se cumpla el
tiempo de muestra de cada uno de los objetivos del patrón marcado por el módulo del contador
hasta llegar el último estado en el cual se informa de la finalización del patrón a la máquina de
estados de las secuencias y vuelve al estado inicial a la espera de que sea necesario volver a
mostrar de nuevo un patrón. Por último, la lógica de cambio de salidas se puede ver que es la
misma que la vista en el diagrama de bloques de patrones visto anteriormente.

Además, añadir que para la habilitación del funcionamiento de este módulo (ENABLE) estará
vinculado con la variable ena_patron del módulo de la máquina de estado de secuencias. De
esta manera, únicamente funcionará el módulo cuando sea necesario el muestreo del patrón.
Estando siempre preparado en la etapa inicial para su correcto comienzo de etapas.

Por último, añadir una captura de una simulación realizada mediante TestBench de dicho
módulo (el módulo del contador en este caso es de 4 cuentas):
Visualización en pantalla
Para la visualización de la pantalla, la disposición de los colores y las dimensiones serán las
siguientes:

Y el módulo utilizado es el programado en la práctica 3 de esta asignatura, con ciertas


modificaciones que se pueden ver a continuación:

Se han añadido las entradas a, b y patron_ena. A continuación de la siguiente imagen se


explicará sus utilidades:
En primer lugar, se designan las coordenadas de los distintos rectángulos de colores, así como
las líneas separadoras. Y a continuación, ya se designan las dimensiones de los recuadros que
rodean los rectángulos de colores. Para esto, por un lado, para que solo se visualice en verde el
recuadro mientras se muestra el patron, es necesario que la variable patron_ena esté activa a
1. Y, por otro lado, se dejan las diversas dimensiones del recuadro de la posición 0.0, para
posteriormente multiplicarlo por el valor que tengan las variables a y b, las cuales indican el
número de columna y de fila a remarcar respectivamente. De esta manera, ya que los recuadros
tienen las mismas dimensiones y la misma separación, al multiplicar dichas separaciones por los
valores de a y b solamente saldrá remarcado en verde el rectángulo que toque. Y por último, el
resto de coordenadas que no tengan cabida en las condiciones expuestas anteriormente se les
aplicará el color blanco.

Por último, se mostrarán dos imágenes de la simulación de dicha visualización de pantalla.


Siendo la primera, la visualización de uno de los objetivos del patrón, y la segunda, la pantalla
por defecto una vez haya terminado de mostrar el patrón de colores:
Comunicación serie con la pantalla
El módulo de comunicación serie con la pantalla para recibir las coordenadas de pulsación y
mostrar dichas coordenadas mediante los dysplays 7-segmentos se reutilizará del programado
a lo largo de la práctica 4 de esta asignatura. Mediante dicho módulo, se obtienen las
coordenadas que posteriormente son utilizadas por la máquina de estados de secuencias, como
se ha explicado anteriormente. Y a su vez, se aprovecha la funcionalidad de la visualización
mediante los displays 7-segmentos para comprobar donde se está pulsando en la pantalla.

Módulo general (Top Level)


Para finalizar, se puede ver como queda el diseño final del módulo Top Level en el cual se
encuentran los módulos explicados a lo largo de la memoria unidos unos con otros para su
correcto funcionamiento global:
Los cables que unen los módulos son wires, las flechas entrantes a los módulos son entradas del
módulo general y las flechas salientes de los módulos son salidas del módulo general.

A continuación, se puede ver el código del módulo general:

Se puede ver, que simplemente se asignan las entradas, salidas y wires correspondientes a cada
uno de los módulos tal y como se disponía en el esquema mostrado al comienzo.

También podría gustarte