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

不重叠序列检测

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
	);

reg [2:0]c_state;
reg [2:0]n_state;
reg [2:0]cnt;
parameter cnt_max = 3'd6;

always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
	    c_state <= 3'd0;
	else
	    c_state <= n_state;
end

always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
	    cnt <= 3'd0;
	else if(cnt < cnt_max - 1)
	    cnt <= cnt + 1;
	else
	    cnt <= 3'd0;
end




always@(*)
begin
	if(!rst_n)
	    n_state = 3'd0;
	else begin
        case(c_state)
		    3'd0:begin
				if(!data && cnt == 3'd0)
				    n_state = 3'd1;
				else
				    n_state = 3'd0;
			end
			3'd1:begin
				if(data && cnt == 3'd1)
				    n_state = 3'd2;
				else
				    n_state = 3'd0;
			end
			3'd2:begin
				if(data && cnt == 3'd2)
				    n_state = 3'd3;
				else
				    n_state = 3'd0;
			end
			3'd3:begin
				if(data && cnt == 3'd3)
				    n_state = 3'd4;
				else
				    n_state = 3'd0;
			end
			3'd4:begin
				if(!data && cnt == 3'd4)
				    n_state = 3'd5;
				else
				    n_state = 3'd0;
			end
			3'd5:begin
				    n_state = 3'd0;
			end
			default:n_state = 3'd0;
		endcase
	end  
end

always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)begin
	    match <= 0;
		not_match <= 0;
	end
	else if(c_state == 3'd5 && !data)
	    match <= 1;
	else if(cnt == 3'd5 && c_state == 0)
	    not_match <= 1;
	else begin
		match <= 0;
		not_match <= 0;
	end
end






endmodule

全部评论

相关推荐

兄弟们你们进大厂靠的是什么项目啊
DOTPHTP:课设改。其实项目什么的如果不是实习里面的生产项目的话,建议✍️那种自己想要做的。突出个人自驱力,而不是为了找工作不得不随波逐流这种
点赞 评论 收藏
分享
06-12 16:50
已编辑
小米_软件开发(准入职员工)
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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