题解 | #输入序列不连续的序列检测#
输入序列不连续的序列检测
https://www.nowcoder.com/practice/f96d0e94ec604592b502b0f1800ed8aa
`timescale 1ns/1ns module sequence_detect( input clk, input rst_n, input data, input data_valid, output reg match ); reg [1:0]cs; reg [1:0]ns; parameter S0=2'd0; parameter S1=2'd1; parameter S2=2'd2; parameter S3=2'd3; always@(posedge clk or negedge rst_n)begin if(~rst_n) cs<=0; else cs<=ns; end always@(*)begin if(~data_valid) ns=S0; else case(cs) S0:begin if(data==0) ns=S1; else ns=S0; end S1:begin if(data==1) ns=S2; else ns=S1; end S2:begin if(data==1) ns=S3; else ns=S1; end S3:begin if(data==0) ns=S1; else ns=S0; end endcase end always@(posedge clk or negedge rst_n)begin if(~rst_n) match<=0; else if(cs==S3&&data==0) match<=1; else match<=0; end endmodule
没啥特殊的,本质还是序列检测,不过加了个条件,那就让有效的时候进行序列检测,无效的时候一直ns=0即可