El objetivo fundamental de este proyecto es desarrollar de un sistema en FPGA para explorar el uso de periféricos de la Nexys4/Basys3 como el display de siete segmentos y los switches. Es mandatorio leer los respectivos apartados del manual de la tarjeta de desarrollo. Para que el usuario por medio de teclas ingrese un numero en binario y este el FPGA realice una transformación de base
La función es leer los valores de los 16 conmutadores que se encuentran en la placa de la FPGA y sincronizarlos con el reloj interno de la misma. De esta forma, se puede controlar el modo de operación del sistema y la entrada binaria que se desea procesar. Los conmutadores 15 y 14 se usan como switches de selección de modo de operación. Estos switches permiten elegir entre cuatro modos posibles. Cada modo tiene una funcionalidad diferente y afecta a la forma en que se procesa la entrada binaria y se muestra en el display de siete segmentos. Los 14 conmutadores restantes, del 13 al 0, representan la entrada binaria que se va a procesar. Esta entrada puede ser un número entero sin signo, un número entero con signo en complemento a dos, un número fraccionario sin signo o un número fraccionario con signo en complemento a dos. Dependiendo del modo de operación seleccionado, la entrada binaria se convertirá a un valor decimal o hexadecimal y se mostrará en el display de siete segmentos.
A partir del diagrama de bloques anterior, se define que los parámetros de entrada del subsistema corresponde a los 16 switches en la tarjeta Nexys, apartando el 14 y 15 como switches de selección de modo de operación, la lectura en este módulo está basada en la "Tabla 1: Modos de operación." La salida de este subsistema corresponde a dos datos bin_a y bin_b que conecta con el siguiente subsistema de la transformación a BCD.
El subsistema de cálculo de código BCD es un componente esencial para el funcionamiento del sistema de visualización de números en el panel de siete segmentos. Este bloque recibe 14 bits que representa un número en binario y la convierte en cuatro dígitos de 4 bits cada uno que corresponden al código BCD que se debe mostrar en el panel.
El parámetro de entrada del subsistema corresponde a los 16 switches en la tarjeta Nexys, como en el subsistema anterior, y posteriormente se traduciran en codigo binario a BCD, mediante la utilización del Algoritmo Double Dabble, la salida de este subsistema corresponde al BCD de 4X4 que conecta con el siguiente subsistema de decodificado en display de 7 segmentos.
El algoritmo de double dabble es un método para convertir números binarios en notación decimal codificada en binario (BCD). El algoritmo consiste en desplazar los bits binarios hacia la izquierda uno por uno y suma tres a cada dígito BCD que sea mayor o igual a cinco. De esta forma, se logra que el valor BCD se duplique en cada iteración y se añada el bit correspondiente del número binario. La suma de tres asegura que el valor se lleve correctamente en base 10. El algoritmo se puede implementar con un pequeño número de puertas lógicas en hardware, pero con el costo de una alta latencia.
El algoritmo funciona de la siguiente manera: 1- Se supone que el número original que se va a convertir se almacena en un registro que tiene n bits de ancho. Se reserva un espacio auxiliar lo suficientemente grande como para contener tanto el número original como su representación BCD. Se necesita un máximo de 4 bits en binario para almacenar cada dígito decimal. 2- Luego se particiona el espacio auxiliar en dígitos BCD (a la izquierda) y el registro original (a la derecha). El espacio auxiliar se inicializa a ceros, y luego se copia el valor a convertir en el espacio del "registro original" a la derecha. 3- El algoritmo luego itera n veces. En cada iteración, cualquier dígito BCD que sea al menos 5 (0101 en binario) se incrementa en 3 (0011); luego todo el espacio auxiliar se desplaza un bit a la izquierda. 4- El incremento asegura que un valor de 5, incrementado y desplazado a la izquierda, se convierta en 16 (10000), lo que lleva correctamente al siguiente dígito BCD. 5- Esencialmente, el algoritmo opera duplicando el valor BCD de la izquierda en cada iteración y sumando uno o cero según el patrón de bits original. El desplazamiento a la izquierda realiza ambas tareas simultáneamente. Si algún dígito es cinco o más, se le suma tres para asegurar que el valor "lleve" en base 10.
La función es mostrar la información codificada en formato hexadecimal que proviene del subsistema anterior. Para ello, este subsistema toma los datos para los 4 dígitos de un bloque de 7 segmentos. Además cuenta con un temporizador que controla la frecuencia de actualización de los 4 dígitos, de forma que se evite el parpadeo y se facilite la lectura por parte del usuario. El subsistema se comunica con el resto del sistema mediante un bus de datos de 8 bits y un bus de control de 4 bits.
El parámetro de entrada del subsistema corresponde a los 16 switches en la tarjeta Nexys, como en los dos subsistemas anteriores, la salida de este subsistema de cálculo de código BCD se encuentra mostrada en el BCD de 4X4, esta se muestra al desplegar en los dispositivos de 7 segmentos disponibles en la placa por medio de los catodos. De la misma manera se tiene una LED cuya función es la combrobación del boton reset utilizado.
Los diagramas de estado de las máquinas de estados finitos (FSM) son una forma de representar gráficamente el comportamiento de un sistema que puede estar en uno de varios estados posibles. Las transiciones entre estados se representan por flechas con una etiqueta que indica la condición o evento que provoca el cambio de estado. Los diagramas de estado de las FSM permiten visualizar fácilmente el flujo de control y las acciones que se realizan en cada estado del sistema.
Obtenención de la simulacion a nivel RTL a partir de la simulación del Testbench con un ejemplo implementado los subsistemas.
A partir de la imagen anterior se puede explicar que corresponde al el Waveform obtenido por Vivado sobre el ejemplo del resultado que se genera a partir del subsistema de transformacón a BCD.
• Instalación del programa Vivado: En primer lugar un problema qeu se generó al inicio del proyecto corresponió a la instalación de Vivado 2018.3 debido a la validación de la cuenta, ya que no dejaba instalarlo desde los correos institucioneales, sin embargo pudo ser resuelto al utilizar el correo personal.
• Programación en el programa Vivado: Otra dificultad que se generó correspondió a la correcta utilización del programa Vivado, relacionado con aprender el funcionamiento de Vivado, la principal dificultad estuvo en la utilizacion de Visual Studio para ejecutar el código de Vivado, sin embargo se programó directamente en el programa Vivado.
• Banco de pruebas y testbenches requeridos: Otra inconveniente que se presentó fue durante las Simulaciones RTL, ya que no se generaban correctamente las simulaciones del testbench y se generaron dificultad en el acoplamiento de los módulos de cada subsistema, este error generó atrasos en la realización de las pruebas necesarias.