题解 | #状态机-重叠序列检测#

状态机-重叠序列检测

https://www.nowcoder.com/practice/10be91c03f5a412cb26f67dbd24020a9

`timescale 1ns/1ns

module sequence_test2(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);
//*************code***********//
//重叠就是检测完不会到初始态
//非重叠就是回到初始态!!!
parameter S0 = 0,S1 = 1,S2=2,S3=3,S4=4;
reg [2:0]state ,next_state;
always@(posedge clk or negedge rst)begin
	if(~rst)begin
		state <= 0;
	end
	else begin
		state <= next_state;
	end
end

always@(*)begin
	if(~rst)begin
		next_state <= 0;
	end
	else begin
		case(state)
		S0	:	next_state = data ? S1 : S0 ;
		S1	:	next_state = data ? S1 : S2 ;
		S2	:	next_state = data ? S3 : S0 ;
		S3	:	next_state = data ? S4 : S2 ;
		S4	:	next_state = data ? S1 : S2 ;
		default : next_state = S0 ;
		endcase
	end
end

always@(posedge clk, negedge rst)begin
	if(~rst)begin
		flag <= 0;
	end
	else begin
		flag <= state == 4 ;
	end
end
//*************code***********//
endmodule

重叠就是检测完不会回到初始态,而是在有效状态里面返回;非重叠就是回到初始态重新开始。

全部评论

相关推荐

不愿透露姓名的神秘牛友
08-07 15:30
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
08-05 14:06
门头沟学院 Java
驼瑞驰_招募评论官版...:哈哈哈,hr怪实诚的
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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