Sei sulla pagina 1di 20

Primer proyecto

Diseño de sistemas digitales


1º Breayann Ortiz Aldana 2º Daniel Naranjo Imbachi 3er Juan Sebastian Mora Zarza
dept. de electronica dept. de electronica dept. de electronica
Bogotá, Colombia Bogotá, Colombia Bogotá, Colombia
breayanortiz@javeriana.edu.co d-naranjo@javeriana.edu.co morazjs@javeriana.edu.co

Abstract—En presente documento se presenta el desarrollo de un sistema digital que simula una calculadora, implementada en
lenguaje VHDL y desarrollada sobre una FPGA. Primero se presenta el diagrama en bloques del sistema, y posteriormente se lleva a cabo
la explicación detallada de este, con el fin de exponer con claridad el funcionamiento del sistema. Para finalizar se realizan una serie de
pruebas al software y al hardware, con esto se sustenta la validez del contenido propuesto en el documento.

Keywords—FPGA, VHDL.

I. INTRODUCCIÓN

La finalidad del presente documento es explicar de la mejor manera el diseño propuesto por un grupo de estudiantes para dar
solución a un proyecto planteado en la asignatura Diseño de Sistemas Digitales, teniendo presente lo mencionado se reconoce que no
se profundizara en temas básicos, como el funcionamiento de las compuestas lógicas.
El proyecto asignado consiste en implementar una calculadora que este en la capacidad de desarrollar 3 tipos de operaciones
algebraicas, estas son suma, resta y multiplicación. El sistema propuesto recibe por medio de 10 interruptores la información necesaria
para operar 2 números de 4 bits. La disposición de los 10 interruptores define el tipo de operación y el valor de los 2 números a operar.
La forma en que se presenta la información es mediante un display 7 segmentos de 4 dígitos que está incorporado a la tarjeta. Ya que
la solución se implementa en una FPGA se realizan procesos en paralelo, debido a esto existen múltiples formas de abordar un
diagrama de bloques que explique correctamente la solución propuesta. El diseño que se siguió se presenta en la figura 1, el cual esta
distribuido de forma familiar para cualquier tipo de lector, ya que normalmente los diagramas de sistemas comprenden sus entradas
a la derecha y las salidas a la izquierda.
Los resultados obtenidos fueron satisfactorios ya que cumplen con los requerimientos del proyecto y presentan el comportamiento
planteado durante la etapa de diseño.
El documento esta distribuido de tal forma que se presenta una vista general del diseño propuesto y luego se realiza un análisis a
fondo de este. Con el fin de aclarar cualquier duda que el lector pudiese tener se asignaron colores a parámetros importantes en el
sistema mostrado en la figura 1, de esta forma será fácil reconocer la correspondencia de un parámetro con otro. Una vez se explica
la totalidad del sistema se procede a exponer los resultados obtenidos al ejecutar distintas pruebas en el software y el hardware.

XXX-X-XXXX-XXXX-X/XX/$XX.00 ©20XX IEEE


II. DISEÑO DEL SISTEMA

El diseño del sistema se presenta en la Fig.1, esta figura resulta de gran importancia, pues en gran parte del documento se hace
referencia a esta debido a que se mantienen los colores designados para cada bloque durante la explicación de estos.
En la siguiente figura se observa el diagrama en bloques que describe el diseño general del sistema.
Diagrama en bloques.

Fig. 1 Diagrama en bloques general del sistema.

El diagrama mostrado en la Figura 1 comprende 3 etapas, las cuales contienen diferentes subsistemas encargados de adecuar las
señales que llegan o salen a una determinada etapa. La forma en la que está distribuido el diagrama de la figura 1 permite al lector
comprender de forma secuencial el funcionamiento del sistema, pero no implica que la ejecución de este se desarrolle de forma
secuencial.

Para dar una explicación poco detallada del diagrama en bloques general del sistema se comenzará
definiendo 3 etapas principales, las cuales interactúan de tal forma que cumplen las pautas descritas
para el presente proyecto. La etapa 1 se define como el bloque de entradas, este bloque contiene las
señales de control de todo el sistema. Estas señales proceden de interruptores propios de la tarjeta, en
total 10 interruptores, los cuales se han distribuido de forma estratégica para que existan 4 grupos de
interruptores, estos grupos proporcionaran las 4 entradas básicas del sistema. El primer grupo de
interruptores se denomina en el diagrama de bloques con el nombre de Switch 1, este bloque contiene
un vector de 4 bits, estos 4 bits están definidos por las posiciones de los primeros 4 interruptores. De
igual forma sucede con el bloque o subsistema denominado Switch 2, el cual contiene la información
perteneciente al siguiente grupo de 4 interruptores. Para el Switch 3 y el Switch 4 se tienen valores
binarios, estos valores binarios son proporcionados por los dos interruptores restantes. La función de
Switch 1 es proporcionar una entrada de 4 bits que será interpretada como un numero de 4 bits, de
igual forma pasa con Switch 2. La función de Switch 3 y Switch 4 es determinar el tipo de operación
a realizar con los valores presentes en Switch 1 y Switch 2. El tipo de operación a efectuar según el
valor de Switch 3 y Switch 4, el cual puede ser suma, resta o multiplicación. En la figura 2 se puede
observar la etapa 1 del sistema.

Fig. 2. Etapa 1 del


sistema
Continuado con la descripción general del sistema se define
la etapa 2 como el conjunto de operaciones algebraicas
realizadas en el sistema. La etapa 2 está conformada por los
bloques de SUMA, RESTA y MULTIPLICACIÓN, también
hace parte de la etapa 2 el bloque CONVERTIR. Como se
puede apreciar en la figura 1 la entrada a los 3 tipos de
operaciones es directamente Switch 1 y Switch 2, con lo cual
se hace evidente que se tendrán a la entrada de cada bloque de
operación 2 números de 4 bits cada uno. Cuando se ingresa al
bloque SUMA o RESTA, se ejecuta la respectiva operación
algebraica (más adelante se presentará con más detalle el
funcionamiento de cada bloque). Se puede observar que
siguiendo el planteamiento de la figura 1, se realizaran las 3
operaciones sin importar el valor en el que se encuentren las
variables de entrada al sistema, Switch 1 y Switch 2. Una vez
operados los valores que ingresan a cada bloque, se obtiene el
resultado de la operación, y este resultado es asignado a una
variable, en el caso de la suma se asigna a la variable Ans_Sum,
y en el caso de la resta se asigna a la variable Ans_Res, los
tamaños de estas dos últimas variables son 4 bits, a diferencia
de MultiFin, que contiene el resultado de la operación
multiplicación y es de tamaño 8bits. En la figura 3 se aprecian
las variables mencionadas. Fig. 3. Etapa 2 del sistema
Un punto importante para resaltar en la etapa 2 del sistema, es que se debe utilizar un bloque adicional, este es el bloque llamado
CONVERTIR el cual se encarga de transformar un numero de 4 bits a uno de 8 bits. En la figura 3 se pueden observar las variables
Ans_Sum y Ans_Res las cuales son de tamaño 4 bits a diferencia de MultiFin. La razón de utilizar el bloque CONVERTIR radica
en el hecho de que a la siguiente etapa recibe números de tamaño de 8 bits.

La etapa 3 es la salida del sistema, la cual se encarga de


tomar la decisión respecto a la operación aritmética a realizar,
esta etapa contiene un bloque de gran importancia llamado
SEPARADOR, el cual se encarga de encontrar las unidades y
decenas del número que reciba a la entrada, en la figura 4 se
aprecia que la variable que llega a SEPARADOR es A3.
El siguiente bloque de gran importancia es DECISIÓN, el
cual determina qué tipo de operación se tomará, ya que las 3
operaciones se realizan siempre sin importar que tipo de
operación se selecciones con los interruptores, es por esto que
el bloque de DECISIÓN es fundamental. Al bloque de
DECISIÓN llegan las señales necesarias para que este realice
una serie de condiciones y seleccione a que operación realizada
asignar el valor de la variable A3 la cual contiene el valor de la
operación ya realizada.

Ya con el valor que se necesita según las posiciones de los Fig. 4. Etapa 3 del sistema
interruptores, la variable A3 que contiene el resultado de la
operación se envía a SEPARADOR el cual, como ya se
describió, separa en 2 variables UNIDADES y DECENAS, las respectivas unidades y decenas del número que está asignado en A3.
Una vez se tiene el valor de las unidades y decenas, solo queda realizar la visualización en el display 7 segmentos, para esto el bloque
VISUALIZAR DISPLAY requiere de un grupo de señales que le brindan la información necesaria para asignar a cada digito del
display el numero correspondientes, por ejemplo, es necesaria la señal Switch 1, para poder presentar el numero de 4 bits que este
asignado en esta misma señal.
La explicación detallada de cada bloque en el sistema de la figura 1 se hará de tal forma que se conserve los colores presentados
en la figura 1, con el fin de facilitar la comprensión de cada uno de los bloques y la interconexión de estos en el sistema. Para dar
explicación detallada del sistema y su respectiva estructura en código se comienza explicando la entidad más general del código,
Visualizar, la cual contiene a las demás entidades del sistema.

A. Entidad Principal
Visualizar realiza las diferentes operaciones aritméticas, realiza la respectiva decisión y representa en el display 7 segmentos los
correspondientes dígitos. La siguiente figura contiene parte del código correspondiente a la entidad Visualizar.
Visualizar

Fig. 5. Código correspondiente a la definición de la entidad Visualizar.

En la anterior figura se observa que Visualizar es la entidad más general o principal, ya que esta recibe todas las entradas al
sistema (interruptores) y entrega todas las salidas del sistema (números correspondientes a cada display), se puede apreciar la
correspondencia entre las entradas y salidas con el diagrama del sistema general. Visualizar ejecuta las tres operaciones, sin importar
el estado de los interruptores, y asigna el valor de estos resultados en 3 variables, el resultado de la suma lo asigna a la señal Ans_Sum,
la resta a la señal Ans_Res y el resultado de la multiplicación a la señal Multifin. Las siguientes figuras ilustran estas tres asignaciones
al realizar las correspondientes operaciones, suma, resta o multiplicación.
Como se puede observar en la Fig. 6. Realizar_Suma se tiene como entradas el primer grupo de 4 interruptores, y el segundo
grupo de 4, de igual forma como se presentó en el diagrama general del sistema. Aunque en el código no exista una entidad llamada
Suma, la entidad Product realiza el papel de esta, además se puede observar que se realiza un llamado a la entidad Convertir.
Realizar Suma.

Fig. 6. Realización de la suma dentro de la entidad Visualizar,


se llama a Product.
De igual forma que con la suma, el bloque o entidad de resta recibe los valores de las señales Switch 1 y Switch 2. La diferencia
del bloque suma con el bloque resta es que en la implementación del código existe una entidad específica para resta.
Realizar Resta

Fig. 7. Realización de la resta dentro de la entidad Visualizar.

El bloque de multiplicación se presenta en la figura 8, donde se observa que se envían a la entidad Multiplicación los valores
presentes en los interruptores (4 bits) y se obtiene la multiplicación en la señal Multifin, tal y como se presenta en el diagrama de la
figura 1. Un dato a resalta es que en el bloque de multiplicación la salida, Multifin, es una señal de 8 bits con lo cual no es necesario
llamar a la entidad convertir.
Realizar Multiplicación

Fig. 8. Realización de la multiplicación dentro de la entidad Visualizar

La entidad de suma tiene la ventaja de que el resultado es una señal de 8 bits, con lo cual no es necesario realizar el llamado de la
entidad Comparador.
Siguiendo el planteamiento del código y la estructura del diagrama mostrado en la figura 1 se procede a describir el código
implementado para el bloque decisión la siguiente figura contiene el código realizado para tomar una decisión basada en las señales
Switch 3 y Switch 4.
Tomar Decisión

Fig. 9. Código con la lógica utilizada para decidir el valor de A3.


El bloque de decisión en el diagrama general recibe los 2 Switches de control, que definen el tipo de operación a realizar, y recibe
las tres señales de salida de los tres bloques de operaciones aritméticas, con lo cual Decisión realiza el análisis lógico mostrado en la
figura anterior para decidir qué valor asignar a la señal A3, ya que esta señal es la que se representa como respuesta en el display 7
segmentos. De igual forma como sucede con suma no se tiene una entidad llamada Decisión dentro del código, pero se realiza un
Process (process_Sum) que sería el equivalente al bloque decisión.

Con el valor de A3 definido por los 2 Switches de control tan solo queda representar el valor de este en el display, con lo cual se
hace necesario realizar el llamado de la entidad separador, con el fin de obtener las decenas y unidades de A3, y así proceder a mostrar
la correspondiente representación en decimal del valor binario contenido en A3.
Separador

Fig. 10. Llamado de la entidad Separador dentro de la entidad Visualizar.

Como se puede apreciar esta sección de descripción aun no alcanza un nivel de detalle muy avanzado, ya que se optó por explicar
el sistema desde lo general a lo particular, con lo cual la estructura precisa de sumador se mostrará más adelante, de igual forma con
la resta y la multiplicación.
Con el valor de A3 ya asignado solo queda presentar este valor en el display junto con los valores de las entradas de las señales
Switch 1 y Switch 2. Para esto se presenta en dos partes el bloque Visualizar Display, que de igual forma que pasa con la suma y
decisión no existe una entidad dentro del código que se llame Visualizar Display, pero para estructurar el código se optó por
seccionarlo de esta forma. Las siguientes figuras ilustran el código implementado para realizar la visualización.
Visualizar_Display_1

Fig. 11. Código implementado para realizar la visualización en el digito 1 y 2 del display.
En la Fig. 11. Visualizar_Display_1 se observa la asignación de los valores correspondientes a los dígitos del display, por ejemplo,
al display numero 1 (sseg1) es asignado un valor dependiendo el valor (4 bits) que se encuentre en la entrada Switch 1.
Visualizar_Display_2

Fig. 12. Código implementado para realizar la visualización de la respuesta A3 en el digito 3 y 4 del display.

La forma en la que se realiza la visualización no es muy diferente a la implementación de la Fig. 11. Visualizar_Dsiplay_1, ya
que lo realmente complicado se encuentra en la entidad llamada Separador. Se puede observar en las dos anteriores figuras que existe
un caso al cual le es asignado el valor de “0000110” que corresponde a imprimir o presentar una letra E en el digito del display.
A continuación, se desarrolla la explicación detallada sobre el funcionamiento de cada uno de los bloques que conforman el
diagrama de la figura 1, esta explicación está orientada al funcionamiento del código que se realizó.

B. Descripción de Bloques:

1) suma

Este bloque se encarga de realizar una suma de nBits según como sea llamada (en el código lleva el nombre de Product), tiene
como entrada dos vectores A y B que son de tamaño n (hay que tener en cuenta que estos vectores deben ser del mismo tamaño), y
un carry que es llamado C, el cual en general se inicializa en 0. Como salida tiene un vector llamado Sum que es del mismo tamaño
de los vectores de entrada A y B, y por último un Bit llamado Cout, el cual se encarga de guardar un 1 cuando la suma tiene Overflow.

Fig. 13. Declaración del programa Product.


Fig. 14. Llamado del programa Product, en el caso de la izquierda con 4 Bits, y en la derecha con 6 Bits.

Esta suma de nBits se realiza Bit a Bit y para ello llama al programa Full, el cual hace una suma entre dos Bits.

Fig. 15. Llamado del programa Full, y realización de Suma Bit a Bit.

2) FullAdder

Es un programa que recibe dos bits, que en este caso es A y B, además recibe un bit llamado Cin que corresponde a un carry, y
como resultado da dos señales, una denominada suma, el cual es el resultado, y otra llamada Cout que corresponde al Overflow.

Fig. 16. Esquemático del programa Full.


Fig. 17. Esquemático de Product cuando es llamado con nBits igual a cuatro.

3) Resta

Este bloque se encarga de realizar una resta de nBits según como sea llamada (en el código lleva el nombre de Resta), tiene como
entrada dos vectores A y B que son de tamaño n (hay que tener en cuenta que estos vectores deben ser del mismo tamaño). Como
salida tiene un vector llamado Res que es del mismo tamaño de los vectores de entrada A y B.

Fig. 18. Declaración del programa Resta.

Como en el proyecto únicamente se realiza resta de números de 4 Bits, se asume este como el tamaño típico para realizarla.

Fig. 19. Llamado del programa Resta, de tamaño 4 Bits.

El programa Resta tiene otros subprogramas, ellos son Complemento, Convertir, Comparador y Product, los cuales se utilizan de
la siguiente manera, se hace el complemento A2 de las dos entradas.

Fig. 20. Llamado del programa complemento el cual halla el complemento A2 del primer y el segundo número.

Hay que hacer un comparador para verificar cuál de las dos entradas es mayor, pero como comparador solo recibe vectores de 8
Bits hay que convertir los vectores obtenidos de los complementos que son de 4 Bits a 8 Bits, para ello se usa a Convertir.

Fig. 21. Llamado del programa convertir, que convierte las entradas en vectores de 8 Bits.
Fig. 22. Llamado del programa comparador, que compara las entradas, para saber cuál es mayor o si son iguales.

Se es necesario crear un process para asignar las entradas que van a realizar la resta, la cual se hace llamando al programa Product,
dándole como parámetros una de las variables de la entrada y el Complemento A2 de la otra, para por último asignar el resultado a la
variable Res.

Fig. 23. Process decide qué valor colocar en el minuendo y el sustraendo.

Fig. 24. Llamado del programa Product, el cual me da el resultado de la resta.

Cada uno de los subprogramas se explica más adelante especificando cuál es el funcionamiento de cada uno y con qué propósito
es que se usa.
4) Complemento

Es un programa que recibe un vector de 4 Bits, y como resultado da un vector de 4 Bits correspondiente al Complemento A2 de
un número binario. El complemento A2 de un número binario es la representación negativa de ese número.

Fig. 25. Declaración del programa Complemento.

Tal como se mostró anteriormente complemento se utiliza exclusivamente cuando se realiza la resta, su funcionamiento radica en
recibir un número de 4 Bits negarlo y sumarlo con “0001”, ya que de esta manera es como se obtiene el complemento A2 de un
número Binario.

Fig. 26. Forma de hallar el complemento A2 de un número binario de 4 Bits.

5) Convertir

Es un programa que recibe un vector de n Bits según como sea llamado (en el código lleva el nombre de Convertir), y como
resultado da un vector de 8 Bits, esta conversión se realiza, ya que hay varios programas que utilizan como entradas vectores de 8
Bits, los cuales en el proyecto son Comparador y Separador.

Fig. 27. Declaración del programa Convertir.

Lo que realiza convertir es igualar Bit a Bit la información que hay en el vector de entrada en el vector de salida, desde el Bit
menos significativo hasta el bit más significativo.

Fig. 28. Procedimiento realizado en el programa Convertir.


6) Comparador
Es un programa que recibe dos vectores de 8 Bits los cuales son x y y, las salidas son dos Bits, uno de los cuales indica si x es
mayor a y, el otro por su parte indica si los dos vectores anteriores son iguales.

Fig. 29. Declaración del programa Comparador.

Fig. 30. Circuito usado en el programa Comparador.

Como ya se explicó cada sub programa que está contenido en resta se muestra a continuación en la Fig. 31 el esquemático completo
del programa Resta.

Fig. 31 Esquemático general del programa Resta.


7) Multiplicacion

Este bloque se encarga de realizar una multiplicación de 4 Bits (en el código lleva el nombre de Multiplicación), tiene como
entrada dos vectores A y B que son de tamaño 4 Bits. Como salida tiene un vector llamado ans_Multi que es un vector de 8 Bits

Fig. 32. Declaración del programa Multiplicación.

El funcionamiento de este programa está basado en la Fig. 33. donde se realizan cuatro multiplicaciones parciales, luego se hacen
tres sumas parciales con las cuales tendríamos el resultado Final.

Fig. 33. Idea utilizada para realizar la implementación de la Multiplicación.

En el código se realizan los productos parciales correspondientes, de tal manera que el primer y el segundo producto tengan un
vector de salida de 5 Bits, el tercer producto de 6 Bits, y por último el cuarto producto de 7 Bits.
Para la suma entre el primer y el segundo producto parcial, se necesita concatenar un cero antes del primer producto parcial, y de
igual manera concatenar un cero después del segundo producto parcial, obteniendo los vectores de 5 Bits.
Para obtener en el tercer producto un vector de 6 Bits se concatenan al final dos ceros, y en el cuarto producto se concatenan tres
ceros para obtener un valor de 7 Bits, todo lo anterior se observa de manera clara en la Fig. 34.

Fig. 34. Productos parciales.

Para realizar las sumas parciales se debe tener en cuenta que los dos sumandos deben ser del mismo tamaño, por eso al final de cada
suma parcial se concatena el Cout (correspondiente al overflow), con el resultado de la suma parcial anteriormente realizada, de
esta manera, la primera suma es de 5 Bits, la segunda es de 6 Bits y la tercera es de 7 Bits, para el resultado final se concatena el
resultado de la tercera suma parcial con el Cout, obteniendo un vector de 8 Bits.
El código de las sumas parciales se evidencia en la Fig. 35.
Fig. 35. Código de las sumas parciales usadas para dar el resultado del programa Multiplicación.

Fig. 36. Esquemático general del programa Multiplicación.

En la Fig. 36. se puede encontrar el esquemático general del programa Multiplicación, las compuertas AND representan los
productos parciales, y los bloques Verdes representan las sumas Parciales.
8) Separador

Este bloque se encarga de “procesar” el resultado de las operaciones Suma, Resta y Multiplicación para convertirlo en Unidades
y Decenas (en el código lleva el nombre de Separador), tiene como entrada el vector NUM1 que es de tamaño 8 Bits, los vectores
sw1 ysw2 que son de 4 Bits, y por último los Bits sw3 y sw4. Como salida dos vectores de 4 Bits llamados Unidades y Decenas.

Fig. 37. Declaración del programa

El programa Separador tiene otros subprogramas, ellos son Convertir, Comparador y Product, los cuales se utilizan de la siguiente
manera: Se generan varios vectores para realizar comparaciones y “restas”, dichos vectores se pueden ver en la Fig. 38.

Fig. 38. Vectores Generados.

Con ayuda del programa Comparador se verifica cuando NUM1 es mayor o igual a cada uno de los vectores generados que van
en la primera columna de la Fig. 39 desde NOVENTA hasta DIEZ, dicha comparación se realiza de la siguiente manera.

Fig. 39. Ejemplos del uso de Comparador.

Para en el caso de la resta se necesita saber si el minuendo es mayor al sustraendo, para dar un resultado positivo, de lo contrario
el resultado de la operación sería negativo, de esta manera se hace el código respectivo. Igual que en la resta para usar el programa
Comparador se requiere que los Vectores sean de 8 Bits, entonces hay que convertir los vectores de sw1 y sw2 que son de 4 Bits a
8Bits haciendo uso del programa Convertir. Este procedimiento se observa en la Fig. 40
Fig. 40. Código usado para comparar los vectores de entrada sw1 y sw2.

Por último, se asigna el valor del vector DECENAS con ayuda de WHEN - ELSE que verifica el resultado obtenido en las
comparaciones hechas con los vectores generados, y además si la calculadora está en modo resta (sw4=1 y sw3=0) y el minuendo es
menor al sustraendo asigna un valor que posteriormente se va a representar en display 7 segmentos como un menos.

Fig. 41. Asignación del vector DECENAS usando WHEN – ELSE.

Para asignar valores al vector UNIDADES se hace uso del programa Product, el cual ayuda a realizar una resta entre el vector
NUM1 y cada uno de los vectores generados en la segunda columna de la Fig. 38. de la siguiente forma:

Fig. 42. Forma de hallar las Unidades haciendo uso del programa Product.
Con ayuda de un process se asigna un valor al vector UNIDADES haciendo uso de los resultados de los comparadores que se
observan en la Fig. 39 y los resultados de las anteriores “restas” que se pueden ver en la Fig. 42.
La asignación del vector UNIDADES se realiza de la siguiente manera:

Fig. 43. Forma de asignación de valores para el vector UNIDADES.

III. PRUEBAS DE FUNCIONAMIENTO

En la presente sección se llevará a cabo una serie de pruebas para comprobar el correcto funcionamiento del sistema diseñado, el
análisis de la respuesta se efectuará en dos partes. Primero comprueba la respuesta del código implementado utilizando vectores de
prueba o testbench, los resultados se muestran en la sección Prueba de software, en segundo lugar, observa la respuesta del código
cargado en la FPGA, los resultados se muestran en la sección Prueba de hardware.

A. Prueba de Software

A continuación, se presentan las pruebas realizadas al código mediante el uso de testbench, la respuesta del sistema se visualiza
con la herramienta de modelSim.

Se puede observar que la entrada A es el primer número, la entrada B es


el segundo número y Sum es el resultado.

Fig. 44. Simulación Sumador

Adicionalmente se observa una salida C que se encarga de mostrar el Overflow en caso de que lo halla, si lo hay la salida C se pone
en alto y vale 16, entonces el resultado en este caso es 16 más lo que haya dado en el vector Sum.
Se pueden observar las entradas A y B que corresponden a los números
de n bits y en la salida Res se puede observar el resultado de la resta.

Fig. 45. Simulación Restador

Adicionalmente en el caso en el que el número A sea mayor que el número B


el resultado Res será la diferencia entre estos dos números sin ningún signo.

Se pueden observar las entradas A y B que corresponden a los números de n


bits y en la salida ans_Multi se puede observar el resultado de la
multiplicación.

Fig. 46. Simulación Multiplicador

Se pueden observar la entrada NUM1 que corresponde a el número dé 8 bits y


en la salida ans_Multip se puede observar el resultado de la multiplicación.

Fig. 47. Simulación Separador


B. Prueba de Hardware

7Seg_1: En él se visualiza el primer número a operar menor o igual


que 9 o error (E) si es mayor que nueve.
7Seg_2: En él se visualiza el segundo número a operar menor o igual
que 9 o error (E) si es mayor que nueve.
7Seg_3: En él se visualiza la decena del resultado o el signo menos
en caso de que el resultado de una resta sea negativo.
7Seg_4: En él se visualiza las unidades del resultado o error(E) en
caso de que el resultado de un número mayor que 100.
Switch para seleccionar suma o resta. (suma en el caso de estar arriba
resta en el caso de estar abajo.
Switch para seleccionar Multiplicación o suma/resta. (suma/resta en
caso de estar arriba, multiplicación en el caso de estar abajo)

Switches para ingresar el segundo numero


Switches para ingresar el segundo numero
Fig. 48. Visualización en FPGA

Las siguientes figuras ilustran las respectivas pruebas realizadas al sistema montado en la FPGA, se realizan 5 pruebas que abarcan
los casos principales o de interés.

Fig. 49. Funcional suma Fig. 50. Funcional resta Fig. 51. Funcional resta_neg

Fig. 52. Funcional Multiplicación Fig. 53. Funcional Error


IV. CONCLUSIONES

En el presente documento se llevo a cabo la implementación de una calculadora haciendo el uso de una tarjeta FPGA, el alcance
del proyecto solo permitía recibir numero de 4 bits como valores a operar, además no se realiza la operación división. Los resultados
obtenidos son lo que se esperaba desde la etapa de diseño, aunque durante la implementación fue necesario agregar algunas cosas
como la representación del error, esta representación de error no se observa de manera clara en el diagrama de bloques de la figura 1.
En general fue sencillo implementar algunos bloques propuestos en el diseño, posiblemente la implementación mas larga se encuentre
en la entidad Separador, la cual resulto relativamente difícil.
REFERENCIAS

Para la realización del presente documento no fue necesario realizar búsquedas, es por esta razón que se eliminó la sección de
marco teórico. La guía que se utilizo fueron las guías del curso, con lo cual se considera el siguiente link con la página de fase del
curso en el cual se encuentran las diapositivas que fueron de gran utilidad para el desarrollo e implementación de la solución.

• Pagina de Facebook del curso Diseño de sistemas digitales: https://www.facebook.com/groups/432111050718295/

Potrebbero piacerti anche