基于FPGA的自动售货机控制系统设计_第1页
基于FPGA的自动售货机控制系统设计_第2页
基于FPGA的自动售货机控制系统设计_第3页
基于FPGA的自动售货机控制系统设计_第4页
基于FPGA的自动售货机控制系统设计_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

基于FPGA的自动售货机控制系统设计基于FPGA的自动售货机控制系统设计摘要本毕业设计是在Altera公司EP1C3T144C8型FPGA为核心的LP-2900开发装置上通过原理图以及VHDL语言分别实现自动售货机控制系统的设计和仿真。其中,基于原理图的设计方案主要通过计数器、加法器、数值比较器在逻辑上实现自动售货机的控制。对于VHDL语言方案,主要通过各类选择语句以及条件判断语句实现自动售货机控制系统。两个设计都可以归于各个模块的设计和组合,主要分为投币模块,找零模块,显示模块和分频模块。各个模块之间通过各个信号相互连接并相互决定启动顺序。该售货机控制系统能够识别三种硬币,并且提供四种价格不同的货物供选择,七段数码管显示投入硬币的总额和购买之后以及找零过程中的余额,并且在退币过程中有LED以及蜂鸣器的提示,自动售货机系统还具备了取消购买的功能,一旦执行则直接开始退币。基于FPGA的自动售货机设计,具有开发周期短、硬件运行速度快、成本较低以及稳定性较高等优势。关键词:自动售货机,VHDL,原理图,FPGA,LP—2900

THEDESIGNOFVENDINGMACHINECONTROLSYSTEMBASEDONFPGAABSTRACTAvendingmachinecontrolsystemhasbeendesigneduseschematicsandVHDLlanguageinthiswork.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 绪论 11.1 引言 11.2 EDA技术的产生、发展和展望 11.3 EDA工程的设计流程 21.4 FPGA简介 21.5 VHDL语言介绍 32 设计要求以及设计思路流程图 42.1 设计要求 42.2 总体设计思路简要概括 42.2.1 投币模块 42.2.2 商品选择模块 52.2.3 找零模块 52.2.4 显示模块 52.2.5 分频模块 52.3 总体设计流程图 63 基于原理图的设计实现过程 73.1 投币模块主要设计部分 73.2 商品选择模块的主要设计部分 83.3 找零模块的主要设计部分 103.4 显示模块的主要设计部分 123.5 分频模块的主要设计部分 134 基于VHDL的设计实现过程 144.1 输入输出口的定义 144.2 信号量的定义 154.3 分频模块进程 164.4 程序主体进程 174.4.1 变量定义部分 174.4.2 投币统计部分 184.4.3 商品选择部分 194.4.4 找零部分 214.4.5 复位部分 234.5 译码进程 235 实验结果图片 255.1 初始状态 255.2 投入0.5元硬币之后 255.3 投入两个0.5元及一个1元硬币之后 255.4 投入2.5元硬币之后 265.5 找零动作 266 设计过程中遇到的问题和解决办法 276.1 程序设计上的时序问题 276.2 按键消抖问题 276.3 乘除法问题 276.4 找零模式问题 287 对设计不足之处的提出和展望 29参考文献 30致谢 31附录 321. VHDL程序: 322. 原理图程序: 383. 翻译文献及原文 47绪论引言作为一种全新的消费和购物方式,自动售货机于20世纪70年代末,在欧美和日本地区逐渐兴起。经过短时间的发展,现如今自动售货机成为了世界范围内,商品零售的主要方式之一。支持其发展如此迅速的原因便是其便捷的购物方式以及24小时不间断的服务。本文是在设计基于FPGA的自动售货机控制系统课程设计下实现自动售货机的基本功能的研究报告,大致介绍了EDA技术以及其发展的历史、Altera公司的开发工具、FPGA的应用,以及原理图和VHDL语言的特点和用法。EDA技术的产生、发展和展望伴随着计算机、集成电路以及电子系统设计的发展,EDA技术已经现代电子设计的核心。其发展融合了应用电子技术、智能技术、计算机图形学以及计算及数学等学科的最新研究成果[1,2]。现代EDA技术是20世界90年代初从计算机辅助设计、辅助制造、和辅助测试等工程概念上发展而来的。其发展过程主要经历了以下三个阶段[3]:计算机辅助设计(ComputerAidedDesign,CAD)计算机辅助工程设计(ComputerAidedEngineeringDesign,CAED)电子设计自动化(ElectronicDesignAutomation,EDA)随着微电子技术的发展,20世纪90年代后的工艺制造水平已近达到了深亚微米甚至超深亚微米级,特别是可编程逻辑器件的发展,百万门以上的PLD器件的问世,使得设计者可以通过自己设计芯片而实现电子系统功能。此时的EDA工具为工程师提供了全线的EDA设计辅助,它以系统级设计为核心,通过工程师高层次的设计转化为可处理的硬件电路,然后利用优化算法对理想高层次设计电路进行优化。借助EDA技术,设计人员可以在不熟悉各种器件厂商和工艺的情况下,完成电子系统设计[4]。随着工艺的进步和EDA技术的不断发展,软硬件协同设计将显得越来越重要。EDA技术的应用也将向着广度和深度两个方向不断继续发展,今后还会超越电子设计的范畴,从而进入其他领域。随着SOC和SOPC的发展,IP核复用概念越来越为业界所接受,这也符合VHDL语言设计理念,所以,在现如今以及不久的将来,电子系统的设计已经不是电子工程师特有的技能了,任何人都可以凭借VHDL语言规范进行电子系统的设计。EDA工程的设计流程基于FPGA的现代数字系统设计流程图如图1.1所示[5]:图1.1EDA工程设计流程FPGA简介FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物[6]。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA的开发相对于传统PC、单片机的开发有很大不同。FPGA以并行运算为主,以硬件描述语言来实现;相比于PC或单片机(无论是冯诺依曼结构还是哈佛结构)的顺序操作有很大区别,也造成了FPGA开发入门较难。目前国内有专业的FPGA外协开发厂家,如[北京中科鼎桥ZKDQ-TECH]等。FPGA开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。VHDL语言介绍VHDL全名Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage[7],中文为超高速集成电路硬件描述语言,它的主要应用便是数字电路的设计的。VHDL语言是由美国国防部开发,美国国防部设计该语言的最初目的在于为美军提供一种具有高可靠性、短开发周期的语言。其使用范围在设计初始其实是很小的,但是随着其优点和特征逐渐被人们所发现,很快便成为一种标准化的硬件开发语言。VHDL的功能主要在于描述数字系统的整体结构,以及他的行为、功能和接口。除了含有许多其他硬件描述语言所具有硬件特征的语句外,VHDL语言的主要形式、描述风格和书写语法都十分类似于C语言一般的计算机高级语言。VHDL程序设计过程中,结构的特点是将一项工程设计,或者称设计实体(该实体包括一个元件,一个完整的电路模块或者一个功能齐备的系统)分成外部(或称可视部分)和内部(或称不可视部分),在设计过程中,既涉及设计实体的内部的功能和数据结构算法完成部分,也涉及了和外部电路的连接。在对一个设计实体的外部界面进行定义之后,一旦完成了其内部的开发,其他设计若涉及到该实体,便可以直接通过设计软件调用该实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点[8]。

设计要求以及设计思路流程图设计要求设计一个简易投币饮料售卖机控制系统,具体要求如下:假设有三种面值的硬币:0.5元,1元,2.5元。出售的饮料不论品种均为单一价格3元;硬币投入后,七段LED数码管显示已投入的累计币值;当投入的币值累计等于3元时,输出饮料,大于3元时,输出饮料并找零。找的零钱(硬币)共有两种面值:0.5元和1元;输出饮料和找零时(每个输出动作约维持2~3秒)不能投币;输出饮料和找零时以蜂鸣器鸣响(响0.5秒,停0.5秒)提醒顾客;设置一个复位键。用三个脉冲型按键模拟投币,分别投入0.5元,1元,2.5元。用三个发光二极管分别代表输出饮料、输出找零1元、输出找零0.5元。系统在LP-2900实验装置上实现。总体设计思路简要概括本设计关键点在于设计各个模块部分,以及设计各个模块之间的连接方式。例如在原理图设计中,通过设计投币模块、出货模块、找零模块、显示模块和分频模块,将各个模块封装之后,通过各个模块的输入输出相互进行链接,直接组成了整个系统,实现系统预计的功能。以下便是对每个模块基础功能设计要求的简述:投币模块投币的模块的主要作用在于接受来自外界的投币信号,并且对于投币总额进行记录之后,将投币总额送到出货模块中与选择的产品单价进行对比。投币模块要求投币动作能够持续一段时间,以便系统对投币动作进行识别和判定,这同时也是消抖功能上的要求。另外根据设计要求和显示要求,投币动作在找零的时候是需要被禁止的,既在系统执行找零动作有效的期间内,投币动作应当被系统选择性的进行忽略。商品选择模块出货模块的主要作用是在于产生相应商品选择信号,对商品单价进行赋值,并且将商品单价和投币总额进行对比,一旦达到了要求(投币总额数量大于或等于商品单价),则给找零模块提供找零开始信号,以及执行输出商品操作。需要强调的一点,在本设计中,预先的设计要求是商品单价都设为3元,现为了贴近自动售货机在现实生活中的使用要求,将自动售货机内的四种商品单价分别改为1元、2元、3元、4元。找零模块找零模块执行的开始信号决定于两个信号的,只有当如下两个信号同时有效的时候,找零模块才会开始执行,第一个是商品选择信号,第二个是投入金额大于或等于商品单价所产生的信号。一旦条件满足,则此时开始找零。由于找零方式有多种,经过选择之后本次设计采用如下找零规则:找零过程中优先找给顾客1元硬币,最后若有0.5元余额的剩余,则再开始找0.5元硬币。找零模块开始执行的同时,应该给投币模块以限制,该限制使得在找零过程中,任何投币动作都是无效的。表现在找零的时候,按动投币按键不影响余额的值。显示模块显示模块的作用在于将待显示的数据通过译码送到七段数码管中,分别显示投币总额和余额,当开始找零之前,显示的是投入硬币总数,当开始找零之后,显示的是余额。显示模块显示的值应随着内部程序数值的改变及时做出改变,不能存在滞后或者超前的情况。并且,显示模块显示数据的变化动作节奏应当同外部信号指示灯的显示节奏相同,以免产生时序上的问题。分频模块分频模块主要是将系统产生的时钟信号进行分频,得到我们需要的各个频率的信号。本次设计中使用的分频器原理在为:统计时钟的脉冲个数,一旦达到系统预设的数目,则对应的输出信号翻转,从而达到分频的目的。总体设计流程图等待购买等待购买投币模块出货模块输出商品找零结束本次购买硬币总数投币选择商品取消购买找回投入的金额七段数码管显示图2.1总体设计流程图

基于原理图的设计实现过程基于原理图对各个模块进行设计,设计伊始本打算使用状态机来完成,但是由于投入硬币的种类有三种,其中还有2.5元的硬币,加之出售的商品价格不一,并且在找零的时候会出现两种选择,同时本设计对时序还有较高的要求,这也就使得用状态机来实现自动售货机则会出现较为复杂的逻辑变化。于是经过了多次试验后,采用了74161芯片作为设计的主体芯片,加法器(74283)、数值比较器(7485)、数据选择器(74157)、译码器(7448)以及各类门电路来实现各个模块的功能。以下便是对各个模块的主要设计部分的描述。投币模块主要设计部分如图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)商品选择模块的主要设计部分对于商品选择,也采用了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.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.11所示,通过74157对选择数据进行判断,当CHA_BEG有效的时候,送显示的是余额,当CHA_BEG无效的时候,送显示的投入硬币的总数。并且,显示模块使用的是动态扫描的显示方法,使用100Hz的时钟信号对数码管实现动态扫描,分别显示元位和毛位的显示,最后利用7448实现七段数码管的译码,产生七段数码管显示控制信号。图3.11显示模块原理图分频模块的主要设计部分分频模块原理便是利用计数器,对系统时钟进行分频,得到设计过程中使用到的各个频率信号,为了设计在日后能够方便修改,既在之后的修改调试过程中可以采用多种频率的时钟信号,本设计采用了以10为倍率的从1Hz到1MHz的频率为分频输出。分频模块封装之后如图3.12所示,内部设计图见附录。图3.12分频模块效果图基于VHDL的设计实现过程相较于基于原理图的设计,VHDL设计并没有采用分模块设计后通过信号将各个模块连接起来,而是使用了整体设计的办法。之所以这样做的原因在于VHDL具有极其强大的硬件描述能力,可以不需要通过分步就能够解决许多原理图设计上较为复杂的问题,因此在权衡利弊之后,选择了整体设计的办法。程序总体分为几个进程,其中主体进程实现从购买到找零的一系列功能,而剩下的几个进程则实现分频和译码功能。以下便是对程序的详细解释,以及对设计实现原理的分析,其中还包含着我对VHDL学习过程的一些理解。输入输出口的定义输入输出口的定义程序如下所示,各个输入输出引脚的作用见表4.1。ENTITYSELLERISPORT(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数码管选择信号输出信号量的定义信号量的定义程序段如下:ARCHITECTUREAUTOOFSELLERISSIGNALCLK1,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状态信号,用以控制闪烁分频模块进程分频模块的进程如下:DEVICE1:PROCESS(CLK)VARIABLETCLK1:INTEGERRANGE0TO50000;VARIABLEC1:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENTCLK1:=TCLK1+1;IFTCLK1=50000THENC1:=NOTC1;CLK1<=C1;ENDIF;ENDIF;ENDPROCESSDEVICE1;DEVICE2:PROCESS(CLK)VARIABLETCLK2:INTEGERRANGE0TO3000000;VARIABLEC2:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENTCLK2:=TCLK2+1;IFTCLK2=3000000THENC2:=NOTC2;CLK2<=C2;ENDIF;ENDIF;ENDPROCESSDEVICE2;在分频部分中,利用CLK作为两个分频进程的敏感信号,通过其的变化对变量进行计数,一旦计数值达到设定的要求,则将CLK1,CLK2的状态进行翻转后输出,从而达到分频的目的。程序主体进程程序的主体进程是整个自动售货机控制系统的核心,其中包含了变量定义部分、投币统计部分、商品选择部分、找零部分以及复位部分。主体进程见附录。以下是对各个部分的介绍。变量定义部分变量定义部分的程序如下:VARIABLECNT1,CNT2:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLEVCHI:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLECHI_END:STD_LOGIC;VARIABLECHA_BEG:STD_LOGIC;VARIABLEKILL:STD_LOGIC;VARIABLEY_PRICE:STD_LOGIC_VECTOR(3DOWNTO0);变量,区别于信号量的地方有两点。第一点,对变量的赋值是立刻体现出来的,没有延迟,这也就意味着变量的定义个赋值具有实时性。第二点,变量是不可以进行进程间的通信,如果要使用变量进行进程间的通信,需要在进程中将变量的值赋给信号量,通过信号量来控制进程间的通信。变量定义部分各个变量的作用见表4.3。表4.3变量定义表变量名作用CNT1,CNT2储存当前的钱数。VCHI用以表示选择商品的种类CHI_END表示选择结束CHA_BEG开始找零信号KILL程序执行状态变量Y_PRICE储存商品价格投币统计部分投币部分,其主要功能仍旧是通过统计投币总额来实现,投币部分的流程图如图4.1所示。投币开始投币开始投入0.5元投入1元投入2.5元CNT2+5CNT1+1CNT1+2CNT2+5CNT2是否小于10CNT2-10否图4.1统计部分流程图根据流程图投币部分的主要程序如下:IFCOIN1='1'THENCNT1:=CNT1+5;IFCNT1="1010"THENCNT2:=CNT2+1;CNT1:="0000";ENDIF;ELSIFCOIN2='1'THENCNT2:=CNT2+1;ELSIFCOIN3='1'THENCNT1:=CNT1+5;CNT2:=CNT2+2;IFCNT1="1010"THENCNT2:=CNT2+1;CNT1:="0000";ENDIF;这里需要注意的一点是,对于变量的赋值,在VHDL中是采用“:=”的形式,而对于信号的赋值,是采用“<=”的形式,,这是VHDL.语言中赋值的规范。在上述程序中,投币模块的选择采用了不断累加的方式,而放弃统计投币数目再用乘法统计,其原因在于在FPGA中,乘除法只能够通过移位实现,也就是说,乘除法的乘除数都只能是2的指数。着点要求就和设计中需要乘除5和2.5相违背,故而选择不断累加的方式。在VHDL中,虽然从进程的角度上观察,进程应当顺序执行的,但是考虑实际电路特点,所有同级别的IF语句都是并发执行的,就好像是每个进程一样,相互独立,并发执行。商品选择部分在整体设计中,商品选择是确定整个程序走向的环节,若没有商品选择,则无论投币为多少,都不会产生购买动作、找零动作。区别于原理图的设计,在VHDL下设计该模块时,并不是独立于其他模块,而是和各个模块通过IF语句实现并行操作。在本设计中商品选择模块可以穿插在投币之间进行,既在投币的间隔中可以进行商品的选择,且根据实际情况的需求,在进行选择之后如果还没有开始输出商品,顾客改变了之前的选择,则仍旧可以对商品选择进行更改,商品选择的结果以最后的选择为标准。商品选择的设计流程图如图4.2所示:选择开始选择开始判断SORT的值Y_PRICE=0001Y_PRICE=0010Y_PRICE=0011Y_PRICE=0100选择结束,SELL_END=1图4.2选择部分流程图根据流程图,商品选择部分程序设计如下:ELSIFSORT/="0000"THENCHI_END:='1';CASESORTISWHEN"0001"=>VCHI:="0001";Y_PRICE:="0001";WHEN"0010"=>VCHI:="0010";Y_PRICE:="0010";WHEN"0100"=>VCHI:="0100";Y_PRICE:="0011";WHEN"1000"=>VCHI:="1000";Y_PRICE:="0100";WHENOTHERS=>NULL;ENDCASE;程序中需要注意CASE语句的用法,CASE语句在使用的时候,WHEN必须包含所有可能,如果其他可能不影响程序运行,则必须在最后加上如下语句WHENOTHERS=>NULL表示空操作。找零部分找零部分,通过VHDL实现找零部分的功能过程,相较于利用原理图的实现就在逻辑上和表达上显得清晰了许多,这便是由于VHDL的设计特点,利用VHDL语言,设计人员无需将时间过多的放在考虑硬件结构上行,这就在一定的程度上缩短了设计周期。找零部分的设计流程图4.3:找零找零开始找1元余额是否大于1元找0.5元结束是否图4.3找零部分流程图找零部分的程序如下所示:ELSIFCHA_BEG='1'THENIFKILL='1'THENCHAR1<='0';CHAR2<='0';KILL:='0';ELSIFKILL='0'THENKILL:='1';IFCNT2/="0000"THENCHAR1<='0';CHAR2<='1';CNT2:=CNT2-1;ELSEIFCNT1/="0000"THENCHAR1<='1';CHAR2<='0';CNT1:=CNT1-5;ELSEFINISH<='1';ENDIF;ENDIF;CHAR1,CHAR2分别用以控制找零信号指示灯的输出,并且该信号还在蜂鸣器部分控制蜂鸣器的鸣响(蜂鸣器控制较为简单,不作叙述。),并且找零的过程中,通过不断对CNT1,CNT2进行减操作,使得送显示的数据达到实时性的要求,可以很容易的检测到找零的过程。其中,设置KILL变量的目的就在于使得输出找零信号的指示灯和蜂鸣器以固定的频率鸣响。FINISH的作用在于表示程序此时已经结束,一旦产生FINISH信号的有效电平,则整体电路复位,程序回到初始状态,此次购买结束。复位部分复位部分工作开始于FINISH信号,一旦有效,则等待下一个时钟脉冲的到来之时,立刻复位所有变量,因此该部分的VHDL设计其实很简单。具体程序如下所示:IFFINISH='1'THENCNT1:="0000";CNT2:="0000";VCHI:="0000";CHI<="0000";CHI_END:='0';FINISH<='0';CHA_BEG:='0';CHAR1<='0';CHAR2<='0';KILL:='0';Y_PRICE:="0000";在复位部分,还有一点需要强调,便是来自外部的复位信号,设计要求中提到了设置一个复位键,单按下该复位键的时候,则意味着此时取消购买操作,此时程序应该完成的一下操作:将已经投入的硬币按照找零规则退出去,并且不允许输出饮料(实验中的表现为立刻开始找零,但输出指示灯不亮),这就要求当外部信号RESET有效的时候,CHA_BEG为“1”。程序如下所示: ELSIFRESET='1'THENCHA_BEG:='1';译码进程译码进程其实在设计中分为两个不同的进程,其中一个进程的作用是通过时钟信号,确定送入显示模块的数据,并且通过PICK输出控制数码管选择的信号DE1-DE3,具体程序如下所示:SEG3:PROCESS(CLK1)VARIABLECC1:INTEGERRANGE0TO1;BEGINIFCLK1'EVENTANDCLK1='1'THENCC1:=CC1+1;ENDIF;CASECC1ISWHEN0=>PICK<="001";DATA<=TEST1;DOT<='0';WHEN1=>PICK<="000";DATA<=TEST2;DOT<='1';ENDCASE;ENDPROCESSSEG3;程序通过检测每个时钟脉冲的到来,当程序检测到对应的时钟脉冲之时,程序将会改变CC1的值,通过CC1的值的改变确定了此时输出的数据该是高位还是地位,并且该程序还控制DOT的输出,输出为高位的时候,输出DOT有效信号。另一个进程则是译码进程,该进程原理较为简单,这里就不多做介绍,具体程序见附录中的程序代码。

实验结果图片初始状态图5.1初始状态投入0.5元硬币之后图5.2投入0.5元硬币之后投入两个0.5元及一个1元硬币之后图5.3投入两个0.5元及一个一元硬币之后投入2.5元硬币之后图5.4投入2.5元硬币之后找零动作图5.5找零动作

设计过程中遇到的问题和解决办法程序设计上的时序问题在这次设计中,常常能够遇到的问题就是时序上的问题,在设计VHDL过程伊始,设计所采取的的方式为分模块设计然后封装,通过模块间信号的传递控制模块的运行,但是经过检测后发现,这样做容易使得某个受到两个不同信号控制的进程在两个信号发生改变的间隔,或者两个信号同事发生改变时产生不可控制的状态变化,从而影响了整体设计的时序。经过分析对比并进行多次试验后,选取了最优的解决办法,既在单独的程序程序中实现整个设计的编写,将容易产生时序冲突的进程,通过状态变量分割开来,使得在一个相应的时间间隔内,影响程序运行的状态变量只有一个,从而解决了这一问题。按键消抖问题按键消抖问题一直以来就是FPGA设计上所逃不过的问题,这个问题一直有一个比较难于抉择的地方就是扫描信号一旦选择频率太高,消抖就没有意义了,要是选择扫描频率太低,则会将正确的按键识别为抖动信号[10]。因此,在此次的原理图设计中,按键消抖功能的实现采用了74162计数芯片,在实现消抖的同时完成计数功能,具体实现请见原理图设计的投币模块。而对于VHDL语言上的消抖,则采用了1Hz和100Hz的时钟脉冲作为主要进程的敏感信号,既通过利用100Hz时钟对1Hz时钟进行扫描,满足条件之后才开始执行主进程。这样的设计解决了在VHDL上的消抖问题。乘除法问题正如之前所阐述的那样,在VHDL设计中,因为乘除法只能够乘除2的指数,这就导致了原先设想通过计数各个硬币的数量然后再通过乘法求取总额的想法由于硬件原因无法实现。经过了多次的实验和仿真,最后确定了另一种累计钱币数目的办法,既通过分别统计每类钱币的总额,然后对其进行累加处理,这样做的好处首先便体现在了实时性上,由于加法器是逻辑电路,其延时较少,再设计结果上体现便是提高了系统的实时性。其次,由于加法电路逻辑简单,设计之后增强了程序的可读性。找零模式问题找零部分的设计,作为本设计中最重要的部分,该部分的设计一直是整个课题的重点和难点。设计最初,找零部分所采取的方法是通过统计已经找零的总数和输入硬币总额,并将其对比之后判断找零是否开始继续继续进行。在原理图中,便是通过这种方法实现。但是对于VHDL的设计,如果采用这样的方法,无形中则加大了系统的工作量,并且因为增加了信号量的处理,从而是系统在时序上无法满足实时性的要求,故而在VHDL的设计中,放弃了该方法,而去寻找新的方式。经过多次试验和考虑之后,设计最终采用了直接扣除对的方式,之所以采用这种方式的原因也是在将程序从分模块设计改变成为整体设计之后,这样就可以直接对变量进行更改,而不是使用信号,使得整个系统条理性更加清楚,实时性也得到了提高。

对设计不足之处的提出和展望设计部分的完成,经过试验之后达到了预先的要求,但是通过学习和联系实际情况,本设计的最终结果仍然有改进的可能,但是由于时间有限及个人能力的限制,这些功能并没有在设计中得到实现。对于商品价格是在程序中预先设定的,但是考虑实际生活中,应该要可以由外部重新设计,可以通过设计键盘扫描电路来设计该功能,从而实现商品价格的后台定义。设计功能中,只能提供一次购买,但是实际使用中,可能会涉及到多次购买,这就使得设计可以有如下改进,设置退币按钮,只有当顾客自己选择退币的时候才开始退币,否则购买行为一直不会停止。

参考文献何宾主编.EDA原理及VDHL实现.第1版.北京.清华大学出版社.2011马建国,孟宪元主编.FPGA现代数字系统设计.第一版.北京.清华大学出版社.2010陶佰瑞,李静辉,苗凤娟,马丽主编.数字集成电路与EDA设计基础教程.第一版.哈尔滨工程大学出版社.2012黄沛昱主编.EDA技术与VDHL设计实验指导.第一版.西安电子科技大学出版社.2012李俊主编.EDA技术与VDHL编程.第一版.电子工业出版社.2012ArmstrongJamesR.VHDLdesignrepresentionandsynthesis.ChinaMachinePress.2003Brown,StephenD.FundamentalsofdigitallogicwithVHDLdesign.McGraw-HillHigherEducation.2005张亦华,延明主编.数字电路EDA设计入门.第一版.北京邮电大学出版社.2003周金富主编.VHDL与EDA技术入门速成.第一版.人民邮电出版社.2009崔葛瑾.基于FPGA对的数字电路系统设计.第一版.西安电子科技大学出版社.2008

致谢 从接到这个课题开始到现在论文的完成,经历了将近五个月的时间,在这段时间里,设计和论文的撰写遇到了各种各样的困难和阻碍,但都在同学和老师的倾力帮助下逐步的被解决了。在这里,我首先要感谢我的指导老师——李晓丽老师,在这五个月里,李老师给我的启发和帮助数不胜数,感谢她的无私帮助,没有老师的帮助本次设计绝对不可能获得现在这样的结果。另外,我需要感谢的便是本次设计和论文撰写的过程中使用到的各类书籍、论文的作者,若不是在他们研究的基础上进行设计,我的整个设计几乎就没有可能完成。我还要感谢我身边的同学和朋友,他们在我进行设计研究和撰写论文的过程中,给了我很大的帮助。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!

附录VHDL程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSELLERISPORT(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;ARCHITECTUREAUTOOFSELLERISSIGNALCLK1,CLK2:STD_LOGIC;SIGNALFINISH:STD_LOGIC;SIGNALTEST1,TEST2:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALDATA:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALVKILL:STD_LOGIC;BEGINACOM<='1';DEVICE1:PROCESS(CLK)VARIABLETCLK1:INTEGERRANGE0TO50000;VARIABLEC1:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENTCLK1:=TCLK1+1;IFTCLK1=50000THENC1:=NOTC1;CLK1<=C1;ENDIF;ENDIF;ENDPROCESSDEVICE1;DEVICE2:PROCESS(CLK)VARIABLETCLK2:INTEGERRANGE0TO3000000;VARIABLEC2:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENTCLK2:=TCLK2+1;IFTCLK2=3000000THENC2:=NOTC2;CLK2<=C2;ENDIF;ENDIF;ENDPROCESSDEVICE2;PRO:PROCESS(RESET,CLK1)VARIABLECNT1,CNT2:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLEVCHI:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLECHI_END:STD_LOGIC;VARIABLECHA_BEG:STD_LOGIC;VARIABLEKILL:STD_LOGIC;VARIABLEY_PRICE:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFFINISH='1'THENCNT1:="0000";CNT2:="0000";VCHI:="0000";CHI<="0000";CHI_END:='0';FINISH<='0';CHA_BEG:='0';CHAR1<='0';CHAR2<='0';KILL:='0';Y_PRICE:="0000";ELSIFRESET='1'THENCHA_BEG:='1';ELSIFCLK2'EVENTANDCLK2='1'THENIFCHA_BEG='0'THENIFCOIN1='1'THENCNT1:=CNT1+5;IFCNT1="1010"THENCNT2:=CNT2+1;CNT1:="0000";ENDIF;ELSIFCOIN2='1'THENCNT2:=CNT2+1;ELSIFCOIN3='1'THENCNT1:=CNT1+5;CNT2:=CNT2+2;IFCNT1="1010"THENCNT2:=CNT2+1;CNT1:="0000";ENDIF;ELSIFSORT/="0000"THENCHI_END:='1';CASESORTISWHEN"0001"=>VCHI:="0001";Y_PRICE:="0001";WHEN"0010"=>VCHI:="0010";Y_PRICE:="0010";WHEN"0100"=>VCHI:="0100";Y_PRICE:="0011";WHEN"1000"=>VCHI:="1000";Y_PRICE:="0100";WHENOTHERS=>NULL;ENDCASE;ELSIFCNT2>=Y_PRICEANDCHI_END='1'ANDCHA_BEG='0'THENCHI<=VCHI;CNT2:=CNT2-Y_PRICE;CHA_BEG:='1';ENDIF;ELSIFCHA_BEG='1'THENIFKILL='1'THENCHAR1<='0';CHAR2<='0';KILL:='0';ELSIFKILL='0'THENKILL:='1';IFCNT2/="0000"THENCHAR1<='0';CHAR2<='1';CNT2:=CNT2-1;ELSEIFCNT1/="0000"THENCHAR1<='1';CHAR2<='0';CNT1:=CNT1-5;ELSEFINISH<='1';ENDIF;ENDIF;ENDIF;ENDIF;ENDIF;TEST1<=CNT1;TEST2<=CNT2;VKILL<=KILL;ENDPROCESSPRO;BUZZER:PROCESS(CLK1)BEGINIFVKILL='1'THENBUZ<=CLK1;ELSEBUZ<='0';ENDIF;ENDPROCESSBUZZER;SEG3:PROCESS(CLK1)VARIABLECC1:INTEGERRANGE0TO1;BEGINIFCLK1'EVENTANDCLK1='1'THENCC1:=CC1+1;ENDIF;CASECC1ISWHEN0=>PICK<="001";DATA<=TEST1;DOT<='0';WHEN1=>PICK<="000";DATA<=TEST2;DOT<='1';ENDCASE;ENDPROCESSSEG3;SEG4:PROCESS(DATA)BEGINCASEDATAISWHEN"0000"=>SEG<="1111110";WHEN"0001"=>SEG<="0110000";WHEN"0010"=>SEG<="1101101";WHEN"0011"=>SEG<="1111001";WHEN"0100"=>SEG<="0110011";WHEN"0101"=>SEG<="1011011";WHEN"0110"=>SEG<="1011111";WHEN"0111"=>SEG<="1110000";WHEN"1000"=>SEG<="1111111";WHEN"1001"=>SEG<="1111011";WHENOTHERS=>NULL;ENDCASE;ENDPROCESSSEG4;ENDAUTO;原理图程序:翻译文献及原文BuildingProgrammableAutomationControllerswithLabVIEWFPGAOverviewProgrammableAutomationControllers(PACs)aregainingacceptancewithintheindustrialcontrolmarketastheidealsolutionforapplicationsthatrequirehighlyintegratedanaloganddigitalI/O,floating-pointprocessing,andseamlessconnectivitytomultipleprocessingnodes.NationalInstrumentsoffersavarietyofPACsolutionspoweredbyonecommonsoftwaredevelopmentenvironment,NILabVIEW.WithLabVIEW,youcanbuildcustomI/Ointerfacesforindustrialapplicationsusingadd-onsoftware,suchastheNILabVIEWFPGAModule.WiththeLabVIEWFPGAModuleandreconfigurableI/O(RIO)hardware,NationalInstrumentsdeliversanintuitive,accessiblesolutionforincorporatingtheflexibilityandcustomizabilityofFPGAtechnologyintoindustrialPACsystems.YoucandefinethelogicembeddedinFPGAchipsacrossthefamilyofRIOhardwaretargetswithoutknowinglow-levelhardwaredescriptionlanguages(HDLs)orboard-levelhardwaredesigndetails,aswellasquicklydefinehardwareforultrahigh-speedcontrol,customizedtimingandsynchronization,low-levelsignalprocessing,andcustomI/Owithanalog,digital,andcounterswithinasingledevice.YoualsocanintegrateyourcustomNIRIOhardwarewithimageacquisitionandanalysis,motioncontrol,andindustrialprotocols,suchasCANandRS232,torapidlyprototypeandimplementacompletePACsystem.TableofContentsIntroductionNIRIOHardwareforPACsBuildingPACswithLabVIEWandtheLabVIEWFPGAModuleFPGADevelopmentFlowUsingNISoftMotiontoCreateCustomMotionControllersApplicationsConclusionIntroductionYoucanusegraphicalprogramminginLabVIEWandtheLabVIEWFPGAModuletoconfiguretheFPGA(field-programmablegatearray)onNIRIOdevices.RIOtechnology,themergingofLabVIEWgraphicalprogrammingwithFPGAsonNIRIOhardware,providesaflexibleplatformforcreatingsophisticatedmeasurementandcontrolsystemsthatyoucouldpreviouslycreateonlywithcustom-designedhardware.AnFPGAisachipthatconsistsofmanyunconfiguredlogicgates.Unlikethefixed,vendor-definedfunctionalityofanASIC(application-specificintegratedcircuit)chip,youcanconfigureandreconfigurethelogiconFPGAsforyourspecificapplication.FPGAsareusedinapplicationswhereeitherthecostofdevelopingandfabricatinganASICisprohibitive,orthehardwaremustbereconfiguredafterbeingplacedintoservice.Theflexible,software-programmablearchitectureofFPGAsofferbenefitssuchashigh-performanceexecutionofcustomalgorithms,precisetimingandsynchronization,rapiddecisionmaking,andsimultaneousexecutionofparalleltasks.Today,FPGAsappearinsuchdevicesasinstruments,consumerelectronics,automobiles,aircraft,copymachines,andapplication-specificcomputerhardware.WhileFPGAsareoftenusedinindustrialcontrolproducts,FPGAfunctionalityhasnotpreviouslybeenmadeaccessibletoindustrialcontrolengineers.DefiningFPGAshashistoricallyrequiredexpertiseusingHDLprogrammingorcomplexdesigntoolsusedmorebyhardwaredesignengineersthanbycontrolengineers.WiththeLabVIEWFPGAModuleandNIRIOhardware,younowcanuseLabVIEW,ahigh-levelgraphicaldevelopmentenvironmentdesignedspecificallyformeasurementandcontrolapplications,tocreatePACsthathavethecustomization,flexibility,andhigh-performanceofFPGAs.BecausetheLabVIEWFPGAModuleconfigurescustomcircuitryinhardware,yoursystemcanprocessandgeneratesynchronizedanaloganddigitalsignalsrapidlyanddeterministically.Figure1illustratesmanyoftheNIRIOdevicesthatyoucanconfigureusingtheLabVIEWFPGAModule.Figure1.LabVIEWFPGAVIBlockDiagramandRIOHardwarePlatformsNIRIOHardwareforPACsHistorically,programmingFPGAshasbeenlimitedtoengineerswhohavein-depthknowledgeofVHDLorotherlow-leveldesigntools,whichrequireovercomingaverysteeplearningcurve.WiththeLabVIEWFPGAModule,NIhasopenedFPGAtechnologytoabroadersetofengineerswhocannowdefineFPGAlogicusingLabVIEWgraphicaldevelopment.Measurementandcontrolengineerscanfocusprimarilyontheirtestandcontrolapplication,wheretheirexpertiselies,ratherthanthelow-levelsemanticsoftransferringlogicintothecellsofthechip.TheLabVIEWFPGAModulemodelworksbecauseofthetightintegrationbetweentheLabVIEWFPGAModuleandthecommercialoff-the-shelf(COTS)hardwarearchitectureoftheFPGAandsurroundingI/Ocomponents.NationalInstrumentsPACsprovidemodular,off-the-shelfplatformsforyourindustrialcontrolapplications.WiththeimplementationofRIOtechnologyonPCI,PXI,andCompactVisionSystemplatformsandtheintroductionofRIO-basedCompactRIO,engineersnowhavethebenefitsofaCOTSplatformwiththehigh-performance,flexibility,andcustomizationbenefitsofFPGAsattheirdisposaltobuildPACs.NationalInstrumentsPCIandPXIRSeriesplug-indevicesprovideanaloganddigitaldataacquisitionandcontrolforhigh-performance,user-configurabletimingandsynchronization,aswellasonboarddecisionmakingonasingledevice.Usingtheseoff-the-shelfdevices,youcanextendyourNIPXIorPCIindustrialcontrolsystemtoincludehigh-speeddiscreteandanalogcontrol,customsensorinterfaces,andprecisetimingandcontrol.NICompactRIO,aplatformcenteredonRIOtechnology,providesasmall,industriallyrugged,modularPACplatformthatgivesyouhigh-performanceI/Oandunprecedentedflexibilityinsystemtiming.YoucanuseNICompactRIOtobuildanembeddedsystemforapplicationssuchasin-vehicledataacquisition,mobileNVHtesting,andembeddedmachinecontrolsystems.TheruggedNICompactRIOsystemisindustriallyratedandcertified,anditisdesignedforgreaterthan50gofshockatatemperaturerangeof-40to70°C.NICompactVisionSystemisaruggedmachinevisionpackagethatwithstandstheharshenvironmentscommoninrobotics,automatedtest,andindustrialinspectionsystems.NICVS-145xdevicesofferunprecedentedI/Ocapabilitiesandnetworkconnectivityfordistributedmachinevisionapplications.NICVS-145xsystemsuseIEEE1394(FireWire)technology,compatiblewithmorethan40cameraswithawiderangeoffunctionality,performance,andprice.NICVS-1455andNICVS-1456devicescontainconfigurableFPGAssoyoucanimplementcustomcounters,timing,ormotorcontrolinyourmachinevisionapplic

温馨提示

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

评论

0/150

提交评论