状态机

部署运行你感兴趣的模型镜像
关注、星标公众号,精彩内容每日送达
来源:网络素材

一、状态机的概述

有限状态机,简称状态机,通俗的说,就是把全部的情况分成几个场景,这些场景的工作方式明显不同。简单来说就是如下所示的状态转移图

1405f292e1c216efeacb6d014fca3ef1.png

二、状态机的结构

1、状态寄存器:记忆当前状态机所处的状态

2、产生下一状态的组合逻辑:根据输入信号和当前状态,决定下一个状态

3、输出逻辑:由当前状态和输入信号,决定当前状态的输出

三、好的状态机的标准

四、三段式、四段式状态机设计方法

常见状态机分为一段,二段,三段,推荐使用三段(包含当前状态,下一状态,和输出,后续分析后推荐四段式

1、第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器,即描述状态转移

c98f9cf2e857b89315f550912bf7cdcc.png

2、第二个进程,组合逻辑always模块,描述判断状态转移条件,描述状态转移规律

16fb27b263f04c69b5142df4f84e0147.png

3、第三个进程,同步时序always模块,格式化描述次态寄存器输出,其它always(个数与输出信号个数有关)使用同步时序电路设计每一个状态的输出

b124575da8d7d22d977f690d714bed9f.png

4、代码设计注意事项:

1)三段always中,第一,三个always是同步时序,采用非阻塞赋值,第二个always是组合逻辑,采用阻塞赋值

2)第二个是组合逻辑always块,命案列表采用always@(*),组合逻辑条件一定要完备

3)第二个组合逻辑always块里的判断条件需包含所有情况

4)第二部分case中的条件应为当前态

5)三段式不是三个always,而是三步的意思,与输出信号个数有关

6)三段式的好处,即可用state_c作为条件,也可用state_n作为条件。用state_c作为条件,会比state_n做条件晚一个时钟周期

5、进一步总结,归纳,提出使用四段式状态机(每次只考虑一件事),四段不是四个always,而是四个部分内容

1)第一段:与三段式第一段相同,同步时序的always模块,格式化描述次态迁移到现态寄存器

e84cec3cec1ed23f827063f053e12207.png

2)第二段:组合逻辑的always块,描述状态转移条件

注:第二段里只需要判断信号名即可,名字规范2-->to,如下所示什么到什么的条件,else条件下应为state_n = state_c; 如果是state_n = state_n,那和if-else条件没补全一样(相当于没写else begin,组合逻辑需要补全条件)

        c847342075ae222b0745ccf274101555.png             b36508a862ac58578e6bf0b41959a5af.png

3)第三段,定义状态转移条件

05766225817eff8c55a172b0395358e5.png

4)第四段,设计输出,此处可以规定一个always设计一个信号,因此有多少个输出信号,就有多少个always,如果没有输出就没有第四段

b8283cb0e731f7918724662ad8ebfe72.png

状态机设计规范

1、四段式状态机

2、第二段转移条件

1)判断条件用信号名表示,不需要去做判断,判断是在第三段的时候去做,符合之前所说的一次只做一件事的要求,也不需要来回修改信号名。只需要在第三段修改判断条件即可

3、状态不变处理

第二段使用state_n = state_c表示状态不变

1)避免拷贝时出错

2)避免组合逻辑没补齐情况,要有唯一结果输出

3)避免写出state_n = state_n,本质上还是保持不变,与第二点没补齐一样,会生成锁存器

4、转移条件命名

状态转移条件,用assign的形式写成XX2XX_start的形式,前面XX为当前状态,后面XX为下一状态。如idle2read_start,idle2write_start,方便检查沟通

5、转移条件定义

状态转移的一般格式为

assign xx2yy_start = state_c ==XXXX && zzzz;

XXXX现在状态,zzzz跳转条件

f43cefca1fd1ce5fbaa94d093e140947.png

状态机设计注意事项

1、IDLE只是名字,并不是必须的,不需要专门为复位设置一个状态

2、状态机的划分依据,依据是划分的状态方便产生输出信号

3、状态对齐的对象,状态机与din(输入信号)对齐,来产生dout(输出),即din-->状态机-->dout流程

4、状态机架构八步法(需要用计数器)

1)明确功能

572bddfaf6836c15d9336de5d95f249d.png

ef75c03b7064cb53329982a5babc2e42.png

2)输出分析

         ef0d0ee190c7eef7469e53f62c2a6ec9.png               fcd0c30de23d31cb1e5266f5b994d477.png

3)状态合并

6d09940e1782185c36340a29ebd01b16.png

4)状态转移条件

0a67cea2f089db1f0c75028a349864a3.png

5)转移条件

ad981d1b424dbd4f743ad13fdf34f682.png

d1ae7e7761e68665821b459de7bdc1b1.png

6)完整性检查

181b812a6d97c7abd31a8f56ff0dc50d.png

36da95b008cd76a8fefaf6e834b3f686.png

7)状态机代码(四段式)

ce1aaef253a63bed8d0e6713d290b539.png

9c3fb4817285f9c0c6ae56e839792b8b.png

c418972d55277baea2a7c81c57ea6a05.png

8)功能代码

39ed0da4001b430bdb2872844158f1a2.png

   681f5864c905394d80919807cd390a60.png    102279c226bc4f37b4c6a424e073ad5e.png

e0c7049c803d01de9a5574d597f44e00.png

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值