[RTLLM-p026] Control/Finite State Machine (FSM)/sequence_detector 的題解


記住 在沒有思路時使用題解,不要從它複製貼上程式碼。請尊重題目和題解的作者。
在真正解決題目之前提交題解的程式碼是可以封禁的罪行。

作者: m1145505

module sequence_detector(
     input  clk, 
     input  rst_n,
     input  data_in, 
     output sequence_detected               
     );


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


reg [4:0]        curr_state;
reg [4:0]        next_state;


always@(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        curr_state <= IDLE;
    end
    else begin
        curr_state <= next_state;
    end
end


always@(*) begin
    if(!rst_n) begin
        next_state <= IDLE;
    end
    else begin
        case(curr_state)
            IDLE  :next_state = data_in?S1:IDLE;
            S1    :next_state = data_in?S1:S2;
            S2    :next_state = data_in?S1:S3;
            S3    :next_state = data_in?S4:IDLE;
            S4    :next_state = data_in?S1:S2;
            default:next_state = IDLE;  
        endcase
    end
end

assign sequence_detected = (curr_state ==S4) ? 1'b1 : 1'b0;

endmodule

評論

目前沒有評論。