1. 状态机的结构
(1)逻辑表达式
下一个状态=F(当前状态,输入信号);
输出信号=G(当前状态,输入信号);
(2)Mealy状态机:时序逻辑的输出取决于状态与输入
(3)Moore状态机:时序逻辑的输出取决于状态
2. 状态编码的类型
(1)独热编码:一个bit代表一个状态(4中状态的编码有:4’b0001, 4’b0010, 4’b100, 4’b1000)
(2)Gray编码:格雷编码累加(4中状态的编码有:2’b00, 2’b01, 2’b11, 2’b10)
(3)输出直接指定为状态码,多用于高速信号
3. 状态机编写的方法
(1)一段式
输入、输出、状态变化写在一起,用非阻塞“<=”对当前状态寄存器(cstat)和命令寄存器(cmd)进行赋值。
(2)二段式
时序逻辑与组合逻辑分离。时序逻辑为状态切换,组合逻辑实现输入、输出、状态判断。状态切换用非阻塞“<=”完成下一状态寄存器(nstat)对当前状态寄存器(cstat)的赋值。组合逻辑通过阻塞“=”,利用cstat寄存器状态和输入,对下一状态寄存器(nstat)和输出寄存器(cmd)进行赋值。由于输出用逻辑电路,会产生毛刺
(3)三段式
输入、输出、状态切换分离。状态切换用非阻塞“<=”完成下一状态寄存器(nstat)对当前状态寄存器(cstat)的赋值。通过阻塞“=”,利用cstat寄存器状态和输入信号,对下一状态寄存器(nstat)进行赋值。输出寄存器通过利用当前状态,使用非阻塞的“<=”赋值,延迟一个时钟以达到消除毛刺的目的。