#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
в окне волны).