Вероятнее всего я ошибался.
Сожалею, что смутил и довел до экспериментов.
Есть шаблоны синтезаторов, они описаны в документации.
Для уверенного получения регистра с разрешением тактирования, нужно следовать шаблонам.
Это не значит, что к такому же результату не приводят другие способы.
Привычный для меня шаблон для получения регистра с асинхронным сбросом и разрешением клока выглядит
как сначала проверка сброса, затем фронт клока и лишь потом разрешение тактирования.
Такой порядок позволяет пропустить часть веток и не получить асинхронные петли.
Код
process(async_reset, clock)
begin
if async_reset='1' then
reg <= reg_constant;
elsif rising_edge(clock) then
if clock_enable='1' then
reg <= some_expression;
end if;
end if;
end process;
Вот тут будет разница, но это очевидно и записано не одно и тоже.
Код
if a='0' then
if rising_edge(clock) then
reg <= some_data;
end if;
else
reg <= some_noise; -- latch
end if;