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

状态机-非重叠的序列检测

https://www.nowcoder.com/practice/2e35c5c0798249aaa2e1044dbaf218f2

`timescale 1ns/1ns

module sequence_test1(
	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 [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 = S4 ;
		end 
		else begin
	
			Nxt_state = S2 ;
		end

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

			Nxt_state = S0 ;
		end
		default: Nxt_state = S0 ;
		endcase
end

always@(posedge clk or negedge rst)  begin
	if(!rst)
		flag <= 0 ;
	else if(Cur_state == S4) begin
	if(data==1)
		flag <= 1 ;
	else 
		flag <= 0;
	end
	else 
		flag <= 0 ;
end
//*************code***********//
endmodule

全部评论

相关推荐

投递网易等公司10个岗位
点赞 评论 收藏
分享
已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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