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)
状态