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

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

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
	);
//根据时序图可以看出,match 是在检测到0110的下一个周期拉高,所以采用moore型状态机(只与当前状态有关)
//三段式状态机
reg [2:0] crt_state,nxt_state;
//第一段:同步时序逻辑描述状态转移
always@(posedge clk or negedge rst_n)
  if(!rst_n)
     crt_state <= 3'd0;
   else
     crt_state <= nxt_state;
//第二段:组合逻辑描述状态转移规律
always@(*)
    if(data_valid)begin
		case(crt_state)
		  3'd0: nxt_state = (data_valid && ~data) ? 3'd1 : 3'd0;
          3'd1: nxt_state = (data_valid && data) ? 3'd2 : 3'd1;
          3'd2: begin
			    if(data_valid && data)
				     nxt_state = 3'd3;
				else if(data_valid && ~data)
				     nxt_state = 3'd1;
				else
				     nxt_state = 3'd2;
		  end
          3'd3: begin
			    if(data_valid && ~data)
				     nxt_state = 3'd4;
				else if(data_valid && data)
				     nxt_state = 3'd0;
				else
				     nxt_state = 3'd3;
		  end
          3'd4: begin
			    if(data_valid && data)
				//这里没有说重叠还是不重叠检测
				     nxt_state = 3'd0;//不重叠检测
				    //  nxt_state = 3'd2;//重叠检测
				else 
				     nxt_state = 3'd1;
		  end
          default:nxt_state = 3'd0;
		endcase
	end
	else
	  nxt_state <=3'd0;
  
//第三段:时序逻辑描述状态输出
always@(posedge clk or negedge rst_n)
   if(!rst_n)
    match <= 0;
   else if(nxt_state == 3'd4)
     match <= 1;
   else
     match <= 0;
endmodule

//第二段:组合逻辑描述状态转移规律
// always@(*)
//     if(data_valid)begin//这个不对,因为它只是抛弃data_valid无效那一个时刻的输入,其他时刻的输入还要
// 		case(crt_state)
// 		  3'd0: nxt_state = (data == 0) ? 3'd1 : 3'd0;
//           3'd1: nxt_state = (data == 1) ? 3'd2 : 3'd0;
//           3'd2: nxt_state = (data == 1) ? 3'd3 : 3'd0;
//           3'd3: nxt_state = (data == 0) ? 3'd1 : 3'd0;
//           3'd4: nxt_state = (data == 0) ? 3'd1 : 3'd0;//这里没有说重叠还是不重叠检测,就先按不重叠吧
//           //3'd4: nxt_state = (data == 0) ? 3'd1 : 3'd2;//重叠检测
//           default:nxt_state = 3'd0;
// 		endcase
// 	end
// 	else
// 	  nxt_state <=3'd0;

全部评论

相关推荐

点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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