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

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

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 [1:0]cs;
	reg [1:0]ns;
    parameter S0=2'd0;
	parameter S1=2'd1;
	parameter S2=2'd2;
	parameter S3=2'd3;

	always@(posedge clk or negedge rst_n)begin
     if(~rst_n)
	 cs<=0;
	 else
	 cs<=ns;
	 end

	 always@(*)begin
		if(~data_valid)
		  ns=S0;
		else
		case(cs)
		S0:begin
		if(data==0)
		  ns=S1;
		else 
		  ns=S0;
		end

		S1:begin
		if(data==1)
		  ns=S2;
		else 
		  ns=S1;
		end

		S2:begin
		if(data==1)
		  ns=S3;
		else 
		  ns=S1;
		end
        S3:begin
		if(data==0)
		  ns=S1;
		else 
		  ns=S0;
		end
		endcase
	 end

	 always@(posedge clk or negedge rst_n)begin
     if(~rst_n)
	 match<=0;
	 else if(cs==S3&&data==0)
	 match<=1;
	 else
	 match<=0;
	 end
endmodule

没啥特殊的,本质还是序列检测,不过加了个条件,那就让有效的时候进行序列检测,无效的时候一直ns=0即可

全部评论

相关推荐

程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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