题解 | #序列检测器(Moore型)#

序列检测器(Moore型)

https://www.nowcoder.com/practice/d5c5b853b892402ea80d27879b8fbfd6

`timescale 1ns/1ns

module det_moore(
   input                clk   ,
   input                rst_n ,
   input                din   ,
 
   output	reg         Y   
);

parameter IDLE = 5'b00001,
            S1 = 5'b00010,
            S2 = 5'b00100,
            S3 = 5'b01000,
            S4 = 5'b10000;

reg [4:0]   state_curr,
            state_next;

//fsm
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        state_curr <= IDLE;

    else
        state_curr <= state_next;
end

always @(*) begin
    case (state_curr)
        IDLE:begin
            if (din)
            state_next <= S1;
            else
            state_next <= IDLE; 
        end

        S1:begin
            if(din)
            state_next <= S2;
            else
            state_next <= IDLE;
        end

        S2:begin
            if (!din) 
            state_next  <= S3;
            else
            state_next <= S2;
        end

        S3:begin
            if (din)
            state_next <= S4;
            else
            state_next <= IDLE; 
        end

        S4:if (din)
            state_next <= S1;
        else
            state_next <= S4;

        default :state_next <= state_curr;
    endcase
end

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) 
        Y <= 1'b0;
    else
        if (state_curr == S4)
            Y <= 1'b1;
        else
            Y <= 1'b0;
end

endmodule

全部评论

相关推荐

02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务