状态机也称为同步有限状态机,分为more型状态机(最后的输出只与当前状态有关,而与输入无关)和mealy型状态机(最后的输出不仅与当前状态有关,还与输入有),适合用来表示事件发生有先后顺序的情况。这里以可乐机为背景,可乐售价为3元/瓶,一元一元投币,每投入到3元自动出一瓶可乐。

这里设置的输入信号包括时钟sys_clk,复位sys_rst_n以及投币信号pi_money,输出为是否有可乐投出po_cola。

首先绘制一个状态转移图,在状态转移图上可以清楚地表达出各状态的输入输出,跳转的条件和功能,一个完整的状态转移图需要包含三要素:一是输入,二是输出,三是状态。在可乐机中输入为一元硬币,输出是出可乐或者不出可乐,状态是投入0元,投入1元,投入2元,投入3元。

斜线左边表示是否有钱投入,0表示没有钱投入,1表示有钱投入;右边是是否有可乐输出,0表示没有,1表示有,即0/0表示不投钱,不输出可乐,继续维持在IDEL初始状态。若投入1元钱,则跳转到ONE状态,但是仍然没有可乐输出,从IDEL状态跳转到ONE状态跳转条件是1/0;以此类推。当在TWO状态时,若再投入1元,则会出可乐,状态机又跳转到IDEL状态。

编写代码实现以上过程,但除了输入输出信号外,我们需要定义一个中间变量state来表示状态机所处的状态,初始状态为IDLE。当pi_money为高电平时,表示投入了一元钱,则state状态变为ONE,若pi_money为低电平时,表示没有投钱,则state保持原有的状态;若再遇到pi_money为高电平时state跳转到TWO状态,若再遇到pi_money为高电平时,出可乐,po_clola为高电平,输出一瓶可乐,state跳转到IDLE初始状态,

参照以上波形图进行代码编写:

module  simple_fsm
(input wire  sys_clk,input wire  sys_rst_n,input wire  pi_money,output  reg  po_cola);parameter  IDLE  =  3'b001;
parameter  ONE   =  3'b010;
parameter  TWO   =  3'b100;reg  [2:0]  state;always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)state  <= IDLE;else   case(state)IDLE:  if (pi_money ==1'b1)state <= ONE;elsestate  <= IDLE;ONE :  if (pi_money ==1'b1)state <= TWO;elsestate  <= ONE  ;TWO:   if (pi_money ==1'b1)state <= IDLE;elsestate  <= TWO ; default :state <= IDLE;                 always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)po_cola <= 1'b0;else if ((pi_money==1'b1)&&(state == TWO))po_cola <= 1'b1;elsepo_cola <=1'b0;endmodule

编译程序通过后可以查看综合器综合出来的状态转移图如下,与之前的分析一致。

编写仿真文件进行波形测试:

观察仿真波形图可知,初始状态为001,当pi_money为高电平时,表示投入了一元钱,则state状态变为010,pi_money又为高电平时,state变为100,pi_money继续维持高电平时,state回到001,输出一个时钟周期的高电平,表示输出一瓶可乐,仿真结果正确。

状态机——简单自动售卖机的实现相关推荐

  1. 状态机-简单、重要、高可应用性的思想

    其实在数字电路中就已经介绍过这种模型,包括后续的"信息论"."随机过程"等课程中,也介绍到了这个模型中的一些基本概念.可是平时在课堂上学过了,没有实际应用确实难 ...

  2. 状态机——可乐机自动售卖机可找零的实现

    可乐定价为2.5元/瓶,投币可投0.5元或者1元硬币,若投入不超过2.5元,则不出可乐,若投入3元则可以出一瓶可乐,还要找回0.5元.与之前相比,这里的输入变量有时钟复位,一元输入pi_money_o ...

  3. FPGA中状态机的稳定性

    第一个:状态机输出信号填写问题,下面是我转载的一些能百度的到的东西.好像都比较正常.这里我还要强调的是,每个状态机的输出信号都需要全面. 举例: always @ (posedge clk or ne ...

  4. .NET 状态机Automatonymous快速入门

    介绍 Automatonymous是.NET开发人员的状态机库.它提供了一种流畅的语法来声明状态机,包括状态,事件(支持触发器和数据事件)以及状态/事件活动.尽管Automatonymous在简单的状 ...

  5. unity游戏开发-简易的状态机

    本篇主要分享一个简易状态机的实现. 目录 状态机 应用例子 业务需求 普通实现 缺点分析 状态机实现 优点分析 状态机 简单点讲状态机其实就是将一个具体的业务拆分为几个小的状态,状态之间由一定的条件来 ...

  6. Labview温度采集系统(状态机)

    文章目录 状态机基本框架 状态机简单应用(温度采集系统) 任务分析 模块设计 数据采集模块 分析数据模块 数据记录模块 前面板结果 状态机基本框架 状态机由状态的集合和对应状态切换的转换函数构成: 每 ...

  7. QP状态机学习①——QP状态机架构

    QP是一个实时嵌入式框架(RTEF),事件驱动的实时内核(RTOS内核)以及一套基于主机的互补工具相结合的,可实现事件驱动的体系结构,并且基于模型设计可以自动代码生成. QP-bundle,是QM建模 ...

  8. 游戏状态机的设计与实现

    前言:      游戏编程中对状态机的理解和应用,是体现程序员是否对游戏编程入门的重要指标.本篇文章描述状态机的原理,以及如何实现.并探讨状态机的扩展性和易用性. 什么是状态机:      1.状态机 ...

  9. 关于BFD(双向转发检测)开发的总结

    前一阵子因为业务需要,需要设备提供高可靠性(HA),      高可靠性指的是设备出故障的时候能够不影响业务的运行,我们部门产品的高可靠性的实现方案是双机备份,就是一台机器出故障的时候另一台设备能够接 ...

最新文章

  1. java几种删除_几种删除Linux目录的方法
  2. pycharm无法导入本地模块问题
  3. 信息学奥赛一本通 1035:等差数列末项计算 | OpenJudge NOI 1.3 18
  4. 答案 石头剪刀布 编码过程 0912
  5. 第 1 章 课程概述
  6. 51单片机汇编学习笔记1——内部结构
  7. .NET破解之百分百营销软件系列
  8. Robo 3T(Studio 3T)最新版安装教程
  9. 解决Mac自动切换输入法
  10. “此电话号码无法用于进行验证” 注册gmail邮箱手机号码不能验证的解决方法(已解决)
  11. iOS 各种证书/签名详解
  12. Civil 3d 将平面结构物投影到纵断面上
  13. Anaconda3 下载安装与Labelme下载安装
  14. 2017年内大892数据结构部分参考答案
  15. ftp服务器密码为空,ftp服务器设置为无账号密码
  16. 内网渗透-msf及socks代理转发
  17. 详细教程||基于51单片机开发的十路抢答器设计
  18. tio开发udp应用,发100万数据
  19. 结构体的定义与结构体变量的定义
  20. LAMP架构集成ownCloud搭建私有云盘

热门文章

  1. 六、Redis新类型bitmap-hyperloglgo-GEO
  2. 6.6 调整选区形状和尺寸的几种方式 [原创Ps教程]
  3. LeetCode 1518. 换酒问题
  4. 《薄冰实用英语语法详解》连载之七:助动词
  5. PostgreSQL Huge Page使用最佳实践
  6. 标准数据源增强与新建一般数据源-待续
  7. Pytorch CPU/GPU 安装方法。
  8. 语音更纯净——删除声音广告
  9. 土豆,优酷,人民网等视频如何下载
  10. 数字孪生平台:三维(3d)可视化技术,解决方案管理系统