状态机

本文介绍了有限状态机(FSM)的两大类型——摩尔状态机和米勒状态机,详细阐述了它们的工作原理和区别。摩尔状态机的输出仅由当前状态决定,而米勒状态机的输出则与当前状态和输入有关。在状态编码方面,讨论了二进制码、格雷码和独热码的应用场景。最后,讨论了状态机的编程风格,包括一段式、两段式和三段式状态机,强调了三段式状态机在消除毛刺和数据对齐方面的优势。
摘要由CSDN通过智能技术生成

介绍及分类

状态机简写为FSM(Finite State Machine),也称为同步有限状态机。

数字系统有两大类有限状态机(Finite State Machine,FSM):摩尔(Moore)状态机和米勒(Mealy)状态机。

摩尔(Moore)状态机:

其最大特点是输出只由当前状态确定,与输入无关。Moore状态机的状态图中的每一个状态都包含一个输出信号。

换言之,在状态中包含了和输出的映射关系

米勒(Mealy)状态机:

它的输出不仅与当前状态有关系,而且与它的输入也有关系,因而在状态图中每条转移边需要包含输入和输出的信息。

这种和输入的关联会导致干扰,产生毛刺现象,所以通常使用Moore状态机。

状态编码

数字逻辑系统状态机设计中常见的编码方式有:二进制码(Binary码)、格雷码(Gray码)、独热码(One-hot码)。

编码方式选择:

  • 格雷码:状态数>24,只有一个状态发生反转,降低毛刺和功耗
  • 独热码:状态机状态<4
  • 二进制码:状态机状态4-24

高速系统中无论状态个数,都建议使用独热码

状态机的编程风格

状态机有三种描述方式:一段式状态机、两段式状态机、三段式状态机。

一段式状态机
把整个状态机写在一个always模块中,既包含状态转移,又含有组合逻辑输入/输出时,称为一段式状态机,不推荐采用。

//一段式状态机的实现:在异步复位信号的控制下,一段式状态机进入IDLE
 //状态,q_sig4被复位,一旦sig1或者sig2有效,状态机进入WAIT状态,如果
 //sig1和sig2同时有效,那么状态机进入DONE状态,
 //如果sig4还有效,那么q_sig4置位,同时状态机进入IDLE状态。
 
 module one_seg_fsm(clk,reset,sig1,sig2,sig3,q_sig4,q_sm_state);
 //数据声明部分
 input clk,reset,sig1,sig2,sig3;
 
 output reg       q_sig4;
 output reg [1:0] q_sm_state;
 
 //参数声明
 parameter  IDLE       = 2'b00;
 parameter  WAIT       = 2'b01;
 parameter  DONE       = 2'b10;
 
 //状态跳转逻辑程序设计
 always @(posedge clk or posedge reset)
   begin
       if(reset)
       begin
           q_sig4     <= 0;
           q_sm_state <= IDLE;
       end
     else 
         begin
             case(q_sm_state) 
                   IDLE: begin
                              if(sig1 || sig2)
                                   begin
                                       q_sm_state <= WAIT;
                                       q_sig4 <= 1'b0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值