自动售饮料机的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. Yii 错误页面处理
  2. vijos1774:机器翻译
  3. 用vue+webpack搭建的前端项目结构
  4. linux如何打出罗马数字,vim学习高级技巧之序列的生成方法详解
  5. bootstrap评分插件 Bootstrap Star Rating Examples
  6. TCP socket心跳包示例程序
  7. 递归Java_递归的Java实现
  8. java过去配置文件的值_java对.properties配置文件操作
  9. 通信协议:HTTP、TCP、UDP
  10. 吴恩达神经网络和深度学习-学习笔记-8-归一化输入Normalizing inputs
  11. 阅读文献整理20220104
  12. vecm matlab,VECM是什么?
  13. 一元线性回归:Excel、SPSS、Matlab三种方法实现
  14. K8S-四层负载均衡-Service解读
  15. Java中Number类详解
  16. Python List 包含关系判定
  17. linux asm软件卸载,linux下卸载oracle
  18. 前后端分离项目,vue+uni-app+php+mysql在线教育视频点播小程序系统 开题报告
  19. 面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》
  20. 仿新浪微博,提示可输入的字数限制 textarea

热门文章

  1. 408知识框架总结——计算机网络
  2. win7开启uasp协议_UASP与USB模式自动切换工具SwitchUASP 1.0
  3. linux系统USB端口序号绑定,相同或不同设备厂家都可
  4. 谷歌浏览器提示:无法访问此网站网址为 http://localhost:6667/XXX/XXX 的网页可能暂时无法连接,或者它已永久性地移动到了新网址
  5. python怎么绘制macd
  6. oracle中求差,Oracle计算月差
  7. ASC认证|水产ASC标签正逐步进入国人视野
  8. ORA-19502ORA-27072
  9. QT的程序打包发布(将QT5的工程项目打包成一个可直接运行的exe程序)
  10. 小程序插件封装Component报错 Component is not found in path……或 component is not defined