Одна проблема, с которой большинство людей сталкиваются с VHDL или любыми другими языками HDL, заключается в том, что они не понимают, что это не последовательный код. ВСЕ, что у вас внутри процесса, происходит параллельно.
Хороший пример от Ахмеда:
PROCESS (count)
BEGIN
count <= not count;
END PROCESS;
Симулятор HDL пытается установить значение счетчика на «не считать» после каждого такта симуляции, и изменение вызовет другой тик, так как значение счетчика изменяется, и оно продолжается до тех пор, пока не произойдет сбой или сбой. Вы вышеупомянутая проблема.
Чтобы HDL работал должным образом, вы должны использовать задержки, либо в виде часов, либо, если они не для синтеза, чтобы использовать действительную задержку.
Изменив вышеуказанный код на
PROCESS (count)
BEGIN
count <= not count after 1 ns;
END PROCESS;
Имитация будет работать, и счетчик будет переключаться каждые 1 нс.