集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 55|回复: 3

一文吃透状态机:从基础到实战,硬件开发必备技能!

[复制链接]
fpga_feixiang 发表于 前天 14:33 | 显示全部楼层 |阅读模式
# 一文吃透状态机:从基础到实战,硬件开发必备技能!
硬件开发的朋友们,今天咱们来深入聊聊状态机,这可是电路设计里超关键的存在,掌握它,很多电路控制难题都能迎刃而解!

## 一、状态机基础概念
状态机主要用于电路控制,它的核心在于电路当前状态、即将进入的次态,以及状态转换的条件。就拿交通信号灯控制电路举例,绿灯亮90s、黄灯亮3s、红灯亮60s(特定情况下) ,这背后就是状态机在发挥作用。从绿灯状态转换到黄灯状态,是因为计数器计数达到了`FSYS*90-1`(`FSYS`假设是系统时钟频率相关参数) ,这就是状态转换条件,而绿灯、黄灯、红灯状态就是一个个不同的状态。

## 二、状态编码方式
1. **自然二进制数编码**:用自然数来表示各个状态,简单直接。像4个状态,就可以用`00` `01` `10` `11`表示。但这种编码在状态转换时可能出现多位同时跳变,产生竞争冒险。
2. **One - hot(独热码)**:每个状态用单独1bit表示。比如3个状态的交通灯状态机,绿灯状态`G_ST = 3'b010`,红灯状态`R_ST = 3'b100`,黄灯状态`Y_ST = 3'b001` 。这种编码方式虽然占用更多寄存器资源,但状态转换简单明了,能有效减少竞争冒险。
3. **格雷码**:特点是在计数时只有1bit跳变。通过公式`Gran = data[1: 0] ^ (data[1: 0]>>1)`计算,例如自然二进制数`3'b010`对应的格雷码是`3'b011` 。格雷码能降低状态转换时的干扰,常用于对时序要求高的电路。

## 三、状态机分类
1. **米勒状态机**:状态控制不仅和当前状态有关,还与其他输入信号相关。比如自动售货机,售卖状态(`Sale`)不仅取决于机器当前状态,还和投入的钱币面额(`m5`、`m10`)等输入信号有关。当投入5元(`m5`)或10元(`m10`)时,`Sale<=1`,表示可以售卖商品。
2. **摩尔状态机**:状态控制只取决于当前状态。在实际应用中,比如简单的时序控制电路,仅依据当前状态就可以决定下一步动作,不需要额外输入信号参与状态转换决策。

## 四、状态机电路结构
1. **一段式**:把状态转换和输出控制都写在一个always块里。虽然代码简洁,但在状态复杂时,可读性差,且容易出现竞争冒险,影响电路时序。
2. **二段式**:将状态机分为状态转移和状态输出两部分。在一个always块中描述状态转移(根据时钟和复位信号更新当前状态`state_cs`) ,另一个always块描述次态逻辑(根据当前状态`state_cs`确定次态`state_ns`) 。不过,这种结构在状态控制复杂时,同样存在竞争冒险影响时序的问题。
3. **三段式**:在二段式基础上,增加一个always块用于输出控制。先在一个always块更新当前状态,再在另一个always块确定次态,最后在第三个always块根据次态输出控制信号。三段式结构清晰,能有效减少竞争冒险,适用于复杂状态机设计。

状态机在硬件设计中应用广泛,从简单的交通灯控制到复杂的通信协议处理都离不开它。希望大家通过这篇文章,对状态机有更深入的理解,在实际项目中灵活运用!要是在学习或实践过程中有疑问,欢迎在评论区留言,咱们一起交流探讨!
lihongkun16 发表于 昨天 08:50 | 显示全部楼层
一文吃透状态机:从基础到实战,硬件开发必备技能!

点评

海!外直播 bitly.net/vvyyy 禁闻视频 bitly.net/p7777 男子带11罐奶粉过关被抓。我活了几十年,带白粉被抓的见过不少,但是带奶粉被抓还真没见识过。郑渊洁:卖坏奶粉的不坐牢,买好奶粉的坐牢,童话故事都不敢这么   发表于 昨天 09:33
zhangyukun 发表于 昨天 09:23 | 显示全部楼层
一文吃透状态机:从基础到实战,硬件开发必备技能!
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-8 17:00 , Processed in 0.057834 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表