Я работаю над проектом, использующим VHDL, и столкнулся с проблемой во время одного из моих испытательных стендов. Я тестирую все входные комбинации для комбинационного компонента, используя цикл for в моем процессе стимула, но у меня есть оператор case внутри цикла foor, который не ведет себя так, как мне бы хотелось.
Это сегмент кода, который ведет себя не так, как я хочу:
for i in 0 to 20 loop
case opcode is
when "01001" | "01010" | "01100" | "01110" | "10000" =>
d <= '0';
wait for period;
d <= '1';
when "00010" | "00100" | "00101" | "00110" | "10001" | "10010" | "10011" =>
d <= '1';
when others =>
d <= '0';
end case;
wait for period;
opcode <= opcode + 1;
end loop;
В качестве примера я ожидаю, что d
станет 1
, когда opcode
равно 00010
. В симуляции, однако, d
становится 1
, когда opcode
становится 00011
, а не 00010
(то же самое для всех остальных случаев), как если бы значение, проверяемое оператором case, уменьшалось на 1. Я изменил opcode
внутри оператора case до opcode+1
, и он работал правильно. Я знаю, что VHDL является языком описания аппаратных средств и его поведение отличается от языка программирования, но я все еще не могу понять, почему это происходит, и хотел бы получить объяснение.