выходы конечного автомата без сбоев - PullRequest
0 голосов
/ 25 февраля 2019

в статье Методы кодирования и написания сценариев для проектов FSM с оптимизированными синтезом выходами без сбоев по Клиффорду Э. Каммингсу

для машины состояний без сбоев, это относится к состоянию разделениярегистр (т. е. блок сброса) из блока перехода состояний:

enter image description here enter image description here

Мой вопрос в терминах реальногоповедение (не симуляция, поскольку симуляции не отображают глюки) эквивалентно следующему:

always@(posedge clk or negedge rst_n or ws or go)

 if( !rst_n) 
   state<= IDLE; // initializing the state  

 else begin 

  case(state) 
      IDLE: begin

        if(go) state<= read;
         else state<= idle;

       end

       // rest of state transition code
  endcase

 end

// the *registered outputs sequential always block* goes here

1 Ответ

0 голосов
/ 25 февраля 2019

это другое.По крайней мере, с одной стороны.В вашем примере

if( !rst_n) 
  state<= IDLE; // initializing the state  
else begin 
 case(state) 

, когда state сброшен в IDLE, часть else не будет выполнена, а инструкция case не будет выполнена, пока rst_n низок (и не в то же времяPulse).

В примере Cummings state будет оцениваться на одном и том же фронте тактового сигнала, несмотря на значение сброса блоком always @(state, ...)

...