1 votos

Convirtiendo un simple sumador de 4 bits en un sumador de 4 bits con acarreo de entrada y salida

He codificado un sumador simple de 4 bits con signo. No tiene carry in ni carry out, por lo que fácilmente se desborda. A continuación puedes ver mi código.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity four_bit_adder_simple is
        port(
                A, B : in std_logic_vector(3 downto 0);
                Sum : out std_logic_vector(3 downto 0));
end four_bit_adder_simple;

architecture signed_impl of four_bit_adder_simple is
begin
        sum <= std_logic_vector(signed(A) + signed(B));
end signed_impl;

Mapeo de puertos:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity four_bit_adder_tester is
    port(
            SW : in std_logic_vector(7 downto 0);
            LEDR : out std_logic_vector(3 downto 0));
end four_bit_adder_tester;

architecture tester_impl of four_bit_adder_tester is

begin

i1: entity work.four_bit_adder_simple(signed_impl)
    port map(
    A => SW(3 downto 0),
    B => SW(7 downto 4),
    Sum => LEDR(3 downto 0)
    );
end architecture;

¿Cómo puedo añadir un carry-in y un carry-out usando la función resize para cambiar el tamaño de bits de los vectores antes de sumarlos?

1voto

Sunil Kumar Sahoo Puntos 21032

No necesitas la función de redimensionar. Simplemente crea una señal interna de la longitud correcta y concatena 0's a tus entradas. Por ejemplo:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity four_bit_adder_simple is
    Port ( a    : in  std_logic_vector(3 downto 0);
           b    : in  std_logic_vector(3 downto 0);
           cin  : in  std_logic;
           sum  : out std_logic_vector (3 downto 0);
           cout : out std_logic );
end four_bit_adder_simple;

architecture Behavioral of four_bit_adder_simple is
    signal total : std_logic_vector(4 downto 0);
begin

    total <= ('0'&a) + ('0'&b) + cin;
    sum   <= total(3 downto 0);
    cout  <= total(4);

end Behavioral;

edit


En retrospectiva, usar el no estándar std_logic_unsigned no es la mejor aproximación (¿Cuándo usar las bibliotecas VHDL std_logic_unsigned y numeric_std?).

Mira mi respuesta aquí en su lugar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X