Во-первых, назначения по умолчанию предотвращают защелки только при отсутствии часов - т.е. комбинационная логика.
В логике регистра / триггера (код, следующий за «ifising_edge (clock)»), назначения по умолчанию предотвращают условия удержания, которые являются нормальной частью логики регистра.Защелка никогда не будет произведена из кода под "ifising_edge (clock)".
OTOH, то, что у вас есть, я называю присвоением идентичности:
start_writing <= start_writing;
start_reading <= start_reading;
sequencer_count := sequencer_count;
Назначения идентичности не являются назначениями по умолчанию иуказать обратную связь явно.Это не мешает защелкам в комбинационной логике.
Назначение по умолчанию присваивает литеральное значение или значение из выходного сигнала комбинационной логики:
start_writing <= '0';
sequencer_count := "0000";
LedState <= LedNext;
Обратите внимание, что для объявления переменной в процессе инициализация выполняется толькокогда процесс разработан - что происходит в начале времени, а не каждый раз, когда процесс запускается:
variable sequencer_count : unsigned(3 downto 0) := (others => '0');
Это отличается от выполнения подпрограммы, которое создает и инициализирует переменные каждый раз, когда он вызывается.