FPGA状态机总结

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)进行赋值。输出寄存器通过利用当前状态,使用非阻塞的“<=”赋值,延迟一个时钟以达到消除毛刺的目的。

你可能感兴趣的:(FPGA)