题解 | #序列检测器(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