描述
请编写一个序列检测模块,检测输入信号a是否满足01110001序列,当信号满足该序列,给出指示信号match。
模块的接口信号图如下:
模块的时序图如下:
请使用Verilog HDL实现以上功能,并编写testbench验证模块的功能
输入描述:
clk:系统时钟信号
rst_n:异步复位信号,低电平有效
a:单比特信号,待检测的数据
输出描述:
match:当输入信号a满足目标序列,该信号为1,其余时刻该信号为0
看了一下评论,我怎么感觉大家的状态图画错了,还是我画错了??
他们为啥都s4:(din == 0)?s5:s0;??
状态机写太多了,练一下移位寄存器
module sequence_detect(
input clk,
input rst_n,
input a,
output reg match
);
reg [7:0] temp;
always@(posedge clk or rst_n)begin
if(!rst_n)
match <= 'd0;
else if(temp == 'b0111001)
match <= 'd1;
else
match <= 'd0
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
temp <= 'd0;
else
temp <= {temp[6:0],a};
end
endmodule