描述
请编写一个序列检测模块,检测输入信号a是否满足011XXX110序列(长度为9位数据,前三位是011,后三位是110,中间三位不做要求),当信号满足该序列,给出指示信号match。
程序的接口信号图如下:
程序的功能时序图如下:
请使用Verilog HDL实现以上功能,并编写testbench验证模块的功能。 要求代码简洁,功能完整。
输入描述:
clk:系统时钟信号
rst_n:异步复位信号,低电平有效
a:单比特信号,待检测的数据
输出描述:
match:当输入信号a满足目标序列,该信号为1,其余时刻该信号为0
解答:
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input a,
output reg match
);
reg [8:0]seq;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
match<=1'b0;
else if(seq[2:0]==3'b110 && seq[8:6]==3'b011)
match<=1'b1;
else
match<=1'b0;
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
seq<=9'b000000000;
else
seq<={seq[7:0],a};
end
endmodule