Чтобы конечный автомат работал «надежно», все входные сигналы должны соответствовать настройке и времени удержания всех регистров, которые составляют конечный автомат.
Это не имеет никакого отношения к определению значений состояния.Либо прямой, либо через перечисление.
Если один или несколько управляющих сигналов поступают асинхронно, не гарантируется, каким будет следующее состояние.
Даже если состояния определены с использованием кода Грея и соответствуют последовательности Грея (см. Пример ниже).Это не гарантирует, что конечный автомат будет работать «надежно».
localparam ST0 = 2'b00,
ST1 = 2'b01,
ST2 = 2'b11,
ST3 = 2'b10;
...
case (state)
ST0 : if (in==2'b11)
state <= ST1;
ST1 : if (in!=2'b11)
state <= ST2;
ST2 : if (in==2'b10)
state <= ST3;
ST3 : if (in==2'b01)
state <= ST0;
endcase
Если in
поступает асинхронно, он может перейти из любого состояния в любое другое состояние.Это потому, что логика, управляющая каждым регистром, должна быть «согласована».Пока сигнал не установлен, он может меняться между «1» или «0».Таким образом, каждый регистр может получить «1» или «0» на входе.Следующее состояние автомата может принять любое возможное значение (или остаться в старом состоянии).