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

状态机-重叠序列检测

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 = 5'b00001 ;
parameter S1 = 5'b10000 ;
parameter S2 = 5'b01000 ;
parameter S3 = 5'b00100 ;
parameter S4 = 5'b00010 ;

reg flag_reg ;
reg [4:0] Cur_state ;
reg [4:0] Nxt_state ;

//第一段式
always@(posedge clk or negedge rst)  begin
	if(!rst)
		Cur_state <= S0 ;
	else
		Cur_state <= Nxt_state ;
end

//第二段式
always@(*) begin
	if(!rst) begin

		Nxt_state = S0 ;
	end
	else	
		case(Cur_state)
		S0:if(data == 1) begin

			Nxt_state = S1 ;
		end 
		else begin

			Nxt_state = S0 ;
		end

		S1:if(data == 0) begin  //1

			Nxt_state = S2 ;
		end 
		else begin

			Nxt_state = S1 ;
		end

		S2:if(data == 1) begin //0
	
			Nxt_state = S3 ;
		end 
		else begin
	
			Nxt_state = S0 ;
		end

		S3:if(data == 1) begin //1
	
			Nxt_state = S1 ;
		end 
		else begin
	
			Nxt_state = S2 ;
		end

		default: Nxt_state = S0 ;
		endcase
end

always@(posedge clk or negedge rst)  begin
	if(!rst)
		flag_reg <= 0 ;
	else if(Cur_state == S3) begin
		if(data==1)
			flag_reg <= 1 ;
		else 
			flag_reg <= 0 ;
	end
	else 
		flag_reg <= 0 ;
end

always@(posedge clk or negedge rst)  begin
	if(!rst)
		flag <= 0 ;
	else if(flag_reg == 1) 
		flag <= 1 ;
	else 
		flag <= 0 ;
end

//*************code***********//
endmodule

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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