




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、状态机的两种写法有限状态机 FSM广泛应用于硬件控制电路设计,也是上常用的一种处理方法(上称为 FMM-有限消息机)。它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件,变连续处理为离散数字处理,符合计算机的工作特点。同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现。但这并不意味着其只能进行有限次的处理,相反,有限状态机是闭环系统,有限无穷,可以用有限的状态,处理无穷的事务。有限状态机的工作原理如图 1 所示,发生事件(event)后,根据当前状态(cur_s定执行的动作(action),并设置下一个状态号(nxt_s e)。e),决|发生事件 event| cur_s
2、|执行动作 actione |设置下一状态号 nxt_se当前状态图 1 有限状态机工作原理e0/a0-|e0/a0 |S0|-| e1/a1 V|-| e2/a2|S2|-|S1|-e2/a2-图 2 一个有限状态机实例当前状态s0s1s2| 事件a0/s0-a0/s0|e0a1/s1-|e1a2/s2a2/s2-|e2表 1 图 2 状态机实例的二维表格表示(动作/下一状态)图 2 为一个状态机实例的状态转移图,它的含义是:在 s0 状态,如果发生 e0 事件,那么就执行 a0 动作,并保持状态不变;如果发生 e1 事件,那么就执行 a1 动作,并将状态转移到 s1 态;如果发生 e2 事
3、件,那么就执行 a2 动作,并将状态转移到 s2 态;在 s1 状态,如果发生 e2 事件,那么就执行 a2 动作,并将状态转移到 s2 态;在 s2 状态,如果发生 e0 事件,那么就执行 a0 动作,并将状态转移到 s0 态;有限状态机不仅能够用状态转移图表示,还可以用二维的表格代表。一般将当前状态号写在横行上,将事件写在纵列上,如表 1 所示。其中“-”表示空 (不执行动作,也不进行状态转移),“an/sn”表示执行动作 an,同时将下一状态设置为 sn。表 1 和图 2 表示的含义是完全相同的。观察表 1 可知,状态机可以用两种方法实现:竖着写(在状态中判断事件)和横着写(在事件中判断
4、状态)。这两种实现在本质上是完全等效的,但在实际操作中,效果却截然不同。=竖着写(在状态中判断事件)C 代码片段=cur_s e = nxt_s e; switch(cur_s e)case s0:if(e0_event)保持状态不变;执行 a0 动作;/在当前状态中判断事件/在 s0 状态/如果发生 e0 事件,那么就执行 a0 动作,并/nxt_s e = s0;/因为状态号是自身,所以可以删除此句,以提高运行速度。else if(e1_event)状态转移到 s1 态;执行 a1 动作; nxt_s e = s1;else if(e2_event)状态转移到 s2 态;执行 a2 动作;
5、 nxt_s e = s2;break; case s1:if(e2_event)将状态转移到 s2 态;执行 a2 动作; nxt_s e = s2;/如果发生 e1 事件,那么就执行 a1 动作,并将/如果发生 e2 事件,那么就执行 a2 动作,并将/在 s1 状态/如果发生 e2 事件,那么就执行 a2 动作,并break; case s2:if(e0_event)将状态转移到 s0 态;执行 a0 动作; nxt_s e = s0;/在 s2 状态/如果发生 e0 事件,那么就执行 a0 动作,并=横着写(在事件中判断状态)C 代码片段=/e0 事件发生时,执行的函数void e0_
6、event_function(cur_s e;* nxt_se)cur_s e = *nxt_s switch(cur_s e) case s0:case s2:e;/观察表 1,在 e0 事件发生时,s1 处为空执行 a0 动作;*nxt_s e = s0;/e1 事件发生时,执行的函数void e1_event_function(cur_s e;* nxt_se)cur_s e = *nxt_s switch(cur_s e)case s0:e;/观察表 1,在 e1 事件发生时,s1 和 s2 处为空执行 a1 动作;*nxt_s e = s1;/e2 事件发生时,执行的函数void e
7、2_event_function(* nxt_se)cur_s e;cur_s e = *nxt_s e; switch(cur_s e)case s0:case s1:执行 a2 动作;*nxt_s e = s2;/观察表 1,在 e2 事件发生时,s2 处为空上面横竖两种写法的代码片段,实现的功能完全相同,但是,横着写的效果明显好于竖着写的效果。理由如下:1、竖着写隐含了优先级排序(其实各个事件是同优先级的),排面的事件判断将毫无疑问地优先于排在后面的事件判断。这种 if/else if 写法上的限制将破坏事件间原有的关系。而横着写不存在此问题。2、由于处在每个状态时的事件数目不一致,而且
8、事件发生的时间是随机的,无法预先确定,导致竖着写沦落为顺序查询方式,结构上的缺陷使得大量时间被浪费。对于横着写,在某个时间点,状态是唯一确定的,在事件里查找状态只要使用 switch 语句,就能一步定位到相应的状态,延迟时间可以预先准确估算。而且在事件发生时,调用事件函数,在函数里查找唯一确定的状态,并根据其执行动作和状态转移的思路清晰简洁,效率高,富有美感。总之,我个人认为,在里写状态机,使用横着写的方法比较妥帖。竖着写的方法也不是完全不能使用,在一些小项目里,逻辑不太复杂,功能精简,同时为了节约内存耗费,竖着写的方法也不失为一种合适的选择。在 FPGA 类硬件设计中,以状态为中心实现控制电
9、路状态机(竖着写)似乎是唯一的选择,因为硬件不太可能靠事件驱动(横着写)。不过,在 FPGA 里有一个全局时钟,在每次上升沿时进行状态切换,使得竖着写的效率并不低。虽然在硬件里竖着写也要使用 IF/ELSIF这类查询语句(用 VHDL 开发),但他们到硬件上是组合逻辑,查询只会引起门级延迟(ns量级),而且硬件是真正并行工作的,这样竖着写在硬件里就没有影响。因此,在硬件设计里,使用竖着写的方式成为必然的选择。这也是为什么很多搞硬件的工程师在设计状态机时下意识地只使用竖着写方式的原因,盖思维定势使然也。TCP 和PPP 框架协议里都使用了有限状态机,这类状态机最好使用横着写的方式实现。以某 TC
10、P 协议为例,见图 3,有三种类型的事件:上层下达令事件;下层到达的标志和数据的收包事件;超时定时器超件。上层命令(open,close)事件|TCP|超件timeoutRST/SYN/FIN/ACK/DATA 等收包事件图 3 三大类 TCP 状态机事件由图 3 可知,此 TCP 协议栈采用横着写方式实现,有 3 种事件处理函数,上层命令处理函数(如tcp_close);超件处理函数 (tmr_slow);下层收包事件处理函数(tcp_pros)。值得一提的是,在收包事件函数里,在各个状态里判断 RST/SYN/FIN/ACK/DATA 等标志(这些标志类似于事件),看起来象竖着写方式,其实,如果把包头和数据看成一个整体,那么, RST/SYN/FIN/ACK/DA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖北省初中学业水平考试化学模拟试卷(五) (学生版)
- 仲恺农业工程学院《语言服务与创新创业》2023-2024学年第二学期期末试卷
- 濮阳石油化工职业技术学院《劳动实践与人生价值》2023-2024学年第二学期期末试卷
- 浙江工商职业技术学院《测绘数据处理课程设计》2023-2024学年第二学期期末试卷
- 莆田学院《社会学与生活》2023-2024学年第一学期期末试卷
- 昆明卫生职业学院《阿拉伯语语法》2023-2024学年第二学期期末试卷
- 无锡职业技术学院《钢琴教学法》2023-2024学年第一学期期末试卷
- 山西财经大学《企业资源计划(ERP)》2023-2024学年第二学期期末试卷
- 宁夏职业技术学院《西医外科》2023-2024学年第一学期期末试卷
- 上海中华职业技术学院《土壤科学》2023-2024学年第二学期期末试卷
- 2025年江苏建筑职业技术学院高职单招(数学)历年真题考点含答案解析
- 配电工程施工方案
- 99S203 消防水泵接合器安装图集
- 日本古建筑-奈良篇
- 市场主体住所(经营场所)申报承诺书
- 水龙头生产工艺及其设备
- 传染病登记本
- 公路桥梁和隧道工程施工安全风险评估指南_图文
- 田径运动会各种用表、检录表、统计表(朱)
- 固体矿产勘查原始地质编录细则
- 奖励协议书范本
评论
0/150
提交评论