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

不重叠序列检测

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

此题只需要使用2个4bit的位作为状态标识即可,实际上只需12个状态,话不多说,直接上代码与仿真。

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	output reg match,
	output reg not_match
	);

reg [3:0] state,next_state;
	
always@(*)begin
	case(state)
		0:		next_state = !data ? 1 : 7 ;
		1:		next_state =  data ? 2 : 8 ;
		2:		next_state =  data ? 3 : 9 ;
		3:		next_state =  data ? 4 : 10;
		4:		next_state = !data ? 5 : 11;
		5:		next_state = !data ? 6 : 12;
		6:		next_state = !data ? 1 : 7 ;
        12:     next_state = !data ? 1 : 7 ;
		default:next_state = state + 1;
	endcase
end

always@(posedge clk,negedge rst_n)begin
	if(!rst_n)begin
		state <= 0;
	end
	else begin
		state <= next_state;
	end
end

always@(*)begin
	match = (state==6);
	not_match = (state==12);
end

endmodule

`timescale  1ns / 1ps
module tb_sequence_detect;

// sequence_detect Parameters
parameter PERIOD  = 10;


// sequence_detect Inputs
reg   clk                                  = 0 ;
reg   rst_n                                = 0 ;
reg   data                                 = 0 ;

// sequence_detect Outputs
wire  match                                ;
wire  not_match                            ;


initial
begin
    $dumpfile ("HDL_bit_wave.vcd");
    $dumpvars;
    forever #(PERIOD/2)  clk=~clk;
end

initial
begin
    #(PERIOD*2) rst_n  =  1;
end

sequence_detect  u_sequence_detect (
    .clk                     ( clk         ),
    .rst_n                   ( rst_n       ),
    .data                    ( data        ),

    .match                   ( match       ),
    .not_match               ( not_match   )
);

initial
begin
    #(PERIOD);
    #(PERIOD) data   =  0;
    #(PERIOD) data   =  1;
    #(PERIOD) data   =  1;
    #(PERIOD) data   =  1;
    #(PERIOD) data   =  0;
    #(PERIOD) data   =  0;

    #(PERIOD) data   =  0;
    #(PERIOD) data   =  0;
    #(PERIOD) data   =  1;
    #(PERIOD) data   =  1;
    #(PERIOD) data   =  1;
    #(PERIOD) data   =  0;

    #(PERIOD*4);
    $finish;
end

endmodule

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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