题解 | #含有无关项的序列检测#

含有无关项的序列检测

https://www.nowcoder.com/practice/cba67d06d6834a5d9b93e1087b56c8d8

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input a,
	output reg match
	);
//移位寄存器法
//reg [8:0]a1;
//always@(posedge clk or negedge rst_n)
//if(!rst_n)
//	a1 <= 9'b000000000;
//else
//	a1 <= {a1[7:0],a};
//always@(posedge clk or negedge rst_n)
//if(!rst_n)
//	match <= 0;
//else begin
//	casex(a1)
//		9'b011XXX110:match <= 1;
//		default:match <=0;
//	endcase
//end

//状态机法
reg[3:0]state;
reg[1:0]count;
parameter s0 = 4'd0;
parameter s1 = 4'd1;
parameter s2 = 4'd2;
parameter s3 = 4'd3;
parameter s4 = 4'd4;
parameter s5 = 4'd5;
parameter s6 = 4'd6;
parameter s7 = 4'd7;
parameter s8 = 4'd8;
parameter s9 = 4'd9;
always@(posedge clk or negedge rst_n)
if(!rst_n) begin
	state <= 4'd0;count <= 2'd0;
end
else begin
	case(state)
		s0:if(a == 0) state <= s1;
		    else state <= s0;
		s1:if(a == 1) state <= s2;
			else state <= s1;
		s2:if(a == 1) state <= s3;
			else state <= s2;
		s3:if(a == 1) state <= s4;
			else begin
				state <= s4;
				count <= count + 1;
			end
		s4:if(a == 0) state <= s5;
			else begin
				state <= s5;
				count <= count + 1;
			end
		s5:if(a == 0) state <= s6;
			else begin
				state <= s6;
				count <= count + 1;
			end
		s6:if(a == 1) state <= s7;
			else if(count == 3) state <= s4;
			else state <= s1;
		s7:if(a == 1) state <= s8;
			else state <= s1;
		s8:if(a == 0) state <= s9;
			else state <= s0;
		default:state <= s0;
	endcase
end
always@(posedge clk or negedge rst_n)
if(state == s9) match <= 1;
else match <=0;
endmodule

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务