题解 | #不重叠序列检测#

不重叠序列检测

https://www.nowcoder.com/practice/9f91a38c74164f8dbdc5f953edcc49cc

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	output reg match,
	output reg not_match
	);
    parameter Idle='d0,S1='d1,S2='d2,S3='d3,S4='d4,S5='d5,S6='d6,Fail='d7;
    reg[$clog2(8)-1:0] state;
    reg[$clog2(8)-1:0] nx_state;
    reg[$clog2(6)-1:0] counter;
    always@(posedge clk or negedge rst_n)begin
        if(~rst_n)begin

            state<='d0;
        end
        else begin
            state<=nx_state;
        end
    end
    always@(*)begin
		if(~rst_n)begin
			nx_state='d0;

		end
		else begin
        case(state)
            Idle: nx_state=data?Fail:S1;
            S1: nx_state=data?S2:Fail;
            S2: nx_state=data?S3:Fail;
            S3: nx_state=data?S4:Fail;
            S4: nx_state=data?Fail:S5;
            S5: nx_state=data?Fail:S6;
            S6: nx_state= data?Fail:S1;
            Fail: nx_state= counter=='d6&&data==0?S1:Fail;
			default: nx_state=Idle;
        endcase
		end
    end

    always@(posedge clk or negedge rst_n)begin
        if(~rst_n)begin
        match<='d0;
        not_match<='d0;
       // counter<='d0;
        end 
        else begin
            match     <= nx_state==S6;
            not_match <= counter==5&&nx_state==Fail;
            


        end
    end
	always@(posedge clk or negedge rst_n)begin
        if(~rst_n)begin
			counter<='d0;
        end 
        else begin
			counter<=counter=='d6?'d1:counter+1'b1;
		end
	end
   
endmodule

全部评论

相关推荐

头像
09-01 09:00
已编辑
四川旅游学院 运营
牛客55195891...:主要是专业不好,别的没毛病
牛客解忧铺
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务