输入序列不连续的序列检测
题目描述
请编写一个序列检测模块,输入信号端口为data,表示数据有效的指示信号端口为data_valid。当data_valid信号为高时,表示此刻的输入信号data有效,参与序列检测;当data_valid为低时,data无效,抛弃该时刻的输入。当输入序列的有效信号满足0110时,拉高序列匹配信号match。
模块的接口信号图如下:
模块的时序图如下:
`timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input data,input data_valid,output reg match);reg [0:1]cnt;always@(posedge clk or negedge rst_n)beginif(!rst_n)cnt <= 2'b0;else if(data_valid)cnt <= cnt + 1'b1;elsecnt <= 2'b0;endreg [3:0] data_reg;always@(*)beginif(data_valid)begincase(cnt)2'd0:data_reg[3] = data;2'd1:data_reg[2] = data;2'd2:data_reg[1] = data;2'd3:data_reg[0] = data;default:data_reg = 4'b0;endcaseendelsedata_reg = 4'b0;endalways@(posedge clk or negedge rst_n)beginif(!rst_n)match <= 1'b0;else if(data_reg == 4'b0110 && cnt == 2'd3)match <= 1'b1;elsematch <= 1'b0;end
endmodule