:::info 用3段式状态机设计,请给出序列检测码10110的检测状态图和verilog code.除了状态机以外,还有其他的方法来监测这个序列?如果有的话,请画图或者使用文字说明。 :::

    1. module detect_sequence(
    2. input clk,
    3. input reset_n,
    4. input data,
    5. output check,
    6. );
    7. reg [5:0] current_state;
    8. reg [5:0] next_state;
    9. parameter idle = 6'b000000;
    10. parameter s0 = 6'b000001;
    11. parameter s1 = 6'b000010;
    12. parameter s2 = 6'b000100;
    13. parameter s3 = 6'b001000;
    14. parameter s4 = 6'b010000;
    15. always @(posedge clk or negedge reset_n) begin
    16. if(!reset_n) begin
    17. current_state <= 1'b0;
    18. end
    19. else begin
    20. current_state <= next_state;
    21. end
    22. end
    23. always @(*) begin
    24. case(current_state)
    25. idle : next_state = (data == 1)? s0 : idle;
    26. s0 : next_state = (data == 1)? s0 : s1;
    27. s1 : next_state = (data == 1)? s2 : idle;
    28. s2 : next_state = (data == 1)? s3 : s1;
    29. s3 : next_state = (data == 1)? s1 : s4;
    30. s4 : next_state = (data == 1)? s0 : idle;
    31. default : next_state = idle;
    32. endcase
    33. end
    34. always @(posedge clk or negedge reset_n) begin
    35. if(!reset_n) begin
    36. check <= 1'b0;
    37. end
    38. else begin
    39. if(next_state == s4) begin
    40. check <= 1'b1;
    41. end
    42. end
    43. end
    44. endmodule