[FPAG学习]第四部分:状态机(有限状态机)

一、状态机的定义:

        状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine)。

二、状态机的四要素:

        状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。

(一)现态:

        当前所处的状态。

(二)条件:

        又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

(三)动作:

        条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

(四)次态:

        条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

三、状态转换图:

        为了以更形象的方式直观的显示出时序电路的逻辑功能,可以用状态转换图来表示时序电路的各个状态及其转换。在状态转换图中,以圆圈表示电路的各个状态,以箭头表示状态转换的方向。同时,在箭头旁注明了状态转换前的输入变量取值和输出值。通常将输入变量取值写在斜线以上,将输出值写在斜线以下。

6b220cc10ec5ed2cf56abbc2b8518523.png

状态转换图

四、状态机的分类:

(一)Moore(摩尔)型有限状态机:

        下一状态只由当前状态决定,即次态=f(现状,输入),输出=f(现状)。

63e92377a278f6ab172c41ee280c3bad.png

Moore(摩尔)型有限状态机

(二)Mealy(米利)型有限状态机:

        下一状态不但与当前状态有关,还与当前输入值有关,即次态=f(现状,输入),输出=f(现状,输入)。

ddbb6a438bf3dbe34442e2879444e1f7.png

Mealy(米利)型有限状态机

五、状态编码。 

(一)状态编码的目的:

        将每一个状态赋予一个独特的编码,便于区分不同的状态。

(二)状态编码的方式:

(1)二进制码(顺序编码):

        将状态依次编码为顺序的二进制数。它的特点是:编码简单,非常符合人们通常的计数规则。例如,状态合集为{S0、S1、S2、S3},用二进制编码结果为:

S0 = 00;
S1 = 01;
S2 = 10;
S3 = 11;

        优点: 使用的状态向量位数少(占用位宽少),节约了逻辑资源。

        缺点:状态变化是变化的比特位多,易产生毛刺,甚至乱跳码。

(2)独热码:

        采用独热码的编码方式来进行状态编码。它的特点是:状态寄存器在任何状态时的取值都仅有一位有效。例如,状态合集为{S0、S1、S2、S3},用独热码编码结果为:

S0 = 0001;
S1 = 0010;
S2 = 0100;
S3 = 1000;

        优点: 电路的速度和可靠性高,一定程度上简化了比较逻辑,从而减少了毛刺产生的概率。

        缺点:有几个状态就会需要多少位宽,占用更多的寄存器。

(3)格雷(Gray)码:

        采用格雷码的方式来进行状态编码。它的特点是:相邻两个状态的寄存器表示仅有一位变化。

        编码原则:对二进制自然码,从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0)

        例如,状态合集为{S0、S1、S2、S3},用格雷码编码结果为:

S0 = 00;
S1 = 01;
S2 = 11;
S3 = 10;

        优点: 状态变化时只有一比特变化,减少了毛刺发生的概率。同时具有独热码与二进制码的优点。

        缺点:在状态机很复杂状态跳转的分支很多时,要合理的分配状态编码保证每个状态跳转都仅有 1 位发生变化,这是很困难的事情。

补充:十进制码:

        将状态依次编码为顺序的十进制数。它的特点是:编码简单,非常符合人们通常的计数规则。例如,状态合集为{S0、S1、S2、S3},用十进制编码结果为:

S0 = 0;
S1 = 1;
S2 = 2;
S3 = 3;

        优点:易于阅读,可供人类使用,并且易于操作。

        缺点:浪费空间和时间。

注:在状态数量较少时我们通常使用独热码,其次是二进制码。

六、状态机的写法(形式):

详细解释以及三种写法的代码示例:Verilog状态机常见三种写法

(一)一段式状态机:

        状态转移,状态输出结果全在一起

(二)二段式状态机:

        状态转移,状态输出分为两段写

(三)三段式状态机:

        状态转移分为两段写,状态输出单独写

注:一般情况下我们都会选择写三段式状态机,因为三段式能够很清晰的展现代码逻辑,后期修改也比较方便。

LabVIEW是一种图形化编程语言,广泛应用于测试、测量以及工业自动化领域。在LabVIEW中,状态机是一种常用的程序结构,用于控制程序的流程和状态转换。根据不同的需求和设计原则,LabVIEW中的状态机可以分为几种不同的类型: 1. 基本状态机(Basic State Machine):这是最简单的状态机结构,包含一个初始化状态、一个或多个操作状态以及一个停止状态。基本状态机适用于逻辑不复杂,状态转换明确的应用场景。 2. 扩展状态机(Extended State Machine):在基本状态机的基础上,扩展状态机增加了对事件和动作的处理能力,允许程序根据事件和动作在状态之间转换,同时可以处理一些附加的状态,如错误处理、超时判断等。 3. 嵌套状态机(Nested State Machine):当程序逻辑非常复杂时,单个状态机可能难以管理,这时可以将状态机进行嵌套。在一个状态机内部可以包含一个或多个子状态机,每个子状态机负责处理一部分逻辑。 4. 伪状态机(Pseudo State Machine):这种状态机不是严格意义上的状态机,它可能只在视觉上呈现出状态转换的特性,但并不严格遵循状态机的定义。例如,LabVIEW中的循环结构有时也可以模拟出类似状态转换的行为。 在设计LabVIEW状态机时,需要根据实际需求选择合适的类型,并利用LabVIEW的图形化编程特性来实现状态的定义、转移和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值