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

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

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
	);
 localparam IDLE = 3'b000,
			S0 = 3'b001,
			S1 = 3'b010,
			S2 = 3'b011,
			S3 = 3'b100;

 reg [2:0] state,next_state;

 always @ (posedge clk or negedge rst_n) begin
	if (~rst_n)
	  state <= IDLE;
	else if (data_valid)
	  state <= next_state;
 end

 always @ (*) begin
	next_state = IDLE;
	case (state)
	IDLE: next_state = (data == 1'b0) ? S0 : IDLE;
	S0: next_state = (data == 1'b1) ? S1 : S0;
	S1: next_state = (data == 1'b1) ? S2 : S0;
	S2: next_state = (data == 1'b0) ? S3 : IDLE;
	S3: next_state = (data == 1'b0) ? S0 : IDLE;
	default: next_state = IDLE;
	endcase
 end

 always @ (posedge clk or negedge rst_n) begin
	if (~rst_n)
	  match <= 1'b0;
	else if ((next_state == S3) && data_valid)
	  match <= 1'b1;
	else
	  match <= 1'b0;
 end
  
endmodule

全部评论

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
04-18 00:32
已编辑
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务