题解 | #根据状态转移写状态机-三段式#
根据状态转移写状态机-三段式
http://www.nowcoder.com/practice/d8394a6d31754e73ace8c394e9465e2a
经典可综合三段式状态机。
完整代码:
`timescale 1ns/1ns
module fsm1(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
parameter S0=0, S1=1, S2=2, S3=3; //状态个数4个
reg[1:0] CS, NS; //当前状态CurrentState,次态NextState
always@(posedge clk or negedge rst)begin
if(~rst)
CS <= 0;
else
CS <= NS;
end
always@(*)begin //次态过程块
case(CS)
S0:if(data) NS <= S1; else NS <= S0;
S1:if(data) NS <= S2; else NS <= S1;
S2:if(data) NS <= S3; else NS <= S2;
S3:if(data) NS <= S0; else NS <= S3;
endcase
end
always@(posedge clk or negedge rst)begin //由于使用当前状态CS,据时序图可知在下一个周期输出,因此采用边沿触发
if(~rst)
flag <= 0;
else if(CS==S3 && data==1)
flag <= 1;
else
flag <= 0;
end
//*************code***********//
endmodule