电子说
换个方式理解状态机
状态机概述
有限状态机通常是由寄存器组和组合逻辑组成时序电路,根据当前状态和输入信号可以控制下一个状态的跳转,有限状态机在电路中通常是作为控制模块,作为整个电路模块的核心而存在,它主要包括两大类:Mealy型状态机和Moore型状态机。
Mealy型状态机:其组合逻辑的输出不仅与当前状态有关,还与输入有关。
如下图所示:
Moore型状态机:其组合逻辑的输出只与当前的状态有关。
如下图所示:
状态机的编码方式主要包括:二进制码(Binary),格雷码(gray),独热码(one hot)
比如说当前工作四个状态的话,其编码方式如下表1所示:
二进制 |
格雷码 |
独热码 |
|
S0 |
00 |
00 |
0001 |
S1 |
01 |
01 |
0010 |
S2 |
10 |
11 |
0100 |
S3 |
11 |
10 |
1000 |
格雷码相对于二进制码而言,在状态跳转的时候,只有单比特翻转,它的功耗相对比较低,该部分后面的异步FIFO章节会重点讲到。独热码相对于格雷码或者二进制码而言,它增加了两个寄存器来表示状态,但是它会更节省组合逻辑电路,因为它在比较状态的时候,只需要比较一个比特位,那么其电路的速度和可靠性就会增加。
状态机设计实例分析
应用场景:编写一个自动售货机,功能如下:
共有三种纸币入口,分别支持10元,20元,50元。货物售价为80元。需要支持找钱功能(注意,找钱有两种情况, 90元和100元;而110元和120元的情况不符合实际应用场景,所以不存在找钱的情况)。
分析:一共有十一种状态:每种状态对应当前售货机已接受的金额,当金额达到80,90,100的时候售货机会输出货物,当金额为80时,不找零,当金额为90,100的时候要找零,零钱分别为10,20。
根据分析画出如下的状态转化图:
状态机的RTL以及仿真的testbench代码链接:https://pan.baidu.com/s/1dKcwhzNS60Sw-7-UYXqyAQ
提取码:9khq
在testbench里面模拟了三种情形:输入为80,90,100的三种情况
仿真的testbench如下图:
输入信号:
ten_inst为1表示输入10,twenty_inst为1表示输入20,fifty_inst为1便是输入50。
输出信号:
out_inst为1表示要输出货物;
charge_inst为0,表示不找零,为2‘b11,表示找零20,为2‘b01表示找零10。
全部0条评论
快来发表一下你的评论吧 !