自动售饮料机的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精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...
最新文章
- 6D位姿估计Point Pair Feature (PPF)算法详解
- 【学员分享】PMcaff阿德老师精(diao)彩(bao)传道的9条干货
- OHCI,UHCI,EOHCI,XHCI
- vue 改变domclass_手机上的大片制作软件——如何使用VUE
- ES6新特性_ES6对象添加Symbol类型属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记016
- android 画面俯视效果,四种方法让你的画面更耐看
- React组件: 提取图片颜色
- 多线程环境下,HashMap 为什么会出现死循环?
- 轴承过盈量程序matlab,轴承matlab处置程序.doc
- arcgis拓扑几何,因缝隙太小而不能自动创建要素修复的处理办法
- Crosses and Crosses
- win 10 安装单点Spark+Hadoop+Python环境
- mysql 分组查询最新
- 日语基础语法(完整篇)
- 浅析PC机串口通讯流控制
- 融资150万,用户超过1500万,“护眼宝”要如何完成从工具到平台的转变?
- 计算机教室防辐射方案,办公室电脑族如何防辐射 内调外养轻松应对
- 14_扫雷游戏地雷数计算
- 使用mediasoup-demo搭建多人音视频聊天室
- Geek爱旅行 - 向日葵的花语 呼呼呼~~
热门文章
- goang基础知识小全
- 爬虫学习记录3:request库基础用法
- python登录qq邮箱爬邮件_python实现QQ邮箱发送邮件
- 简评5G的室内分布频段
- Linux重启网络后浮动ip丢失,Linux系统浮动IP的配置
- Arduino Mega 2560 Reference Design原理图解读
- 【服务器】树洞外链搭建图床操作系统
- 一种全新的直播形式:一对一视频直播系统
- 基于梦飞openmv的自主识别物联网图传小车
- ldf文件怎么储存到mysql中_sqlserver数据库的ldf文件太大,我们如何压缩ldf日志文件...