题解 | #输入序列连续的序列检测#
输入序列连续的序列检测
https://www.nowcoder.com/practice/d65c2204fae944d2a6d9a3b32aa37b39
//移位寄存器 a_tem <= {a_tem[6:0],a}; // 状态机 提前预设parameter `timescale 1ns/1ns module sequence_detect( input clk, input rst_n, input a, output reg match ); reg [7:0]a_tem; always@(posedge clk or negedge rst_n)begin if(!rst_n) a_tem<=0; else a_tem<={a_tem[6:0],a}; end always@(posedge clk or negedge rst_n)begin if(!rst_n) match<=0; else if(a_tem==8'b01110001) match<=1; else match<=0; end // parameter idle=0,zero=1,one=9,two=2, three=3, four=4,five=5,six=6,seven=7,eight=8; // reg [3:0]state; // reg [3:0]next_state; // always@(posedge clk or negedge rst_n)begin // if(!rst_n) // state<=idle; // else // state<=next_state; // end // always@(*)begin // case(state) // idle:next_state=a?idle:zero; // zero:next_state=a?one:idle; // one:next_state=a?two:idle; // two:next_state=a?three:idle; // three:next_state=a?idle:four; // four:next_state=a?idle:five; // five:next_state=a?idle:six; // six:next_state=a?seven:idle; // seven:next_state=a?eight:idle; // eight:next_state=a?zero:idle; // default:next_state=idle; // endcase // end // always@(posedge clk or negedge rst_n)begin // if(!rst_n) // match<=1'b0; // else // match<=state==seven; // end endmodule