题解 | #输入序列不连续的序列检测#
输入序列不连续的序列检测
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即可
