编写一个序列检测模块,输入信号端口为data,表示数据有效的指示信号端口为data_valid。当data_valid信号为高时,表示此刻的输入信号data有效,参与序列检测;当data_valid为低时,data无效,抛弃该时刻的输入。当输入序列的有效信号满足0110时,拉高序列匹配信号match。
模块的接口信号图如下:
代码如下:
(CSDN代码块不支持Verilog,代码复制到notepad++编辑器中,语言选择Verilog,看得更清楚)
cpp
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input data,
input data_valid,
output reg match
);
reg [3:0] data_r;
always@(posedge clk or negedge rst_n) begin
if(~rst_n)
data_r <= 4'b0;
else
data_r <= data_valid? {data_r[2:0], data}: data_r;
end
always@(posedge clk or negedge rst_n) begin
if(~rst_n)
match <= 0;
else
match <= data_r[2:0]==3'b011 && data==1'b0 && data_valid;
end
// always@(posedge clk or negedge rst_n) begin
// if(~rst_n)
// match <= 0;
// else
// match <= data_r==4'b0110;
// end
endmodule