基于FPGA的自动售货机控制系统设计数字系统课程设计--基于FPGA的自动售货机组长:师楠(04010512)组员:徐璇(04010505)基于FPGA的自动售货机控制系统设计一、设计要求:功能描述:用于模拟自动售货机的工作过程,完成自动售货功能。功能要求:(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1元的硬币,纸币的识别范围是5元,10元,20,50元,100元。乘客可以连续多次投入钱币。(2)顾客可以选择的商品种类有16种,价格分别为1-16元,顾客可以通过输入商品的编号来实现商品的选择。即有一个小键盘(0-9按键)来完成,比如输入15时要先输入1,再输入5。(3)顾客选择完商品后,可以选择需要的数量。然后可以继续选择商品及其数量,每次可以选择最多三个商品。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。二、课题分析1)进行购物时,顾客依次选择商品种类和对应的商品数量。一共有16种商品,编号分别为1-16,顾客通过(0-9按键)小键盘输入商品编号和对应的商品数量。若顾客继续选择商品则按下“继续购物”按钮,继续选择下一商品的种类和数量。最多可以选择三种商品,每种商品最多可选择三个。若在商品选择过程中顾客按下“取消”按钮,则回到初始化状态,顾客重新进行选择。2)完成选择后,自动售货机显示所需金额,编号1-16的商品价格分别为1-16元。顾客根据所需金额继续投币,可以连续多次投入1元的硬币和5元,10元,20,50元,100元的纸币。当投币总额大于所需金额时,自动售货机出货并找出基于FPGA的自动售货机控制系统设计零钱。若在投币过程中顾客按下“取消”按钮,则自动售货机自动退出顾客已经投入的钱币。3)根据按键的数值范围(0-9)和商品数量(1-3)的选择范围,设置三个端口,分别用于接收商品编号的个位(4位)、商品编号的十位(4位)、商品数量(2位)。若顾客在商品选择的过程中,选择了三种以上商品或三个以上的个数,则系统不对其作出反应。4)附加功能:管理人员按下reset按钮后,系统重置。默认每种商品机内存货15个,系统进入初始化状态后会自动显示商品剩余库存。三、系统运行流程:开始reset=1YNpre_stateinitial_state输入商品编号输入次数小于3输入商品数量cancel=1计算商品总额total_priceYNYNitem_statequantity_state基于FPGA的自动售货机控制系统设计计算商品剩余库存并输出continue=1输出total_pricecancel=1投币couterchange_out=countercountertotal_pricecancel=1change_out=countercountertotal_pricecancel=1change_out=counter计算找零额输出货物、找零NYNYNYYNYNYNquantity_statemoney_statecompare_statechange_statefinish_state基于FPGA的自动售货机控制系统设计四、程序调试编译通过,如图所示:五、波形仿真:在创建的波形仿真文件中,添加所有输入输出端口进行仿真。时钟周期设定为10ns,测试系统的所有功能是否正常。管理员将reset置1;第一次:购买11号商品3件,投入三枚一员硬币,一张一百元纸币;基于FPGA的自动售货机控制系统设计基于FPGA的自动售货机控制系统设计第二次:购买01号商品1件,continue,购买10号商品2件,continue,购买13号商品3件;投入一张五十纸币,一张十元纸币;基于FPGA的自动售货机控制系统设计第三次:购买03号商品2件,cancel;基于FPGA的自动售货机控制系统设计第四次:购买16号商品2件;投入一张五十纸币;cancel;基于FPGA的自动售货机控制系统设计六、附源代码libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;----------*************************************----------------------entityAUTOSELLERis--实体port(--端口定义clk:instd_logic;--时钟continue,cancel,reset:instd_logic;--继续购物、取消、复位coin:instd_logic;--投入硬币cash:instd_logic_vector(4downto0);--投入纸币item0:instd_logic_vector(3downto0);--选货个位item1:instd_logic_vector(3downto0);--选货十位quantity:instd_logic_vector(1downto0);--货物数量one_out:outstd_logic_vector(4downto0);--找钱five_out:outstd_logic_vector(4downto0);ten_out:outstd_logic_vector(4downto0);twenty_out:outstd_logic_vector(4downto0);fifty_out:outstd_logic_vector(4downto0);hundred_out:outstd_logic_vector(4downto0);item0_out:outstd_logic_vector(7downto0);--出货种类item1_out:outstd_logic_vector(7downto0);item2_out:outstd_logic_vector(7downto0);quantity0_out:outstd_logic_vector(1downto0);--出货数量基于FPGA的自动售货机控制系统设计quantity1_out:outstd_logic_vector(1downto0);quantity2_out:outstd_logic_vector(1downto0);sum_out:outstd_logic_vector(9downto0);--商品总额累计输出available1_out:outstd_logic_vector(3downto0);--输出库存available2_out:outstd_logic_vector(3downto0);available3_out:outstd_logic_vector(3downto0);available4_out:outstd_logic_vector(3downto0);available5_out:outstd_logic_vector(3downto0);available6_out:outstd_logic_vector(3downto0);available7_out:outstd_logic_vector(3downto0);available8_out:outstd_logic_vector(3downto0);available9_out:outstd_logic_vector(3downto0);available10_out:outstd_logic_vector(3downto0);available11_out:outstd_logic_vector(3downto0);available12_out:outstd_logic_vector(3downto0);available13_out:outstd_logic_vector(3downto0);available14_out:outstd_logic_vector(3downto0);available15_out:outstd_logic_vector(3downto0);available16_out:outstd_logic_vector(3downto0));endAUTOSELLER;------------*************************************-----------------architecturebehaveofAUTOSELLERissignalprice:std_logic_vector(7downto0);--单个商品价格signalcounter:std_logic_vector(9downto0);--投币总额signaltotal_price:std_logic_vector(9downto0);--商品总额累计sharedvariablenumber1:std_logic_vector(3downto0);--暂存库存基于FPGA的自动售货机控制系统设计sharedvariablenumber2:std_logic_vector(3downto0);sharedvariablenumber3:std_logic_vector(3downto0);sharedvariablenumber4:std_logic_vector(3downto0);sharedvariablenumber5:std_logic_vector(3downto0);sharedvariablenumber6:std_logic_vector(3downto0);sharedvariablenumber7:std_logic_vector(3downto0);sharedvariablenumber8:std_logic_vector(3downto0);sharedvariablenumber9:std_logic_vector(3downto0);sharedvariablenumber10:std_logic_vector(3downto0);sharedvariablenumber11:std_logic_vector(3downto0);sharedvariablenumber12:std_logic_vector(3downto0);sharedvariablenumber13:std_logic_vector(3downto0);sharedvariablenumber14:std_logic_vector(3downto0);sharedvariablenumber15:std_logic_vector(3downto0);sharedvariablenumber16:std_logic_vector(3downto0);typestate_typeis(pre_state,initial_state,item_state,quantity_state,money_state,compare_state,change_state,finish_state);--定义一个类型state_type,且值为(……)signalstate:state_type;beginprocess(continue,clk,reset)variablechange:std_logic;--为1允许找钱variablechange_out:std_logic_vector(9downto0);--找钱总额暂存variableone_tmp:std_logic_vector(4downto0);--找钱数暂存variablefive_tmp:std_logic_vector(4downto0);variableten_tmp:std_logic_vector(4downto0);variabletw