Verilog 状态的枚举文字减速是否保证无故障状态机?

Verilog 状态的枚举文字减速是否保证无故障状态机?,verilog,system-verilog,state-machine,asic,Verilog,System Verilog,State Machine,Asic,状态机的状态枚举是否保证了无故障行为,就像为状态分配如下顺序一样 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 condit

状态机的状态枚举是否保证了无故障行为,就像为状态分配如下顺序一样

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
enum{a,b,c}状态;
//如果你要申报
参数a=3'b000;
参数b=3'b010;
参数c=3'b011;
/////////////////////////
始终@(posedge clk)开始
如果(重置)开始
//初始条件
结束
否则开始
案件(州)开始
a:开始

状态默认情况下,
enum
标签获取编码a=0、b=1、c=2。您可以给出明确的编码:

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

但是许多合成工具都有指令,让工具为它们识别的FSM样式决定最佳编码

默认情况下,
enum
标签获取编码a=0、b=1、c=2。您可以给出明确的编码:

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

但是许多合成工具都有指令,让工具为它们识别的FSM样式决定最佳编码

要使状态机“可靠”工作,所有输入信号必须满足构成状态机的所有寄存器的设置和保持时间

这与状态值的定义无关。直接或通过枚举

如果一个或多个控制信号异步到达,则无法保证下一个状态是什么

即使状态是使用灰色代码定义的,并且遵循灰色序列(参见下面的示例)。这并不能保证状态机“可靠”工作

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
localparam ST0=2'b00,
ST1=2'b01,
ST2=2'b11,
ST3=2'b10;
...
案件(州)
ST0:if(in==2'b11)

状态要使状态机“可靠”工作,所有输入信号必须满足构成状态机的所有寄存器的设置和保持时间

这与状态值的定义无关。直接或通过枚举

如果一个或多个控制信号异步到达,则无法保证下一个状态是什么

即使状态是使用灰色代码定义的,并且遵循灰色序列(参见下面的示例)。这并不能保证状态机“可靠”工作

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
localparam ST0=2'b00,
ST1=2'b01,
ST2=2'b11,
ST3=2'b10;
...
案件(州)
ST0:if(in==2'b11)
状态