不重叠序列检测
题目描述
请编写一个序列检测模块,检测输入信号(a)是否满足011100序列, 要求以每六个输入为一组,不检测重复序列,例如第一位数据不符合,则不考虑后五位。一直到第七位数据即下一组信号的第一位开始检测。当信号满足该序列,给出指示信号match。当不满足时给出指示信号not_match。
模块的接口信号图如下:
模块的时序图如下:
`timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input data,output reg match,output reg not_match);reg [0:2] cnt;//六个时钟的计数always@(posedge clk or negedge rst_n)beginif(!rst_n)cnt <= 3'b0;else if ( cnt == 3'd5)cnt <= 3'b0;elsecnt <= cnt + 1'b1;endreg [5:0] data_reg;always@(*)begincase(cnt)3'd0:data_reg[5] = data;3'd1:data_reg[4] = data;3'd2:data_reg[3] = data;3'd3:data_reg[2] = data;3'd4:data_reg[1] = data;3'd5:data_reg[0] = data;default:data_reg = 6'b0;endcaseendalways@(posedge clk or negedge rst_n)beginif(!rst_n)match = 1'b0;else if(data_reg == 6'b011100 && cnt == 3'd5)match = 1'b1;elsematch = 1'b0;endalways@(posedge clk or negedge rst_n)beginif(!rst_n)not_match = 1'b0;else if(data_reg != 6'b011100 && cnt == 3'd5)not_match = 1'b1;elsenot_match = 1'b0;end
endmodule
知识点
移位寄存器不仅能寄存数据,而且能在时钟信号的作用下使其中的数据依次左移或右移。