VHDL 8-битный сумматор с переносом и тестовым стендом - PullRequest
1 голос
/ 07 апреля 2020

Heyo! Я пытался снова заняться программированием vhdl для некоторых будущих классов, пытался создать простой 8-разрядный сумматор и хотел проверить его с помощью testbench. (Я работаю с Vivado Xilinx Software между прочим ~)


Я не получаю никаких синтаксических ошибок, но он показывает переменные как "U" (я полагаю, неопределенный?) Надеюсь, что это легко посмотри что я сделал (и почему лол). Да, но я действительно не могу найти проблему ??

Мой код:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity addierer is
    Port ( a : in STD_LOGIC_VECTOR(7 downto 0);
           b : in STD_LOGIC_VECTOR(7 downto 0);
           cin : in STD_LOGIC;
           s : out STD_LOGIC_VECTOR(7 downto 0);
           cout : out STD_LOGIC);
end addierer;

architecture Behavioral of addierer is


COMPONENT volladdierer is
    Port ( a    : in STD_LOGIC;
           b    : in STD_LOGIC;
           cin  : in STD_LOGIC;
           s    : out STD_LOGIC;
           cout : out STD_LOGIC
           );
end COMPONENT;

signal c : STD_LOGIC_VECTOR(6 downto 0);

begin

    PROCESS (a,b,cin)
    BEGIN

    s(0) <= a(0) xor b(0) xor cin; --erstes s wird noch mit cin berechnet
    c(0) <= (cin and b(0)) or (cin and a(0)) or (a(0) and b(0)); --sowie das erste cout

    for i in 1 to 7 loop --Schleife um Stellen der Arrays durchzugehen

        s(i)    <= a(i) xor b(i) xor c(i-1);
        c(i)      <= (c(i-1) and b(i)) or (c(i-1) and a(i)) or (a(i) and b(i));    

    end loop;

    cout <= c(6);

    END PROCESS;

end Behavioral;

TestBench Я использовал:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity testbench_addierer is
--  Port ( );
end testbench_addierer;

architecture Behavioral of testbench_addierer is


                SIGNAL a    : STD_LOGIC_VECTOR(7 downto 0);
                SIGNAL b    : STD_LOGIC_VECTOR(7 downto 0);
                SIGNAL cin  : STD_LOGIC;
                SIGNAL s    : STD_LOGIC_VECTOR(7 downto 0);
                SIGNAL cout : STD_LOGIC;

                COMPONENT addierer IS
                    PORT(
                            a   : IN STD_LOGIC_VECTOR(7 downto 0);
                            b   : IN STD_LOGIC_VECTOR(7 downto 0);
                            cin : IN STD_LOGIC;
                            s   : OUT STD_LOGIC_VECTOR(7 downto 0);
                            cout: OUT STD_LOGIC
                        );
                END COMPONENT;




begin

U1: addierer
PORT MAP( 
        a => a,
        b => b,
        cin => cin,
        s => s,
        cout => cout
        ); 



    process
        begin


            a <= "00000000" after 0ms;
            a <= "00000001" after 10ms;
            a <= "01010101" after 20ms;

            b <= "00000000" after 0ms;
            b <= "10001001" after 10ms;
            b <= "00000001" after 20ms;

            cin <= '0' after 0ms;
            cin <= '0' after 10ms;
            cin <= '0' after 20ms;



    end process;
end Behavioral;

Спасибо уже и хму, если что-то неясно в моем коде !! (и, пожалуйста, имейте в виду, что я абсолютный новичок .. xD)

...