0% encontró este documento útil (0 votos)
237 vistas38 páginas

Diseño de ALU en VHDL con Basys-3

Este documento presenta el diseño de una unidad aritmética lógica (ALU) de 3 bits utilizando VHDL. La ALU puede realizar operaciones aritméticas como suma, resta, multiplicación y división, así como operaciones lógicas como AND, OR y complemento a 2. El diseño se implementa en una placa Basys-3 para probar y visualizar los resultados usando switches, LEDs y displays de 7 segmentos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
237 vistas38 páginas

Diseño de ALU en VHDL con Basys-3

Este documento presenta el diseño de una unidad aritmética lógica (ALU) de 3 bits utilizando VHDL. La ALU puede realizar operaciones aritméticas como suma, resta, multiplicación y división, así como operaciones lógicas como AND, OR y complemento a 2. El diseño se implementa en una placa Basys-3 para probar y visualizar los resultados usando switches, LEDs y displays de 7 segmentos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Tecnológico nacional de México

Instituto tecnológico de Tijuana

Práctica No.7

Ing. Electrónica
Diseño digital con VHDL
Unidad 4
Dra. Yazmin Maldonado

Presenta:
Espinosa Alvizo Azul Mar - 19212294
García Ortiz Ricardo - 19212297
Ruiz Pérez Axel Antonio - 19212342
Villela Salinas Vincent Alejandro - 19212358

17/06/2021
Índice general
Índice de figuras .............................................................................................................. 1
1 Introducción .............................................................................................................. 2
2 Marco teórico ............................................................................................................ 3
2.1 VHDL................................................................................................................... 3
2.2 Basys-3 ............................................................................................................... 3
2.3 Señal de reloj ..................................................................................................... 3
2.4 Contador............................................................................................................. 4
2.5 Operaciones aritméticas con números binarios ............................................. 5
2.5.1 Suma binaria ............................................................................................... 5
2.5.2 Resta binaria ............................................................................................... 5
2.5.3 Multiplicación binaria ................................................................................. 6
2.5.4 División binaria ........................................................................................... 6
2.6 Operaciones lógicas .......................................................................................... 7
2.6.1 Complemento a 2 ........................................................................................ 7
2.6.2 AND ............................................................................................................. 7
2.6.3 OR ................................................................................................................ 8
2.6.4 NAND ........................................................................................................... 8
2.7 Unidad Aritmética Lógica (ALU) ....................................................................... 9
2.8 Divisor de frecuencia....................................................................................... 10
2.9 Decodificador ................................................................................................... 11
2.10 Display de 7 segmentos .................................................................................. 11
2.11 Multiplexación .................................................................................................. 13
2.12 Biblioteca ......................................................................................................... 14
2.13 Entidad ............................................................................................................. 14
2.14 Arquitectura ..................................................................................................... 14
2.15 Sentencias condicionales ............................................................................... 15
2.16 Constraints....................................................................................................... 15
3 Objetivo ................................................................................................................... 16
4 Material y equipo .................................................................................................... 17
5 Procedimiento y metodología experimental ......................................................... 18
5.1 Simulación ....................................................................................................... 18
5.2 Constraints....................................................................................................... 21
5.3 Esquemático .................................................................................................... 24
6 Sesión de revisión .................................................................................................. 27
7 Discusión de los resultados experimentales ........................................................ 31
8 Conclusiones .......................................................................................................... 33
9 Referencias ............................................................................................................. 35
Índice de figuras

Figura 2.1: Señal de reloj sincronizada con otra señal que representa a una secuencia de
bits. .................................................................................................................................... 4
Figura 2.2: Diagrama de tiempos. ...................................................................................... 4
Figura 2.3: Valores de suma binaria. ................................................................................. 5
Figura 2.4: Valores de resta binaria. .................................................................................. 6
Figura 2.5: Valores de la multiplicación binaria. ................................................................. 6
Figura 2.6: Primer método de complemento a 2. ............................................................... 7
Figura 2.7: Segundo método de complemento a 2. ............................................................ 7
Figura 2.8: Compuerta AND. .............................................................................................. 8
Figura 2.9: Compuerta OR. ................................................................................................ 8
Figura 2.10: Compuerta NAND. ......................................................................................... 8
Figura 2.11: Símbolo de la ALU. ...................................................................................... 10
Figura 2.12: Decodificador. .............................................................................................. 11
Figura 2.13: Display de siete segmentos. ........................................................................ 12
Figura 2.14: Estructura de ánodo común ......................................................................... 12
Figura 2.15: Display presente en la Basys-3. ................................................................... 12
Figura 2.16: Conexiones del display de siete segmentos a la placa Basys-3. .................. 13
Figura 2.17: Diagrama de tiempos de la multiplexación ................................................... 13
Figura 5.1: Simulación. .................................................................................................... 21
Figura 5.2: Constraints (primera parte). ........................................................................... 22
Figura 5.3: Constraints (segunda parte). .......................................................................... 24
Figura 5.4: Esquemático RTL. ......................................................................................... 26
Figura 6.1: Prueba de suma............................................................................................. 27
Figura 6.2: Prueba de resta. ............................................................................................ 28
Figura 6.3: Prueba de multiplicación. ............................................................................... 28
Figura 6.4: Prueba de división ......................................................................................... 29
Figura 6.5: Prueba de operación lógica AND. .................................................................. 29

1
1 Introducción

En la presente práctica, se llevó a cabo la realización de un código VHDL en


VIVADO para sintetizar una Unidad Aritmética Lógica (ALU) de 3 bits. La práctica
dispone de tres entradas de 3 bits cada una, siendo dos de estas los valores con
los cuales realizar las operaciones y la tercera la encargada de indicar la operación
a realizar. La ALU debe de ser capaz de realizar operaciones aritméticas como lo
son la suma, la resta, la división y la multiplicación; así como realizar operaciones
lógicas como el complemento a 2, y utilización de compuertas AND, NAND y OR
entre ambos datos de entrada.

Los componentes de la tarjeta Basys-3 que se utilizan para el funcionamiento de la


práctica son 9 switches (3 switches para cada dato de 3 bits), 4 leds (1 para el led
de acarreo y 3 para la salida de operaciones lógicas) y el displays de siete
segmentos para ilustrar los datos de entrada, la selección de la operación, y el
resultado de operaciones aritméticas. La práctica tiene como finalidad comprender
más a fondo el concepto y funcionamiento de una ALU mediante la realización de
nuestro propio diseño.

2
2 Marco teórico

A continuación, se presentarán algunos de los conceptos teóricos que son de


relevancia para el entendimiento de la presente práctica, estos conceptos pueden
ser respecto al tema en el cual se centra la práctica o a conceptos relacionados con
el desarrollo de código VHDL.

2.1 VHDL
VHDL es un lenguaje de descripción de circuitos electrónicos digitales que utiliza
distintos niveles de abstracción. El significado de las siglas VHDL es VHSIC (Very
High Speed Integrated Circuits) Hardware Description Language. Esto significa que
VHDL permite acelerar el proceso de diseño. VHDL no es un lenguaje de
programación, por ello conocer su sintaxis no implica necesariamente saber diseñar
con él. VHDL es un lenguaje de descripción de hardware, que permite describir
circuitos síncronos y asíncronos. [1]

2.2 Basys-3
La tarjeta Basys 3 es una plataforma de desarrollo de circuitos digitales lista para
ser utilizada, haciendo uso del FPGA Artix-7 (número de parte XC7A35T-
1CPG236C). La tarjeta incluye por sí sola una gran cantidad de componentes en
ella, para que de esta manera se consiga completar una gran cantidad de diseño
sin requerir hardware adicional, así como las suficientes entradas y salidas para el
FPGA para que los diseños tengan la oportunidad de expandirse si así lo necesitan.
[2]

2.3 Señal de reloj


En los sistemas digitales, todas las señales se encuentran sincronizadas con una
señal de temporización básica a que comúnmente se le denomina reloj. El reloj es
una señal periódica en la que cada intervalo entre impulsos (el periodo) es igual a
la duración de un bit.

Una señal de reloj oscila entre el estado alto y el estado bajo, graficando la forma
de una onda cuadrada como la mostrada en la Figura 2.1. Suponiendo la existencia
de una señal A en la cual se produce un cambio de estado cada vez que el reloj
produce un flanco de subida, para cada duración de un bit de la señal de reloj, la
forma de onda A puede encontrarse en un estado alto o un estado bajo. Estos
estados, ya sean altos o bajos representan una secuencia de bits. Un grupo de
3
múltiples bits puede ser utilizado como parte de información binaria, como lo puede
ser un número o una letra. La señal de reloj como en su misma no transporta
información. [3]

Figura 2.1: Señal de reloj sincronizada con otra señal que representa a una secuencia de bits.

Lo anterior permite explicar lo que es un diagrama de tiempos o cronograma, como


también es conocido; el cual es una gráfica de señales digitales que ilustra la
relación real entre dos o más señales para poder apreciar como varía cada señal
respecto a las demás. Al ver un diagrama de estado es posible determinar los
estados alto y bajo de todas las formas de onda en cualquier punto de tiempo
especificado y el instante exacto en el cual una forma de onda cambia de estado
respecto al resto. La Figura 2.2 muestra un diagrama de tiempos para cuatro
señales. [3]

Figura 2.2: Diagrama de tiempos.

2.4 Contador
El objetivo básico de un contador digital es el de contar sucesos. Estos pueden ser
representados ya sea por cambios de nivel o por medio de impulsos, por ejemplo,
los de una señal de reloj. Para que un contador sea capaz de realizar su función,
este debe de tener la capacidad de recordar el número actual, esto con la finalidad

4
de poder avanzar de manera correcta hacia el siguiente número de una determinada
secuencia. [3]

2.5 Operaciones aritméticas con números binarios


A continuación, se presentarán las operaciones aritméticas básicas en binario, y se
explicara como es que estas se realizan y los fundamentos que tienen para ello,
siendo prácticamente el cómo es que estas se rigen al momento de realizar cálculos.

2.5.1 Suma binaria


La suma es la operación aritmética más sencilla, pues se encarga solamente de ser
un incremento en el vector, es prácticamente igual que una suma tal como lo
conocemos en base decimal, y al igual que en este sistema, se llega ocupar un
digito de valor mayor cuando los valores que se estén sumando sobrepasen el valor
máximo que puede alcanzar el digito; y en caso del sistema binario, dado que se
presentan valores entre 0 y 1, quedan de la manera mostrada en la Figura 2.3 las
sumas en una determinada posición. [4]

Figura 2.3: Valores de suma binaria.

2.5.2 Resta binaria


La resta opera de manera similar a la suma, y esto es dado al menos en el sistema
binario porque se presentan dos valores, quedando con cuatro posibles
combinaciones en cada caso de una determinada posición de un arreglo o palabra.
En la Figura 2.4, se presentan los valores que se pueden obtener al restar en binario.
[4]

5
Figura 2.4: Valores de resta binaria.

2.5.3 Multiplicación binaria


En el caso de la multiplicación se trabaja de forma similar a una multiplicación de
base decimal, pues se multiplica cada digito de una palabra por el digito de otra,
partiendo desde la derecha con el bit menos significativo hasta el bit más
significativo, y una vez realizadas las multiplicaciones, se procederá a realizar la
suma de las palabras resultantes de cada multiplicación obtenida de cada digito. Se
presenta en la Figura 2.5 las condiciones bajo las cuales se rige la multiplicación
binaria. [4]

Figura 2.5: Valores de la multiplicación binaria.

2.5.4 División binaria


La división binaria es sumamente sencilla y más fácil de visualizar que en sistema
de base decimal, nuevamente es porque al trabajar con números binarios solo se
tienen dos posibles valores que obtendrá nuestro cociente por cada digito, siendo
estos mismos el 0 y el 1, y al igual que en el sistema decimal, primero se corroborará
que sea divisible una parte del dividendo entre el divisor, razón por la cual se
agregara (del valor más significativo al menos significativo) un 1 de ser correcta la
afirmación y un 0 de ser falsa, de este modo se conseguirá una resta al igual que
en una división de base decimal y se proseguirá con el método hasta llegar al bit
menos significativo de la palabra. [4]

6
2.6 Operaciones lógicas

2.6.1 Complemento a 2
El complemento a 2 es comúnmente utilizado para restar números binarios, y de ahí
parte su necesidad en el sistema binario, pues facilita de gran manera el cómo es
que estos mismos números son operados mediante una resta. Existen dos métodos
para obtener el complemento a 2, los cuales serán explicados a continuación.

El primer método consiste en obtener el complemento a 1 de un numero binario, el


cual es obtenido invirtiendo cada valor de cada bit de una palabra, y luego a esta
palabra que presenta valores invertidos, sumarle 1, para que de esta manera se
obtenga el complemento a 2 de dicho número. Dicho procedimiento se muestra en
la Figura 2.6. [5]

Figura 2.6: Primer método de complemento a 2.

El segundo método consiste en identificar el primer digito que presente un valor de


1 de derecha a izquierda y luego invertir el resto de los dígitos que estén a lado
izquierdo de este digito con valor 1, y con eso se obtiene el complemento a 2. Esto
se ejemplifica en la Figura 2.7. [5]

Figura 2.7: Segundo método de complemento a 2.

2.6.2 AND
La Figura 2.8 muestra la operación lógica AND consiste en presentar una salida
activa siempre y cuando todas las entradas que participen tengan un valor lógico de
1, usualmente se acostumbra trabajar con dos entradas por cuestiones de sencillez
en cuanto a los modelos de compuertas lógicas, pero pueden presentar más de dos
entradas dichas compuertas.

7
Figura 2.8: Compuerta AND.

2.6.3 OR
La operación lógica OR consiste en presentar una salida activa si al menos una de
las entradas presenta un valor lógico de 1; y como se puede deducir, si más de una
entrada presenta el valor lógico de 1, se continúa manteniendo el valor activo en la
salida. Esto se ejemplifica en la Figura 2.9.

Figura 2.9: Compuerta OR.

2.6.4 NAND
La operación lógica NAND consiste en presentar en la salida un valor invertido
respecto al que se suele encontrar en la compuerta AND, obteniendo una salida
igual a 0 en el caso de que todas sus entradas sean iguales a 1, como se muestra
en la Figura 2.10.

Figura 2.10: Compuerta NAND.

8
2.7 Unidad Aritmética Lógica (ALU)
Es un contador digital capaz de realizar las operaciones aritméticas y lógicas entre
los datos de un circuito; suma, resta, multiplica y divide, así como establece
comparaciones lógicas a través de los condicionales lógicos “si”, “no”, y, “o”. Desde
los circuitos más simples, como relojes y calculadoras, hasta complejos circuitos,
como los microchips actuales, todos incluyen al menos una Unidad aritmético-
lógica, que varía su poder y complejidad según su finalidad. [6]

Con respecto a cualquier microprocesador, las instrucciones involucran operaciones


sobre un operando, o entre dos de ellos, estando uno de los mismos almacenado
en el registro acumulador que es el registro de trabajo de cualquier ALU, por lo que
en algunos casos suele denominarse registro W.

Existen dos tipos de ALU, siendo de coma fija y de coma flotante, y presentan las
siguientes partes:
1. Operadores aritméticos, lógicos y de desplazamiento.
2. Registros para almacenar datos temporales.
3. Registro de estado.
4. Registro contador de programa.
5. Registro de direcciones de interrupción.

Se encuentra formado por los circuitos necesarios para realizar las operaciones con
los datos provenientes del registro de entrada, también es capaz de aceptar ordenes
como entrada para seleccionar el tipo de operación que debe de realizar. El registro
de entrada contiene los datos u operandos que intervienen en una instrucción antes
de que se realice la operación por parte del circuito operacional, también puede ser
empleado para almacenar los resultados intermedios o finales de las operaciones.
El registro de estado se compone por un grupo de biestables en los que se deja
constancia de condiciones que se dieron en la última operación realizada, y que
resaltaran de importancia para operaciones posteriores, como lo podría ser un
indicador de signo, un acarreo, etc. Finalmente, el registro acumulador contiene los
datos que se tratan en cada momento, ya que almacena los resultados de las
operaciones realizadas por el circuito operacional; está conectado a los registros de
entrada para para de esta manera tener una retroalimentación en el caso de
operaciones encadenadas. También posee una conexión con el bus de datos para
el envío de resultados a la memoria principal o a la unidad de control. El símbolo de
la ALU se encuentra ilustrado en Figura 2.11. [7]

9
Figura 2.11: Símbolo de la ALU.

2.8 Divisor de frecuencia

La mayoría de las formas de onda que pueden ser encontradas en sistemas


digitales están formadas por series de impulsos, que también son conocidos como
trenes de impulsos y pueden ser clasificadas en periódicas y no periódicas. Un tren
de impulsos periódico es aquel que se repite a intervalos de tiempo fijos; este
intervalo de tiempo fijo se denomina período. Por su parte, la frecuencia es la
velocidad a la que se repite. La unidad de la frecuencia en el Sistema internacional
es son los hercios (Hz). [3]

Una vez que se tiene en mente el concepto de frecuencia, se puede proseguir a


explicar en qué consiste un divisor de frecuencia. Como lo dice su nombre, un divisor
de frecuencia de frecuencia consiste en tomar una señal con una determinada
frecuencia, y en base a esta dividirla en una de menor tamaño, como es realizado
en la presente práctica, donde una señal de 100 MHz es dividida para obtener una
señal de 1 Hz.

Tomando como referencia una frecuencia inicial, se usa un contador que cuente los
flancos de bajada o subida según sea el caso, y después de alcanzar un
determinado valor se invierte el estado de la señal resultante. Como se puede ver,
depende del máximo número al que pueda llegar el contador la frecuencia de salida
del divisor.

El valor máximo del contador en base a la señal que se quiere de salida tomando
como referencia los 100 MHz de la placa Basys-3 puede ser calculado en base a la
siguiente fórmula:

10
2.9 Decodificador
El decodificador es un dispositivo que acepta una entrada digital codificada en
binario y activa una salida. Este dispositivo tiene varias salidas, y se activará aquella
que establezca el código aplicado a la entrada. Con un código de n bits se pueden
encontrar posibles combinaciones. Si se tienen 3 bits (3 entradas) serán posibles
23=8 combinaciones. Una combinación en particular activará solo una salida. Por
ejemplo: activar la salida Q2 hay que poner en la entrada el equivalente al número
2 en binario. [8]

En un decodificador de 2 a 4 (se tienen 2 pines o patitas de entrada y 4 pines o


patitas de salida). En la entrada se pone el código en binario (00, 01, 10, 11), que
hará que se active sólo una salida de las cuatro posibles. La Figura 2.12 es un
diagrama que representa a un decodificador de 2 a 4.

Figura 2.12: Decodificador.

2.10 Display de 7 segmentos


Un display de siete segmentos es un componente capaz de representar diversos
caracteres, principalmente los números del 0 al 9 aunque este se limite solo por sus
entradas. Obtiene su nombre de los siete segmentos que lógicamente lo componen,
cada segmento incorpora un LED que se enciende y apaga de manera individual.
Dichos segmentos suelen identificarse mediante una letra del alfabeto para poder
diferenciarse entre sí. Se pueden desplegar hasta 128 patrones al iluminar
determinados segmentos. Cada segmento es identificado con una letra de la a hasta
la g, como se puede ver en la Figura 2.13.

11
Figura 2.13: Display de siete segmentos.

Los cuatro displays de siete segmentos presentes en la tarjeta Basys-3 son de


ánodo común, estructura que se muestra en la Figura 2.14, lo que significa que el
pin común se encuentra conectado en el lado positivo (ánodo) de cada LED. En esta
configuración se controla con lógica negativa, es decir, con 0s. [2]

Figura 2.14: Estructura de ánodo común

Es importante mencionar que el display presente en la tarjeta no se trata de cuatro


displays separados entre sí, por el contrario, los cuatro displays se encuentran en
el mismo empaquetado. Las señales del ánodo común funcionan como habilitadores
para cada uno de los displays, siendo estos habilitadores AN3, AN2, AN1 y AN0.
Por su parte, los cátodos de los cuatro display se encuentran conectados en siete
nodos desde CA hasta CG y DP. Esto se puede ver en la Figura 2.15. [2]

Figura 2.15: Display presente en la Basys-3.

El Basys 3 utiliza transistores para conducir la suficiente corriente al ánodo común,


como se mira en el diagrama de la Figura 2.16, lo que implica que las habilitaciones
12
del ánodo se encuentran invertidas. Por lo que las señales AN0-3, CA-G y DP se
ponen en nivel bajo cuando están activas. [2]

Figura 2.16: Conexiones del display de siete segmentos a la placa Basys-3.

2.11 Multiplexación
Cuando se desee mostrar un número de cuatro dígitos en el display, se hace uso
de un circuito controlador de escaneo. Este se encarga de mostrar cada dígito
durante una cuarta parte del tiempo, en repetición y a una velocidad superior a la
que el ojo humano puede percibir, dando de esta manera la ilusión de que los cuatro
dígitos se encuentran encendidos todo el tiempo. A esto se le conoce como
multiplexación.

Los cuatro dígitos deben de encenderse una vez cada 1 ms a 16 ms, para que cada
dígito se vea brillante y continuamente iluminado a frecuencias de refresco de
aproximadamente 1 KHz a 60 Hz. Tomando como referencia un refresco de 62.5
Hz, en donde toda la pantalla se refresca cada 16 ms, debido a que cada dígito dura
encendido una cuarta parte del tiempo, cada dígito se enciende durante 4 ms. Para
conseguir comprender con mayor facilidad esto, se presenta la Figura 2.17, que
ejemplifica la multiplexación. [2]

Figura 2.17: Diagrama de tiempos de la multiplexación

13
2.12 Biblioteca
Las bibliotecas VHDL permiten almacenar paquetes y entidades de uso común que
pueden ser utilizadas en archivos VHDL. Un archivo de paquete VHDL contiene
elementos de diseño comunes que pueden ser utilizados en los códigos fuente del
archivo VHDL que componen su diseño. [9]

2.13 Entidad
La entidad se encarga de describir la forma externa del circuito. En esta sección del
código, se señalan las entradas y las salidas del diseño. La entidad es análoga a un
símbolo esquemático en los diagramas electrónicos, el cual describe las conexiones
del dispositivo hacia el resto del diseño. Las principales cualidades de la entidad
son que esta define externamente al circuito o subcircuito e indica el nombre y tipo
de datos de entrada y salida.

Los puertos pueden ser declarados como entradas in, salidas out, o entrada-salida
buffer. Un puerto de entrada únicamente puede ser leído y no se pueden realizar
cambios a su valor internamente en la arquitectura. Respecto a los puertos de
salida, solamente se puede escribir en estos y sus valores pueden ser leídos para
ser considerados en otras partes del código. [1]

2.14 Arquitectura
La arquitectura puede ser explicada de la manera más básica como la descripción
del comportamiento del circuito. La arquitectura describe el funcionamiento de la
entidad a la que esta hace referencia, dicho en otras palabras, en esta sección se
describe el funcionamiento de la entidad a la que está asociada haciendo uso del
código en VHDL. La arquitectura define internamente el circuito, en este se pueden
encontrar señales internas, funciones, procedimientos y constantes.

El código VHDL como tal se escribe dentro de la arquitectura. Como se mencionó


antes, cada arquitectura se encuentra asociada a una entidad, esta referencia es
señalada en la primera línea de la sección de la arquitectura. Seguido de esto, se
deben de indicar las variables internas que se van a necesitar para el
funcionamiento del código. Se indica con begin hasta end, todo el apartado en el
cual se pueden escribir las líneas de código en VHDL que sean necesarias para
explicar el funcionamiento del circuito. [1]

Algo importante de mencionar, es la existencia de múltiples arquitecturas como lo


pueden ser la estructural, funcional, o de flujo de datos. En la arquitectura de flujo
de datos se puede hacer uso de una asignación directa o de una asignación
14
condicional, siendo la primera el simple hecho de asignarle a una variable su nuevo
valor, mientras que la segunda asigna el valor bajo determinadas condiciones (when
else). Este tipo de arquitectura también tiene la posibilidad de hacer uso de la
asignación selectiva, la cual le asigna un valor a una variable, dependiendo del valor
de otra (with select when).

Por su parte en la arquitectura funcional pueden utilizarse estructuras condicionales


if, en las cuales si se cumple una expresión se ejecuta una lista de acciones dentro
del if. Igualmente existen los procesos que tienen la peculiaridad de ser utilizados
para contener líneas de código que no necesariamente deben de tener definido un
valor para todas las entradas. El código dentro de un proceso es ejecutado
solamente si alguna de las señales dentro de su lista de sensibilidad cambia su
valor.

2.15 Sentencias condicionales


Como lo puede indicar su nombre, se trata de sentencias cuyo funcionamiento se
basa en condicionar una acción u otra respecto a un acontecimiento determinado.
Tienen que encontrarse obligatoriamente dentro de un process. Las más comunes
son el if-then-else y el case-when. [1]

La sentencia if-then-else, es utilizada para la toma de decisiones dependiendo del


cumplimiento de cierta condición, ejecutando la pieza siguiente de código en caso
de resultar verdadera. En caso de no cumplirse dicha condición, se realiza el mismo
proceso en caso de encontrarse de manera conjunta un elsif. Las sentencias if-then-
else, como se puede ver, deben de terminar haciendo uso de else, que indica la
pieza de código a ejecutar en cada de que ninguna de las condiciones sea cumplida.

Por otro lado, la sentencia case-when, depende únicamente de una determinada


señal, y dependiendo su valor se ejecutará una determinada pieza de código.

2.16 Constraints
Se encarga de fungir como la parte que une la parte del software, que es el código,
con el hardware, que es la placa Basys-3 y el Artix-7. En este apartado se
especifican explícitamente que pines del Artix-7 son utilizados en qué entradas o
salidas declaradas en la entidad. Sin los constraints el código VHDL realizado no se
podría ejecutar físicamente, ya que no habría un agente encargado de unir el código
con la placa.

15
3 Objetivo

Diseñar en VHDL una ALU de 3 bits e implementarla en FPGA.

16
4 Material y equipo

● Computadora
● Tarjeta Basys-3

17
5 Procedimiento y metodología experimental

La práctica consiste en la realización de un código VHDL de una Unidad Aritmética


Lógica (ALU) de 3 bits. En un display de siete segmentos de cuatro dígitos se deben
de desplegar los datos de la operación: en el primer digito se muestra el primer valor
con el cual se realiza la operación, en el segundo digito el indicador de la operación,
en el tercer digito el segundo valor a utilizar y en el último digito se muestra el
resultado de las operaciones aritméticas. En caso de realizar una operación lógica,
el digito encargado de mostrar la salida aritmética se apagaba y el resultado es
mostrado mediante leds.

5.1 Simulación
Para comprobar el funcionamiento del código VHDL, se hace uso de la simulación
de la practica en VIVADO. La Figura 5.1 muestra la simulación correspondiente a
todas las operaciones aritméticas y lógicas que puede realizar la ALU, considerando
todas las posibles situaciones que pueden ocurrir en cada una de ellas, es decir,
suma y multiplicación con y sin desbordamiento, resta con resultado positivo y
negativo, división normal y división entre cero, así como el complemento a 2 de un
numero normal y el complemento a dos de 0, que requiere del led de
desbordamiento para mostrarse; las operaciones AND, NAND y OR no requieren
de probar casos especiales. De color amarillo se encuentra la señal de reloj clk y la
señal de divisor de frecuencia de 250 Hz, que es utilizada para mantener en
sincronía tanto el módulo de la ALU como el módulo del barrido de los displays. Los
vectores A y B corresponde a los valores de los dos datos con los cuales se va a
realizar la operación en cuestión, y se encuentran de color verde para indicar que
se trata de los datos de entrada. De color azul oscuro se encuentra el valor del
vector S, que se encarga de determinar qué operación se realiza. De color naranja
se encuentran los vectores encargados de mostrar los resultados, ya sean
resultados aritméticos en Qout, o resultados lógicos en Ql. La señal Co se encarga
de encender cuando ocurre un resultado con desbordamiento, y se muestra de color
azul claro. De color rojo se muestra la señal N encarga de indicar cuando un
resultado es negativo. Finalmente, de color gris se muestran las señales auxiliares
Qs y Qm que muestran el valor completo del resultado de una suma o una

18
multiplicación respectivamente. Cada operación realizada aborda una duración de
un segundo.

En el primer segundo, el vector S tiene un valor de 000, lo que indica que se trata
de una suma, la cual es realizada al convertir los vectores A y B como enteros sin
signo, y sumarlos obteniendo por ende un resultado entero, que es convertido
nuevamente a un vector sin signo. El dato A posee un valor de 101 y B un valor de
010, el resultado de dicha suma se muestra en el vector Qout, ya que se trata de
una operación aritmética, muestra el resultado 111, el cual es correcto. En Qs se
muestra este mismo valor expresado con 4 bits. En el segundo siguiente, el vector
A mantiene su valor de 101, pero B cambia su valor a 101, para de esta manera
obtener una suma con desbordamiento. En el vector Qs se puede apreciar el
resultado completo de dicha suma, el cual es de 1010, del cual los últimos 3 bits son
tomados para mostrarse en Qout, es decir 010, y el bit más significativo se encarga
de encender la señal de Co, por lo que dicha operación se realiza correctamente.
Es importante mencionar, que mientras se trabaje con operaciones aritmética, la
salida Ql de operaciones lógicas siempre tendrá un valor de 000.

Siguiendo con la operación aritmética de la resta, se puede observar que S ahora


vale 001, lo que es el indicador de esta operación, y es realizada al restar los
vectores A y B entre sí; en el caso de que B sea mayor que A se enciende la señal
N indicando que se trata de un resultado negativo. Primero se puede observar como
A aun sigue con un valor de 101, mientras que a B se le otorga un valor de 001,
cuyo resultado es de 100, como se muestra en la salida Qout. En el segundo
siguiente, A ahora vale 011, mientras que a B se le asigna un valor de 101, con la
finalidad de obtener una resta en la que B sea mayor que A y por ende se obtenga
un resultado negativo. El resultado de dicha operación es 010 como se muestra en
Qout, con el añadido de que ahora se enciende la señal de numero negativo.

La siguiente operación aritmética a mostrar es la multiplicación, la cual se


seleccionada al asignarle a S un valor de 010, y realiza al convertir los vectores A y
B como enteros sin signo, y multiplicarlos obteniendo por ende un resultado entero,
que es convertido nuevamente a un vector sin signo. En este caso, el vector A tiene
un valor de 101, y el vector B un valor de 010, que al multiplicarse dan como
resultado 1010 como se muestra en el vector Qm. De el vector Qm se toman
únicamente los últimos 3 bits de dicho vector para asignárselos a Qout, y en lo que
respecta a la señal de desbordamiento, basta con que cualquiera de los primeros 3
bits mas significativos de Qm valga 1 para que se encienda dicha señal. En el
siguiente segundo se realiza una multiplicación en la que no existe desbordamiento
alguno, al mantener el valor del dato A como 101, pero cambiando el de B a 001.

19
Debido a que se trata de una multiplicación por 1, el valor de Qout debe de ser igual
a 101, tal como se muestra en la simulación.

Finalmente, la última operación aritmética es seleccionada al asignarle a S un valor


de 011, y se trata de la división, que se realiza al convertir los vectores A y B como
enteros sin signo, y dividirlos obteniendo por ende un resultado entero (y por lo tanto
truncado), que es convertido nuevamente a un vector sin signo. El primer caso a
realizar es una operación normal en la cual se divide el valor de A con 111, sobre el
valor de B con 010, es decir 7/3, cuyo resultado es 3.5, el cual es truncado a 3 para
mostrar un valor de 011 por la salida Qout. Si ahora A vale 100 y a B se le asigna
un valor de 000, se tiene una división sobre 0, la cual como se sabe es
indeterminado, sin embargo, en la ALU diseñada por el equipo, el resultado es
directamente mostrado como 000.

Pasando a las operaciones lógicas, se tiene primero el complemento a 2, el cual se


seleccionado al asignarle a S el valor de 100. Es importante tener en cuenta que
esta operación lógica solo toma en consideración el valor de A por lo que el valor
de B resulta irrelevante. En el primer caso, al dato A se le asigna el valor de 101,
cuyo complemento a 2 es obtenido al invertir el valor de cada bit de A y sumarle 1
a dicho resultado, el cual es 011 como se muestra en el vector de salida Ql. En el
siguiente caso, A vale 000, cuyo complemento a 2 es 1000, pero debido a que la
ALU únicamente puede mostrar resultados con 3 bits, Ql tiene un valor de 000, y se
enciende la señal de desbordamiento. Es importante tener en cuenta que debido a
que ahora se trata de una operación lógica, los resultados serán mostrados por la
salida Ql, mientras que la salida de resultados aritméticos Qout mostrara
únicamente 000

Las siguientes tres operaciones lógicas básicamente comparan los vectores A y B


bit por bit, y dependiendo de la operación lógica a realiza da un resultado.

La aplicación de la operación lógica AND es seleccionada al otorgarle a S el valor


de 101. Al dato A se le aplica un valor de 101, mientras que a B se le aplica un valor
de 011. Comparando desde el bit más significativo al menos significativo, A posee
un bit con valor de 1, y B un bit con valor de cero, debido a que la compuerta AND
requiera que todas sus entradas sean 1 para dar en la salida un 1, y estos bits no
cumplen esa condición, el resultado de ese bit es 0. En el siguiente bit, A tiene un
valor de 0, pero B tiene un valor de 1, por lo que nuevamente se obtiene un 0 en la

20
salida, finalmente, el ultimo bit de A y B presentan un 1, por lo que la salida para
dicho bit es 1, dando como resultado final en Ql 001.

Por su parte, la operación lógica NAND es seleccionada en el momento en que S


vale 110. A mantiene su valor de 101, pero a B se le asigna 001. Debido a que se
trata de la compuerta NAND, se requiere que todas las entradas sean 1 para dar
como salida el valor de 0. Realizando la comparación bit por bit como se realizó
anteriormente, se tiene que el primer bit de A es 1, mientras que en B es 0, por lo
que en la salida se muestra un 1. En el bit siguiente A tiene un 0, mientras que B
también, por lo que por la salida sale 0. Finalmente, en el bit menos significativo de
A y B se tiene un bit igual a 1, por lo que en la salida se muestra un 1. Dando como
resultado en la salida Ql un valor de 110.

Finalmente, la última operación lógica, es la operación OR, que se selecciona con


un valor de 111 en S. En la operación OR, basta que una de las entradas sea 1 para
que en su salida se muestre un 1. Los valores de A y B se mantienen como A=101
y B=001. El dato A posee en su primer y último bit un valor de 1, por lo que dichos
bits de la salida serán iguales a 1. Por su parte, el dato B solamente tiene su bit
menos significativo con un valor igual a 1, por lo que dicho bit de salida mostrara un
1, sin embargo. En pocas palabras, solamente los bits del centro tanto del dato A
como del dato B tiene 0, por lo que la salida Ql se muestra como 101.

Figura 5.1: Simulación.

5.2 Constraints
Para establecer una relación entre el código anteriormente explicado y los
componentes físicos presentes en la tarjeta Basys-3, se hace uso de los constraints
que se encuentran en la Figura 5.2 y en la Figura 5.3.

Comenzando con la Figura 5.2, para el pulso de reloj se hace uso del pin W5, ya
que este se trata del oscilador de 100 MHz incorporado en la propia tarjeta. Para la
asignación de los valores de A, B y S se hace uso de los primeros nueve switches

21
de izquierda a derecha que se encuentran en la zona inferior de la tarjeta. Para
ingresar el valor de A, se utilizan los switches R2, T1 y U1, es decir, los primeros
tres. Para ingresar el valor de B, se hace uso de los siguientes tres switches, que
corresponden a W2, R3 y T2. Finalmente, la operación a realizar es seleccionada
con los switches T3, V2 y W13. En el caso de que el resultado de una resta sea
negativo, se enciende el led L1.

Figura 5.2: Constraints (primera parte).

22
Por su parte, en la

Figura 5.3 se encuentra el led de carreo/desbordamiento, asignado al pin P1. Cuando


se realizan operaciones lógicas, el resultado se muestra en los leds N3, P3 y U3.
Finalmente, se añaden los constraints correspondientes al control del displays de
siete segmentos, es decir, U2, U4, V4 y W4 para cada uno de los dígitos del display,
y W7, W6, U8, V8, U5, V5 y U7 para los segmentos del display respectivamente.

23
Figura 5.3: Constraints (segunda parte).

5.3 Esquemático
Haciendo uso de VIVADO, se puede obtener el diseño esquemático del circuito
realizado mediante el código VHDL. En la Figura 5.4 se muestra el diagrama
esquemático para la ALU. A simple vista se puede apreciar como este se encuentra
compuesto por múltiples compuertas lógicas entre las que destacan las compuertas
NOT, OR y AND, así como se pueden ver registros de flip-flops, multiplexores, así
como comparadores, sumadores, multiplicadores, divisores y restadores, entre
otros. Las entradas que se encuentran en el circuito son las mencionadas
anteriormente, es decir A, B S y clk, mientras que las salidas corresponden a Co, N,
OnDis, Ql y Qout.

24
El circuito comienza con la representación esquemática del divisor de frecuencia de
250 Hz, que se encuentra en la parte superior del circuito que tiene como única
entrada la señal de reloj clk de 100 MHz, compuesto por sumador un círculo con un
signo positivo en el centro, el cual representa a la variable cuenta250hz y como este
se incrementa, se encuentra conectado a un multiplexor 2 a 1 cuya salida se
encuentra conectada a un registro de flip-flops, y cuya salida a su vez se encuentra
conectado a una memoria ROM conectada a otro registro de flip-flops cuya salida
negada es una de sus propia entradas. El resto del circuito corresponde al proceso
encargado de la ALU, en el que se usan como entradas A, B y S, en donde se puede
apreciar como S se conecta en los multiplexores del final, y de esta forma se
encarga de indicar las salidas de operaciones aritméticas o lógicas según sea
deseado, así de la señal del encendido y apagado del digito de salida aritmética en
el display.

El esquemático de VIVADO simplifica las operaciones aritméticas, ilustrándolas


únicamente como un círculo con el operador de dicha operación, por ejemplo, para
la suma simplemente se ve un círculo con un símbolo positivo (+) en su centro y
cuyas entradas son lógicamente A y B. Esto mismo ocurre con la resta que muestra
un símbolo negativo (-), en la multiplicación que muestra el asterisco (*), y en la
división donde se muestra una diagonal (/). Los resultados de estas operaciones se
encuentran conectados a multiplexores 2 a 1, que a su vez se conectan a un
multiplexor 8 a 1 encargado de dar como salida la operación aritmética que se
requiera en base a S. La salida N del circuito depende de un comparador respecto
a A y B para saber si uno es mas grande que otro, y en el caso de que B sea mayor
que A encender dicha salida.

Respecto a las operaciones lógicas AND, NAND y OR, tenemos un caso similar
debido a que simplemente se trata de los vectores A y B conectados a una
compuerta AND, NAND u OR, según sea el caso y cuyas salidas se conectan a un
multiplexor 8 a 1 encargado de dar como salida la operación lógica que se requiera
en base a S. Para el complemento a 2 se puede observar como el vector A es
invertido (se obtiene el complemento a 1) mediante una compuerta NOT para
posteriormente pasar por un sumador que le suma 1, y así conseguir el
complemento a 2. En la parte superior del diagrama se puede ver una serie de
compuertas OR conectadas entre si que dan lugar a la salida Co, la cual depende
de las salidas de las operaciones de suma, multiplicación o complemento a 2 para
encenderse.

25
Figura 5.4: Esquemático RTL.

26
6 Sesión de revisión

La sesión de revisión de la practica 5 comenzó con la implementación del archivo


bitstream en una tarjeta Basys-3. Se le indico al usuario de la tarjeta los switches a
utilizar para el manejo de la tarjeta, así como diferentes configuraciones de estos
mismos para realizar las pruebas requeridas por la docente, es decir las cuatro
operaciones aritméticas de la práctica y una operación lógica. Dichas pruebas son
mostradas a continuación:

En la Figura 6.1 se muestra la realización de la operación aritmética suma. Como


se puede observar, el valor de A, que es mostrado en el primer digito, es igual a 5;
la operación seleccionada es la suma, que se muestra en el segundo digito, y se
imprime en el digito como un 0; y el valor de B, que se muestra en el tercer display
es igual a 2. Por lo que se tiene la operación 5+2, cuyo resultado como se sabe es
de 7. Finalmente, el ultimo display, el cual se encarga de expresar el resultado de
operaciones aritméticas, muestra un 7, demostrando la funcionalidad de la
operación de suma.

Figura 6.1: Prueba de suma.

Por su parte, en la Figura 6.2 se muestra la aplicación de la operación aritmética


resta, como se puede apreciar en el segundo display, el cual muestra el digito 1,
que es el utilizado para ilustrar esta operación. Se puede apreciar que al dato A se
le agina un valor de 3, mientras que al dato B se le asigna un valor de 6, por lo que
se tiene la operación 3-6, cuyo resultado es -3. En el display de salida se muestra
el número 3, mientras que se puede ver como el led indicador de resultado negativo
se enciende, el cual es el primer led de la tarjeta, por lo que dicho resultado puede
ser interpretado como -3.

27
Figura 6.2: Prueba de resta.

La multiplicación es mostrada en la Figura 6.3, en donde se puede ver que el valor


del dato A corresponde a 2, mientras que el valor de B es 5, por lo que se trata de
la operación 2x5 cuyo resultado es 10. Sin embargo, representar el número 10 en
binario requiere de 4 bits, lo que imposibilita mostrar dicho resultado al tratarse de
una ALU de 3 bits. El número 10 se expresa en binario como 1010. La ALU
únicamente imprime en el display los últimos 3 bits del resultado, que corresponden
a 010, es decir el número 2, mientras que el valor de bit más significativo se encarga
de encender el led de desbordamiento, ya que este bit posee un valor de 1. En base
a lo anterior, se puede concluir que el resultado mostrado por la tarjeta es el correcta
debido a que se muestra en el display de salida el número 2 y se enciende el led de
desbordamiento, el cual corresponde al segundo led de la tarjeta.

Figura 6.3: Prueba de multiplicación.

Continuando con la Figura 6.4, se tiene la operación aritmética de la división. Al dato


A se le asigna un valor de 6, mientras que al dato B se le asigna el valor de 2. Esto
corresponde a la operación 6/2, que tiene un resultado igual a 3, el cual se muestra
en el digito de salida del display, por lo que se concluye que dicha operación es
realizada satisfactoriamente por la tarjeta.

28
Figura 6.4: Prueba de división

Una vez que se realizaron todas las operaciones aritméticas, se procede a realizar
una operación lógica. En la Figura 6.5 se muestra la aplicación de la operación
aritmética AND. En este caso, debido a que se trata de una operación lógica, el
display de salida para resultados aritméticos se encuentra apagado, sin embargo,
el resto de dígitos se mantienen encendidos para lograr apreciar los valores de A y
B ingresados, así como de la operación realizada. Se puede observar que al dato A
se le asigno un valor de 5, que corresponde a 101 en binario; luego se muestra un
numero 5, indicando que se trata de la operación lógica AND; y finalmente al dato
B se le asigna un valor de 3, cuyo equivalente en binario es 011. El bit más
significativo del dato A es 1, mientras que en el dato B es 0, por lo que el led
correspondiente a dicho bit se mantiene apagado. En el bit siguiente del dato A, se
tiene un 0, mientras que en B se tiene un 1, por lo que el led de dicho resultado se
mantiene apagado. Finalmente, el bit menos significativo del dato A es 1, al igual
que el bit menos significativo de B, por lo que dicho led se enciende como se
muestra en la figura.

Figura 6.5: Prueba de operación lógica AND.

Una vez que se terminó de realizar las pruebas para comprobar el funcionamiento
de la práctica, se procedió a la presentación de la práctica a la docente, la cual
realizó preguntas al equipo. Empezó pidiendo que se mostrara el diagrama RTL del
circuito diseñado mediante código VHDL.

29
Una vez que la profesora observo el esquemático RTL, menciono que lo ideal sería
que el módulo de la ALU también se encuentre conectado a la señal de reloj para
que se esta forma vaya sincronizado con el módulo del barrido de los displays.
pregunto por la diferencia entre las salidas del módulo de la ALU llamadas Ql y Qout,
a lo que el alumno Ruiz Pérez Axel Antonio le respondió que Ql es la salida utilizada
para los resultados de las operaciones lógicas, y que por lo tanto se ve reflejada en
los displays, mientras que Qout es la salida encargada de mandar el resultado de
las operaciones aritméticas hacia el módulo del barrido de los displays, para que
sea mostrado en el display de salida. Después de esto pregunto por otra salida del
módulo de la ALU llamada OnDis, a lo que el alumno le contesto que es la señal
encargada de indicarle al módulo de los displays cuando se debe de encender el
digito de la salida aritmética y cuando se debe de apagar, ya que este debe de
permanecer apagado durante las operaciones lógicas. Se hizo énfasis en que el
nombre OnDis proviene de On de encendido en inglés, y Dis de display.

Posterior a esto, la profesora pidió observar el código, en donde se le pidió a la


alumna Espinosa Alvizo Azul Mar que explicara el funcionamiento de la resta en la
ALU. La alumna explicó que la manera en que opera la resta depende del valor de
B, ya que, si este es menor que el de A, la resta se realiza de manera normal, es
decir A-B y el led indicador de resultado negativo se mantiene apagado, sin
embargo, en caso contrario de que el dato B sea mayor que el dato A, se recurre a
la suma del dato B con el complemento a 2 del dato A, y se enciende el led de
resultado negativo. A esto la profesora comento que resulta necesario realizar una
operación diferente para el caso en que B es mayor que A, ya que dicha operación
es realizada por la propia función de resta regular, y que debe de ser corregido.

Para finalizar, la profesora le pidió a Villela Salinas Vincent Alejandro, que se


encarga de explicar la simulación de la operación de la división. El alumno comenzó
explicando todos los elementos que se encuentran presentes en la simulación,
mencionando que la señal A corresponde al valor del dato A, B es el valor del dato
B, S es el encargado de indicar la operación a realizar, y menciona la existencia de
Qout para la salida de resultados aritméticos, y Ql para la salida de resultados
lógicos. Tomo los datos mostrados en la simulación, en donde A es 111 y B es 010,
es decir A es 7 y B es 2, cuyo resultado es igual a 3.5 pero debido a que esto no
puede ser expresado en el display del resultado, este valor es truncado a 3, que se
muestra en la simulación como 011. Así mismo menciono la existencia de la señal
Co para el led de desbordamiento, N para el encendido del led indicador de
resultado negativo, así como Qs y Qm que son señales auxiliares para la suma y
para la multiplicación respectivamente.

30
7 Discusión de los resultados experimentales

Durante la realización de la versión preliminar del código, no se presentaron


problemas de alta dificultad. En un inicio, para la suma se planeaba sumas
directamente los dos vectores de 3 bits y almacenar el resultado en un vector de 4
bits, sin embargo, vivado marco esta asignación como una errónea, ya que el vector
en el que se almacenaría el resultado debía de ser de 3 bits también. Para corregir
esto, se procedió a almacenar los dos vectores de 3 bits de entrada en señales
auxiliares de 4 bits, manteniendo el bit más significativo igualado a 0, de esta
manera sumando dos vectores de 4 bits y almacenando el resultado en otro vector
de 4 bits, en donde se utilizarían los últimos tres para su impresión en el display y
el más significativo sería el led de acarreo/desbordamiento. Sin embargo, por algún
motivo que no fuimos capaces de encontrar, el vector para almacenar el resultado
siempre permanecía marcando un valor de 0000, por lo que se decisión dejar la
suma para un punto más avanzado en el desarrollo del código. Eventualmente, se
desarrolló la línea de código utilizada para la multiplicación y división explicada en
el desarrollo del código, por lo que se decisión dicha base para realizar la suma,
dando resultados satisfactorios. En un vector de 3 bits se almacenan los últimos 3
bits del resultado de la suma, mientras que en otro vector de 4 bits se almacena el
resultado completo de la suma, cuyo bit más significativo enciende el led de
acarreo/desbordamiento.

Otra dificultad que se presentó durante el desarrollo del código, fue la manera de
realizar el complemento a 2, ya que este se puede realizar en una línea de código
al invertir el vector de 3 bits de entrada y sumarle 1, pero debido a que se trataba
de una operación lógica, el procedimiento debía de realizarse bit por bit. Debido a
que, desde nuestra perspectiva y producto de varios intentos, la única forma de
realizar dicha operación al obtener el complemento a 1 y sumarle, era mediante
procesos externos al proceso de la ALU, por lo que para tratar de mantener todo en
un mismo proceso, se recurrió a otro método para obtener el complemento a 2.
Investigando encontramos que dicho complemento puede ser encontrado sin
necesidad de realizar el procedimiento anterior. Simplemente se tenía que señalar
el primer bit menos significativo que sea igual a 1, e invertir el valor de los bits más
significativos a este. Con este procedimiento se consiguió obtener el complemento
a 2 bit por bit en un mismo proceso.

Una vez que se terminó la primera versión del código, se procedió a realizar la
simulación, en donde encontramos en gran medida resultados satisfactorios, sin
embargo, durante esto se notó que, al realizar operaciones lógicas, se apagaban
31
los cuatro dígitos del display, en lugar e únicamente el encargado de mostrar el
resultado de operaciones aritméticas, de igual forma surgieron ideas para mejorar
el código.

El error del apagado de los display se sencillamente corregido, ya que se trató


meramente de un pequeño error de lógica en la multiplexación. Se añadieron más
posibles situaciones para la ALU, ya que antes no se consideró la división entre 0,
la cual daba en cualquier caso un resultado de 7, esto fue cambiado para que diera
un valor igual a 0. Aunque se sabe que es imposible realizar una división sobre cero
ya que esto es indefinido, en el caso de que se intente realizar dicha operación en
la ALU, creemos que es mejor que el resultado fuera igual a 0 antes que 7.

Una vez que se superaron todas las dificultades anteriores, se realizó la simulación
de la practica en la cual se trataron de simular todas las posibles situaciones ante
las cuales podría la práctica, y en todos los casos los resultados fueron los
esperados, dando fin así al desarrollo de la práctica.

32
8 Conclusiones

Espinosa Alvizo Azul Mar


En esta práctica, pude concluir que hubo más comprensión para su revisión, y que
cabe mencionar, ha sido una de las prácticas con mayor valor y complejidad que se
han realizado en el curso.

Hablando más técnicamente, el uso de dos módulos y una instancia para poder unir
estos para poder ser usados adecuadamente; Fue una de las prácticas más
interesantes en cuanto a contenido, se tuvo que realizar básicamente una
calculadora lógica y aritmética de operaciones básicas.
En estas nuevas experiencias, hubo correcciones que se deben mencionar; tal
como cambiar el método de la resta que se realizaba dentro de la síntesis del código,
debido a que este no se realizaba de una manera adecuada, considerando que
debía tratarse a tal operación como naturalmente era, y no forzarlo a considerar
valores con predisposición. Fue una buena lección aprendida, que no solo hay más
de un camino o manera existente, ni que el hecho de que funcione, signifique que
todo esté completamente bien, o mejor dicho, optimizado.

García Ortiz Ricardo


Tras haber concluido con la realización de la presente practica y su posterior
evaluación he de decir que es la más compleja hasta el momento en términos de su
estructura al contar con los módulos de la ALU y el multiplexado, así mismo con la
cantidad de operaciones y los procesos que se usaron para trabajar las IOs pudieron
llegar a surgir, no tanto problemas, sino más bien métodos que diferían en cierto
punto con los que nos indicó al momento de la evaluación, y en términos generales
y comunes considero que se aprendió de esta práctica más acerca de los aspectos
físicos y de conexión aparte de lo teórico necesario, así como también el utilizar las
herramientas adecuadas para los datos o señales adecuados.

Ruiz Pérez Axel Antonio


Gracias a la realización de esta práctica logre aplicar muchos de los conocimientos
adquiridos a lo largo del curso como la utilización de procesos, conversión de datos,
entre otras cosas, en conjunto con un nuevo concepto como lo es la instanciación,
el cual me resulta un concepto demasiado importante, ya que a mi parecer permite
tener un mejor control del circuito VHDL diseñado al generar esquemáticos más
sencillos de comprender, así como deja la puerta abierta a la reutilización de código
la realizado anteriormente, como fue en este caso, lo relacionado con el barrido de

33
los displays y de esta manera reducir el tiempo de realización de un determinado
código.

Esta práctica me permitió comprender a mayor profundidad el funcionamiento de


una ALU, así como la importancia de utilizar banderas para ayudar a interpretar de
mejor manera los datos presentados en la salida de la misma. Considero que este
concepto resulta de gran importancia en nuestro desarrollo como estudiantes de
ingeniería, ya que representa parte de la base de los procesadores que son de gran
importancia para el mundo actual en el que vivimos.

Villela Salinas Vincent Alejandro


Después de realizar la práctica, me quedo más claro cómo es que funciona una
ALU, pues antes me era difícil entender cómo es que era posible el tener dos tipos
de procesamiento de datos en un mismo componente en VHDL, siendo el caso de
las operaciones lógicas y el de las operaciones aritméticas.

De igual entendí de mejor manera como es que una ALU se puede, por así decirlo,
"Comunicar" los datos que esta misma maneja, pues si bien puede considerarse
como una comunicación sumamente básica mediante displays y leds, nos sirve de
preámbulo para poder entenderlo mejor a futuro, y es que considero que todo esto
es un buen inicio para poder comprender como es que funcionan sistemas más
complejos.

34
9 Referencias

[1] M. Sanches-Elez, Introduccion a la programacion en VHDL, Madrid: Facultad de


Informática Universidad Complutense de Madrid, 2014.
[2] Digilent, Basys 3 FPGA Board Reference Manual, Washington: Digilent, 2019.
[3] T. L. Floyd, Fundamentos de sistemas digitales, Madrid: Pearson Educacion, 2006.
[4] L. A. Huergo, «Aritmética binaria,» 4 Abril 2018. [En línea]. Available:
[Link] [Último acceso: 14 Junio 2021].
[5] C. M. J. Antonio, «Complemento a 1 y 2 de números binarios,» 7 Junio 2011. [En
línea]. Available: [Link] [Último
acceso: 14 Junio 2021].
[6] EcuRed, «Unidad Aritmético Lógica,» EcuRed, 22 Julio 2019. [En línea]. Available:
[Link] [Último acceso:
14 Junio 2021].
[7] Oposinet, «Componentes, estructura y funcionamiento de la unidad central de
proceso,» Oposinet, 21 Julio 2014. [En línea]. Available:
[Link]
componentes-estructura-y-funcionamiento-de-la-unidad-central-de-proceso/. [Último
acceso: 8 Junio 2021].
[8] «Decodificadores,» Circuitos112, 20 Mayo 2021. [En línea]. Available:
[Link] [Último acceso: 23
Mayo 2021].
[9] Xilinx, «Working with VHDL Libraries,» 2009. [En línea]. Available:
[Link]
th_vhdl_libraries.htm#:~:text=VHDL%20libraries%20allow%20you%20to,use%20in%
20your%20VHDL%20files.&text=In%20Project%20Navigator%2C%20a%20VHDL,libr
aries%20in%20the%20Libraries. [Último acceso: 18 04 2021].

35

También podría gustarte