自动售饮料机的verilog实现
自动售饮料机的verilog实现。
每瓶饮料2.5元,可投入0.5与1.0两种硬币,具有找零功能。
说明:此处只是功能的简单实现,没有过多考虑实际售饮料机功能的完整性,可根据需要在此基础上进行修改,、。
代码:
1 module drink_seller(rst_n, 2 clk, 3 buy, 4 money, 5 drink, 6 change 7 ); 8 input rst_n; 9 input clk; 10 input buy; 11 input [1:0] money; 12 13 output drink; 14 output [1:0] change; 15 16 parameter IDLE = 6'b000001; //空闲状态 17 parameter S0 = 6'b000010; //投币0.5元 18 parameter S1 = 6'b000100; //投币0.5元 19 parameter S2 = 6'b001000; //投币1.0元 20 parameter S3 = 6'b010000; //投币1.5元 21 parameter S4 = 6'b100000; //投币2.0元 22 23 reg [5:0] cur_state; 24 reg [5:0] nxt_state; 25 26 reg drink; 27 reg [1:0] change; 28 29 //状态寄存,时序逻辑 30 always@(posedge clk) 31 if(!rst_n) 32 cur_state <= 6'b0; 33 else 34 cur_state <= nxt_state; 35 36 //状态转换,组合逻辑 37 always@(*) 38 if(!rst_n) 39 //nxt_state = 6'b0; 40 nxt_state = IDLE; 41 else 42 begin 43 case(cur_state) 44 IDLE : if(buy) 45 nxt_state = S0; 46 else 47 nxt_state = IDLE; 48 S0 : case(money) //开始投币 49 2'b00 : nxt_state = S0; 50 2'b01 : nxt_state = S1; 51 2'b10 : nxt_state = S2; 52 2'b11 : nxt_state = S3; 53 endcase 54 S1 : case(money) //已投币0.5 55 2'b00 : nxt_state = S1; 56 2'b01 : nxt_state = S2; 57 2'b10 : nxt_state = S3; 58 2'b11 : nxt_state = S4; 59 endcase 60 S2 : case(money) //已投币1.0 61 2'b00 : nxt_state = S2; 62 2'b01 : nxt_state = S3; 63 2'b10 : nxt_state = S4; 64 2'b11 : nxt_state = IDLE; 65 endcase 66 S3 : case(money) //已投币1.5 67 2'b00 : nxt_state = S3; 68 2'b01 : nxt_state = S4; 69 2'b10 : nxt_state = IDLE; 70 2'b11 : nxt_state = IDLE; 71 endcase 72 S4 : case(money) //已投币2.0 73 2'b00 : nxt_state = S4; 74 2'b01 : nxt_state = IDLE; 75 2'b10 : nxt_state = IDLE; 76 2'b11 : nxt_state = IDLE; 77 endcase 78 endcase 79 end 80 81 //输出控制,组合逻辑 82 always@(*) 83 if(!rst_n) 84 begin 85 drink = 1'b0; 86 change = 2'b00; 87 end 88 else begin 89 case(cur_state) 90 IDLE,S0,S1: 91 begin 92 drink = 1'b0; 93 change = 2'b00; 94 end 95 S2 : case(money) 96 2'b11 : 97 begin 98 drink = 1'b1; 99 change = 2'b00; 100 end 101 default : 102 begin 103 drink = 1'b0; 104 change = 2'b00; 105 end 106 endcase 107 S3 : case(money) 108 2'b10 : 109 begin 110 drink = 1'b1; 111 change = 2'b00; 112 end 113 2'b11 : 114 begin 115 drink = 1'b1; 116 change = 2'b01; 117 end 118 default : 119 begin 120 drink = 1'b0; 121 change = 2'b00; 122 end 123 endcase 124 S4 : case(money) 125 2'b01 : 126 begin 127 drink = 1'b1; 128 change = 2'b00; 129 end 130 2'b10 : 131 begin 132 drink = 1'b1; 133 change = 2'b01; 134 end 135 2'b11 : 136 begin 137 drink = 1'b1; 138 change = 2'b11; 139 end 140 default : 141 begin 142 drink = 1'b0; 143 change = 2'b00; 144 end 145 endcase 146 endcase 147 end 148 149 endmodule
testbench:
1 module drink_seller_tb; 2 3 // Inputs 4 reg rst_n; 5 reg clk; 6 reg buy; 7 reg [1:0] money; 8 9 // Outputs 10 wire drink; 11 wire [1:0] change; 12 13 // Instantiate the Unit Under Test (UUT) 14 drink_seller uut ( 15 .rst_n(rst_n), 16 .clk(clk), 17 .buy(buy), 18 .money(money), 19 .drink(drink), 20 .change(change) 21 ); 22 23 parameter CLK_PERIOD = 10; 24 25 initial begin 26 rst_n = 0; 27 clk = 1; 28 buy = 0; 29 money = 0; 30 31 #100; 32 rst_n = 1; 33 # CLK_PERIOD buy = 1; 34 # CLK_PERIOD buy = 0; 35 36 # 100 buy = 1; 37 # CLK_PERIOD buy = 0; 38 39 # 100 buy = 1; 40 41 end 42 43 always #(CLK_PERIOD/2) clk = ~clk; 44 45 always@(posedge clk) 46 if(!rst_n) 47 money = 2'b00; 48 else 49 money = 2'b01; 50 51 endmodule
ISIM仿真结果:
自动售饮料机的verilog实现相关推荐
- 实例六 自动售饮料机
实例六 自动售饮料机 3.2.1. 本章导读 了解自动售货机的工作流程以及各个工作状态,以及其testbench,最后在Robei可视化仿真软件经行功能实现和仿真验证. 设计原理 自动售货机的信号定义 ...
- 自动售饮料机逻辑电路的设计
数字电子:设计一个自动售饮料机的逻辑电路. 功能要求:它的投币口每次只能投入一枚五角或一元的硬币.投入一元五角钱硬币后机器自动给出一瓶饮料:投入两元(两枚一元)硬币后,在给出饮料的同时找回一枚五角的硬 ...
- 自动售货机控制模块-Verilog HDL
一. 问题描述 设计一个自动售货机控制模块,信息如下: 1. 售货机可提供8种可售商品,其中01号商品(代表第一种商品),价格为2元,02商品为4元,依次类推,08号商品售价为16元. 2. 售货机可 ...
- 二十五、使用Multisim设计一个自动售饮料机的逻辑电路
目录 题目 题目解析 将题目转化为时序图: 将时序图转化为卡诺图:
- FPGA系统性学习笔记连载_Day15【状态机、自动售货机】 【原理及verilog仿真】篇
FPGA系统性学习笔记连载_Day15[状态机.自动售货机] [原理及verilog仿真]篇 本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主. 连载&l ...
- verilog 自动售货机状态机实现_Verilog HDL自动售货机系统设计与仿真实验报告
前言 随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要.经过人工设计.制作实验板.调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的 ...
- Verilog实现自动售货机控制系统
设计思路: 首先,依次分析题目题干,整理verilog代码思路. 该系统能完成自身的复位.对货物信息的存储.进程控制,硬币处理.余额计算.显示等功能. 在代码中,可以将该控制系统设计成一个有限状态机, ...
- 连载《叁芯智能fpga设计与研发-第15天》 【状态机、自动售货机】 【原理及verilog仿真】
一.状态机基本概念 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调 相关信号动作.完成特定操作的控制中心.有限状态机简写为FSM(Finite State ...
- 【数字IC手撕代码】Verilog自动售卖饮料机|题目|原理|设计|仿真
芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...
最新文章
- Yii 错误页面处理
- vijos1774:机器翻译
- 用vue+webpack搭建的前端项目结构
- linux如何打出罗马数字,vim学习高级技巧之序列的生成方法详解
- bootstrap评分插件 Bootstrap Star Rating Examples
- TCP socket心跳包示例程序
- 递归Java_递归的Java实现
- java过去配置文件的值_java对.properties配置文件操作
- 通信协议:HTTP、TCP、UDP
- 吴恩达神经网络和深度学习-学习笔记-8-归一化输入Normalizing inputs
- 阅读文献整理20220104
- vecm matlab,VECM是什么?
- 一元线性回归:Excel、SPSS、Matlab三种方法实现
- K8S-四层负载均衡-Service解读
- Java中Number类详解
- Python List 包含关系判定
- linux asm软件卸载,linux下卸载oracle
- 前后端分离项目,vue+uni-app+php+mysql在线教育视频点播小程序系统 开题报告
- 面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》
- 仿新浪微博,提示可输入的字数限制 textarea
热门文章
- 408知识框架总结——计算机网络
- win7开启uasp协议_UASP与USB模式自动切换工具SwitchUASP 1.0
- linux系统USB端口序号绑定,相同或不同设备厂家都可
- 谷歌浏览器提示:无法访问此网站网址为 http://localhost:6667/XXX/XXX 的网页可能暂时无法连接,或者它已永久性地移动到了新网址
- python怎么绘制macd
- oracle中求差,Oracle计算月差
- ASC认证|水产ASC标签正逐步进入国人视野
- ORA-19502ORA-27072
- QT的程序打包发布(将QT5的工程项目打包成一个可直接运行的exe程序)
- 小程序插件封装Component报错 Component is not found in path……或 component is not defined