基于FPGA的自动售货机控制系统设计毕业论文.docx
- 文档编号:27969663
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:64
- 大小:1.11MB
基于FPGA的自动售货机控制系统设计毕业论文.docx
《基于FPGA的自动售货机控制系统设计毕业论文.docx》由会员分享,可在线阅读,更多相关《基于FPGA的自动售货机控制系统设计毕业论文.docx(64页珍藏版)》请在冰豆网上搜索。
基于FPGA的自动售货机控制系统设计毕业论文
基于FPGA的自动售货机控制系统设计
摘要
本毕业设计是在Altera公司EP1C3T144C8型FPGA为核心的LP-2900开发装置上通过原理图以及VHDL语言分别实现自动售货机控制系统的设计和仿真。
其中,基于原理图的设计方案主要通过计数器、加法器、数值比较器在逻辑上实现自动售货机的控制。
对于VHDL语言方案,主要通过各类选择语句以及条件判断语句实现自动售货机控制系统。
两个设计都可以归于各个模块的设计和组合,主要分为投币模块,找零模块,显示模块和分频模块。
各个模块之间通过各个信号相互连接并相互决定启动顺序。
该售货机控制系统能够识别三种硬币,并且提供四种价格不同的货物供选择,七段数码管显示投入硬币的总额和购买之后以及找零过程中的余额,并且在退币过程中有LED以及蜂鸣器的提示,自动售货机系统还具备了取消购买的功能,一旦执行则直接开始退币。
基于FPGA的自动售货机设计,具有开发周期短、硬件运行速度快、成本较低以及稳定性较高等优势。
关键词:
自动售货机,VHDL,原理图,FPGA,LP—2900
THEDESIGNOFVENDINGMACHINECONTROLSYSTEMBASEDONFPGA
ABSTRACT
AvendingmachinecontrolsystemhasbeendesigneduseschematicsandVHDLlanguageinthiswork.ThesystemhasalsobeensimulatedonLP-2900developmentplatformbasedonEP1C3T144C8FPGAofAltera.Schematicsdesignwasusedforthecontrollogicofthevendingmachinebycounters,addsandvaluecomparators.WhiletheVHDLlanguagewasapplicatedbyitsflexibleselectionandcondionalinstructions.Thetwomethodswerebothdesignedandassembledbymodules,includingcoininserter,moneychanger,display,andfrenquencydevider.Everymodulecouldcommunicatewithandcallforothersbysignals.Thevendingmachinecontrolsystemiscapableof3differentcoinsand4merchandisesindifferentprice.Totalcoinsinsertedandbalanceareshownonthe7-segLEDdisplay,andaLEDandabuzzerwouldbewarnedwhenchangingbackcoins.Thesystemisalsoabletocanclethepurchasingbygivingbackallthecoinsassoonasrequested.ThevendingmachinebasedonFPGAhascertainadvantagesinshorterdevelopmentperiod,higherspeedsoftwarerunning,lowercost,andmorestableperformence.
Keywords:
Vendingmachines,VHDL,schematicdiagram,FPGA,LP-2900
1绪论
1.1引言
作为一种全新的消费和购物方式,自动售货机于20世纪70年代末,在欧美和日本地区逐渐兴起。
经过短时间的发展,现如今自动售货机成为了世界范围内,商品零售的主要方式之一。
支持其发展如此迅速的原因便是其便捷的购物方式以及24小时不间断的服务。
本文是在设计基于FPGA的自动售货机控制系统课程设计下实现自动售货机的基本功能的研究报告,大致介绍了EDA技术以及其发展的历史、Altera公司的开发工具、FPGA的应用,以及原理图和VHDL语言的特点和用法。
1.2EDA技术的产生、发展和展望
伴随着计算机、集成电路以及电子系统设计的发展,EDA技术已经现代电子设计的核心。
其发展融合了应用电子技术、智能技术、计算机图形学以及计算及数学等学科的最新研究成果[1,2]。
现代EDA技术是20世界90年代初从计算机辅助设计、辅助制造、和辅助测试等工程概念上发展而来的。
其发展过程主要经历了以下三个阶段[3]:
1)计算机辅助设计(ComputerAidedDesign,CAD)
2)计算机辅助工程设计(ComputerAidedEngineeringDesign,CAED)
3)电子设计自动化(ElectronicDesignAutomation,EDA)
随着微电子技术的发展,20世纪90年代后的工艺制造水平已近达到了深亚微米甚至超深亚微米级,特别是可编程逻辑器件的发展,百万门以上的PLD器件的问世,使得设计者可以通过自己设计芯片而实现电子系统功能。
此时的EDA工具为工程师提供了全线的EDA设计辅助,它以系统级设计为核心,通过工程师高层次的设计转化为可处理的硬件电路,然后利用优化算法对理想高层次设计电路进行优化。
借助EDA技术,设计人员可以在不熟悉各种器件厂商和工艺的情况下,完成电子系统设计[4]。
随着工艺的进步和EDA技术的不断发展,软硬件协同设计将显得越来越重要。
EDA技术的应用也将向着广度和深度两个方向不断继续发展,今后还会超越电子设计的范畴,从而进入其他领域。
随着SOC和SOPC的发展,IP核复用概念越来越为业界所接受,这也符合VHDL语言设计理念,所以,在现如今以及不久的将来,电子系统的设计已经不是电子工程师特有的技能了,任何人都可以凭借VHDL语言规范进行电子系统的设计。
1.3EDA工程的设计流程
基于FPGA的现代数字系统设计流程图如图1.1所示[5]:
图1.1EDA工程设计流程
1.4FPGA简介
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物[6]。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA的开发相对于传统PC、单片机的开发有很大不同。
FPGA以并行运算为主,以硬件描述语言来实现;相比于PC或单片机(无论是冯诺依曼结构还是哈佛结构)的顺序操作有很大区别,也造成了FPGA开发入门较难。
目前国内有专业的FPGA外协开发厂家,如[北京中科鼎桥ZKDQ-TECH]等。
FPGA开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。
1.5VHDL语言介绍
VHDL全名Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage[7],中文为超高速集成电路硬件描述语言,它的主要应用便是数字电路的设计的。
VHDL语言是由美国国防部开发,美国国防部设计该语言的最初目的在于为美军提供一种具有高可靠性、短开发周期的语言。
其使用范围在设计初始其实是很小的,但是随着其优点和特征逐渐被人们所发现,很快便成为一种标准化的硬件开发语言。
VHDL的功能主要在于描述数字系统的整体结构,以及他的行为、功能和接口。
除了含有许多其他硬件描述语言所具有硬件特征的语句外,VHDL语言的主要形式、描述风格和书写语法都十分类似于C语言一般的计算机高级语言。
VHDL程序设计过程中,结构的特点是将一项工程设计,或者称设计实体(该实体包括一个元件,一个完整的电路模块或者一个功能齐备的系统)分成外部(或称可视部分)和内部(或称不可视部分),在设计过程中,既涉及设计实体的内部的功能和数据结构算法完成部分,也涉及了和外部电路的连接。
在对一个设计实体的外部界面进行定义之后,一旦完成了其内部的开发,其他设计若涉及到该实体,便可以直接通过设计软件调用该实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点[8]。
2设计要求以及设计思路流程图
2.1设计要求
设计一个简易投币饮料售卖机控制系统,具体要求如下:
1)假设有三种面值的硬币:
0.5元,1元,2.5元。
出售的饮料不论品种均为单一价格3元;
2)硬币投入后,七段LED数码管显示已投入的累计币值;
3)当投入的币值累计等于3元时,输出饮料,大于3元时,输出饮料并找零。
4)找的零钱(硬币)共有两种面值:
0.5元和1元;
5)输出饮料和找零时(每个输出动作约维持2~3秒)不能投币;
6)输出饮料和找零时以蜂鸣器鸣响(响0.5秒,停0.5秒)提醒顾客;
7)设置一个复位键。
8)用三个脉冲型按键模拟投币,分别投入0.5元,1元,2.5元。
用三个发光二极管分别代表输出饮料、输出找零1元、输出找零0.5元。
系统在LP-2900实验装置上实现。
2.2总体设计思路简要概括
本设计关键点在于设计各个模块部分,以及设计各个模块之间的连接方式。
例如在原理图设计中,通过设计投币模块、出货模块、找零模块、显示模块和分频模块,将各个模块封装之后,通过各个模块的输入输出相互进行链接,直接组成了整个系统,实现系统预计的功能。
以下便是对每个模块基础功能设计要求的简述:
2.2.1投币模块
投币的模块的主要作用在于接受来自外界的投币信号,并且对于投币总额进行记录之后,将投币总额送到出货模块中与选择的产品单价进行对比。
投币模块要求投币动作能够持续一段时间,以便系统对投币动作进行识别和判定,这同时也是消抖功能上的要求。
另外根据设计要求和显示要求,投币动作在找零的时候是需要被禁止的,既在系统执行找零动作有效的期间内,投币动作应当被系统选择性的进行忽略。
2.2.2商品选择模块
出货模块的主要作用是在于产生相应商品选择信号,对商品单价进行赋值,并且将商品单价和投币总额进行对比,一旦达到了要求(投币总额数量大于或等于商品单价),则给找零模块提供找零开始信号,以及执行输出商品操作。
需要强调的一点,在本设计中,预先的设计要求是商品单价都设为3元,现为了贴近自动售货机在现实生活中的使用要求,将自动售货机内的四种商品单价分别改为1元、2元、3元、4元。
2.2.3找零模块
找零模块执行的开始信号决定于两个信号的,只有当如下两个信号同时有效的时候,找零模块才会开始执行,第一个是商品选择信号,第二个是投入金额大于或等于商品单价所产生的信号。
一旦条件满足,则此时开始找零。
由于找零方式有多种,经过选择之后本次设计采用如下找零规则:
找零过程中优先找给顾客1元硬币,最后若有0.5元余额的剩余,则再开始找0.5元硬币。
找零模块开始执行的同时,应该给投币模块以限制,该限制使得在找零过程中,任何投币动作都是无效的。
表现在找零的时候,按动投币按键不影响余额的值。
2.2.4显示模块
显示模块的作用在于将待显示的数据通过译码送到七段数码管中,分别显示投币总额和余额,当开始找零之前,显示的是投入硬币总数,当开始找零之后,显示的是余额。
显示模块显示的值应随着内部程序数值的改变及时做出改变,不能存在滞后或者超前的情况。
并且,显示模块显示数据的变化动作节奏应当同外部信号指示灯的显示节奏相同,以免产生时序上的问题。
2.2.5分频模块
分频模块主要是将系统产生的时钟信号进行分频,得到我们需要的各个频率的信号。
本次设计中使用的分频器原理在为:
统计时钟的脉冲个数,一旦达到系统预设的数目,则对应的输出信号翻转,从而达到分频的目的。
2.3总体设计流程图
图2.1总体设计流程图
3基于原理图的设计实现过程
基于原理图对各个模块进行设计,设计伊始本打算使用状态机来完成,但是由于投入硬币的种类有三种,其中还有2.5元的硬币,加之出售的商品价格不一,并且在找零的时候会出现两种选择,同时本设计对时序还有较高的要求,这也就使得用状态机来实现自动售货机则会出现较为复杂的逻辑变化。
于是经过了多次试验后,采用了74161芯片作为设计的主体芯片,加法器(74283)、数值比较器(7485)、数据选择器(74157)、译码器(7448)以及各类门电路来实现各个模块的功能。
以下便是对各个模块的主要设计部分的描述。
3.1投币模块主要设计部分
如图3.1所示,投币模块使用74161计数器,其中VCC代表高电平,CO_5代表0.5元的信号输入,需要注意的是,该信号包括了投入硬币为0.5元以及2.5的两种情况,CLK1是频率为1Hz的计数脉冲。
由74161的功能可以知道,该部分的工作过程是在于当CO_5有效的时候,便开始计数,统计投入0.5元面值硬币的总额。
并且由于CO_5控制的端口为EPN,计数信号连接1Hz脉冲,通过这样的设计就相当于使用1Hz的信号作为消抖扫描信号,从而实现了按键消抖,无需另外设计按键消抖功能。
图3.1输入模块主要原理图
在设计中使用五个74161计数,每一次都代表实现五毛的投入,并且使用加法器将其进行统计之后进行保存。
因为加法器是逻辑电路,这也就使得内部数据实时更新,不会产生时序上的错误。
如图3.2所示两个74161的作用,左边74161的作用在于将来自于累计0.5元后产生的进位信号进行统计。
与其不同的是右边的74161,由于其实际上应该统计的计数脉冲是芯片内部所产生的信号,就无需对按键抖动问题进行处理,所以将进位信号(MAOJW)作为74161的计数脉冲。
将来自低位的进位信号,1元硬币投入信号,2.5元硬币投入信号通过加法器进行累加之后,则产生元位的值。
投入硬币的总数通过送入显示模块进行实时显示。
(a)(b)
图3.2进位处理原理图(a),元统计原理图(a)
3.2商品选择模块的主要设计部分
对于商品选择,也采用了74161计数器进行选择,如图3.3所示。
图3.3商品选择原理图
在该图中,SO_1为选择第一种商品的信号,根据74161的功能,可以看出来,当SO_1有效的时候,此时CSO1作为选择商品信号则会置为“1”,并且在输入信号无效的时候,由于ENP接地,则会保持当前状态不变,以便之后的电路对该状态的判定。
当然,在选择的同时要对商品的单价进行赋值,设计中假定四种商品的单价分别为1元,2元,3元和4元,于是利用图P3.4实现了商品单价赋予的功能。
该电路使得当选择商品不一的时候,对价格的赋值也就不同。
图3.4价格定义原理图
商品选择模块中还要包含选择结束信号,该信号同时由商品选择完成和取消购买决定,如图3.5所示,在该电路中,一旦检测到CSO1-CSO4,以及RES信号中的任意一个有效,则SELL_END信号有效,表示此时商品选择结束。
图3.5商品选择结束信号原理图
如图3.6所示,是商品选择模块中的比较部分,该部分的作用在于比较投入硬币的总数和商品的价格,一旦投入硬币的总数大于或等于商品价格的时候,则完成此次购买的顾客操作部分,下一步则是商品出货以及找零模块的运行。
找零模块的运行开始信号,是商品选择模块CHA_BEG的输出。
图3.6找零开始信号产生原理图
3.3找零模块的主要设计部分
找零模块是整个设计中较为复杂的模块,其中涉及到现有状态的保持以及显示模块显示内容的选择。
如图3.7所示,其中YUAN_END是元位找零结束信号,CHA10_BEG是1元找零开始信号,CHA5_BEG是五毛找零开始信号。
此部分的设计在于确定是否可以开始找零,并且找零的顺序是优先提供1元找零,最后提供5毛找零。
图3.7找零顺序定义原理图
如图3.8所示,该部分的作用是将购买或找零开始之后元位的余额进行判断,一旦余额为零,则表示元位的找零结束,输出元位找零信号(YUAN_END)。
图3.8元找零结束设置
其中,LEV_1-LEV_4的信号由图3.9所示电路产生,其原理在于通过对找零进行计数之后,将找零的总数和应找零的总数进行减法操作,在图中右上角的加法器,则是完成余码的求取,左下角的加法器,则是算出已找零的数目和商品价格的和,有下角的加法器则完成减法操作,算出实时剩余的钱币数目,用以确定找零是否完成。
图3.9找零模块原理图
一旦找零完成,也就是当图3.10所示电路开始执行的时候,当商品选购完毕,投入硬币总数满足,找零动作结束之后,则根据图中电路所示,FINISH1和FINISH2中会有一个置为1,于是FINISH信号则置为0,此时,系统中各个计数器全都同步清零,整个系统回到初始状态,等待下一次购买。
图3.10复位模块原理图
3.4显示模块的主要设计部分
显示模块的作用在于控制七段数码管显示,以及显示数据的选择,根据设计要求,七段数码管在找零之前应选择显示的数据是投币总额,但当找零开始之后,选择的信号应是剩余总额。
如图3.11所示,通过74157对选择数据进行判断,当CHA_BEG有效的时候,送显示的是余额,当CHA_BEG无效的时候,送显示的投入硬币的总数。
并且,显示模块使用的是动态扫描的显示方法,使用100Hz的时钟信号对数码管实现动态扫描,分别显示元位和毛位的显示,最后利用7448实现七段数码管的译码,产生七段数码管显示控制信号。
图3.11显示模块原理图
3.5分频模块的主要设计部分
分频模块原理便是利用计数器,对系统时钟进行分频,得到设计过程中使用到的各个频率信号,为了设计在日后能够方便修改,既在之后的修改调试过程中可以采用多种频率的时钟信号,本设计采用了以10为倍率的从1Hz到1MHz的频率为分频输出。
分频模块封装之后如图3.12所示,内部设计图见附录。
图3.12分频模块效果图
4基于VHDL的设计实现过程
相较于基于原理图的设计,VHDL设计并没有采用分模块设计后通过信号将各个模块连接起来,而是使用了整体设计的办法。
之所以这样做的原因在于VHDL具有极其强大的硬件描述能力,可以不需要通过分步就能够解决许多原理图设计上较为复杂的问题,因此在权衡利弊之后,选择了整体设计的办法。
程序总体分为几个进程,其中主体进程实现从购买到找零的一系列功能,而剩下的几个进程则实现分频和译码功能。
以下便是对程序的详细解释,以及对设计实现原理的分析,其中还包含着我对VHDL学习过程的一些理解。
4.1输入输出口的定义
输入输出口的定义程序如下所示,各个输入输出引脚的作用见表4.1。
ENTITYSELLERIS
PORT(
CLK:
INSTD_LOGIC;
RESET:
INSTD_LOGIC;
COIN1,COIN2,COIN3:
INSTD_LOGIC;
SORT:
INSTD_LOGIC_VECTOR(3DOWNTO0);
CHAR1,CHAR2:
OUTSTD_LOGIC;
ACOM:
OUTSTD_LOGIC;
BUZ:
OUTSTD_LOGIC;
DOT:
OUTSTD_LOGIC;
SEG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
CHI:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
PICK:
OUTSTD_LOGIC_VECTOR(2DOWNTO0)
);
ENDSELLER;
表4.1输入输出定义表
输入或输出
作用
CLK
时钟脉冲输入,接OSC输入信号
RESET
取消购买按键输入信号
COIN1,COIN2,COIN3
三种面值硬币输入信号
SORT
四种商品选择信号输入
CHAR1,CHAR2
两种面值找零信号输出
ACOM
发光二极管控制信号输出
BUZ
蜂鸣器控制信号输出
DOT
小数点显示控制信号输出
SEG
数码管显示数据信号输出
CHI
商品出货输出信号
PICK
数码管选择信号输出
4.2信号量的定义
信号量的定义程序段如下:
ARCHITECTUREAUTOOFSELLERIS
SIGNALCLK1,CLK2:
STD_LOGIC;
SIGNALFINISH:
STD_LOGIC;
SIGNALTEST1,TEST2:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALDATA:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALVKILL:
STD_LOGIC;
在VHDL中,信号量是一个极为重要的用于储存数据的存储体,信号量的特殊在于它的赋值不是立刻执行的,而是在进程结束之后才会执行,这也就是它和变量之间的主要区别[9]。
而且,信号量作为VHDL语言中进程通信的唯一方式(输入输出也包含于信号量中),整个VHDL之间的连接都是依靠信号量的改变进行的,作为进程的敏感信号,只有对应的信号改变了,进程语句才会得到执行。
本程序中设置的信号量及作用如表B4.2。
表4.2信号量定义表
信号量
作用
CLK1,CLK2
两个时钟来自于系统时钟的分频。
FINISH
购买结束标志
TEST1,TEST2
用以传递显示数据
DATA
送显示数据
VKILL
状态信号,用以控制闪烁
4.3分频模块进程
分频模块的进程如下:
DEVICE1:
PROCESS(CLK)
VARIABLETCLK1:
INTEGERRANGE0TO50000;
VARIABLEC1:
STD_LOGIC;
BEGIN
IFCLK'EVENTANDCLK='1'THEN
TCLK1:
=TCLK1+1;
IFTCLK1=50000THEN
C1:
=NOTC1;
CLK1<=C1;
ENDIF;
ENDIF;
ENDPROCESSDEVICE1;
-----------------------------------------------------------
DEVICE2:
PROCESS(CLK)
VARIABLETCLK2:
INTEGERRANGE0TO3000000;
VARIABLEC2:
STD_LOGIC;
BEGIN
IFCLK'EVENTANDCLK='1'THEN
TCLK2:
=TCLK2+1;
IFTCLK2=3000000THEN
C2:
=NOTC2;
CLK2<=C2;
ENDIF;
ENDIF;
ENDPROCESSDEVICE2;
在分频部分中,利用CLK作为两个分频进程的敏感信号,通过其的变化对变量进行计数,一旦计数值达到设定的要求,则将CLK1,CLK2的状态进行翻转后输出,从而达到分频的目的。
4.4程序主体进程
程序的主体进程是整个自动售货机控制系统的核心,其中包含了变量定义部分、投币统计部分、商品选择部分、找零部分以及复位部分。
主体进程见附录。
以下是对各个部分的介绍。
4.4.1变量定义部分
变量定义部分的程序如下:
VARIABLECNT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 自动 售货 控制系统 设计 毕业论文