文章目录
4. 有限同步状态机
-
!!产生:硬件描述语言对时序电路的设计方式。这种描述方式和真值表都差不多,都表征了对于一个数字电路通用的设计方式
-
!!!!功能很强大,但是并不代表在硬件描述语言中提倡这种方式,当电路设计到一定阶段时,我们更希望用基础的设计语言去做电路
-
有限状态机是借助于综合工具实现电路的一种方式,如果对于状态转移图或者Verilog描述过程中如果产生错误或者不确定的理解,这时候设计就会产生很大问题
-
同其它时序电路一样,有限状态机也是由两部分组成:存储电路和组合逻辑电路。存储电路用来生成状态机的状态,组合逻辑电路用来提供输出以及状态机跳转的条件
-
从中间画一条线把它分为上下两部分,称为二部图。二部图对于数字电路来讲是一个非常重要的概念,实际上联系了两部分不同性质的电路之间的关系。从图论的角度来讲,如果有一个edge能把上下两部分分开,这两部分就是独立的
-
有限状态机分为两种类型:Mealy型和Moore型
-
最大的区别:Mealy 型状态机的输出与当前状态和输入有关系,Moore 型状态机的输出仅依赖于当前状态而与输入无关
-
!!!!对于Mealy电路,影响组合电路延迟的是由组合逻辑和输入信号的延迟决定的, 而对于Moore电路,输出逻辑只由输出组合逻辑决定。所以。Moore型的状态机要比Mealy型的状态机要快,因为它的输出延迟只由一部分输出逻辑决定,而Mealy型的延迟由输入信号决定,当输入信号延迟非常大时,输出结果将会是不对的,也就输输出频率会降下来
-
!!!!所以,在很长一段时间内,会从对状态机不了解到写成Moore型状态机。但是并不是说Mealy状态机不行,Mealy有它的特点,对于一些组合电路要求输出一定要跟着输入有变化的时候,Mealy型状态机就会产生很好的作用
-
!!!!从群延迟的角度来说,也就是只有一个信号和一个信号进行比较时,这时Mealy状态机是快的。Moore说它工作频率高主要是说它状态寄存器到输出,延迟只由输出组合逻辑决定,所以很快。Moore的工作频率很快,但是从绝对延迟来讲,Mealy更快,但是就是有的时候不稳定,如果对输入信号没有进行处理,或者对输入信号不了解的情况下,这时候做这个电路的压力就会非常大
-
所以,这两种状态机的选择要根据自己的情况来定
-
有限状态机是基础的电路设计的最后一部分,之前的电路是要求对电路的特点,电路到底用了什么电路,用了多少什么门一定要非常清楚,设计方法(查找表,移位寄存器等)一定要非常清楚。**!!!!但是对有限状态机来讲,在整个数字电路的硬件描述语言设计,唯一可以不用知道特点的,就是有限状态机,可以不用知道电路,按照模板写就行了。**因为在它的逻辑里,对状态会有编码,这种编码计算机在对它实现的时候非常了解,但是设计人员并不是很了解。简而言之,对于存储电路就是一个一拍的移位寄存器,输入信号,状态,输出信号也可以知道,可以不知道的是这个输入信号到下个状态的编码,这个交给计算机来完成
4.1 编码
- 有限状态机的编码是一个非常关键的问题,编码的好坏和方式根据电路有很大的不同,下面举三种编码方式
- 第一种:二进制编码
(1)其状态寄存器是由触发器组成的。N 个触发器可以构成2n个状态。进制编码的优点是使用的触发器个数较少,节省资源,用最少的bit描述多位;缺点是状态跳转时可能有多个 bit(位)司时变化,引起毛刺,造成逻辑错误。
(2)换种说法,对于二进制编码,在0111-1000和1111到0000,这两个过程所有寄存器全部进行了翻转,这时功耗就会增加,而且电路种竞争-冒险就会多,有效电路速度就会降下来 - 第二种:格雷编码
(1)格雷编码和二进制编码类似。格雷编码状态跳转时只有一个 bit(位)发生变化,减少了产生毛刺和一些暂态的可能
(2)格雷码的使用也有一些限制,当状态转换特别复杂,多个状态指向一个,从这个状态不一定就是跳转到格雷码的下一个状态,这时就没有完全解决上面的问题
(3)!!但是格雷码肯定是对二进制编码有一定的提升,因为它能解决大部分临近编码跳转的问题 - 第三种:一位独热(One hot)编码
(1)这是对于n个状态采用个 bit(位)来编码,每个状态编码中只有一个 bit(位)为1,如0001、0010、0100、1000。
(2)!!使用One hot编码在任何情况下都只有两个bit发生变化,这就解决了电路的速度,竞争等带来的不确定性
(3)One hot 编码增加了使用触发器的个数,而且状态多了,触发器太多,速度也会降下来 - !!所以,不同的编码方式产生的结果是完全不一样的
4.2 有限状态机的写法
- 有限状态机的写法有很多,常见的是两段式和三段式两种
- 如何解释这两种方式呢?我们有三个方式,输出方式,驱动方程和状态转移方程,有一个是一定要分开的(状态转移方程),两段式就是输出方程和驱动方程放在一起写,三段式就都分开写
(1)两段式写法:
(2)三段式写法:
- !!!!在有限状态机中,所有的状态和输出信号在每一个分支条件下必须对它进行赋值,如果赋值是不变的,就要把信号写给它,就是不变的,否则就会产生latch
4.3 举例
4.3.1 用Verilog HDL 设计顺序脉冲发生器
- 顺序脉冲发生器又称脉冲分配器,它将高电平脉冲依次分配到不同的输出上,保证在每个时钟周期内只有一路输出高电平,不同时钟上的高电平脉冲依次出现在所有输出端
- 以 4 位顺序脉冲发生器为例,它有 4路输出W1,W2,W3,W4,每路输出上高电平脉冲依次出现,输出在 1000、0100、0010,0001 之间循环。4 位顺序脉冲发生器的状态转移图如图 4.4-3 所示,它由4 个状态构成,每个状态中“1”的个数都是1个,表示每个时钟周期内只有一路输出端为高电平,而且是轮流出现,因此生成了顺序脉图4.4-3 4位顺序脉冲发生器电路的状态转移图冲信号
- 代码如下:
4.3.2 设计-个自动售报机报纸价钱为八角,纸币有 1角、2 角5 角、一元。该自动售报机不考虑投币为大额面值等特殊情况
-
经常会考,目的就是画状态转移图
-
图中,So~S,为状态机的8 个状态角标代表已投币的总和,如 S代表没有投币,S,代表已投入 1 角,依此类推。M 代表输入,M1 表示投入1角硬币,M2 代表投入2角硬币,M5 代表投入5 角硬币,M10代表投入一元。
-
data out=1 表示给出报纸,data out retuml=1 表示找1角硬币,data out return2=l表示找回2角硬币
-
代码如下
(1)P1和P2
(2)P3和P4
(3)P5和P6
-
!!!!所以在HDL中,强调有限状态图的写法,而不是注意语法