Гарантирует ли enum буквальное замедление состояний безошибочный конечный автомат? - PullRequest
0 голосов
/ 28 января 2019

ли буквальное замедление состояний перечисления для конечного автомата, гарантирует ли то же самое поведение без сбоев, как и при назначении состояний, как показано ниже?

enum { a,b,c} states; 

//vs if you were to declare

parameter a = 3'b000;
parameter b= 3'b010;
parameter c = 3'b011;

/////////////////////////

always @(posedge clk) begin  
  if ( reset) begin
    // initial condition 
    end
  else begin
    case ( state) begin
      a: begin
        state<=b;
      end
      b: begin   
        state<=c;
      end
      c: begin
        state<= a;
      end
      default: state<=c;
    endcase
  end
end

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Чтобы конечный автомат работал «надежно», все входные сигналы должны соответствовать настройке и времени удержания всех регистров, которые составляют конечный автомат.

Это не имеет никакого отношения к определению значений состояния.Либо прямой, либо через перечисление.

Если один или несколько управляющих сигналов поступают асинхронно, не гарантируется, каким будет следующее состояние.

Даже если состояния определены с использованием кода Грея и соответствуют последовательности Грея (см. Пример ниже).Это не гарантирует, что конечный автомат будет работать «надежно».

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» на входе.Следующее состояние автомата может принять любое возможное значение (или остаться в старом состоянии).

0 голосов
/ 28 января 2019

По умолчанию метки enum получают кодировки a = 0, b = 1, c = 2.И вы можете дать явные кодировки:

enum { a=0,b=2,c=3} states; 

Но многие инструменты синтеза имеют директивы, позволяющие инструменту выбирать наилучшие кодировки для стилей FSM, которые они распознают.

...