23.状态机设计——可乐机设计(2.5元1瓶可乐,有找零功能)

(1)Visio视图:

(2)Verilog代码:

module fsm_cola_plus(clk,reset_n,pi_money_one,pi_money_half,po_cola,po_money);input clk;input reset_n;input pi_money_one;input pi_money_half;output po_cola;output po_money;reg [4:0] state;wire [1:0]pi_money;reg [1:0]po;parameter IDLE      = 5'b00001;parameter HALF      = 5'b00010;parameter ONE       = 5'b00100;parameter ONE_HALF  = 5'b01000;parameter TWO       = 5'b10000;//输入、输出信号编码设计assign pi_money = {pi_money_one,pi_money_half};assign {po_cola,po_money} = po;//状态机状态跳转设计always@(posedge clk or negedge reset_n)if(!reset_n)state <= IDLE;else begincase(state)IDLE:beginif(pi_money == 2'b10)state <= ONE;else if(pi_money == 2'b01)state <= HALF;else state <= state;endHALF:beginif(pi_money == 2'b10)state <= ONE_HALF;else if(pi_money == 2'b01)state <= ONE;else state <= state;endONE:beginif(pi_money == 2'b10)state <= TWO;else if(pi_money == 2'b01)state <= ONE_HALF;else state <= state;endONE_HALF:beginif(pi_money == 2'b10)state <= IDLE;else if(pi_money == 2'b01)state <= TWO;else state <= state;endTWO:beginif((pi_money == 2'b10) || (pi_money == 2'b01))state <= IDLE;else state <= state;enddefault:beginstate <= IDLE;endendcaseend//状态机输出信号设计always@(posedge clk or negedge reset_n)if(!reset_n)po <= 2'b00;else if(((state == ONE_HALF) && (pi_money == 2'b10)) || ((state == TWO) && (pi_money == 2'b01)))po <= 2'b10;else if((state == TWO) && (pi_money == 2'b10))po <= 2'b11;elsepo <= 2'b00;endmodule

(3)仿真文件代码:

`timescale 1ns / 1psmodule fsm_cola_plus_tb;reg clk;reg reset_n;reg pi_money_one;reg pi_money_half;wire po_cola;wire po_money;fsm_cola_plus fsm_cola_plus_inst(.clk(clk),.reset_n(reset_n),.pi_money_one(pi_money_one),.pi_money_half(pi_money_half),.po_cola(po_cola),.po_money(po_money));initial clk = 1'd1;always #10 clk = ~clk;initial beginreset_n <= 1'd0;pi_money_half <= 1'd0;pi_money_one  <= 1'd0;#15;reset_n <= 1'd1;#200;pi_money_half <= 1'd1;      //0.5元#20;pi_money_half <= 1'd0;pi_money_one  <= 1'd1;      //1.5元#20;pi_money_half <= 1'd0;pi_money_one  <= 1'd0;      //1.5元#40;pi_money_half <= 1'd0;pi_money_one  <= 1'd1;      //0元       可乐不找零#20;pi_money_half <= 1'd0;  pi_money_one  <= 1'd0;      //0元#200;pi_money_half <= 1'd0;pi_money_one  <= 1'd1;      //1元#20;pi_money_half <= 1'd1;pi_money_one  <= 1'd0;      //1.5元#20;pi_money_half <= 1'd1;pi_money_one  <= 1'd0;      //2元#20pi_money_half <= 1'd0;pi_money_one  <= 1'd1;      //0元   可乐加找零#20pi_money_half <= 1'd0;pi_money_one  <= 1'd0;      //2元#200;$stop;endendmodule

(4)仿真波形:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天10个vue面试题(一)

1. Vue的基本原理&#xff1f; 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。…

如何提问 如何回答

如何提问 如何回答 如何提出一个好问题 1、选择合适的平台或专家&#xff1a;选择合适的论坛&#xff0c;或者能够给你答案的地方或者人 2、清晰描述问题背景&#xff1a;描述问题的背景&#xff0c;清楚明确地表达你的问题以及需求&#xff0c;不需要加过多的语气助词&#…

为什么要学习Go?

目录 前言 一、Go 语言的发展史 Robert Griesemer Rob Pike Ken Thompson 二、Go语言全面分析 主要优势 主要挑战 三、Go 语言最佳实践 1. 云原生开发 2. 网络服务开发 3. 系统工具和实用程序 4. 数据处理和分析 四、哪些知名公司使用 Go 语言&#xff1f; Google …

vue详解

目录 ​编辑 常用指令 v-for v-bind v-if & v-show v-if v-show v-on v-model Vue生命周期 ​编辑 Axios Axios使用步骤 Axios-请求方式别名 Vue简单案例 常用指令 指令:HTML标签上带有 v-前缀的特殊属性&#xff0c;不同的指令具有不同的含义&#xff0c;可…

深入理解sklearn中的模型参数优化技术

参数优化是机器学习中的关键步骤&#xff0c;它直接影响模型的性能和泛化能力。在sklearn中&#xff0c;参数优化可以通过多种方式实现&#xff0c;包括网格搜索&#xff08;GridSearchCV&#xff09;、随机搜索&#xff08;RandomizedSearchCV&#xff09;和贝叶斯优化等。本文…

MATLAB基础应用精讲-【数模应用】分层聚类(附python代码实现)

目录 前言 知识储备 层次聚类 1. 算法解读: 2. 步骤和细节: 3. 举例: 4. 算法评价: 5. 算法的变体: 算法原理 基本思想 分层聚类网络的原理 分层聚类网络的优势 分层聚类网络的应用领域 SPSSAU 分层聚类案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果…

DevEco Studio No device 无法识别 usb 设备 - 鸿蒙

DevEco Studio IDE 版本与手机系统版本升级后出现了 USB 连接设备后 IDE 无法识别 no device 的情况出现; 解决办法 首先,确定当前 DevEco Studio 的 IDE 版本与移动设备的大版本保持一致; 其次,在版本相互匹配的情况下,查看移动设备是否开启了开发者模式与 USB 调试,具体步骤…

生成requirements.txt

pip install pipreqs pipreqs ./ --encodingutf-8 --force python导出requirements.txt的几种方法总结

Sphinx 搜索配置

官方文档 http://sphinxsearch.com/docs/sphinx3.html 支持中文&#xff0c;英文&#xff0c;日文&#xff0c;韩文&#xff0c;俄罗斯语搜索 版本是 官网3.6.1版本 文件 sphinx.conf.dist 的windows 配置&#xff0c;官网下载下来后微微配置即可。 # Minimal Sphinx confi…

考研数学130+的强化复习规划(附暑假经验分享)

考研数学强化是最关键的提高阶段&#xff01; 有的同学强化阶段做的好&#xff0c;甚至能冲击到130这个分数&#xff01;所以&#xff0c;大家一定要重视考研数学强化&#xff0c;特别是暑期两个月的时间。 先说一下强化误区&#xff01; 很多同学基本上就是6月结束基础&…

短剧APP小程序开发

要开发一个短剧APP小程序&#xff0c;你可以使用微信小程序的开发工具&#xff0c;并遵循微信小程序的开发文档。以下是简化的开发步骤和示例代码&#xff1a; 下载并安装微信小程序开发工具&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/devtools/download.…

国产化框架PaddleClas结合Swanlab进行杂草分类

1. 项目介绍 杂草是农业中的主要问题之一&#xff0c;对作物生长和产量造成严重威胁。传统的手动识别和管理方式效率低下且不够精确&#xff0c;因此需要借助先进的计算机视觉技术来提升农业生产的效率和质量。ResNet作为一种深度学习模型&#xff0c;在处理复杂的图像分类任务…

【时间复杂度的计算】

目录 一、时间复杂的的概念1、定义2、基本计算规则 二、单层循环时间复杂度计算公式三、双层循环时间复杂度计算公式四、多层循环时间复杂度计算公式1、法一&#xff1a;抽象为计算三维物体的体积2、法二&#xff1a;列式求和 一、时间复杂的的概念 1、定义 时间复杂度&#…

Linux 内核编译与模块开发:深入掌握系统核心

Linux 内核编译与模块开发&#xff1a;深入掌握系统核心 Linux 内核是操作系统的核心&#xff0c;负责管理系统的硬件和软件资源。掌握 Linux 内核编译和模块开发技能&#xff0c;可以帮助你更好地理解系统工作原理&#xff0c;定制系统功能&#xff0c;以及解决内核相关的问题…

Reids基础(redis基础详解)——从入门到精通

文章目录 redis入门1、key相关命令2、五大数据类型1、String&#xff08;字符串&#xff09;2、List&#xff08;列表&#xff09;3、Set&#xff08;值不会重复&#xff09;3、hash(map)Zset(有序集合) 3、三种特殊数据类型1、geospatial(地理位置)2、Hyperloglog(基数统计)3、…

重塑知识探索之旅——基于大型语言模型的智能维基体验

在信息爆炸的时代,我们渴望的不仅是海量的知识,更是高效、个性化且富有乐趣的学习方式。传统的百科全书虽然丰富,但在互动性和定制化方面存在局限。本文将介绍一个创新项目——基于大型语言模型(LLM)的互动式知识平台,旨在提供超越传统百科全书的沉浸式学习体验。 创新亮…

ThreeJS-3D教学十五:ShaderMaterial(noise、random)

ThreeJS-3D教学十四:ShaderMaterial(length、fract、step) 上面这篇主要是操作 fragmentShader 片元着色器,实现对物体颜色的修改,这次咱们来看下修改 vertexShader 顶点着色器,这个其实就是位移各个顶点的位置。 接下来我们先介绍下 noise 噪声函数(Perlin Noise、Sim…

设计模式7-装饰模式

设计模式7-装饰模式 写在前面动机模式定义结构代码推导原始代码解决问题分析 选择装饰模式的理由1. 职责分离&#xff08;Single Responsibility Principle&#xff09;2. 动态扩展功能3. 避免类爆炸4. 开闭原则&#xff08;Open/Closed Principle&#xff09;5. 更好的组合复用…

vue3项目,表单增删改

效果图 ArticleChannel.vue页面代码 <script setup> import {artGetChannelsService ,artDelChannelService} from /api/article.js import { Edit, Delete } from element-plus/icons-vue //调用open方法&#xff0c;ChannelEdit去修改组件内部类容 import ChannelEdit…

Unity通过NDK实现C#与C++之间的相互调用

由于一些历史遗留问题&#xff0c;我们项目还在使用一套C实现的Box2D定点数的库&#xff0c;由于最近修改了视野算法所以需要重新打包安卓的【.so】文件&#xff0c;特此记录 1、关于NDK 在Android平台&#xff0c;C/C需通过NDK编译成动态链接库.so文件&#xff0c;然后C#中通过…