赞
踩
本文梳理状态机概念,在实操中状态机和状态模式类似,只是被封装起来,可以很方便的实现状态初始化和状态转换。
有限状态机(finite-state machine)又称有限状态自动机(英语:finite-state automaton,),简称状态机。是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。
即状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。
状态机中有几个术语:state(状态) 、transition(转移) 、action(动作) 、transition condition(转移条件) 。
状态机可以被分成两大类:接受器Acceptors 和 变换器Transducers。
acceptors(接收器) 是指产生一个二值的输出,指示接收的输入是否能被接受。
acceptors(接收器)的每一种状态都是接受或不接受的。如果一组所有的输入都被接受并且当前的状态是接受状态,那么这一组输入就是可接受的。
有限状态机的acceptors(接收器)这一类在正则引擎的实现中用得非常多。
transducers(转换器) 是根据当前的状态和(或)给定的输入产生输出,输出的同时可能也伴随着状态的转移(不是必须)。
转换器型有限状态机可以分为两种子类型,moore machine (摩尔型有限状态机)和mealy machine (米利型有限状态机) 。
Moore型状态机的输出只与当前状态有关,与当前输入无关。
输出会在一个完整的时钟周期内保持稳定,即使此时输入信号有变化,输出也不会变化。输入对输出的影响要到下一个时钟周期才能反映出来。这也是 Moore 型状态机的一个重要特点:输入与输出是隔离开来的。
Mealy型状态机的输出,不仅与当前状态有关,还取决于当前的输入信号。
Mealy 型状态机的输出是在输入信号变化以后立刻发生变化,且输入变化可能出现在任何状态的时钟周期内。因此,同种逻辑下,Mealy 型状态机输出对输入的响应会比 Moore 型状态机早一个时钟周期。
Mealy有限状态机的输出直接受输入信号的当前值影响,而输入信号可能在一个时钟周期内任意时刻变化,这使得Mealy有限状态机对输入的响应发生在当前时钟周期,比Moore有限状态机对输入信号的响应要早一个周期。因此,输入信号的噪声可能影响在输出的信号。
状态机有State/Event table(状态转移表)、UML state machines、SDL state machines等表示方法,这里主要介绍状态转移表,这种表示方法用的最多,也比较方便。
StateMachine
一个swift和kotlin写的状态机SDK,只有一个文件,代码清晰易懂;
官方示例对物理的三大状态进行封装和转换,一看就会。
参考:
Verilog 状态机
什么是状态机
什么是状态机
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。