当前位置: 首页 > news >正文

可乐机的设计验证

前言

        状态机(State Machine)是一种数学模型,用于表示具有有限状态集合的系统。它通过定义状态、转移规则和事件,描述系统在不同条件下的行为。状态机的核心概念包括状态、事件、转移和动作。状态是系统的具体条件或配置,事件是引发状态变化的外部输入,而状态转移是系统从一个状态到另一个状态的过程。状态机广泛应用于计算机科学、电子工程和控制系统中,用于建模复杂的逻辑和行为,如网络协议、用户界面和自动化控制。通过将系统行为分解为离散状态和转移规则,状态机能够清晰地描述和管理系统的动态特性。

        状态机(FSM),同步(与时钟)有限状态机,分Moore型状态机(输出仅与当前状态有关),Mealy型状态机(输出与当前状态和输入有关),二者的状态跳转与输入有关。

正文

一、XXXX的设计验证

        1.项目需求

        可乐机,每次只能投一元,可乐售价3元,当连续投入三枚一元硬币后可乐机吐出可乐。

        2.技术介绍

        使用 `parameter` 定义了三个状态:`wit`(等待状态),`one`(状态一),`two`(状态二)。设置状态寄存器:`stater` 是一个 3 位宽的寄存器,用于存储当前状态。在时钟上升沿或复位信号的下降沿触发时,状态机根据当前状态和 `po_money` 的值决定状态转移。
        `wit` 状态下,若收到投币信号,则转到 `one` 状态,否则保持在 `wit`。
        `one` 状态下,若再次收到投币信号,则转到 `two` 状态,否则保持在 `one`。
        `two` 状态下,若再一次收到投币信号,则转回 `wit` 状态,否则保持在 `two`。

po_cola` 输出信号,在 `two` 状态且 `po_money` 为1时设为1,表示可以取到饮料;否则设为取不到饮料。

模拟一个饮料自动售货机的基本功能,即在接收到两次投币信号后,允许取到饮料。每个状态的转移逻辑确保了系统能够在不同的状态间正确地转换,并在达到条件时输出正确的信号。

        3.顶层架构

        4.端口描述

clk时钟信号(50Mhz)
rst_n复位信号(低电平有效)
pi_money一元硬币投入
po_cola可乐输出

二、代码验证

module cola_ji(input			clk,input			rst_n,input			po_money,//一元输入output  reg	    po_cola//可乐输出,alwaya中赋值用reg);parameter wit = 3'b001;//等待
parameter one = 3'b010;//一元
parameter two = 3'b100;//两元reg [2:0]stater;always @(posedge clk,negedge rst_n)
beginif(rst_n == 0)stater <= wit;else case(stater)wit : if(po_money == 1'b1)//一元输入,状态跳转stater <= one;elsestater <= wit;one : if(po_money == 1'b1)//一元输入,状态跳转stater <= two;elsestater <= one;two : if(po_money == 1'b1)//一元输入,状态跳转stater <= wit;elsestater <= two;default : stater <= wit;endcase
endalways @(posedge clk,negedge rst_n)
beginif(rst_n == 0)po_cola <= 1'b0;elseif((stater == two)&&(po_money == 1'b1))//二元时一元输入,可乐输出po_cola <= 1'b1;elsepo_cola <= 1'b0;
endendmodule

仿真代码

`timescale 1ns/1ps
module  cola_ji_tb;reg			clk;reg			rst_n;reg			po_money;wire			po_cola;cola_ji cola_ji_inst(.clk			(clk		),.rst_n		(rst_n	),.po_money	(po_money),.po_cola		(po_cola	));initial clk = 1;
always #10 clk = ~clk;initial begin rst_n = 0;po_money = 1'b0;#20rst_n = 1;#20po_money = 1'b1;#20po_money = 1'b0;#20po_money = 1'b1;#20po_money = 1'b0;#20po_money = 1'b1;#20po_money = 1'b0;//三元硬币投入#20po_money = 1'b1;#20po_money = 1'b0;#20po_money = 1'b1;#20po_money = 1'b0;#20po_money = 1'b1;#20po_money = 1'b0;//三元硬币投入#20po_money = 1'b1;#20po_money = 1'b0;#20po_money = 1'b1;#20po_money = 1'b0;#20po_money = 1'b1;#20po_money = 1'b0;//三元硬币投入#200$stop;
endendmodule

三、仿真验证

代码编译通过,观察状态转移图,点击如下图位置

可以看到与理论绘制的状态转移图相同

观察rtl电路图,stater为上图的状态转移图

运行仿真,可乐输出正常,按照理论逻辑输出,调出中间信号观察

可乐在二元状态下检测到再次投入的一元硬币时,可乐投出。

参考资料

状态机

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 125. 验证回文串【 力扣(LeetCode) 】
  • 设计模式 - 状态模式
  • 详解使用Goalng+Redis实现分布式锁
  • haralyzer 半自动,一次性少量数据采集快捷方法
  • C++系列-继承中的对象模型
  • Spring Boot 使用 MongoDB 教程
  • SpringBoot日志整合
  • 大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
  • 第五天:java网络编程、JDBC与高级特性概览
  • 推荐一个根据后台提供的接口json文件自动生成前端调用接口的插件typescript
  • Mysql基础篇
  • Java高级Day28-让坦克动起来
  • 保命指南,家里有浮毛、异味竟会危害健康?去浮毛空气净化器推荐
  • vue的混入介绍
  • 我常用的几个傻瓜式爬虫工具,收藏!
  • [译] React v16.8: 含有Hooks的版本
  • CAP 一致性协议及应用解析
  • Consul Config 使用Git做版本控制的实现
  • Cookie 在前端中的实践
  • css属性的继承、初识值、计算值、当前值、应用值
  • ERLANG 网工修炼笔记 ---- UDP
  • ES学习笔记(12)--Symbol
  • exif信息对照
  • Hexo+码云+git快速搭建免费的静态Blog
  • Linux快速复制或删除大量小文件
  • Python3爬取英雄联盟英雄皮肤大图
  • RxJS: 简单入门
  • Spring框架之我见(三)——IOC、AOP
  • vue 配置sass、scss全局变量
  • Vue学习第二天
  • Vue组件定义
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 使用 QuickBI 搭建酷炫可视化分析
  • 王永庆:技术创新改变教育未来
  • 微信小程序实战练习(仿五洲到家微信版)
  • 智能合约Solidity教程-事件和日志(一)
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • $jQuery 重写Alert样式方法
  • (4)logging(日志模块)
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (第30天)二叉树阶段总结
  • (黑客游戏)HackTheGame1.21 过关攻略
  • ./configure,make,make install的作用(转)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET CF命令行调试器MDbg入门(一)
  • .NET gRPC 和RESTful简单对比
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 中viewstate的原理和使用
  • .NET开源、简单、实用的数据库文档生成工具
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET命名规范和开发约定
  • .Net实现SCrypt Hash加密
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @RestControllerAdvice异常统一处理类失效原因
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell