Menu Close
%title缩略图

状态机分段描述方法-3

三段式状态机将二段式状态机的第二段再进行拆分,将次态的实现作为状态机的第二段,将输出逻辑作为状态机的第三段。伴随着三段状态机的可能还有其它与状态转移相关的逻辑,该部分内容不属于三段式状态机本身的内容,可以分开描述,也可以合并到对应的状态机的各个段中。

%title缩略图

状态机分段描述方法-2

经过改写之后可以看出,按键去抖程序的状态转换更加清晰。而且从上例的最后可以看出按键最后的输出不仅与状态有关(RLS_DEBOUNCING),而且与按键的输入有关,因此该状态机是梅利机。而且上面是标准的一段式状态机。

%title缩略图

状态机分段描述方法-1

上几节内容介绍了状态机建模以及摩尔机、梅利机的描述,状态机的编码格式等内容,本节内容着重介绍状态机的分段描述方法。按照状态机的分段描述方法,状态机可分为一段式状态机,二段式状态机,三段式状态机。

%title缩略图

状态机的编码格式-3

由格雷码到自然二进制码转换,保留格雷码的最高位,二进制码次高位由二进制码最高位与格雷码次高位异或得到,之后的各位的计算结果由二进制码上一位的计算结果与格雷码本位相异或得到。

%title缩略图

状态机的编码格式-2

格雷码是一种可靠性高的编码,与自然二进制编码不同,相邻格雷码的编码每次只有一位不同,因此在状态顺序转换时,是错误最小的编码方式。 在数字系统中,常要求代码按一定顺序变化。

%title缩略图

状态机的编码格式-1

在上几节内容中介绍的状态机状态都是采用二进制自然码的编码格式,当状态机的状态比较多,而且状态机的时钟频率较高时,由于二进制编码在状态转换时会有多个位同时变化,会对状态机的安全产生影响;因此,二进制编码虽然简单,但有时为了可靠性还会选择其它的编码方式。

%title缩略图

状态机建模–梅利机与摩尔机-3

梅利机的描述如下面的例子所示,在状态S0时系统的输出也由输入与状态共同决定,这种状态机是典型的梅利机。梅利机中的输出可以是寄存器输出,也可以是组合逻辑输出。一般为了输出稳定都在clk的边沿下锁存输出。

%title缩略图

状态机建模–梅利机与摩尔机-2

从上例的描述可以清楚的看出状态机的现态cs(count)及次态ns的实现。而且从本例可以看出,输出仅仅是状态的译码,与输入无关,因此是典型的摩尔机。当然ns的描述也可以在always过程中由case语句实现。

%title缩略图

状态机建模–梅利机与摩尔机-1

上节内容讲解了状态机的基本理论、分类以及在数字电路,软件方面的建模及应用,最后以简单的例子对比常规Verilog程序设计状态机程序之间的设计关系。可以看出在时序电路的设计钟,特别是Verilog语言的描述中,尽管没有显式的使用状态机的描述方式,状态机在时序电路的设计中几乎无处不在的。

%title缩略图

状态机概述-3

状态机几乎无处不在,特别是在软件设计,数字时序电路设计,FPGA,IC设计等领域被广泛使用。如图4,就是一个典型数字时序电路状态机的模型。在数字时序电路中,由于触发器的翻转是受时钟和输入控制,触发器的输出可以很好的表达状态机的状态,所以许多日常生活中的状态都可以用时序电路描述,我们称这种行为为时序电路状态机建模。