东南大学信息科学与工程学院-基于FPGA的自动售货机控制系统_第1页
东南大学信息科学与工程学院-基于FPGA的自动售货机控制系统_第2页
东南大学信息科学与工程学院-基于FPGA的自动售货机控制系统_第3页
东南大学信息科学与工程学院-基于FPGA的自动售货机控制系统_第4页
东南大学信息科学与工程学院-基于FPGA的自动售货机控制系统_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、数字系统课程设计- 基于FPGA的自动售货机组长:师楠()组员:徐璇()一、 设计要求:功能描述:用于模拟自动售货机的工作过程,完成自动售货功能。功能要求:(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1 元的硬币,纸币的识别范围是5 元,10 元,20,50 元,100元。乘客可以连续多次投入钱币。(2)顾客可以选择的商品种类有16 种,价格分别为1-16 元,顾客可以通过输入商品的编号来实现商品的选择。即有一个小键盘(0-9 按键)来完成,比如输入15 时要先输入1,再输入5。(3)顾客选择完商品后,可以选择需要的数量。然

2、后可以继续选择商品及其数量,每次可以选择最多三个商品。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。二、 课题分析1)进行购物时,顾客依次选择商品种类和对应的商品数量。一共有16种商品,编号分别为1-16,顾客通过(0-9按键)小键盘输入商品编号和对应的商品数量。若顾客继续选择商品则按下“继续购物”按钮,继续选择下一商品的种类和数量。最多可以选择三种商品,每种商品最多可选择三个。若在商品选择过程中顾客按下“取消”按钮,则回到初始化状态,顾客重新进行

3、选择。2)完成选择后,自动售货机显示所需金额,编号1-16的商品价格分别为1-16元。顾客根据所需金额继续投币,可以连续多次投入1元的硬币和5 元,10 元,20,50 元,100元的纸币。当投币总额大于所需金额时,自动售货机出货并找出零钱。若在投币过程中顾客按下“取消”按钮,则自动售货机自动退出顾客已经投入的钱币。3)根据按键的数值范围(0-9)和商品数量(1-3)的选择范围,设置三个端口,分别用于接收商品编号的个位(4位)、商品编号的十位(4位)、商品数量(2位)。若顾客在商品选择的过程中,选择了三种以上商品或三个以上的个数,则系统不对其作出反应。4)附加功能:管理人员按下reset按钮后

4、,系统重置。默认每种商品机内存货15个,系统进入初始化状态后会自动显示商品剩余库存。开始三、 系统运行流程:Nreset=1pre_stateYinitial_stateitem_state输入商品编号NY输入次数小于3Y cancel=1quantity_stateN输入商品数量计算商品总额total_pricequantity_state计算商品剩余库存并输出continue=1money_stateNY输出total_priceYcancel=1Nchange_outtotal_priceYYcancel=1NNcountertotal_pricechange_out=counterYc

5、hange_stateYcancel=1change_out=counterN计算找零额finish_state输出货物、找零四、程序调试编译通过,如图所示:五、波形仿真:在创建的波形仿真文件中,添加所有输入输出端口进行仿真。时钟周期设定为10ns,测试系统的所有功能是否正常。管理员将reset置1;第一次:购买11号商品3件,投入三枚一员硬币,一张一百元纸币;第二次:购买01号商品1件,continue,购买10号商品2件,continue,购买13号商品3件;投入一张五十纸币,一张十元纸币;第三次:购买03号商品2件,cancel;第四次:购买16号商品2件;投入一张五十纸币;cancel

6、;六、附源代码library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;-*-entity AUTOSELLER is -实体port(-端口定义clk:in std_logic;-时钟continue,cancel,reset:in std_logic;-继续购物、取消、复位coin:in std_logic;-投入硬币cash:in std_logic_vector(4 downto 0); -投入纸币item0:in std_logic_ve

7、ctor(3 downto 0); -选货个位item1:in std_logic_vector(3 downto 0); -选货十位quantity:in std_logic_vector(1 downto 0);-货物数量one_out:out std_logic_vector(4 downto 0);-找钱five_out:out std_logic_vector(4 downto 0);ten_out:out std_logic_vector(4 downto 0);twenty_out:out std_logic_vector(4 downto 0);fifty_out:out st

8、d_logic_vector(4 downto 0);hundred_out:out std_logic_vector(4 downto 0);item0_out:out std_logic_vector(7 downto 0);-出货种类item1_out:out std_logic_vector(7 downto 0);item2_out:out std_logic_vector(7 downto 0);quantity0_out:out std_logic_vector(1 downto 0); -出货数量quantity1_out:out std_logic_vector(1 down

9、to 0);quantity2_out:out std_logic_vector(1 downto 0);sum_out:out std_logic_vector(9 downto 0);-商品总额累计输出available1_out:out std_logic_vector(3 downto 0);-输出库存available2_out:out std_logic_vector(3 downto 0);available3_out:out std_logic_vector(3 downto 0);available4_out:out std_logic_vector(3 downto 0);

10、available5_out:out std_logic_vector(3 downto 0);available6_out:out std_logic_vector(3 downto 0);available7_out:out std_logic_vector(3 downto 0);available8_out:out std_logic_vector(3 downto 0);available9_out:out std_logic_vector(3 downto 0);available10_out:out std_logic_vector(3 downto 0);available11

11、_out:out std_logic_vector(3 downto 0);available12_out:out std_logic_vector(3 downto 0);available13_out:out std_logic_vector(3 downto 0);available14_out:out std_logic_vector(3 downto 0);available15_out:out std_logic_vector(3 downto 0);available16_out:out std_logic_vector(3 downto 0);end AUTOSELLER;-*

12、-architecture behave of AUTOSELLER issignal price:std_logic_vector(7 downto 0);-单个商品价格signal counter:std_logic_vector(9 downto 0);-投币总额signal total_price:std_logic_vector(9 downto 0); -商品总额累计shared variable number1:std_logic_vector(3 downto 0); -暂存库存shared variable number2:std_logic_vector(3 downto

13、0);shared variable number3:std_logic_vector(3 downto 0);shared variable number4:std_logic_vector(3 downto 0);shared variable number5:std_logic_vector(3 downto 0);shared variable number6:std_logic_vector(3 downto 0);shared variable number7:std_logic_vector(3 downto 0);shared variable number8:std_logi

14、c_vector(3 downto 0);shared variable number9:std_logic_vector(3 downto 0);shared variable number10:std_logic_vector(3 downto 0);shared variable number11:std_logic_vector(3 downto 0);shared variable number12:std_logic_vector(3 downto 0);shared variable number13:std_logic_vector(3 downto 0);shared var

15、iable number14:std_logic_vector(3 downto 0);shared variable number15:std_logic_vector(3 downto 0);shared variable number16:std_logic_vector(3 downto 0);type state_type is(pre_state,initial_state,item_state,quantity_state,money_state,compare_state,change_state,finish_state); - 定义一个类型state_type,且值为()s

16、ignal state:state_type;beginprocess(continue,clk,reset)variable change:std_logic;-为1允许找钱variable change_out:std_logic_vector(9 downto 0);-找钱总额暂存variable one_tmp :std_logic_vector(4 downto 0);-找钱数暂存variable five_tmp :std_logic_vector(4 downto 0);variable ten_tmp :std_logic_vector(4 downto 0);variable

17、 twenty_tmp :std_logic_vector(4 downto 0);variable fifty_tmp :std_logic_vector(4 downto 0);variable hundred_tmp:std_logic_vector(4 downto 0);variable n:integer range 0 to 2;-暂存选货次数variable itemout0,itemout1,itemout2:std_logic_vector(7 downto 0); -种类暂存variable quanout0,quanout1,quanout2:std_logic_vec

18、tor(1 downto 0); -货物数量暂存variable cancel_tmp:std_logic;-取消暂存beginif(clkevent and clk=1)thenif reset=1 thenstatenumber1:=1111;number2:=1111;number3:=1111;number4:=1111;number5:=1111;number6:=1111;number7:=1111;number8:=1111;number9:=1111;number10:=1111;number11:=1111;number12:=1111;number13:=1111;numb

19、er14:=1111;number15:=1111;number16:=1111;state item0_out=;item1_out=;item2_out=;quantity0_out=00;quantity1_out=00;quantity2_out=00; one_out=00000;five_out=00000;ten_out=00000;twenty_out=00000;fifty_out=00000;hundred_out=00000;sum_out=;available1_out=number1;available2_out=number2;available3_out=numb

20、er3;available4_out=number4;available5_out=number5;available6_out=number6;available7_out=number7;available8_out=number8;available9_out=number9;available10_out=number10;available11_out=number11;available12_out=number12;available13_out=number13;available14_out=number14;available15_out=number15;availabl

21、e16_out=number16; total_price=; counter=; change:=0;n:=0;one_tmp:=00000;five_tmp:=00000;ten_tmp:=00000;twenty_tmp:=00000;fifty_tmp:=00000;hundred_tmp:=00000;itemout0:=;itemout1:=;itemout2:=;quanout0:=00;quanout1:=00;quanout2:=00;cancel_tmp:=0; stateif npricepricepricepricepricepricepricepricepricepr

22、icepricepricepricepricepricenull;end case;if (item1&item0)= then state itemout0:= item1&item0;when 1 = itemout1:= item1&item0;when 2 = itemout2:= item1&item0;when others=null;end case; state=quantity_state; end if;else stateif(cancel=1)thenstate=initial_state;elseif quantity=00 then change:=0;change

23、_out:=;state=initial_state;elsetotal_price quanout0:= quantity;n:=n+1;when 1 = quanout1:= quantity;n:=n+1;when 2 = quanout2:= quantity;n:=n+1;when others=null;end case;case price iswhen=number1:=number1-quantity;when=number2:=number2-quantity;when=number3:=number3-quantity;when=number4:=number4-quan

24、tity;when=number5:=number5-quantity;when=number6:=number6-quantity;when=number7:=number7-quantity;when=number8:=number8-quantity;when=number9:=number9-quantity;when=number10:=number10-quantity;when=number11:=number11-quantity;when=number12:=number12-quantity;when=number13:=number13-quantity;when=num

25、ber14:=number14-quantity;when=number15:=number15-quantity;when=number16:=number16-quantity;when others=NULL;end case;available1_out=number1;available2_out=number2;available3_out=number3;available4_out=number4;available5_out=number5;available6_out=number6;available7_out=number7;available8_out=number8

26、;available9_out=number9;available10_out=number10;available11_out=number11;available12_out=number12;available13_out=number13;available14_out=number14;available15_out=number15;available16_out=number16;if(continue=1)then state=item_state;else statesum_out=total_price;if(cancel=1)thencancel_tmp:=1;chang

27、e:=1;change_out:=counter;statecountercountercountercountercountercounternull;end case;stateif(cancel=1)thencancel_tmp:=1;change:=1;change_out:=counter;state=total_price thenchange:=1;change_out:=counter-total_price;state=change_state;else stateif(cancel=1)thenchange:=1;cancel_tmp:=1;change_out:=counter;end if;if(change_out=100) thenhundred_tmp:=hundred_tmp+1;change_out:=change_out-100;end if;if(change_out=50)thenfifty_tmp:=fifty_tmp+1;change_out:=change_out-50;end if;if(change_out=40)thentwenty_tmp:=twenty_tmp+2;change_out:=change_ou

温馨提示

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

评论

0/150

提交评论