如何在FPGA中实现状态机
来源:华强电子网 作者:—— 时间:2013-03-29 11:48
Moore和Mealy:应该选择哪个?
实现Moore状态机还是Mealy状态机,取决于状态机需要实现的功能,以及特定的反应次数要求。两种状态机之间的最大差别在于状态机如何对输入做出反应。在输入和设置的适当输出之间,Moore状态机一般有一个时钟周期的延迟。这就意味着Moore状态机无法对输入变化立即做出反应,这点在图3中可以清楚地看到。而Mealy状态机则能够立即对输入做出反应,这通常意味着:实现相同的函数,Mealy状态机比Moore状态机需要更少的状态。Mealy状态机的不足之处就是在与另一个状态机进行通信时,如果输出出乎意料地严重依赖于其它事件的序列或时序,就可能会发生紊乱情况。
图3,截屏显示了Moore状态机(上)和Mealy状态机(下)输出的仿真结果。
当然,并非只能使用单纯的Moore状态机或Mealy状态机,也可以将这两种状态机混合使用,从而更有效地实现所需的函数。比如说,用于接收RS232串行数据的状态机就可以是混合机。
实现状态机
使用VHDL这样的高级语言,可以轻松地直接从状态图实现状态机。VHDL支持多种枚举类型,方便您定义实际的状态名称。举例如下:
TYPE state IS (idle, led_on, led_off) ;
上面的类型定义对应的是图1中所示的状态图,即用于在按下按钮时切换发光二极管开/关的状态机。
实现状态机有许多种方法,可分为两类基本方法。第一类基本方法就是一次性将所有内容集成到单个进程中。第二类基本方法是双进程法,将组合逻辑和顺序逻辑分开。
一般来说,大多数工程师都倾向于实现单进程状态机。与传统上讲授的双进程法相比,这种方法具有以下优势:
●可以避免组合过程中信号覆盖不完全造成的闭锁风险。
●状态机的输出与时钟保持同步。
●通常比双进程实现方案更容易调试。
无论您决定采用哪一种方法来实现状态机,都需要使用CASE语句来评估下一状态的判定和任何输出,如图4所示。该图并行比较了使用单进程法的Moore状态机(左)和Mealy状态机(右)。
图4,使用VHDL语言的Moore状态机(左)和Mealy状态机。
下一篇:五大技术降低未来IC功耗