Actividad 3 Solucion

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 12

ACTIVIDAD 3

DOCENTE:
JOSE LUIS CABRA LOPEZ

ALUMNO:
ANDRES SAENZ MOLINA

UNIPANAMERICANA - FUNDACION UNIVERSITARIA PANAMERICANA


SISTEMAS DIGITALES
D.C. 11/09/2021
En VHDL, generar un sumador/restador de dos números, siendo cada número de 3 bits. Este
sumador/restador debe tener la capacidad de aceptar números enteros (positivos y negativos)

Tener presente dentro de los entregables:

1.) Código del sumador

2.) Código de la unidad de testeo

3.) Imágenes de la simulación

4.) Favor comentar el código explicando la funcionalidad que se estaría realizando en cada
paso

SOLUCION
Codigo Sumadoradder:

Lo que debemos hacer ps es generar el nuevo fulladder en VHDL, iniciamos definiendo los
puestos tanto en las entrdas como las salidas, luego definimos las variables y por ultimo
definimos el bloque Cout Sumadoradder como se evidencia a continuacion:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Sumadoradder is
Port (
A: in std_logic;
B: in std_logic;
Cin: in std_logic;
Sun: out std_logic;
Cout: out std_logic
);
end Sumadoradder;

architecture Behavioral of Sumadoradder is

begin

Sun <= (not (A) and B and not (Cin)) or


(not (A) and not (B) and Cin) or
(A and not (B) and Cin) or
(A and B and Cin);
Cout <= (A and B) or (A and Cin) or (B and Cin);
end Behavioral;

Codigo fulladder:

Luego creamos un nuevo archivo fuentes llamdao el fulladder, creando un bloque para la
union de los cables, definimos el entity según los puertos de 4 bits, luego definimos la
arquitectura con señales definidas como x0,x1,x2,x3, ya que es la parte fundamental para
realizar las uniones en nuestro proyecto, se declara la estructura bajo los componentes
x0,x1,x2,x3 de std_logic con su respectivo mapeo port map para la conexión, como se
evidencia a continuacion.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity fulladder is
Port (
FA: in std_logic_vector(3 downto 0);
FB: in std_logic_vector(3 downto 0);
FCin: in std_logic;
FSun: out std_logic_vector(3 downto 0);
FCout: out std_logic_vector(3 downto 0)
);
end fulladder;

architecture Behavioral of fulladder is


signal x0,x1,x2,x3: std_logic;
-- component declaration
component Sumadoradder is
Port (
A: in std_logic;
B: in std_logic;
Cin: in std_logic;
Sun: out std_logic;
Cout: out std_logic
);

end component;
begin
B0: Sumadoradder port map(
A => FA(0),
B => FB(0),
Cin => '0',
Cout => x0,
Sun => FSun(0)
);

B1: Sumadoradder port map(


A => FA(1),
B => FB(1),
Cin => x0,
Cout => x1,
Sun => FSun(1)
);

B2: Sumadoradder port map(


A => FA(2),
B => FB(2),
Cin => x1,
Cout => x2,
Sun => FSun(2)
);

B3: Sumadoradder port map(


A => FA(3),
B => FB(3),
Cin => x2,
Cout => x3,
Sun => FSun(3)
);

end Behavioral;

Diseño de visualizacion

En nuestro diseño o bloque vemos que se evidencia nuestro proyecto y vemos que estan las
entradas y salidas tanto para A-B-Cin-Sun-Cout.
Código de texteo Sumadorrestador:

Se muestra nuestro testbench, para un sumador/restador de números enteros. Iniciamos


creando nuestro archivo llamado Sumadorrestador, una vez definida nuestra librería le
colocamos un nombre por work fulladder, luego colocamos los puertos definiendo las entras
y salidas por el in std_logic_vector con 4 bits, luego nuestra estructura colocando las señales
para nuestras variables definidas, luego definimos nuestro componente en genérico de
números enteros de N bits. Luego en los puertos le damos un valor difull y escanciamos el
componente y lo mapeamos a 4 y definimos las variables respecto del testbench, luego vamos
al proceso para realizar la prueba comenzamos con el report verificando sumador/restador,
enteros de 4 bits, con números enteros, eligiendo distintas sumas y restas con números con
igual o distintos signos de manera para cubrir todos los casos posibles.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.fulladder;

entity sumadorrestador is

generic (N : positive:= 3);


Port (FA_i : in std_logic_vector(3 downto 0);
FB_i : in std_logic_vector(3 downto 0);
FCin_i : in std_logic;
FSun_0 : out std_logic_vector(3 downto 0);
FCout_0 : out std_logic );

end sumadorrestador;

architecture Behavioral of sumadorrestador is

signal FA_T : std_logic_vector(3 downto 0) := (others =>'0');


signal FB_T : std_logic_vector(3 downto 0) := (others =>'0');
signal FCin_T : std_logic := '0';
signal FSun_T : std_logic_vector(3 downto 0);
signal FCout_T : std_logic;

begin
-- Connection stage
uut: entity sumadorrestador generic map (N => 3)
port map (FA_i => FA_T,
FB_i => FB_T,
FCin_i => FCin_T,
FSun_0 => FSun_T,
FCout_0 => FCout_T);
-- simulaction process
process begin
report "Verificando sumador/restador, enteros de 4 bits"
severity note;

FCin_t <= '0'; -----------------------------------SUMA

FA_T <= "0000"; --0


FA_T <= "0001"; --1
wait for 1 ns;
assert FSun_T="0001"
report "Falla para suma FA=0000, FB=0001"
severity failure;
assert FCout_T='0'
report "Falla para suma FA=0000, FB=0001"
severity failure;

FA_T <= "1101"; -- -3


FA_T <= "1001"; -- -7
wait for 1 ns;
assert FSun_T="0110"
report "Falla para suma FA=1101, FB=1001"
severity failure;
assert FCout_T='1'
report "Falla para suma FA=1101, FB=1001"
severity failure;

FA_T <= "0010"; -- 2


FA_T <= "0110"; -- 6
wait for 1 ns;
assert FSun_T="1000"
report "Falla para suma FA=0010, FB=0110"
severity failure;
assert FCout_T='1'
report "Falla para suma FA=0010, FB=0110"
severity failure;

FA_T <= "1000"; -- -8


FA_T <= "0011"; -- -3
wait for 1 ns;
assert FSun_T="1011"
report "Falla para suma FA=1000, FB=0011"
severity failure;
assert FCout_T='0'
report "Falla para suma FA=1000, FB=0011"
severity failure;

FA_T <= "1011"; -- -5


FA_T <= "1001"; -- -7
wait for 1 ns;
assert FSun_T="0100"
report "Falla para suma FA=1011, FB=1001"
severity failure;
assert FCout_T='1'
report "Falla para suma FA=1011, FB=1001"
severity failure;

FA_T <= "0111"; -- 7


FA_T <= "1110"; -- -2
wait for 1 ns;
assert FSun_T="0101"
report "Falla para suma FA=0111, FB=1110"
severity failure;
assert FCout_T='0'
report "Falla para suma FA=0111, FB=1110"
severity failure;

FA_T <= "1000"; -- -8


FA_T <= "0111"; -- 7
wait for 1 ns;
assert FSun_T="1111"
report "Falla para suma FA=1000, FB=0111"
severity failure;
assert FCout_T='0'
report "Falla para suma FA=1000, FB=0111"
severity failure;

FA_T <= "1101"; -- -3


FA_T <= "0001"; -- 1
wait for 1 ns;
assert FSun_T="1110"
report "Falla para suma FA=1101, FB=0001"
severity failure;
assert FCout_T='0'
report "Falla para suma FA=1101, FB=0001"
severity failure;

FCin_t <= '1'; -----------------------------------RESTA

FA_T <= "1101"; -- -2


FA_T <= "1001"; -- -7
wait for 1 ns;
assert FSun_T="0100"
report "Falla para resta FA=1101, FB=1001"
severity failure;
assert FCout_T='0'
report "Falla para resta FA=1101, FB=1001"
severity failure;

FA_T <= "1011"; -- -5


FA_T <= "1101"; -- -3
wait for 1 ns;
assert FSun_T="1110"
report "Falla para resta FA=1011, FB=1101"
severity failure;
assert FCout_T='0'
report "Falla para resta FA=1101, FB=1101"
severity failure;

FA_T <= "0110"; -- 6


FA_T <= "1101"; -- 3
wait for 1 ns;
assert FSun_T="0011"
report "Falla para resta FA=0110, FB=1101"
severity failure;
assert FCout_T='0'
report "Falla para resta FA=0110, FB=1101"
severity failure;

FA_T <= "0111"; -- 7


FA_T <= "1000"; -- -8
wait for 1 ns;
assert FSun_T="1111"
report "Falla para resta FA=0111, FB=1000"
severity failure;
assert FCout_T='1'
report "Falla para resta FA=0111, FB=1000"
severity failure;

FA_T <= "0101"; -- 5


FA_T <= "0001"; -- 3
wait for 1 ns;
assert FSun_T="0010"
report "Falla para resta FA=0101, FB=0001"
severity failure;
assert FCout_T='0'
report "Falla para resta FA=0101, FB=0001"
severity failure;

FA_T <= "1001"; -- -7


FA_T <= "1010"; -- -6
wait for 1 ns;
assert FSun_T="1111"
report "Falla para resta FA=1001, FB=1010"
severity failure;
assert FCout_T='0'
report "Falla para resta FA=1001, FB=1010"
severity failure;

FA_T <= "1111"; -- -1


FA_T <= "1011"; -- -5
wait for 1 ns;
assert FSun_T="0100"
report "Falla para resta FA=1111, FB=1011"
severity failure;
assert FCout_T='0'
report "Falla para resta FA=1111, FB=1011"
severity failure;

FA_T <= "0011"; -- 3


FA_T <= "0100"; -- 4
wait for 1 ns;
assert FSun_T="1111"
report "Falla para resta FA=0011, FB=0100"
severity failure;
assert FCout_T='0'
report "Falla para resta FA=0011, FB=0100"
severity failure;

report "¡Verificación exitosa!"


severity note;
wait;
end process;

end Behavioral;

Visualización final de nuestro simulador con la comprobación de los números


ingresados en el sistema:

También podría gustarte