Я создаю тестовую среду для комбинационной логики, где a, b, cin - входные данные для тестируемого экземпляра.Все это работает нормально.
Тем не менее, я получаю сигнал test_s путем добавления в процесс тестирования, и это кажется странно задержанным.Не имеет значения продолжительность моих операторов ожидания, я могу изменить единицы измерения от ps до ns, и симптомы будут такими же.Кажется, что происходит то, что a и b установлены правильно, но test_s не изменяется, пока a и b не изменят свои значения.Когда это происходит, test_s фактически обновляется до предыдущих значений a и b.Поэтому сначала, когда a и b становятся 0, test_s становится XXXXXXX.Затем, когда a становится 1, test_s становится 0000000, когда оно должно быть фактически 00000001.
-- Instantiate the Unit Under Test (UUT)
uut: FastCarry8 PORT MAP (
a => a,
b => b,
cin => cinVec(0),
cout => cout
);
signal a : std_logic_vector(7 downto 0) := (others => '0');
signal b : std_logic_vector(7 downto 0) := (others => '0');
signal cinVec : std_logic_vector(1 downto 0);
signal test_s : std_logic_vector(8 downto 0);
-- Stimulus process
stim_proc: process
begin
-- hold reset state
wait for 10 ps;
carry_gen: for carry in 0 to 1 loop
cinVec <= std_logic_vector(to_unsigned(carry, 2));
b_gen: for j in 0 to 255 loop
a_gen: for i in 0 to 255 loop
a <= std_logic_vector(to_unsigned(i, 8));
b <= std_logic_vector(to_unsigned(j, 8));
test_s <= std_logic_vector(resize(unsigned(a), test_s'length) +
unsigned(b) + unsigned(cinVec));
wait for 5ps;
ASSERT (test_s(8) = cout)
REPORT "Carry out failed for cin = 0!";
wait for 5ps;
end loop a_gen;
end loop b_gen;
end loop carry_gen;