编写一个序列检测模块,输入信号端口为data,表示数据有效的指示信号端口为data_valid。当data_valid信号为高时,表示此刻的输入信号data有效,参与序列检测;当data_valid为低时,data无效,抛弃该时刻的输入。当输入序列的有效信号满足0110时,拉高序列匹配信号match。
模块的接口信号图如下:
代码如下:
(CSDN代码块不支持Verilog,代码复制到notepad++编辑器中,语言选择Verilog,看得更清楚)
`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) beginif(~rst_n)data_r <= 4'b0;elsedata_r <= data_valid? {data_r[2:0], data}: data_r;endalways@(posedge clk or negedge rst_n) beginif(~rst_n)match <= 0;elsematch <= 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;
// endendmodule