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

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

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***********//
//寄存器输出且同步输出结果-->mealy型
//法一:三段式状态机
reg [2:0] current_state,next_state;
always@(posedge clk or negedge rst)
if(!rst)
   current_state <= 3'd0;
else 
   current_state <= next_state;

always@(*)
  if(!rst)
    next_state <= 3'd0;
  else begin
	case(current_state)
	3'd0:next_state <= data ? 3'd1 :3'd0;
	3'd1:next_state <= (data==0) ? 3'd2 :3'd1;
	3'd2:next_state <= data ? 3'd3 :3'd0;
	3'd3:next_state <= data ? 3'd4 :3'd2;
	3'd4:next_state <= data ? 3'd0 :3'd2;
	// 3'd5:next_state <= data ? 3'd1 :3'd0;//moore型,多一拍
    default:next_state <= 3'd0;
	endcase
  end

always@(posedge clk or negedge rst)
if(!rst)
  flag <= 0;
// else if(current_state==3'd5)//moore型
else if(current_state==3'd4 && data)//mealy型,寄存器输出且同步输出结果
  flag <= 1;
else
  flag <= 0;
//*************code***********//
//法二:移位寄存器:
// reg [4:0] data_reg;
// always@(posedge clk or negedge rst)
// if(!rst)
//   data_reg <= 0;
// else if(data_reg[4:0]==5'b10111)
//   data_reg <= 0;//非重叠检测
// else
//   data_reg <= {data_reg[3:0],data};

// always@(posedge clk or negedge rst)
// if(!rst)
//   flag <= 0;
// else if({data_reg[3:0],data}==5'b10111)//寄存器输出且同步输出结果
//   flag <= 1;
// else 
//   flag <= 0;

endmodule

全部评论

相关推荐

Hakasee:我的简历和你的基本一样,上周去了上海,boss投了三百家, 三家线下面试 第一家没有做题,全是八股和项目,因为第一次面试不怎么熟练,挂了 第二家,给你几个题目(①css垂直居中文字,字体每两秒闪烁一下以及点击弹窗,②给你一个链接,实现可视化地图,③然后是八股,图片性能优化,以及对图片app有什么想法),45分钟内做完,然后老板面试) 第三家特别偏僻,有点阴森,到了之后让了一个工位给我,有四个题目,①格式化时间 年月日当前时间星期几② 正则表达式提取新闻文字,③在文本域输入文字生成选择题以及选项④生成商品排版还是什么来着 三家都是不超过50人的小公司 两家线上牛客笔试(卡伦特,七牛云,但是笔试不仅要考前端,还要考后端,算法,甚至数学题 我的建议是如果只做了这两个vue项目且不怎么熟练的情况下,先沉淀沉淀,把react学了,上海好的公司基本都是react查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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