无故障状态机输出

时间:2019-02-25 01:41:37

标签: verilog fpga system-verilog state-machine

在本文中 Clemford E. Cummings的具有合成优化,无毛刺输出的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 :(得分:1)

是不同的。至少是一件事。在您的示例中

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

state重置为IDLE时,在rst_n为低(并且不是在相同的时钟脉冲)下,将不执行else部分,也不会执行case语句。

在Cummings的示例中,state将在相同的时钟沿求值,尽管由 always @(state, ...) 阻止