0 状态机概述
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。根据状态机的状态是否收敛又可将状态机划分为:有限状态机(FSM:Finite State Machine)和无限状态机(ISM:Infinite State Machine),一般数字电路设计中提及的状态机一般均指FSM,其基本要素包括:状态、输入和输出。其中各要素的含义如下:
状态(状态变量):在逻辑设计中,使用状态来表示电路的各种工作状态和顺序;
输入:状态机进入每个状态的相关条件;
输出:在特定状态下发生的对应事件;
在FSM中,根据FSM输出的特点,又可将FSM分为Mealy状态机和Moore状态机:
Mealy状态机:此类状态机的输出不但取决于当前的输入还取决于当前的状态;
Moore状态机:此类状态机的输出仅与当前状态有关;
根据两类状态机的定义,可以得出两类FSM状态机的结构如下:
根据上述状机的结构特点,可将状态机的编码结构上分为:一段式、二段式、三段式。
一段式:状态转移、状态的输入与输出均在一个always块中。该方式代码较为冗长,结构不清晰,不利于附加约束,不利于综合工具对设计进行优化,不推荐使用;
二段式:状态转移、状态的输入与输出任意两个在一个always块中。该方式输出一般为组合逻辑,极易产生毛刺等,所以一般情况下需要对输出端进行适当处理;
三段式:状态转移、状态的输入与输出分别在各自的always块中,这样结构的状态机结构清晰、易于维护和发现错误;
1 状态编码
在具体设计状态机时,需要根据电路的具体跳转状态进行编码,常用的编码格式如下:
独热码(one-hot code) |
二进制码(binary code) |
格雷码(gray code) |
使用N位状态触发器来对N个状态进行编码,每个状态都有独立的触发器对应,并且任意时刻只有一位触发器为“1” |
用二进制数对电路状态进行编码 |
任意两个相邻的状态只有一位二进制数不同 |
状态比较时仅仅需要比较一位,从一定程度上来说译码较容易,减少毛刺产生的概率; 在表示同样数目的状态时,独热码消耗较多的触发器(但是增加的触发器占用的面积与译码电路省下来的面积相当); 速度快但是较占用资源; |
需要较多的逻辑资源进行译码,译码过程较复杂;易懂;触发器数量与格雷码相同; |
因为相邻两个状态仅有一位不同,所以当出现状态跳转时,触发器翻转较少,产生亚稳态几率较小; 需要较多的逻辑资源进行译码,译码较为复杂;易懂; |