- 请实现对二进制(1011001)的序列检测功能
- 模块每拍并行输入2bit,且顺序为高位先输入
- 当检测到序列,输出一拍高电平脉冲。
- 请用Verilog描述该模块
// data[1:0]={
data[1],data[0]
// data[1:0]=2'b10,则输出为01,data[0]为高位,data[1]为低位
// 考虑输入数据的复用情况,当高位满足,低位不满足时,可是可用状态
module seqdet2(
input clk,
input rst_n,
input [1:0] data,
output reg det);
//状态总数和单比特输入序列检查一致;状态转移分成1bit检测和2bit检测了;
parameter
s0=4'b000,
s1=4'b0001,
s2=4'b0010,
s3=4'b0011,
s4=4'b0100,
s5=4'b0101,
s6=4'b0110,
s7=4'b0111;
reg [3:0] state, nstate;
always@(posedge clk)
if(!rst_n) state<=s0;
else state<=nstate;
always@(*)
begin det=0; nstate=s0;
case(state)
s0: if(data==2'b10) nstate=s2;
else if(data[0]==1) nstate=s1;
else nstate=idle;
s1: if(data==2'b01) nstate=s3;
else