您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 自动售货机的VHDL实现
自动售货机的VHDL实现2011-9-6自动售货机设计报告-2-目录1.封面…………………………………………………………………12.目录…………………………………………………………………23.导言…………………………………………………………………34.正文…………………………………………………………………3(1)总体方案设计……………………………………………3(2)单元模块设计……………………………………………4①系统变量及参数说明…………………………………4②各状态功能介绍及设计………………………………5③各单元模块的联接……………………………………7(3)系统功能调试………………………………………………7(4)设计总结……………………………………………………9①设计的小结……………………………………………9②设计收获体会…………………………………………9③对设计的进一步完善提出意见………………………95.结论…………………………………………………………………106.感谢…………………………………………………………………107.附录…………………………………………………………………108.参考文献……………………………………………………………14自动售货机设计报告-3-3、导言该系统用于模仿自动售货机,完成自动售货机的核心控制功能。设计FPGA模块模拟自动售货机的工作过程,要求如下:(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1元的硬币,纸币的识别范围是5元,10元,20,50元,100元。乘客可以连续多次投入钱币。(2)顾客可以选择的商品种类有16种,价格分别为1-16元,顾客可以通过输入商品的编号来实现商品的选择。即有一个小键盘(0-9按键)来完成,比如输入15时要先输入1,再输入5。(3)顾客选择完商品后,可以选择需要的数量。然后可以继续选择商品及其数量,每次可以选择最多三个商品。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。4、正文(1)总体方案设计本系统采用状态机的架构,将系统分为6个状态:开始、选种类、选数量、付款、退款/找零准备、结束。各状态的转换关系如图:自动售货机设计报告-4-继续选择货物选择货物数量选择货物种类初始状态付款NY找零/退款结束(2)单元模块设计①系统变量及参数说明变量/信号名变量/信号输入/输出意义类型clk信号输入时钟Std_logicimport信号输入选种类/数量Integer(0-9)ok信号输入确认Std_logiccancel信号输入取消Std_logiccontinue信号输入继续Std_logiccoin001信号输入1元硬币Integer(0-1)paper005信号输入5元纸币Integer(0-1)paper010信号输入10元纸币Integer(0-1)paper020信号输入20元纸币Integer(0-1)paper050信号输入50元纸币Integer(0-1)paper100信号输入100元纸币Integer(0-1)required信号输出应付金额Integer(0-1000)sum信号输出已付金额Integer(0-1000)change001信号输出找零1元硬币Integer(0-10)自动售货机设计报告-5-②各状态功能介绍及设计i.初始状态开启系统后,当时钟信号进入上升沿,系统进入初始设置,用于存储商品种类和数量的高低位寄存器统一清零备用,系统转入下一个change005信号输出找零5元纸币Integer(0-10)change010信号输出找零10元纸币Integer(0-10)change020信号输出找零20元纸币Integer(0-10)change050信号输出找零50元纸币Integer(0-10)change100信号输出找零100元纸币Integer(0-10)state状态起始状态、选货物种类、选货物数量、付款、退款找零准备、结束temp_num变量商品数量Integer(0-99)temp_type变量商品种类Integer(0-16)temp变量临时变量Integer(0-1000)flag变量退款找零是否完成std_logiccontinue_time变量继续次数Integer(0-2)goodstype_l变量货物的种类的低位Integer(0-9)goodstype_h变量货物的种类的高位Integer(0-9)goodsnum_l变量货物的数量的低位Integer(0-9)goodsnum_h变量货物的数量的高位Integer(0-9)change_tmp001变量找零1元硬币Integer(0-10)change_tmp005变量找零5元纸币Integer(0-10)change_tmp010变量找零10元纸币Integer(0-10)change_tmp020变量找零20元纸币Integer(0-10)change_tmp050变量找零50元纸币Integer(0-10)change_tmp100变量找零100元纸币Integer(0-10)goods_type_tmp数组存储货物类型3维数组goods_num_tmp数组存储货物数量3维数组goodstype1信号输出出货1Integer(0-16)goodstype2信号输出出货2Integer(0-16)goodstype3信号输出出货3Integer(0-16)goodsnum1信号输出货1数量Integer(0-99)goodsnum2信号输出货2数量Integer(0-99)goodsnum3信号输出货3数量Integer(0-99)①红色部分为后来添加内容。自动售货机设计报告-6-状态。ii.选货物种类状态当“OK”信号为高电平时,输入信号import(0-9)被读入有效,确认商品类型,赋给相应暂存变量并进入选数量状态。当商品种类为两位十进制数时,比如输入12时要先输入1,再输入2,而后用户按下“OK”键,选择种类完毕。iii.选货物数量状态当“OK”信号为高电平时,输入货物数量(0-99)信号被读入有效,赋给相应暂存变量,计算出应付总金额,并进入付款状态。这里需参考选商品种类状态时确定的商品类型计算总金额。否则当“OK”信号为低电平,所处状态不变,系统没有录入有效信息。同样,当商品数量为两位十进制数时,比如输入15时要先输入1,再输入5,而后用户按下“OK”键,选择数量完毕。iv.付款状态用户每投入钱币,系统更新“已付金额”。若“已付金额”大于“应付金额”,系统进入找零及出货状态。若不足,系统仍处于付款准备状态,直至金额足够。若中途用户按下“取消”键,系统进入退款准备状态。v.退款/找零状态系统计算出应退(找)金额,并按钱的面值从大到小的优先级算出每种面值的钞票应该退(找)几张。系统进入结束状态。自动售货机设计报告-7-vi.结束状态若用户选择退款,系统退还已付金额;若用户完成交易,系统找零并出货,而后系统重新进入开始的初始状态。③各单元模块的联接将时钟、状态变量、货物种类/数量输入、钱币、确认和取消作为进程的敏感信号。(3)系统功能调试①.选13号货物2件,10号货物10件,4号货物1件,5号货物1件,然后投入50元纸币1张,100元纸币1张。结果为:返还20元纸币1张。验证:只能连选择3次所以实际上只有前三次选货有效。②.选7号货物2件,11号货物2件,15号货物3件,然后投入50元纸币1张,100元纸币1张,随后按下“cancel”键。结果为:返还50、100元纸币各1张。验证:取消键cancel键的功能。自动售货机设计报告-8-③.选16号货物5件,11号货物2件,6号货物7件,然后投入20、50元纸币各1张,100元纸币1张。结果为:返还5、20元纸币各1张,1元硬币一个。自动售货机设计报告-9-④.选7号货物12件,12号货物1件,然后投入20、50元纸币各1张,100元纸币1张。结果为:返还20、50元纸币各1张,1元硬币4个。(4)设计总结①设计小结本系统较贴合实际地模拟了自动售货机的工作方式。将自动售货过程分成6个状态实现,通过不同状态所加激励的各异性指导售货机的工作。联系实际,系统从按币值面额从大到小找零。②设计收获体会掌握了数字系统设计的初步方法,能利用VHDL语言熟练地编写简单状态机程序。能利用QuartusII7.2进行仿真。③对设计的进一步完善提出意见或建议可以再加一个“返回上一层”按钮。自动售货机设计报告-10-可以再增加“重置”按钮。5、结论该系统经反复调试,基本满足了设计要求。6、感谢本程序在验收时老师提出没有显示出货,回来后查阅资料设置数组,完成出货功能,感谢老师的宝贵意见。7、附录程序代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityautomatisport(clk:instd_logic;--时钟import:inintegerrange0to9;--输入商品种类/数量ok:instd_logic;--“确认”键cancel:instd_logic;--取消continue:instd_logic;--继续coin001:inintegerrange0to1;--1元硬币paper005:inintegerrange0to1;--5元纸币paper010:inintegerrange0to1;--10元纸币paper020:inintegerrange0to1;--20元纸币paper050:inintegerrange0to1;--50元纸币paper100:inintegerrange0to1;--100元纸币required:bufferintegerrange0to1000;--应付金额sum:bufferintegerrange0to1000;--已付金额goodstype1:outintegerrange0to16;--第一次选货的种类goodstype2:outintegerrange0to16;--第二次选货的种类goodstype3:outintegerrange0to16;--第三次选货的种类goodsnum1:outintegerrange0to99;--第一次选货的数量goodsnum2:outintegerrange0to99;--第二次选货的数量goodsnum3:outintegerrange0to99;--第三次选货的数量自动售货机设计报告-11-change001:outintegerrange0to10;--找零1元change005:outintegerrange0to10;--找零5元change010:outintegerrange0to10;--找零10元change020:outintegerrange0to10;--找零20元change050:outintegerrange0to10;--找零50元change100:outintegerrange0to10);--找零100元endautomat;architecturebehaveofautomatistypestate_typeis(start,choose_type,choose_num,payment,refund,over);--状态变量signalstate:state_type;typematrix_typeisarray(2downto0)ofintegerrange0to16;--三维数组signalgoods_type_tmp:matrix_type;typematrix_numisarray(
本文标题:自动售货机的VHDL实现
链接地址:https://www.777doc.com/doc-7295084 .html