ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:17.99KB ,
资源ID:24293442      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24293442.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(自动售货机设计Verilog.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

自动售货机设计Verilog.docx

1、自动售货机设计Verilog自动售货机设计一、实验目的 1、实现自动售货机的功能; 2、运用状态机原理设计。二、实验容这种自动售货机只销售听装与瓶装两种罐装可乐,售价均为1.5元。顾客只能通过两个不同的投币口分别投入五角的硬币或者一元硬币。一次交易可以买多罐,且自动找零。若钱不够,则自动退币。并且在购买之前只要一按下取消键cancel就马上无条件退币。此机器的硬件示电路,以二個按键电路代替二個投币孔,以两个八段数码管显示投币数量,再以4hz闪烁之led來显示退币,以两个八段数码管显示退币数量。此机器就采用1024hz的系统clock信号同步所有的买卖行为,并且作为弹跳消除电路的基准参考脉冲。这

2、个电路虽然是纯数位电路但是可作为一个自动售货机的控制核心电路加上驱动器就可以用来驱动机械装置。下图为自动售货机的操作盘,有两个投币按钮,分別为五角硬币与一元硬币。每投入一个硬币就将下方的LED指示灯号点亮到具体数额,并且最高上限只能接受9.5元的金额。另外,每一种饮料商品都配置3个灯号(分别显示存货、选择数量与出货等三个信息)与一个选择购买的按钮。每按一次选择购买按钮,选择数量显示加1,并且存货自动计算,若没有货存,则货存灯灭,一旦选择商品与投币金额足够,就需要按下确定要购买的按键;当然也可以后悔不买而按下取消键,让机器退回已经投入的硬币。如若投入的钱币不足以购所有的饮料,则退币。退币时货存更

3、改为原状态。三、程序设计module auto_vending(clk,cel_cola,cel_diet,reset,coin_ten,coin_five,ok_buy,cancel_buy,/输入led_cola_ok,led_diet_ok,led_buy,led_cancel,led_cola_out,led_diet_out,shu_cola_sel,shu_diet_sel,led_display,shu_money_return,Hex);/输出input clk,cel_cola,cel_diet,reset,coin_ten,coin_five,ok_buy,cancel_b

4、uy;output led_cola_ok,led_diet_ok,/表示还有存货 led_buy,led_cancel,/表示选择购买和取消购买 led_cola_out,led_diet_out;/显示表示已出货 /led_return;/每四秒闪烁一次代表被退之硬币wire 10:0led_cola_sel,led_diet_sel;/选中饮料的数量output 6:0shu_cola_sel,shu_diet_sel;output 13:0led_display;/表示投币的金额output 13:0shu_money_return;wire ok,cancel,money_ok;/在

5、ok_or_cancel出来的/wire 10:0no_diet,no_cola;/售货机的饮料数量wire 10:0money_return;/reg 10:0no_sock_cola,no_sock_diet;wire 10:0total_count,total_consum;output 13:0Hex;assign Hex=14b111_111_111_11111;parameter Idle = 2d0, S1 = 2d1, S2 = 2d2;reg 1:0state;reg clk_1;reg rst;reg 29:0count;always(posedge clk)/sheng

6、cheng 1s de shi zhongbegin if(count=30d25000000) begin clk_1=clk_1; count=0; end else count=count+1;end always(posedge clk_1 or negedge reset) if(!reset) begin state =Idle; rst=0; end else case (state) Idle: begin rst=0; state=S1; end S1: begin rst=1; if(ok_buy|cancel_buy) state=Idle; end endcase wi

7、re buyok;toubi u1(rst,clk,coin_five,coin_ten,led_display,total_count);select_drink u2(clk,rst,cel_cola,cel_diet,/*no_cola,no_diet,*/ led_cola_sel,led_diet_sel,/*led_cola_ok,led_diet_ok,*/total_consum); ok_or_cancel u3(clk,rst,ok_buy,cancel_buy,ok,cancel,led_buy,led_cancel);give_check u4(reset,buyok,

8、clk,ok,money_ok,rst,led_cola_out,led_diet_out, led_cola_sel,led_diet_sel,led_cola_ok,led_diet_ok/*no_cola,no_diet*/); coin_return u5(clk,rst,ok_buy,money_return,total_count,total_consum,money_ok,cancel_buy,cancel);xianshi q1(led_cola_sel,shu_cola_sel);xianshi q2(led_diet_sel,shu_diet_sel);xianshi2 w

9、2(money_return,shu_money_return);endmodule/显示数量的 module xianshi(a,b); /用来显示input 10:0a;output reg 6:0b;always(a) case(a) 11d0:b=7b1000000; 11d1:b=7b1111001; 11d2:b=7b0100100; 11d3:b=7b0110000; 11d4:b=7b0011001; 11d5:b=7b0010010; 11d6:b=7b0000010; 11d7:b=7b1111000; 11d8:b=7b0000000; 11d9:b=7b0010000;

10、 endcaseendmodule/钱数显示module xianshi2(total_count,led_display);input 10:0total_count;output reg 13:0led_display;always(total_count) case(total_count) 11d0: led_display=14b1000000_1000000; 11d1: led_display=14b1000000_0010010; 11d2: led_display=14b1111001_1000000; 11d3: led_display=14b1111001_0010010

11、; 11d4: led_display=14b0100100_1000000; 11d5: led_display=14b0100100_0010010; 11d6: led_display=14b0110000_1000000; 11d7: led_display=14b0110000_0010010; 11d8: led_display=14b0011001_1000000; 11d9: led_display=14b0011001_0010010; 11d10: led_display=14b0010010_1000000; 11d11: led_display=14b0010010_0

12、010010; 11d12: led_display=14b0000010_1000000; 11d13: led_display=14b0000010_0010010; 11d14: led_display=14b1111000_1000000; 11d15: led_display=14b1111000_0010010; 11d16: led_display=14b0000000_1000000; 11d17: led_display=14b0000000_0010010; 11d18: led_display=14b0010000_1000000; 11d19: led_display=

13、14b0010000_0010010; endcaseendmodule/去抖模块module qudou(clk,reset,k,key);input k,reset,clk;output reg key;reg 10:0clock;always(posedge clk)if(!reset) clock=11d0;elsebegin if(k) begin key=1; clock=0; end else begin clock=clock+1; if(clock=1000) begin clock=11b0; key=0; end end end endmodule/投币电路module

14、toubi(reset,clk,coin_05,coin_10,led_display,total_count);/加一个去抖模块input reset,clk,coin_05,coin_10;output 13:0led_display;output reg10:0total_count;/统计投入里面的金币wire qu_coin_05,qu_coin_10;qudou a1(clk,reset,coin_05,qu_coin_05);qudou a2(clk,reset,coin_10,qu_coin_10);reg 10:0count_1,count_2;always(negedge

15、qu_coin_05 or negedge reset)begin if(!reset) begin count_1=11d0; end else if(!qu_coin_05) begin count_1 = count_1+11d1; end endalways(negedge qu_coin_10 or negedge reset) if(!reset) begin count_2=11d0; end else if(!coin_10) begin count_2=count_2+11d2; endalways(count_1 or count_2) total_count=count_

16、2+count_1; xianshi2 a4(total_count,led_display);endmodule/饮料选择处理模块module select_drink(clk,reset,select_cola,select_diet/*,sock_cola,sock_diet*/, cola_sel,diet_sel,/*led_cola_ok,led_diet_ok,*/total_consum);input clk,reset,select_cola,select_diet;/input 10:0sock_cola,sock_diet;/系统部库存数量output 10:0cola_

17、sel,diet_sel;/选中的饮料数量reg 10:0cola,diet;/output led_cola_ok,led_diet_ok;/除去选中的饮料外,是否还有余量output 10:0total_consum;/消费金额reg 10:0cola_sel,diet_sel;/reg led_cola_ok,led_diet_ok;wire select_cola_out,select_diet_out;qudou a3(clk,reset,select_cola,select_cola_out);qudou a4(clk,reset,select_diet,select_diet_o

18、ut);reg 10:0total_consum_2,total_consum_1,total_consum;always(total_consum_2 or total_consum_1) total_consum=total_consum_2+total_consum_1;always(negedge reset or negedge select_cola_out ) if(!reset) begin cola_sel=0; total_consum_1=0; end else if(!select_cola_out) begin cola_sel=cola_sel+1; total_c

19、onsum_1=total_consum_1+11d3; end always(negedge reset or negedge select_diet_out) if(!reset) begin diet_sel=0; total_consum_2=0; end else if(!select_diet_out) begin diet_sel=diet_sel+1; total_consum_2=total_consum_2+11d3; end/* always(posedge clk or negedge reset) if(!reset) begin led_cola_ok=1; led

20、_diet_ok=1; end else begin cola = sock_cola; diet = cola) led_cola_ok = diet) led_diet_ok = 0; end*/Endmodule/确认与取消电路模块module ok_or_cancel(clk,reset,ok_buy,cancel_buy, ok,cancel,/给其他模块使用 led_buy,led_cancel);/对外显示 input clk,reset,ok_buy,cancel_buy;output reg ok,cancel;output reg led_buy,led_cancel;al

21、ways(posedge clk or negedge reset) if(!reset) begin ok=0; cancel=0; led_buy=0; led_cancel=0; end else if(ok_buy) begin ok=1; led_buy=1; cancel=0; led_cancel=0; end else if(cancel_buy) begin ok=0; cancel=1; led_buy=0; led_cancel=1; endendmodule/出货并计算存货模块module give_check(reset,buyok,clk,ok,money_ok,r

22、st,led_cola_out,led_diet_out, cola_out,diet_out,led_cola_ok,led_diet_ok/*no_cola,no_diet*/);input reset,clk,ok,rst,money_ok;input 10:0cola_out,diet_out;/从售货机取出的饮料数量output reg led_cola_ok,led_diet_ok;/显示是否还有饮料reg 10:0no_cola,no_diet,sock_cola,sock_diet;/输出的饮料之后售货机部剩余数量output led_cola_out,led_diet_out

23、;/售货机输出饮料时led亮reg led_cola_out,led_diet_out;reg 1:0state;parameter S1=2d0, S2=2d1, S3=2d2;reg s1,s2;output reg buyok; always(posedge clk or negedge reset) if(!reset) begin sock_cola=11d5; sock_diet=11d5; end else if(!rst) begin led_cola_out=0; led_diet_out=0; state=S1; s1=0; s2=0; no_cola=sock_cola;

24、 no_diet=sock_diet; buyok 0) begin led_cola_out = 1; no_cola=no_cola - cola_out; s1 0) begin led_diet_out = 1; no_diet=no_diet - diet_out; s2=1; end state=S2; end S2: begin state=S2; buyok=1; sock_cola=no_cola; sock_diet=no_diet; end endcase always(posedge clk or negedge rst) if(!rst) begin led_cola

25、_ok=1; led_diet_ok= no_cola) led_cola_ok = no_diet) led_diet_ok = 0; endendmodule/退币处理电路模块module coin_return(clk,reset,ok_buy,led_return,total_count,total_consum,money_ok,cancel_buy,cancel);input clk,ok_buy,reset,cancel_buy,cancel;/return_clk来指定给退币闪烁警示灯input 10:0total_count,total_consum;output reg 1

26、0:0led_return;/用来显示退出货币的总数output reg money_ok;always(posedge clk or negedge reset) if(!reset) begin led_return=0; money_ok=0; end else if(cancel_buy) begin led_return=total_count; money_ok= total_consum) if(ok_buy) begin led_return=total_count-total_consum; money_ok=1; end else begin money_ok=0; endendmodule四、实验结果 在 DE2开发板上实现了自动售货机的功能。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1