Está en la página 1de 9

Taller 3

Susana M. Gómez Coronel

Jeremy Rodríguez Quezada

Juan David Granados Pacheco

Sumador- Restador

1. Se diseñó un testbench para comprobar el funcionamiento del código “adders.vhd”, tomando las
variables LARGE=6 y SMALL=4, quedando así:
Ilustración 1. Código testbench de adder.

Al simular en Model Sim se obtuvo:

Ilustración 2. Simulación del bloque adder.

En la anterior ilustración se observa que funciona correctamente la suma ya que:


 En el primer caso de la suma de 4 bits, al sumar a (0000) + b (0001)= sum4(0001), el resultado
es correcto; y así para los demás ejemplos antes presentados, todas las sumas realizadas son
correctas.
 Para el primer caso de la suma de 6 bits se tiene que a (000000) + b (000001)= sum6(000001),
el resultado es correcto; y así para los demás ejemplos antes presentados, todas las sumas
realizadas son correctas.
Además, que cuando el resultado es mayor a 4 bits en el caso de cout4 y 6 bits en el caso de cout6, se
levanta la bandera cout que corresponde al carry de salida de la suma, esto se comprueba en el caso
2. Comprobando así que funcionan correctamente los dos sumadores.

2. Primero se compilo y se comprobó el funcionamiento del código add_subs realizando el testbench de


este:

Ilustración 3. Código testbench para add_sub.


Luego, se hizo uso del código add_w_carry, el cual es el siguiente:

Ilustración 4. Código add_w_Carry.

Para realizar el siguiente código:

Ilustración 5. Código realizado.

Se diseñó un testbench para comprobar el funcionamiento del anterior circuito:


Ilustración 6. Testbench para comprobar funcionamiento.

Y se obtuvo:

Ilustración 7. Resultado de la simulación.

En la ilustración 10 se observa el testbench del código realizado, para comprobar su correcto


funcionamiento. Cuando la señal “add_subsn_tb” sea “1” se sumarán los números a y b, en cambio
cuando esta señal sea “0” se restarán; la señal cout para la suma corresponderá al carry y para la resta
corresponderá al signo negativo (-). Ya teniendo esto claro, se comprueba el funcionamiento en tres
casos:
 Suma: Para este tomamos el ejemplo 1, donde a=0101 (5) y b=0011 (3), no existe carry de salida,
la señal add_subsn esta en “1” y sum=1000 (8). Comprobando que la suma es correcta.
 Resta: Para este tomamos el ejemplo 3, donde a=0011 (3) y b=0101 (5), la señal add_subsn está
en “0”, sum=0010 (-2) y cout está en “1” ya que el resultado es negativo. Comprobando que la
resta es correcta.
 Carry: Para este tomamos el ejemplo 4, donde a=1111 (15) y b=1111 (15), la señal add_subsn
está en “1”, cout está en “1” ya que se tiene un carry y sum=1101 (30, teniendo en cuenta el
bit de carry). Comprobando que la suma con carry es correcta.

3. Para mostrar el resultado en los siete segmentos es necesario el código add_subs, un código que
separe los dígitos del resultado obtenido en el código anterior y un código para convertir ese resultado
en los bits que encenderán cada segmento del display.
Cómo ya se tenía el primero, se procedió a crear el segundo, obteniendo el siguiente:

Ilustración 8. Código realizado para separar los dígitos del resultado.

Luego, se creó el código para convertir el resultado, así:

Ilustración 9. Código realizado para convertir los dígitos del resultado.


Y finalmente, se realizó el código donde se unen estos 3 anteriores mencionados y poder mostrar el
resultado en los display 7 segmentos, así:

Ilustración 10. Código de unión para mostrar el resultado en los 7 segmentos.

Se realiza el testbench del código mostrado en la ilustración 12, así:


Ilustración 11. Código testbench mostrar 7 segmentos.

Se aclara que los siete segmentos se enumeraron de derecha a izquierda, donde el seg3 será el signo
y los segmentos 1 y 2 corresponderán al número; también que el 0 en la señal de salida de los siete
segmentos representa un segmento encendido en el display.
Al realizar la simulación en Model Sim tenemos:

Ilustración 12. Simulación del código para mostrar en los 7 segmentos

En la ilustración anterior se observa:


 Para una suma, en el primer ejemplo, se tiene que a=0101 (5), b=0011 (3), la señal add_subsn
está en “1”, por lo que la salida debe ser el número 8. El seg3 está apagado ya que el resultado
es positivo, en el seg2 se muestra un 0 y en seg1 se muestra un 8. Cómo se comprueba en la
siguiente ilustración:
Ilustración 13. Resultado para la suma.

Se aclara que el numero a se encuentra en los Switch del 4 al 7, y el número b del Switch 0 al
3 y que el botón que corresponde a add_subsn es el 2, para todos los casos.
 Para una resta, en el segundo ejemplo, se tiene que a=0101 (5), b=0011 (3), la señal
add_subsn está en “0”, por lo que la salida debe ser el número 2. El seg3 está apagado ya que
el resultado es positivo, en el seg2 se muestra un 0 y en seg1 se muestra un 2. Cómo se
comprueba en la siguiente ilustración:

Ilustración 14. Resultado para la resta con respuesta positiva.

 Para una resta con resultado negativo, en el tercer ejemplo, se tiene que a=0011 (3), b=0101
(5), la señal add_subsn está en “0”, por lo que la salida debe ser el número -2. El seg3 está
encendido y muestra el signo (-) ya que el resultado es negativo, en el seg2 se muestra un 0 y
en seg1 se muestra un 2. Cómo se comprueba en la siguiente ilustración:

Ilustración 15. Resultado para la resta con respuesta negativa.

 En el cuarto ejemplo, se tiene que a=1111 (15), b=1111 (15), la señal add_subsn está en “1”,
por lo que la salida debe ser el número 30. El seg3 está apagado ya que el resultado es
positivo, en el seg2 y en seg1 se muestra una E en cada uno ya que cómo hay carry, se activa
la señal de error. Cómo se comprueba en la siguiente ilustración:
Ilustración 16. Resultado para overflow.

Con lo anterior se comprueba el correcto funcionamiento de todo el proyecto. Se adjunta el video


donde se evidencia este:
https://livejaverianaedu-
my.sharepoint.com/:v:/g/personal/rodriguez_jeremy_javeriana_edu_co/EX82bsamNs9EqrYSmcnlR
DgB07tsWx9H61lFam1KHEONbA?e=D9oZUl

También podría gustarte