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

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

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

相关推荐

是秃子总会发光_:科软的还被排序?不是大雪深埋吗
点赞 评论 收藏
分享
喜欢飞来飞去的雪碧在...:可以试一试字节
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务