自动售饮料机的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实现相关推荐

  1. 实例六 自动售饮料机

    实例六 自动售饮料机 3.2.1. 本章导读 了解自动售货机的工作流程以及各个工作状态,以及其testbench,最后在Robei可视化仿真软件经行功能实现和仿真验证. 设计原理 自动售货机的信号定义 ...

  2. 自动售饮料机逻辑电路的设计

    数字电子:设计一个自动售饮料机的逻辑电路. 功能要求:它的投币口每次只能投入一枚五角或一元的硬币.投入一元五角钱硬币后机器自动给出一瓶饮料:投入两元(两枚一元)硬币后,在给出饮料的同时找回一枚五角的硬 ...

  3. 自动售货机控制模块-Verilog HDL

    一. 问题描述 设计一个自动售货机控制模块,信息如下: 1. 售货机可提供8种可售商品,其中01号商品(代表第一种商品),价格为2元,02商品为4元,依次类推,08号商品售价为16元. 2. 售货机可 ...

  4. 二十五、使用Multisim设计一个自动售饮料机的逻辑电路

    目录 题目 题目解析 将题目转化为时序图: 将时序图转化为卡诺图:

  5. FPGA系统性学习笔记连载_Day15【状态机、自动售货机】 【原理及verilog仿真】篇

    FPGA系统性学习笔记连载_Day15[状态机.自动售货机] [原理及verilog仿真]篇 本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主. 连载&l ...

  6. verilog 自动售货机状态机实现_Verilog HDL自动售货机系统设计与仿真实验报告

    前言 随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要.经过人工设计.制作实验板.调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的 ...

  7. Verilog实现自动售货机控制系统

    设计思路: 首先,依次分析题目题干,整理verilog代码思路. 该系统能完成自身的复位.对货物信息的存储.进程控制,硬币处理.余额计算.显示等功能. 在代码中,可以将该控制系统设计成一个有限状态机, ...

  8. 连载《叁芯智能fpga设计与研发-第15天》 【状态机、自动售货机】 【原理及verilog仿真】

    一.状态机基本概念 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调 相关信号动作.完成特定操作的控制中心.有限状态机简写为FSM(Finite State ...

  9. 【数字IC手撕代码】Verilog自动售卖饮料机|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

最新文章

  1. 6D位姿估计Point Pair Feature (PPF)算法详解
  2. 【学员分享】PMcaff阿德老师精(diao)彩(bao)传道的9条干货
  3. OHCI,UHCI,EOHCI,XHCI
  4. vue 改变domclass_手机上的大片制作软件——如何使用VUE
  5. ES6新特性_ES6对象添加Symbol类型属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记016
  6. android 画面俯视效果,四种方法让你的画面更耐看
  7. React组件: 提取图片颜色
  8. 多线程环境下,HashMap 为什么会出现死循环?
  9. 轴承过盈量程序matlab,轴承matlab处置程序.doc
  10. arcgis拓扑几何,因缝隙太小而不能自动创建要素修复的处理办法
  11. Crosses and Crosses
  12. win 10 安装单点Spark+Hadoop+Python环境
  13. mysql 分组查询最新
  14. 日语基础语法(完整篇)
  15. 浅析PC机串口通讯流控制
  16. 融资150万,用户超过1500万,“护眼宝”要如何完成从工具到平台的转变?
  17. 计算机教室防辐射方案,办公室电脑族如何防辐射 内调外养轻松应对
  18. 14_扫雷游戏地雷数计算
  19. 使用mediasoup-demo搭建多人音视频聊天室
  20. Geek爱旅行 - 向日葵的花语 呼呼呼~~

热门文章

  1. goang基础知识小全
  2. 爬虫学习记录3:request库基础用法
  3. python登录qq邮箱爬邮件_python实现QQ邮箱发送邮件
  4. 简评5G的室内分布频段
  5. Linux重启网络后浮动ip丢失,Linux系统浮动IP的配置
  6. Arduino Mega 2560 Reference Design原理图解读
  7. 【服务器】树洞外链搭建图床操作系统
  8. 一种全新的直播形式:一对一视频直播系统
  9. 基于梦飞openmv的自主识别物联网图传小车
  10. ldf文件怎么储存到mysql中_sqlserver数据库的ldf文件太大,我们如何压缩ldf日志文件...