基于VHDL的自动售货机设计报告.doc_第1页
基于VHDL的自动售货机设计报告.doc_第2页
基于VHDL的自动售货机设计报告.doc_第3页
基于VHDL的自动售货机设计报告.doc_第4页
基于VHDL的自动售货机设计报告.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

提供全套毕业设计,欢迎咨询 基于vhdl的自动售货机 设计报告 组员: 2014-9-20目录1.封面12.目录23.导言34.正文4(1)程序结构介绍4 主进程4分频进程5译码显示进程6(2)设计中遇到的问题及解决65.结论与改进76.人员及任务分配107.致谢108.附录109.参考文献22一、导言在2114年短学期中,我组成员在“数字系统课程设计”课程中成功按题目要求设计完成了目标系统基于vhdl的自动售货机模拟系统。本文将介绍我组设计过程与结果。设计题目如下: 设计fpga 模块模拟自动售货机的工作过程,要求(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1 元的硬币,纸币的识别范围是5 元,10 元,20元。乘客可以连续多次投入钱币。(2)顾客可以选择的商品种类有16 种,价格分别为1-16 元,顾客可以通过输入商品的编号来实现商品的选择。由于输入涉及到0-9共10个数字。nexys3开发板上只有5个按键,可以使用一位开关(比如sw0)来配合按键进行输入,开关sw0拨到0时,5个按键分别代表0-4,sw0拨到1时,5个按键分别代表5-9,这样即可完成所有数字的输入。由于有16种商品,可以通过两次按键来完成。(3)顾客选择完商品后,可以选择需要的数量,数量为1-3件。然后可以继续选择商品及其数量,每次可以选择最多两个商品。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。我组完成了以上基本功能,并在按金额面值大小顺序退币及返回上一层功能上进行了拓展尝试。二、 正文1、程序结构介绍本系统由三个进程组成,分别为主进程(main)、分频进程(m)、译码显示进程(translate)组成。(1)主进程(main)主进程为分为9个状态,按主进程流程顺序分别为开始状态(sstart),第一个商品种类编号的十位、个位选择状态(schogoods10、schogoods11),第一个商品数量选择状态(chonum1),第二个商品种类编号的十位、个位选择状态(schogoods20、schogoods21),第二个商品数量选择状态(chonum2),付款状态(spayment),找零状态(srefund)。开始状态(sstart)主要完成变量的初始化及重新归零处理,在系统回归初始状态后,即跳转到选择商品编号状态。第一个商品的十位及个位选择(schogoods10、schogoods11)状态完成第一件商品的选择功能。在十位选择时,如果用户按下0、1以外的按键(在十位选择过程中shift开关不会影响按键代表的值),则系统不会响应按键,而是继续等待输入;在个位输入时,当shift开关值为1,则5个键代表的值将由01234变为56789,达到了题目要求。每次输入,改变信号sneedmoney的值,并分个位十位输出到左侧两个数码管上。如果拨动ok键,将进入下一个状态。第一个商品的数量选择状态(chonum1)将用户输入所需的商品数量保存。当用户按下0-3之间的任一个键,并拨动ok开关时,左侧数码管显示当前需要金额,并进入下一个状态。第二个商品的种类及数量选择过程(chogood20、chogoods21、chonum2)与第一个类似,不做赘述。当用户不需要选择第二个商品时,只需要将第二个商品的种类或数量其中一个设为0即可。当选择完第二个商品数量并拨动ok按钮,数码管显示购买两种商品所需要的总额,并进入付款状态。付款状态(spayment)中付款由开关模拟,用四个开关分别代表1、5、10、20四种币额的投入(可多次投入)。投币过程中,数码管右侧两位将实时显示已投入的金额。在付款过程中,如果用户拨动取消按键,则直接进入退币状态。如果用户投币不足,售货机将等待用户继续投币,如果用户投币足够或超额,数码管右侧两位将显示多余的需退金额,并进入退币状态。退币状态(srefund)完成退币功能,系统将根据需退金额是否大于20、10、5、1依次判断,金额大于20(10、5、1)则退币20(10、5、1)并将需退金额自减,循环退币并自减直到需退金额为0;数码管右侧两位持续显示需退金额,直到用户拨动ok开关,返回到开始状态(sstart)。(2)分频进程(m)分频进程将100mhz时钟信号扩大2000000倍。设置自增变量i,当i2000000者将分频后时钟设0,2000000i4000000则将时钟设1,达到分频效果。在本进程中还设置了四位共阳极七段显示管的扫描速度:设置自增变量j,在0j100000,100000j200000,200000j300000,300000jtotmoney:=0; stotmoney=0;needmoney:=0;sneedmoney=0;tempco1:=0;tempco5:=0;tempco10:=0;tempco20:=0;chonum1:=0;chonum2:=0;j:=0;i:=0;lastok:=ok;isadd:=0;lastcancel:=cancel;lout2=0;lout3=0;lout4=0;co1=0;co5=0;co10=0;co20=0;lout1=1;unablec1:=c1;unablec5:=c5;unablec10:=c10;unablec20:=c20;unablebut0:=but0;unablebut1:=but1;unablebut2:=but2;unablebut3:=but3;unablebut4:=but4;ableok:=0;stateif(but0=0 and unablebut0=1)then unablebut0:=0;end if;if(but1=0 and unablebut1=1)then unablebut1:=0;end if;if(but1=0 and but0=1 and unablebut0=0)thenchogoods1:=0;unablebut0:=1;needmoney:=chogoods1;sneedmoney=needmoney;state=schogoods11;elsif(but0=0 and unablebut1=0 and but1=1)thenchogoods1:=10;unablebut1:=1;needmoney:=chogoods1;sneedmoney=needmoney;state=schogoods11;end if;if(rst=1)then stateif(but0=0 and unablebut0=1)then unablebut0:=0;end if;if(but1=0 and unablebut1=1)then unablebut1:=0;end if;if(but2=0 and unablebut2=1)then unablebut2:=0;end if;if(but3=0 and unablebut3=1)then unablebut3:=0;end if;if(but4=0 and unablebut4=1)then unablebut4:=0; end if;if(shift=0 and chogoods1=0) thenif(but0=1 and unablebut0=0)thenchogoods1:=0;unablebut0:=1; ableok:=1;elsif(but1=1 and unablebut1=0)thenchogoods1:=1;unablebut1:=1; ableok:=1;elsif(but2=1 and unablebut2=0)thenchogoods1:=2;unablebut2:=1; ableok:=1;elsif(but3=1 and unablebut3=0)thenchogoods1:=3;unablebut3:=1; ableok:=1;elsif(but4=1 and unablebut4=0)thenchogoods1:=4;unablebut4:=1; ableok:=1;end if;elsif(shift=1 and chogoods1=0) thenif(but0=1 and unablebut0=0)thenchogoods1:=5; unablebut0:=1;ableok:=1;elsif(but1=1 and unablebut1=0)thenchogoods1:=6; unablebut1:=1;ableok:=1;elsif(but2=1 and unablebut2=0 and chogoods1=0)thenchogoods1:=7; unablebut2:=1;ableok:=1;elsif(but3=1 and unablebut3=0 and chogoods1=0)thenchogoods1:=8; unablebut3:=1;ableok:=1;elsif(but4=1 and unablebut4=0 and chogoods1=0)thenchogoods1:=9; unablebut4:=1;ableok:=1;end if;elsif(shift=0 and chogoods1=10)thenif(but0=1 and unablebut0=0)thenchogoods1:=10;unablebut0:=1; ableok:=1;elsif(but1=1 and unablebut1=0)thenchogoods1:=11;unablebut1:=1; ableok:=1; elsif(but2=1 and unablebut2=0)thenchogoods1:=12;unablebut2:=1; ableok:=1;elsif(but3=1 and unablebut3=0)thenchogoods1:=13;unablebut3:=1; ableok:=1;elsif(but4=1 and unablebut4=0)thenchogoods1:=14;unablebut4:=1; ableok:=1;end if;elsif(shift=1 and chogoods1=10)thenif(but0=1 and unablebut0=0)thenchogoods1:=15;unablebut0:=1; ableok:=1;elsif(but1=1 and unablebut1=0)thenchogoods1:=16;unablebut1:=1; ableok:=1;end if;end if;needmoney:=chogoods1;sneedmoney=needmoney;if(ok/=lastok and ableok=1)thenlastok:=ok;lout1=0;lout2=1;ableok:=0;state=schonum1;end if;if(rst=1)then stateif(but0=0 and unablebut0=1)then unablebut0:=0;end if;if(but1=0 and unablebut1=1)then unablebut1:=0;end if;if(but2=0 and unablebut2=1)then unablebut2:=0;end if;if(but3=0 and unablebut3=1)then unablebut3:=0;end if;if(but0=1 and unablebut0=0)thenchonum1:=0;unablebut0:=1;ableok:=1;elsif(but1=1 and unablebut1=0)thenchonum1:=1;unablebut1:=1;ableok:=1;elsif(but2=1 and unablebut2=0)thenchonum1:=2;unablebut2:=1;ableok:=1;elsif(but3=1 and unablebut3=0)thenchonum1:=3;unablebut3:=1;ableok:=1;end if;if(ok/=lastok and ableok=1) thenlastok:=ok;lout2=0;lout1=1;ableok:=0;needmoney:=chogoods1*chonum1;sneedmoney=needmoney;state=schogoods20;end if;if (lastcancel/=cancel)thenlastcancel:=cancel;lout2=0;lout1=1;state=schogoods10;end if;if(rst=1)then stateif(but0=0 and unablebut0=1)then unablebut0:=0;end if;if(but1=0 and unablebut1=1)then unablebut1:=0;end if;if(but1=0 and but0=1 and unablebut0=0)thenchogoods2:=0;unablebut0:=1;needmoney:=chogoods2;sneedmoney=needmoney;state=schogoods21;elsif(but0=0 and unablebut1=0 and but1=1)thenchogoods2:=10;unablebut1:=1;needmoney:=chogoods2;sneedmoney=needmoney;state=schogoods21;end if;if (lastcancel/=cancel)thenlastcancel:=cancel;lout2=1;lout1=0;state=schonum1;end if;if(rst=1)then stateif(but0=0 and unablebut0=1)then unablebut0:=0;end if;if(but1=0 and unablebut1=1)then unablebut1:=0;end if;if(but2=0 and unablebut2=1)then unablebut2:=0;end if;if(but3=0 and unablebut3=1)then unablebut3:=0;end if;if(but4=0 and unablebut4=1)then unablebut4:=0;end if;if(shift=0 and chogoods2=0) thenif(but0=1 and unablebut0=0)thenchogoods2:=0;unablebut0:=1;ableok:=1; elsif(but1=1 and unablebut1=0)thenchogoods2:=1;unablebut1:=1; ableok:=1;elsif(but2=1 and unablebut2=0)thenchogoods2:=2;unablebut2:=1; ableok:=1;elsif(but3=1 and unablebut3=0)thenchogoods2:=3;unablebut3:=1; ableok:=1;elsif(but4=1 and unablebut4=0)thenchogoods2:=4;unablebut4:=1; ableok:=1;end if;elsif(shift=1 and chogoods2=0)thenif(but0=1 and unablebut0=0)thenchogoods2:=5; unablebut0:=1;ableok:=1;elsif(but1=1 and unablebut1=0)thenchogoods2:=6; unablebut1:=1;ableok:=1;elsif(but2=1 and unablebut2=0 and chogoods1=0)thenchogoods2:=7; unablebut2:=1;ableok:=1;elsif(but3=1 and unablebut3=0 and chogoods1=0)thenchogoods2:=8; unablebut3:=1;ableok:=1;elsif(but4=1 and unablebut4=0 and chogoods1=0)thenchogoods2:=9; unablebut4:=1;ableok:=1;end if;elsif(shift=0 and chogoods2=10)thenif(but0=1 and unablebut0=0)thenchogoods2:=10;unablebut0:=1; ableok:=1;elsif(but1=1 and unablebut1=0)thenchogoods2:=11;unablebut1:=1; ableok:=1;elsif(but2=1 and unablebut2=0)thenchogoods2:=12;unablebut2:=1; ableok:=1;elsif(but3=1 and unablebut3=0)thenchogoods2:=13;unablebut3:=1; ableok:=1;elsif(but4=1 and unablebut4=0)thenchogoods2:=14;unablebut4:=1; ableok:=1;end if;elsif(shift=1 and chogoods2=10)thenif(but0=1 and unablebut0=0)thenchogoods2:=15;unablebut0:=1; ableok:=1;elsif(but1=1 and unablebut1=0)thenchogoods2:=16;unablebut1:=1; ableok:=1;end if;end if;needmoney:=chogoods2;sneedmoney=needmoney;if(rst=1)then state=sstart;end if;if(ok/=lastok and ableok=1)thenlastok:=ok;lout1=0;lout2=1;ableok:=0;state=schonum2;end if;if (lastcancel/=cancel)thenlastcancel:=cancel;lout1=0;lout2=1;stateif(but0=0 and unablebut0=1)then unablebut0:=0;end if;if(but1=0 and unablebut1=1)then unablebut1:=0;end if;if(but2=0 and unablebut2=1)then unablebut2:=0;end if;if(but3=0 and unablebut3=1)then unablebut3:=0;end if;if(but0=1 and unablebut0=0)thenchonum2:=0;unablebut0:=1;ableok:=1;elsif(but1=1 and unablebut1=0)thenchonum2:=1;unablebut1:=1;ableok:=1;elsif(but2=1 and unablebut2=0)thenchonum2:=2;unablebut2:=1;ableok:=1;elsif(but3=1 and unablebut3=0)thenchonum2:=3;unablebut3:=1;ableok:=1;end if;if(ok/=lastok and ableok=1) thenlastok:=ok;lout2=0;lout3=1;ableok:=0;state=spayment;end if;if (lastcancel/=cancel)thenlastcancel:=cancel;lout2=0;lout1=1;state=schogoods20;end if;if(rst=1)then stateunablebut0:=1;unablebut1:=1;unablebut2:=1;unablebut3:=1;unablebut4:=1;if(c1=0 and unablec1=1) then unablec1:=0;end if;if(c5=0 and unablec5=1) then unablec5:=0;end if;if(c10=0 and unablec10=1) then unablec10:=0;end if;if(c20=0 and unablec20=1) then unablec20:=0;end if;if(isadd=0)thenneedmoney:=chogoods1*chonum1+chogoods2*chonum2;sneedmoney=needmoney;isadd:=1;end if;if(c1=1 and unablec1=0) thentotmoney:=totmoney+1;unablec1:=1; end if;if(c5=1 and unablec5=0) thentotmoney:=totmoney+5;unablec5:=1;end if;if(c10=1 and unablec10=0) thentotmoney:=totmoney+10;unablec10:=1;end if;if(c20=1 and unablec20=0) thentotmoney:=totmoney+20;unablec20:=1;end if;stotmoney=totmoney;if (lastcancel/=cancel)thenlastcancel:=cancel;lout3=0;lout4=1;state=needmoney) thentotmoney:=totmoney-needmoney;stotmoney=totmoney;lout3=0;lout4=1;stateableok:=1;if(totmoney0)thenif(totmoney=20) thentotmoney:=totmoney-20;tempco20:=tempco20+1;elsif(totmoney=10) thentotmoney:=totmoney-10;tempco10:=tempco10+1;elsif(totmoney=5) thentotmoney:=totmoney-5;tempco5:=tempco5+1;elsif(totmoney=1) thentotmoney:=totmoney-1;tempco1:=tempco1+1;end if;elseco1=tempco1;co5=tempco5;co10=tempco10;co20=tempco20;if(ok/=lastok and ableok=1)thenstate=4000000 or i0)then i:=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论