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

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

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***********//

reg [2:0] cnt_state;
reg [3:0] seq_r;

always@(posedge clk or negedge rst)begin
	if(!rst)begin
		cnt_state <= 0;
		flag <= 0;
		seq_r <= 0;
	end
	else begin
		case(cnt_state)
			3'd0 : begin 
				cnt_state <= (data) ? cnt_state + 1'b1 : cnt_state;
				flag <= 0;
				seq_r[0] <= (data) ? 1'b1 : 1'b0;
			end
			3'd1 : begin
				cnt_state <= cnt_state + 1'b1;
				flag <= 0;
				seq_r[1] <= (!data) ? 1'b1 : 1'b0;
			end
			3'd2 : begin
				cnt_state <= cnt_state + 1'b1;
				flag <= 0;
				seq_r[2] <= (data) ? 1'b1 : 1'b0;
			end
			3'd3 : begin
				cnt_state <= cnt_state + 1'b1;
				flag <= 0;
				seq_r[3] <= (data) ? 1'b1 : 1'b0;
			end
			3'd4 : begin
				cnt_state <= 3'd0;
				flag <= (&{seq_r,data}) ? 1'b1 : 1'b0;
				seq_r <= 0;
			end
			default : begin
				seq_r <= 0;
				cnt_state <= 3'd0;
				flag <= 0;
			end
		endcase
	end
end



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

全部评论

相关推荐

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