1、自动售货机设计实验报告一 设计题目:g) 自动售货机设计 FPGA 模块模拟自动售货机的工作过程,要求如下(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是 5 角和 1 元的硬币,纸币的识别范围是 1 元、5 元,10 元,20 元,50 元,100 元。乘客可以连续多次投入钱币。(2)顾客可以选择的商品种类有 16 种,价格分别为 1-16 元,顾客可以通过输入商品的编号来实现商品的选择。即有一个小键盘(0-9 按键)来完成,比如输入15 时要先输入 1,再输入 5。(3)顾客选择完商品后,可以选择需要的数量。然后可以继续选择
2、商品及其数量,每次 可以选择最多三个商品。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。二 程序代码:三 程序实现功能:FPGA 模块模拟自动售货机:(1)售货机有两个进币孔,分别输入硬币和纸币,硬币的识别范围是 5 角和 1 元的硬币,纸币的识别范围是 1 元、5 元,10 元,20 元,50 元,100 元。乘客可以连续多次投入钱币。(2)顾客可以选择的商品种类有 16 种,价格分别为 1-16 元,顾客可以通过输入商品的编号来实现商品的选择。
3、(3)顾客选择完商品后,可以选择需要的数量。然后可以继续选择商品及其数量,每次最多选择最种商品,每种商品最多购买三个。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。四 程序功能模块分析:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; 实体说明:entity sellor isport ( cl
4、k:in std_logic; -系统时钟sel,cancel,reset: in std_logic; -选择、取消、开始(用于进入初始状态)变量定义:coin: in std_logic_vector(1 downto 0); -5 角硬币、1 元硬币crash:in std_logic_vector(5 downto 0); -100 元、50 元、20 元、10 元、5元、一元纸币item: in std_logic_vector(3 downto 0); -16 种商品quantity:in std_logic_vector(1 downto 0); -商品数量(一次最多购买 3 件
5、)change_out :out std_logic_vector(10 downto 0); -找零item_out :out std_logic_vector(3 downto 0); -是否购买了商品(1 表示有商品出来、 0 表示没有商品出来)change :out std_logic ); -是否有找零end sellor;结构体说明:architecture behave of sellor issignal price:std_logic_vector(7 downto 0);signal counter: std_logic_vector(10 downto 0); -币数计数
6、器signal total_price:std_logic_vector(10 downto 0); -控制系统的时钟信号type state_type is (initial_state,item1_state,quantity_state,money_state,sell_state,change_state);signal state:state_type;signal temp:std_logic_vector(1 downto 0);signal quan:std_logic_vector(3 downto 0);begincom:process(reset,sel,clk)begi
7、n if (clkevent and clk=1)thenif reset=1 then stateitem_outif tempif(cancel=1)then -按下“取消”按钮stateif(cancel=1)then -按下“取消”按钮state=total_price thenstateif(cancel=1)then item_out=total_price thenitem_out if(cancel=1)then item_outtotal_price thenchange=total_price thenstate=sell_state; -系统进入出票状态 else state=money_state;end if;实现了商品的多次选择和与实际相符合的多次钱币输入,在尾部的商品也显示了商品的数量。在这次实验中,通过老师的介绍和我们自己的学习,我们学会了 VHDL 程序的基本语法和操作,熟悉了程序的基本结构和设计,学会了 quartus 软件的操作和系统的功能仿真。我们小组的组员进行了合理的分工和良好的沟通,这对程序的实验十分重要。在这次的程序设计中,通过实验我们完成了程序,达到了学习的目的。