El complemento / sumador complementario de Two no funciona correctamente

-1

Hola soy de colombia lo siento mi ingles. Estoy desarrollando un proyecto simple, un sumador / restador complementario de dos para 4 bits. Me he desarrollado de la siguiente manera, pero en la simulación no me da el resultado esperado y no sé cuál es el problema.TY

library IEEE;

USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;


entity negado is
    port (
        Y, signo : in STD_LOGIC;
        S, Carry : out STD_LOGIC
    );
end negado;

architecture Behavioral of negado is 
begin   
    S <= (((not Y) xor signo) and signo) or ((not signo) and Y);
    Carry <= (not Y) and signo;
end behavioral;




USE IEEE.STD_LOGIC_1164.ALL;

entity complemento_2 is
    port(
        --input
        Y1 : in STD_LOGIC_VECTOR (3 downto 0);
        Sign : in STD_LOGIC;
        --output
        Cout : out STD_LOGIC;
        Sal : out STD_LOGIC_VECTOR (3 downto 0) 
    );
end complemento_2;

architecture Behavioral of complemento_2 is --Después de la arquitectura definimos la instanciación correspondiente a cada componente
    component negado
        port (
            Y, signo : in STD_LOGIC;
            S, Carry : out STD_LOGIC
        );
    end component;  

    signal Caux : STD_LOGIC_VECTOR(3 DOWNTO 0);

begin
            ins_negado1: negado port map( Y => Y1(0), signo => sign, S => Sal(0), Carry => Caux(0));
            ins_negado2: negado port map( Y => Y1(1), signo => Caux(0), S => Sal(1), Carry => Caux(1));
            ins_negado3: negado port map( Y => Y1(2), signo => Caux(1), S => Sal(2), Carry => Caux(2));
            ins_negado4: negado port map( Y => Y1(3), signo => Caux(2), S => Sal(3), Carry => Caux(3));
            Cout <= Caux(3);
end Behavioral;
    

1 respuesta

1

¿Por qué tan complejo? (No (Y) xor (signo)) y (signo) es exactamente equivalente a (Y) y (signo). ¿Esto fue pensado? De hecho, es aún peor, ya que esta condición se “combina” con ((Y) y No (signo)). El resultado siempre será Y.

(A y B) o (A y Not (B)) es simplemente A.

Es posible que desee mapear esto como un diagrama lógico primero, luego volver a la vhdl.

    
respondido por el VeryHDL

Lea otras preguntas en las etiquetas