状态机概述 如何理解状态机

电子说

1.3w人已加入

描述

换个方式理解状态机

状态机概述

       有限状态机通常是由寄存器组和组合逻辑组成时序电路,根据当前状态和输入信号可以控制下一个状态的跳转,有限状态机在电路中通常是作为控制模块,作为整个电路模块的核心而存在,它主要包括两大类: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。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分