Как мне узнать, что не так с моим кодом, если Vivado выдает расплывчатые сообщения

#vhdl

Вопрос:

Я пытаюсь сложить 2 4-битных числа вместе, а также добавить дополнительный бит спереди, чтобы входные данные имели тот же размер, что и выходные.

Мой .vhd выглядит следующим образом:

 library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity practica_7_ejercicio_3 is
    Port ( a : in STD_LOGIC_VECTOR (3 downto 0);
           b : in STD_LOGIC_VECTOR (3 downto 0);
           suma : out STD_LOGIC_VECTOR (4 downto 0));
end practica_7_ejercicio_3;

architecture Behavioral of practica_7_ejercicio_3 is

signal signoA: STD_LOGIC;
signal signoB: STD_LOGIC;

begin

suma <= (signoA amp; a)   (signoB amp; b);

end Behavioral;
 

в то время как мой тестовый стенд выглядит так:

 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

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

architecture Behavioral of practica_7_ejercicio_3_TB is

component practica_7_ejercicio_3 is
    Port ( a : in STD_LOGIC_VECTOR (3 downto 0);
           b : in STD_LOGIC_VECTOR (3 downto 0);
           suma : out STD_LOGIC_VECTOR (4 downto 0));
end component;

signal T_a : STD_LOGIC_VECTOR (3 downto 0);
signal T_b : STD_LOGIC_VECTOR (3 downto 0);
signal T_suma : STD_LOGIC_VECTOR (4 downto 0);

begin

ETIQUETA: practica_7_ejercicio_3 PORT MAP (a => T_a,
                                           b => T_b,
                                           suma => T_suma);
 
process 
begin
    T_a <= "1110";    
    for I in 0 to 8 loop    
        T_b <= STD_LOGIC_VECTOR(TO_UNSIGNED(I,2));
        wait for 1 us;
    end loop;
  
   T_b <= "0111";    
    for I in 0 to 8 loop    
        T_a <= STD_LOGIC_VECTOR(TO_UNSIGNED(I,2));      
        wait for 1 us;
    end loop;
    
    wait; 
end process;                                           


end Behavioral;
 

все компилируется правильно, реализация успешна, она также правильно генерирует битовый поток, но когда я пытаюсь запустить моделирование времени после реализации, оно останавливается при создании функции шага и просто возвращает, что оно не удалось при выполнении этой задачи, и еще одна вещь, похожая на ошибку,-это сообщение:
Чистый вход в модуль/сущность practica_7_ejercicio_3 не имеет драйвера[practica_7_ejercicio_3_vhd:43]

Комментарии:

1. Единственный драйвер в practica_7_ejercicio_3 предназначен для suma . Процесс имеет драйвер для каждого скалярного или скалярного элемента сигнала с оператором присваивания (драйверы IEEE Std 1076-2008 14.7.2, оператор параллельного присвоения эквивалентен оператору процесса, содержащему оператор последовательного присвоения, 11.6). Сеть определена в обновлении сигнала 14.7.3.4. Я бы поставил это больше под заголовком «достаточно хорошо разбираюсь в VHDL», чтобы интерпретировать сообщение об ошибке. Вы пытаетесь провести анализ времени на пути, которого нет.

2. Что в этом неясного? signoA это сигнал, в котором ничто не определяет значение. Небольшая подсказка : сначала запустите моделирование поведения; вы бы увидели эту проблему намного быстрее ( значение было бы U в окне волны).