人人范文网 范文大全

EDA课设自动售货机

发布时间:2020-03-02 23:25:03 来源:范文大全 收藏本文 下载本文 手机版

基于VHDL自动售货机的设计

摘要

基于FPGA的自动售货机的设计,主要完成的任务是使用VHDl语言,在MAX+PLUSSII上完成电路的设计,程序的编译,基本功能的完善、模拟整个自动售货机的工作过程。电路的设计模块分为几个模块:主控模块、译码模块、顶层模块。各个模块完成不同的任务,合在一起就构成了一个自动售货机。在售货机的设计过程中,使用VHDL语言,根据各个模块的不同功能和它们之间的控制关系进行编写。软件模块直接在MAX+PLUSSII上进行。进入21世纪,随着人们对效率的追求,人工售货已不能不满足人们的需求。对此,自动售货机的设计就用了很大的应用空间和市场。

基于FPGA的自动售货机设计,采用软件开发模块,开发成本底,而且功能设计上有很大的灵活度,需要在软件上进行简单的修该就能实现不同的功能要求,能够满足不同的环境要求。

关键字:自动售货机;FPGA;仿真;VHDL;MAX+PLUSSII

1

2

目录

第一章 绪论 ......................................................................................4 第二章 自动售货机的设计 ................................................................4 2.1 设计说明.................................................................................4 2.1.1 流程说明 .......................................................................4 2.1.2各模块说明 ....................................................................5 2.1.3各模块的连接 .................................................................6 2.2状态之间的转换 ......................................................................6 第三章 仿真时序图 .............................................................................7 3.1主控模块的仿真 ......................................................................7 谢 辞..............................................................................................10 参考文献............................................................................................11 附录 ...................................................................................................11

3

第一章 绪论

随着科技的发展和社会的进步,自动化商业机械有了越来越广泛的的应用,自动售货机作为自动化商业机械的代表被广泛用于公共场所自动售货,给人们的生活带来了极大的方便。特别在发达的国家,自动售货机已经十分普及,自动售货机可售出各种成型包装的小商品,各种袋装,盒装,软瓶装等小商品。因其无需专人值守而可以每天24 小时售货,被称为“无人小超市”。在我国,由于多种原因,自动售货机的市场推广缓慢,随着商品市场的不断繁荣,自动售货机和自动服务设施必将逐步得到广泛的应用。

本文设计研究自动售货机的主要功能模块,主要包括货币处理模块、余额计算模块、显示模块,延时和时控模块。相应的功能有选择货物,多次购买,出货找零。

本文是通过使用VHDL语言,基于KX GW48FPGA芯片,并通过使用MAXPLUSS II软件进行程序设计,模拟仿真,功能验证,以更好的来理解和掌握自动售货机控制系统的工作原理和设计方法,以及学习和掌握基于EDA的电子产品设计方法,进一步加深对VHDL语言以及MAXPLUSS II 软件、FPGA可编程芯片的认识与了解。

FPGA是现场可编程门阵列(Field programmable gates array)的英文简称。是有可编程逻辑模块组成的数字集成电路(IC)。这些逻辑模块之间用可配置的互联资源。设计者可以对这些器件进行编程来完成各种各样的任务

PLD/FPGA是近几年集成电路中发展最快的产品。由于PLD性能的高速发展以及设计人员自身能力的提高,可编程逻辑器件供应商将进一步扩大可编程芯片的领地,将复杂的专用芯片挤向高端和超复杂应用。据IC Insights的数据显示,PLD市场从1999年的29亿美元增长到去年的56亿美元,几乎翻了一番。Matas预计这种高速增长局面以后很难出现,但可编程逻辑器件依然是集成电路中最具活力和前途的产业。

第二章 自动售货机的设计

2.1 设计说明

本文设计的自动售货机可销售cola 和 pepsi两种饮料:售货机可识别1元和0.5元的两种货币,在一次购买过程中,可购买一个或多个商品,系统会自动计算所需钱数和找零的钱数并自动找零。另外有3个发光二极管、6个LCD数码管:两个用来显示所需金额,两个用来显示已付金额,两个用来显示找零数。

2.1.1 流程说明

本文设计的自动售货机当通电时,表示一次销售的开始。顾客选择一种商品或多种商品后就进入投币状态。若不投币,则自动返回初始状态。投币后,系统自动计算所投钱数。若投币够,则出货并找零。若投币不够,如果顾客没有继续投币,则退币并回到初始状态。本系统的投币销售流程图如图1-1所示:

4

图1-1

2.1.2各模块说明

本文设计的自动售货机总体分三个模块:总控模块,二进制译码模块、BCD码译码模块。

总控模块:总控模块是本系统最重要的模块,该模块大体有5个输入端口和6个输出端口。其输入端口包括clk、coin1(投入一元货币)、coin5(投入0.5元货币)、cola(选择cola)、pepsi(选择pepsi),输出端口有paid(已投入多少钱)、needed(还需多少钱)moneyout(找零)、succe(灯亮表示交易成功)、failure(灯亮表示交易失败)、showmoneyout(灯亮表示正在找零)。该模块实现了本系统最重要的交易过程,包括选择商品、投入货币,计算剩余金额,找零出货等。

二进制译码模块:该模块有一个输入端口和两个输出端口。输入端口是一个8位的二进制数输出端口bcd0、bcd1是两个4位的BCD码。该模块的主要的功能是实现将主控模块输出的二进制数(paid、needed、moneyout)转换成BCD码,以便输出到七段数码管上显示出来。该模块的原理是将一个8位的二进制转换成2个4位的BCD码,分为高四位和低四位。

5

BCD码译码模块:该模块有一个输入端口和一个输出端口

2.1.3各模块的连接

各模块的连接如图1-2和1-3所示:

图1-2 售货机主控系统和译码器模块图

图1-3 售货机顶层模块

2.2状态之间的转换

本文所设计的自动售货机进程可以分为7个状态:a,b,c,d,e,f,g.a为开始状态,当有商品选择键按下时即进入b状态(投币状态)。当有货币投入,但投币不够时,即进入c状态(继续投币),若投币够了,即进入d状态(出货找零),之后进入f状态(延时)后返回a(状态)。

6

图1-3状态流程图

第三章 仿真时序图

3.1主控模块的仿真

上图表示顾客选择了pepsi饮料后,且投了2个一元的硬币。Succe为高电平,代表售货机有饮料售出。且余额为0. 7

上图表示顾客选择了pepsi饮料后,且投1个一元的硬币和一个0.5元的硬币。failure为高电平,代表售货机无饮料售出。且余额为已投的金额,将钱退还给顾客。.

上图表示自动售货机的译码系统,上图表示将8位数字转换成4位BCD码。

2.2BCD码译码的仿真

上图表示自动售货机的译码系统,上图表示将8位数字转换成4位BCD码。

2.3TOP文件的仿真

8

上图表示顾客选择了pepsi饮料后,且投了2个一元的硬币。Succe为高电平,代表售货机有饮料售出。且余额为0.

上图表示顾客选择了pepsi饮料后,且投1个一元的硬币和一个0.5元的硬币。Failure 为高电平,代表售货机无饮料售出。Showout为退币指示灯。.Mout_lcd0和Mout_lcd1,显示退币的金额。Paided _lcd0 和Paided_lcd1 needed _lcd0 和needed_lcd1 分别显示已付金额和还需要的金额数。

9

第四章 小结

自动售货机系统的设计经过一个星期的设计已经全部完成,能按预期的效果进行多次购买、找零出货、并且在数码管上显示出已投货币的金额、还需金额、找零,同时有指示灯提示交易成功、交易失败、正在找零。在自动售货机系统的3个模块中,最主要的是主控模块,其次的还有二进制译码模块和BCD码译码模块。各模块完成后,将它们组合成完整的自动售货机系统。在设计过程中还需改进的是。本文所用的VHDL语言虽然语法规则与其他计算机高级语言如C语言在很多方面很类似,但它毕竟是硬件描述语言,其本质作用在于描述硬件,因而会受硬件环境的限制。因此,为了达到设计的预期效果,在代码编写前,应做到对硬件电路心中有数,不能一味的追求代码的完美,而应该已实现的硬件电路的性能优劣为标准。

谢 辞

在这里我要感谢我的指导老师

10

参考文献

(1)潘松,黄继业编著 .《EDA技术实用教程 》,2005 ,科学出版社

(2)徐志军,徐光辉编著 .《

CPLD/FPGA的开发与应用 》,电子工业出版社,2001.1 (3)http://www.edacn.net/html/85/t-113885.html

(4) 甘历VHDL应用与开发实践。北京:科学出版社。2003

附录

系统各功能模块的实现程序: 主控模块完整程序如下: Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shouhuoji is port(clk: in std_logic;

coin1:in std_logic;

coin5:in std_logic;

cola:in std_logic;

pepsi:in std_logic;

paid:out std_logic_vector(7 downto 0); needed:out std_logic_vector(7 downto 0); succe:out std_logic; failure:out std_logic; showmoneyout:out std_logic; moneyout:out std_logic_vector(7 downto 0)); end shouhuoji;

architecture behav of shouhuoji is

type state_type is (qa,qb,qe,qc,qg,qd,qf);--定义七个状态

signal current_state :state_type:=qa;

signal q:integer range 0 to 100;

begin

proce(clk)

variable paidtemp:std_logic_vector(7 downto 0);--定义变量

variable neededtemp:std_logic_vector(7 downto 0);

variable backmoney:std_logic_vector(7 downto 0);

variable pricetemp:std_logic_vector(7 downto 0);

begin

if clk\'event and clk=\'1\' then

case current_state is

when qa=>paidtemp:=\"00000000\";neededtemp:=\"00000000\";

backmoney:=\"00000000\";pricetemp:=\"00000000\";q

showmoneyout

11

needed

if cola=\'1\' or pepsi=\'1\' then current_state

if cola=\'1\' then pricetemp:=pricetemp+\"00001111\";

neededtemp:=pricetemp;

Else

pricetemp:=pricetemp+\"00010100\";

neededtemp:=pricetemp;

end if;

end if;

paid

needed

when qb=>if coin1=\'1\' or coin5=\'1\' then

if coin1=\'1\'then paidtemp:=paidtemp+\"00001010\";

else

paidtemp:=paidtemp+\"00000101\";

end if;

if paidtemp>=pricetemp then backmoney:=paidtemp-pricetemp;

neededtemp:=\"00000000\";current_state

else neededtemp:=pricetemp-paidtemp;backmoney:=\"00000000\";

current_state

end if;

paid

needed

end if;

if q

if cola=\'1\' or pepsi=\'1\'then q

if cola=\'1\' then pricetemp:=pricetemp+\"00001111\";

neededtemp:=neededtemp+\"00001111\";

else

pricetemp:=pricetemp+\"00010100\";

neededtemp:=neededtemp+\"00010100\";

end if;

paid

needed

12

end if;

else current_state

end if;

when qe=>failure

if q

else current_state

end if;

when qc=>if coin1=\'1\' or coin5=\'1\' then

if coin1=\'1\'then paidtemp:=paidtemp+\"00001010\";

else

paidtemp:=paidtemp+\"00000101\";

end if;

if paidtemp>=pricetemp then

backmoney:=paidtemp-pricetemp;

neededtemp:=\"00000000\";current_state

else neededtemp:=pricetemp-paidtemp;backmoney:=\"00000000\";

current_state

end if;

paid

needed

end if;

if coin1/=\'1\'and coin5/=\'1\' then

if q

else current_state

end if;

else q

end if;

when qg=>failure

showmoneyout

current_state

succe

when qd=>succe

if backmoney>\"00000000\"then showmoneyout

moneyout

end if;

13

current_state

when qf=>if q

else current_state

end if;

end case;

else

end if;

end proce;

end behav; BCD译码模块完整程序如下:

Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity code1 is port(

b:in std_logic_vector(7 downto 0);

bcd0:out std_logic_vector(3 downto 0);

bcd1:out std_logic_vector(3 downto 0)

)

; end code1; architecture one of code1 is begin proce(b) begin case b is when\"00000000\"=>bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0bcd0

14

when\"00010010\"=>bcd0bcd0bcd0null; end case; end proce; end one; 顶层模块完整程序如下: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity top is Port( clk1:in std_logic;

C1,C5,P1_5,P2:in std_logic;

paid_lcd0,paid_lcd1,needed_lcd0,needed_lcd1,Mout_lcd0,Mout_lcd1:out

std_logic_vector(3 downto 0);

s,f,showout :out std_logic ); end top; architecture one of top is component shouhuoji port ( clk:in std_logic;

coin1:in std_logic;

coin5:in std_logic;

cola:in std_logic;

pepsi:in std_logic;

paid:out std_logic_vector(7 downto 0);

needed:out std_logic_vector(7 downto 0);

succe:out std_logic;

failure:out std_logic;

showmoneyout:out std_logic;

moneyout:out std_logic_vector(7 downto 0)

); end component; component code1 port(

b:in std_logic_vector( 7 downto 0);

bcd0:out std_logic_vector(3 downto 0);

bcd1:out std_logic_vector(3 downto 0) ); end component;

signal p,n,mo:std_logic_vector( 7 downto 0);

15

--signal s1,s2,s3,s4,s5,s6:std_logic_vector(3 downto 0); begin

u0:shouhuoji--各模块连接

port map(clk=>clk1,coin1=>C1,coin5=>C5,cola=>P1_5,pepsi=>P2, succe=>s,failure=>f,showmoneyout=>showout,paid=>p,needed=>n,moneyout=>mo); u1:code1 port map(b=>p,bcd0=>paid_lcd0,bcd1=>paid_lcd1); u2:code1 port map(b=>n,bcd0=>needed_lcd0,bcd1=>needed_lcd1); u3:code1 port map(b=>mo,bcd0=>Mout_lcd0,bcd1=>Mout_lcd1);

end one;

EDA课设

自动售货机

软件工程_自动售货机

自动售货机渊源

EDA课设电子琴设计.

基于EDA的自动售货机系统的设计 开题报告

自动售货机系统程序

自动售货机合作协议书

自动售货机合作合同

软件工程课程设计(自动售货机)

EDA课设自动售货机
《EDA课设自动售货机.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档