设计实例06-序列检测

学习:b站视频
更新:2022/9/2, 新增检测方法

状态机检测

简要概括三段式状态,使用三个always块描述

  1. 使用同步时序逻辑,描述状态转移
  2. 使用组合逻辑,判断状态转移条件,描述状态转移规律
  3. 使用同步时序逻辑,描述没端口的输出行为

题目如下:
要求检测11010字符串,检测到完整序列时,dout输出1,否则为0
状态图:
在这里插入图片描述
FSM代码:

///check state 11010
module FSM(
  input        clk,
  input        rst_n,
  input        din,
  output reg   dout
);

  localparam
  IDLE = 6'h1,
  A    = 6'h2,
  B    = 6'h3,
  C    = 6'h4,
  D    = 6'h5,
  E    = 6'h6;
  
  reg[5:0]  cur_state, nex_state; 

  always@(posedge clk or negedge rst_n) begin
    if(!rst_n)
      cur_state <= IDLE;
    else
      cur_state <= nex_state; //状态打一拍寄存,时序逻辑,非阻塞赋值
  end
  
  always@(*) begin
    case(cur_state) //组合逻辑判断条件,打一拍寄存后的状态,以及输入信号
      IDLE: if(din == 1'b1) nex_state = A;   //状态跳转,组合逻辑,使用阻塞赋值
            else nex_state = IDLE;           
      A: if(din == 1'b1) nex_state = B;
         else nex_state = IDLE;
      B: if(din == 1'b1) nex_state = B;
         else nex_state <= C;
      C: if(din == 1'b1) nex_state = D;
         else nex_state = IDLE;
      D: if(<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值