В симуляции, все в VHDL по умолчанию равно левому значению.В вашем коде это будет sm_init_lattice
, что объясняет, почему ваша симуляция проходит.
Однако я не вижу сигнала сброса.Таким образом, в вашем оборудовании триггеры, которые хранят состояние вашего FSM, будут сброшены до некоторых состояний, но это, вероятно, не та комбинация, которая представляет состояние sm_init_lattice
.
Без вашего изменения в аппаратном обеспечении, FSM, возможно, инициализируется до некоторого состояния около sm_end
, и, когда он перейдет в это состояние, он останется там.Внося изменения, вы позволяете FSM совершать больше кругов по дорожке, поэтому он будет проходить через все состояния, независимо от того, в каком состоянии он изначально находится.
Решение состоит в том, чтобы осуществить надлежащий сброс (либо асинхронный, либо асинхронный).или синхронные - люди, работающие на ПЛИС, похоже, предпочитают синхронные).
Использование перечисляемых типов для машин конечного кода полезно, потому что код легко читать и поддерживать, вам не нужно фиксировать какие-либо кодировки состояний.и вы увидите, в каком состоянии находитесь на дисплее формы сигнала.Однако использование перечисляемых типов для кодирования конечных автоматов не позволяет моделировать унифицированное состояние, что, вероятно, является причиной вашей проблемы.System-Verilog превосходит VHDL в этом отношении, потому что можно объявить перечислимый тип, который также может быть неизвестен.