В обоих случаях ваши блоки всегда выполняются только один раз за передний фронт клика. Они будут не переоценены в том же дельта-цикле (если у вас нет глюков в самом clk).
Код внутри любого всегда блока выполняется последовательно, как и в других языках программирования.
Итак, согласно вашим примерам, первый будет увеличивать 'i' каждые секунд фронта тактового сигнала, в то время как второй будет увеличивать его каждый фронт тактового сигнала.
Я обновляю переменную case, "i", как показано в приведенной ниже выдержке 1, это вообще необходимо, чтобы не пропустить ни одного шага в моем FSM?
Я не уверен, что вы здесь имеете в виду, но i
будет увеличиваться один за другим без пропуска, и оператор case в вашем fsm будет иметь возможность реагировать на каждое значение 'i' в обоих случаях. Будет разница во времени из-за того, что вы использовали ITERATE
в первом примере. Кроме того, в первом примере i
будет увеличен до оператора case, а во втором примере после . Это другое отличие.
Кстати, слово atomic
не относится ни к одному из случаев. Что ты имел в виду там?
Также обратите внимание, что вы не написали свой конечный автомат в соответствии с общими рекомендациями, разделением состояния и логикой перехода, а также, скорее всего, неправильно использовали назначения блокировки в своих примерах. Вероятно, это приемлемые примеры кода для тестового стенда, но они могут не подходить для RTL.