如何在如何在FPGA中实现状态机中实现状态机
FPGA 常常用于执行基于序列和控制的行动, 比如实现一个简单的通信协议。对于设计人员来说,满足这些行
动和序列要求的最佳方法则是使用状态机。状态机是在数量有限的状态之间进行转换的逻辑结构。一个状态机
在某个特定的时间点只处于一种状态。
状态机往往是状态机往往是FPGA开发的主力。选择合适的架构和实现方法将确保您获得一款最佳解决方案。开发的主力。选择合适的架构和实现方法将确保您获得一款最佳解决方案。
FPGA 常常用于执行基于序列和控制的行动, 比如实现一个简单的通信协议。对于设计人员来说,满足这些行动和序列要求
的最佳方法则是使用状态机。状态机是在数量有限的状态之间进行转换的逻辑结构。一个状态机在某个特定的时间点只处于一
种状态。但在一系列触发器的触发下,将在不同状态间进行转换。理论上讲,状态机可以分为Moore 状态机和Mealy 状态机两
大类。它们之间的差异仅在于如何生成状态机的输出。Moore 状态机的输出仅为当前状态的函数。典型的例子就是计数器。
而Mealy 状态机的输出是当前状态和输入的函数。典型的例子就是Richards 控制器(参见
http://en.wikipedia.org/wiki/Richards_controller )。
定义状态机定义状态机
当需要定义一个状态机时,首先要绘制一张状态图。状态图可用来显示状态、状态间的转换和状态机的输出。图1 显示了
Moore 状态机的状态图(左)和Mealy 状态机的状态图(右)。
LED 的Moore 状态机(左)和Mealy 状态机(右)的状态图"
src="/Uploads/2014_06/article/aef209edfd.jpg" />
如果您要在物理组件中实现这些状态图(工程师在FPGA问世之前就是这么做的),首先就得生成当前状态和后续状态表,然
后生成实现状态机所需的逻辑。不过由于我们将使用FPGA来实现设计,因此我们可以直接从状态转换图开始工作。
算法状态图算法状态图
虽然有许多状态机是使用图1 所示的状态图方法进行设计的,但另外还有一种描述状态机行为的方法,这就是算法状态图法。
ASM 图(图2)在外观上更加接近软件工程流程图。它由三个基本部分构成:
1. 状态框。它与状态名称有关,并包含Moore 状态输出列表。
2. 决策框。如果检验某条件为真,则进行下一状态的判断。
3. 条件输出框。让状态机根据当前状态和输入描述Mealy输出。
一些工程师认为,如果使用VHDL 等硬件描述语言,则采用ASM 格式进行描述的状态机更易于映射到实现方案中。