第6章 VHDL状态机设计
在数字逻辑设计中,有一种建模方法叫作有限状态机(Finite State Machine,FSM),包含一组状态集、一个起始状态、一组输入符号集、一个映射输入符号和当前状态到下一状态的转换函数的计算模型。图6.1是FSM原理图。有限状态机主要分为两大类:Moore状态机和Mealy状态机。Moore状态机的特点是输出只和当前的状态有关,而与当前的输入无关。Mealy状态机的特点是输出不仅和当前的状态有关,而且和当前的输入有关。
图6.1 FSM原理图
有限状态机的设计步骤可以分为四步:状态机编码、状态机复位、状态机跳转及状态机输出。
状态机的编码是指对不同的状态进行编码,增强程序的可读性。状态机的编码可以采用顺序码(二进制码)、格雷码(Gray)、独热编码(One-hot)、Johnson码及Nova三态码等。比较常用的编码为前三种,采用哪一种编码应根据具体情况而定。
状态机的复位可以分为同步复位和异步复位。同步复位指复位与时钟信号同步,异步复位是指时钟信号与复位信号都为敏感信号进行触发的。
状态机跳转是状态机设计中比较重要的部分。设计者通常需要列出状态跳转表,根据状态跳转表设计出状态跳转条件,从而控制状态机之间的状态切换。
状态机输出就是根据所设计的状态机类型为Moore型,还是Mealy型,确定输出的组合逻辑电路。Mealy型的状态机输出与输入有关,输出信号中很容易出现毛刺,因此建议读者使用Moore型状态机进行描述。
有限状态机可以有一段式、二段式、三段式等多种描述风格。每一种描述风格都有各自的优缺点及适用的应用场合。一段式的风格是将状态跳转、状态寄存和输出逻辑电路放在一个进程中;二段式描述的代码由两部分构成,其中一部分用于完成状态寄存,另一部分用于把状态跳转和输出逻辑电路两个组合逻辑放在一起;三段式描述的代码则将状态跳转、状态寄存和输出组合逻辑电路分别放在进程和块中。从芯片设计实践角度看,三段式描述是最佳的描述方法。