题解 | #根据状态转移写状态机-三段式#

根据状态转移写状态机-三段式

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
全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务