module fsm(Clock,Reset,A,K2,K1,state); input Clock, Reset, A; output K2, K1; output [1:0] state; reg K2, K1; reg [1:0] state ; parameter Idle = 2'b00, Start = 2'b01, Stop = 2'b10, Clear = 2'b11; always @(posedge Clock) if (!Reset) begin state <= Idle; K2 <=0; K1 <=0; end else case (state) Idle: if (A) begin state <= Start; K1<=0; end else begin state <= Idle; K2<=0; K1<=0; end Start: if (!A) state <= Stop; else state <= Start; Stop: if (A) begin state <= Clear; K2<= 1; end else begin state <= Stop; K2<=0; K1<=0; end Clear: if (!A) begin state <=Idle; K2<=0; K1<=1; end else begin state <= Clear; K2<=0; K1<=0; end default: state<=2'bxx; endcase endmodule
两段式
何谓两段式?这两段是什么?
同步时序描述状态转移
组合逻辑判断状态转移条件、描述状态转移规律及其输出
所以,从一段式改成两段式,我们只要:
将次态单独拆分出来:
1 2 3 4 5 6
always @(posedge Clock) begin if (!Reset) state <= Idle; else state <= nextstate; end