描述状态机推荐采用三段式FSM描述方法。这种写法使用3个always模块,一个always模块采用同步时序的方式描述状态转移,一个always采用组合逻辑的方式判断状态转移条件,描述状态转移规律,第三个always模块使用同步时序电路描述每个状态的输出。

  这种做法好处在于便于阅读、理解、维护,更重要的是利于综合器优化代码。利于用户添加合适的时序约束条件,利于布局布线器实现设计。

  三段式FSM写法参考如下程序:

module fsm(in1, in2, clk, rst_n, out1, out2, err);
input        in1, in2;
input        clk, rst_n;
output        out1, out2;
output        err;reg            out1, out2;
reg            err;
reg[2:0]    CS, NS;parameter[2:0]    IDLE    = 3'b000,S1      = 3'b001,S2       = 3'b010,ERROR    = 3'B100;//时序逻辑,状态转移
always @(posedge clk or negedge rst_n)
beginif (!rst_n)CS <= IDLE;elseCS <= NS;
end//组合逻辑,状态转移条件判断
always @(rst_n, CS, in1, in2)
beginNS = 3'bX;case (CS)IDLE:beginif (!in1)          NS = IDLE;if (in1 && in2)     NS = S1;if (in1 && !in2)    NS = ERROR;endS1:beginif (!in2)           NS = S1;if (in1 && in2)     NS = S2;if (!in1 && in2)    NS = ERROR;endS2:beginif (in2)            NS = S2;if (in1 && !in2)    NS = IDLE;if (!in1 && !in2)   NS = ERROR;endERROR:beginif (in1)            NS = ERROR;if (!in1)           NS = IDLE;enddefault: NS = IDLE;endcase;
end//时序逻辑,状态机输出
always @(posedge clk or negedge rst_n)
beginif (!rst_n){out1, out2, err} <= 3'b000;elsebegin{out1, out2, err} <= 3'b000;case (NS)IDLE:     {out1, out2, err} <= 3'b000;S1:       {out1, out2, err} <= 3'b100;S2:       {out1, out2, err} <= 3'b010;ERROR:    {out1, out2, err} <= 3'b111;default: {out1, out2, err} <= 3'b000;endcaseend
endendmodule

转载于:https://www.cnblogs.com/chenman/archive/2013/05/03/3056016.html

有限状态机FSM的写法相关推荐

  1. Cocos Creator 超简洁代码实现有限状态机 FSM,打造丝滑角色动作

    引言:本文作者黄聪是一名在校大学生,设计毕设的过程中,他参考<游戏编程模式>一书,摸索出了一套角色动作控制方案. 作为一名在校学生,前段时间在做毕业设计的过程中,我也遇到了很多同学都会遇到 ...

  2. 【算法】有限状态机FSM

    目录 一.快速理解 1.有限状态机(FSM) 2.有限状态机的设计 二.详细说明 1.有限状态机FSM 1)FSM概念 2)FSM的3特点 3)FSM的4要素 4)FSM状态转换图 2.FSM的设计和 ...

  3. 有限状态机FSM(finite state machine) 二

    有限状态机FSM(finite state machine) 二 延续上一篇继续有限状态机 上一篇中的状态切换判断是在每一个状态类的 OnExecute 方法中各种 if else 硬编码逻辑 当状态 ...

  4. 什么是有限状态机FSM

    什么是有限状态机FSM 简介 有限状态机(以下用FSM指代)是一种算法思想,简单而言,有限状态机由一组状态.一个初始状态.输入和根据输入及现有状态转换为下一个状态的转换函数组成.在Gof的23种设计模 ...

  5. Unity进阶第三章-有限状态机FSM(三种方法实现角色动画操作)

    一.有限状态机FSM概述 二.不用有限状态机实现角色的走路.攻击动作 (1)新建角色.地面.为角色添加动画 (2)为角色添加脚本 using System.Collections; using Sys ...

  6. 有限状态机FSM(finite state machine) 一

    有限状态机FSM(finite state machine) 一 有限状态机又称有限自动状态机,它拥有有限数量的状态,每个状态代表不同的意义,每个状态可以切换到 零-多 个状态.任意时刻状态机有且只能 ...

  7. 有限状态机(FSM)设计原理

    1 概述 2 状态机的描述方法 3 FSM的状态编码 4 FSM的Verilog HDL 设计的基本准则及有限状态机设计的一般步骤 基本准则 一般步骤 5 设计举例 51一段式one alwaysFS ...

  8. c语言状态机_【C语言】有限状态机FSM

    有限状态状态机FSM(finite state machine)是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型.有限状态自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字 ...

  9. php状态机,有限状态机FSM的原理与GO的实现

    有限状态机(Finite-state machine, 简写FSM)又可以称作有限状态自动机.它必须是可以附着在某种事物上的,且该事物的状态是有限的,通过某些触发事件,会让其状态发生转换.为此,有限状 ...

  10. 简单的有限状态机Unity独家写法(呸~厚颜无耻之人)

    博主不是一个会写博客的人,也不会去扫盲什么事有限状态机,但凡会用百度的同学自己搜一下大把大神文章给你们拜读,这里我介绍的是最最最简单的有限状态机写法,当然也是看别人的代码学习来的. 最最最简单的有限状 ...

最新文章

  1. linux shell sed 删除文件 前几行
  2. Mybatis插入MySQL数据库中文乱码
  3. 为安装创建软链接,迁移文件夹
  4. 设置图片圆角 或者圆形
  5. Linux系统语言教程,Linux操作系统基础及语言基础教程-麦可网张凌华
  6. 操作数据库(增删改)
  7. aov建立Java模拟,JAVA
  8. 字词拼音查询易语言代码
  9. MX160煲机音乐的选择
  10. 浅析欢乐时光(HAPPY TIME)病毒 (转)
  11. 真实评测 i3 1115G4和i7 1165G7选哪个
  12. 无法打开coursera网站解决方案
  13. php 汉字拼音字典排序,按拼音排序的小技巧
  14. python flask 路由_Python之Flask 路由与模板语法
  15. Vue H5微信分享功能实现
  16. 老板掌控公司方向的三张图
  17. android 音频播放过程,一种Android系统中的音频播放方法与流程
  18. python3 笔记6 字符串
  19. 磁盘管理器/磁盘管理工具给电脑硬盘分区
  20. 测试方法-静态,动态

热门文章

  1. Java 开发流程、运行原理、JVM 规范与实现
  2. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_2.RabbitMQ研究-RabbitMQ介绍...
  3. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_5 自定义类型转换器演示异常
  4. 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_07.入门案例中使用的组件介绍
  5. python进阶之内置方法
  6. 两个数组各个数相加或相乘变成一个矩阵求第K大
  7. 不同的数据库之间导数据
  8. .NET 环境下进制间的转换
  9. java日期互转:LocalDateTime、String、Instant、Date
  10. idea中使用maven方式使用jetty+cmd中使用Jetty运行(maven)Web项目