题解 | #输入序列不连续的序列检测#

输入序列不连续的序列检测

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

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	input data_valid,
	output reg match
	);
reg [2:0] state,nstate;
reg [2:0] s0=0,s1=1,s2=2,s3=3,s4=4;
always@(posedge clk or negedge rst_n)begin
	if(~rst_n) begin
		state<=s0;
		nstate<=s0;
	end
	else state<=nstate;
end

always@(*)begin
	case(state)
		s0:nstate=(data==0&&data_valid==1)?s1:s0;
		s1:begin
			if(data_valid==1)
				nstate=data==0?s1:s2;
			else nstate=s0;
			end
		s2:begin
			if(data_valid==1)
				nstate=data==0?s1:s3;
			else nstate=s0;
			end
		s3:begin
			if(data_valid==1)
				nstate=data==0?s4:s0;
			else nstate=s0;
			end
		s4:begin
			if(data_valid==1)
				nstate=data==0?s1:s2;
			else nstate=s0;
			end
		default:nstate=s0;
	endcase
end

// always@(posedge clk or negedge rst_n)begin
always@(*)begin
	if(~rst_n) 
		match=0;
	else match=state==s4?1:0;
end
endmodule

双输入,单输出,每个状态四个方向

全部评论

相关推荐

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

创作者周榜

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