基于VHDL自动售货机的设计与实现_第1页
基于VHDL自动售货机的设计与实现_第2页
基于VHDL自动售货机的设计与实现_第3页
基于VHDL自动售货机的设计与实现_第4页
基于VHDL自动售货机的设计与实现_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、自动售货机的设计与实现自动售货机的设计与实现电信专业学生: 指导老师: 摘要:本文介绍了VHDL的特点和应用,以自动售货机为例,详细说明了其实现过程。本系统使用VHDL语言编写,用状态基来实现各功能,使用MAXPLUS进行仿真,模拟各模块的实现。本文详细介绍如何运用VHDL语言及MAXPLUS进行仿真,本文设计的自动售货机实现了选择货物,投币,找零,显示,多次交易,在一次购买中选择多个货物等自动售货机的基本功能。本文给出了各个模块的源程序、各模块的连接图以及各个模块的仿真图,并做出了详细的分析。关键词:VHDL语言,MAXPLUS,自动售货机Design and implementation

2、of vending machineElectronics and Information Science and Technology Candidate:JiangHuiAdvisor:CaiJianhuaAbstract: This article introduces the characteristics and application of VHDL, with a example of designing vending machines, describes detailedly the implementation process. The system uses the V

3、HDL language, realizing every function uses state machines, applying MAXPLUS to simulate in order to realize the function every modules.This article describes the use of VHDL language and MAXPLUS simulation, to achieve the vending machine's basic functions , as choose good, coin, give change, bu

4、y good more than one time, choose more than one good in one time, display, and so on. This article gives the original program of every modules and the simulating diagram of every modules and the combination of all of the modules, gives detail analyse of every simulating diagram as well.Keywords:VHDL

5、 language,MAXPLUS,Vending machine引言随着科技的发展和社会的进步,自动化商业机械有了越来越广泛的应用,自动售货机作为自动化商业机械的代表被广泛用于公共场所自动售货,给人们的生活带来了极大的方便。特别在发达国家,自动售货机已经十分普及,自动售货机可售出各种成型包装小商品,各种袋装,盒装,软瓶装等小商品。因其无需专人值守而可以每天24小时售货,被称为“无人小超市”。在我国,由于多种原因,自动售货机的市场推广缓慢,处于培育阶段,但可以预见,这种方便快捷的服务形式因其适合现代生活快节奏的需要,在不久的将来必会获得大众的喜爱。随着商品市场的不断繁荣,自动售货机和自动服务设

6、施必将逐步得到广泛的应用。本文设计研究自动售货机的主要功能模块,主要包括货币处理模块、余额计算模块、显示模块,延时和时控模块,由于条件上的限制,对投币模块中的货币检测未进行处理。相应的主要功能有选择货物,多次购买,出货找零,显示,延时和时控功能。本文是通过使用VHDL语言,基于FPGA可编程芯片,并通过使用MAXPLUS软件进行程序设计,模拟仿真,功能验证,以更好的来理解和掌握自动售货机控制系统的工作原理和设计方法,以及学习和掌握基于EDA的电子产品设计方法,进一步加深对VHDL语言以及MAXPLUS软件、FPGA可编程芯片的认识与了解。更深入的学习EDA技术,更好地掌握本专业知识。1 本论概

7、述本文设计的自动售货机是基于VHDL1(Very High Speed Integrated Circuit Hard-ware Description Language,超高速集成电路硬件描述语言)语言,使用MAXPLUS软件进行模拟仿真,在FPGA(Field Programmable Gate Arry,现场可编程门阵列)可编程芯片上实现的一款EDA(Electronic Design Automation,电子设计自动化)技术的产品。1.1系统的工作原理本文设计的自动售货机有两种饮料可以出售,售价分别为2元和3元。售货机可以识别1元,5元两种货币。如果投入金额总值等于或超过售价就可以将

8、饮料放出,并具有相应的找零钱功能。(1)用户可多次选择购买的饮料种类,某次饮料种类选定后等待投币。如等待时间超过10秒钟,则认为用户放弃选购,售货机自动回到等待状态,等待新的交易。若在10秒内,再次选中饮料,则再次等待。(2)每次交易完成,售货机自动回到等待状态,等待新的交易。(3)用按键模拟投入1元,5元两种货币,可连续投币,同时显示投入的金额和还应投入的金额。若某次投币后金额不足,且一定时限内不再投币(10秒左右),则交易失败,并退币,显示退还金额。(4)具有指示电路,分别指示购买成功、交易取消(交易失败)和找零。(5)相应显示有延时和时控功能。1.2 VHDL语言介绍VHDL2(Very

9、 High Speed Integrated Circuit Hard-ware Description Language)是指超高速集成电路硬件描述语言。VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式,以及描述风格与句法,类似于一般的计算机一个电路模块或一高级语言,如C语言。VHDL的程序结构特点是,将一项工程设计或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分,即端口)和内部(或称不可视部分)。在对一个设计实体定义了外部界面后,一旦其内部开发完成,其他的设计就可以直接调用这个实体。这种将设计实体分成内外

10、部分的概念是VHDL系统设计的基本点。1.2.1 VHDL语言的发展背景硬件描述语言的发展至今已经有几十年的历史,并已成功应用到系统的仿真、验证和设计综合等方面。其中比较著名的的有VHDL语言、AHDL语言、Verilog HDL语言等。而在七八十年代初期VHDL语言是为美国国防部工作的。它是以ADA语言为根源,就像将被看到的整体结构的VHDL和其他的VHDL报表。1986年,有人提议VHDL语言作为IEEE标准。它经历了一些修改意见和修改,直至1987年12月获得通过,成为IEEE 1076至1987标准。它的出现为电子设计自动化的普及和推广奠定了坚实的基础。之后IEEE对87版本进行了修订

11、,于1933年推出了较为完善的93版本(被定为ANSI/IEEE std 1076-1993标准),使得VHDL语言的编程更加灵活方便。此后,越来越多的人开始使用VHDL语言进行数字电路系统的设计。而VHDL语言有不同于软件编程语言,在编程结构和规范上有自己的特点,在此,本文就从简单介绍VHDL语言基础开始。1.2.2 VHDL语言的基本结构 一个完整的VHDL3语言程序通常包括实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)5个部分。前4种是可以分别编译的源设计单元。下面分别介绍:实体:实体是用于描述

12、所设计电路系统的外部接口信号,系统的输入输出端口及属性都是在实体中定义的。一个实体是设计中最基本的。最上层水平的设计是最高层的实体。如果设计分层次,那么最高层的描述将有低层描述的说明附在它里面。构造体:构造体用于描述系统内部的结构和行为,系统要实现的功能都是在构造体内用语言进行描述的。所有实体可以有一个构造体的说明来模拟。该构造体描述的行为实体。一个单一的实体可以有多个构造体。一个构造体可能是行为而另一个可能是一个结构描述的设计。配置:配置用于从库中选取所需单元来组成系统设计的不同版本。配置声明是用来约束一个组件实例的一双实体架构。一个配置可以被视为像一个零件清单进行设计。它描述的使用的每一个

13、实体的行为,就像零件列表说明哪一部分用于每一部分的设计。包集合:包集合存放各种设计模块都能共享的数据类型、常数和子程序等。包集合是一个收集常用数据类型和子程序中使用的设计。想想包含使用的工具建立的设计的一个工具箱作为一个包。库:库存放已经编译的实体、构造体、包集合和配置。库可由用户生成或者是由ASIC芯片制造商提供,以便在设计中为大家共享。这种功能可以通过特定语句来实现。除了以上介绍的各种术语,其它术语还有:驱动程序:这是一个信号上的一个源。如果一个信号有两个来源,那么当两个来源是由两个驱动程序来起作用的。总线:这个词,“巴士”通常使我想起一组信号或某个特定的通信方式,用于设计的硬件。在VHD

14、L语言,总线是一种特殊的信号,表明可能由驱动程序来完成。属性:一个关于VHDL对象连接到VHDL的物体或预先确定的数据的属性数据。例如,电流驱动能力的一个缓冲区或最高工作温度的装置。通用:泛指是VHDL语言传递信息实体参数的任期。例如,如果一个实体是一个门级模型的上升和下降延迟,上升和下降延误的值才能通过成为实体与仿制。进程:一个进程是执行的VHDL中的一个基本单位。一切行动,是在模拟VHDL描述分为单个或多个进程。在VHDL语言程序中,最重要的就是实体和构造体部分。它们是一个具体设计的核心。如果说实体是系统和外部交流的桥梁,那么构造体就是处理内外交流的信号加工厂。在构造体中各种信号协调工作,

15、最后得到所需的输出,传送到输出端口和外部进行交流。下面具体说明实体和构造体。1.2.3 实体一个VHDL实体指定的实体名称,实体的端口,以及实体相关的信息。所有设计创建使用一个或多个实体。让我们来看看一个简单的实体例子:ENTITY mux ISPORT ( a, b, c, d : IN BIT;s0, s1 : IN BIT; x : OUT BIT);END mux;关键字“实体”是开始一个实体声明的标志,在整本文的说明中,标准封装中关键字的语言和类型全部用大写字母来显示。例如,在前面的示例中,关键字是ENTITY, IS, PORT, IN, INOUT,,等等。如果标准型是少量的。用

16、户创建像复用一样的姓名,在上面的例子中,将以小写显示。实体的名称是多路复用,该实体有7个端口和端口条款。6个端口,一个是输入端口,另一个是输出端口。4个数据输入端口(a, b, c, d)是位宽类型。这两个多路选择输入是s0 和 s1,也都是位宽类型。输出端口也是位宽类型。实体描述外界的接口。它规定了一些端口,端口方向和端口的类型。比起这里显示的信息,实体可以存放更多的信息,但是这为我们提供了建立更复杂例子的基础。1.2.4 构造体实体是描述接口的VHDL模型。构造体描述了实体的基本功能,并包含了模拟实体行为的陈述。构造体始终是涉及实体和描述实体的行为。计数设备的构造体更早的像这样描述:ARC

17、HITECTURE dataflow OF mux ISSIGNAL select : INTEGER;BEGINselect <= 0 WHEN s0 = 0 AND s1 = 0 ELSE1 WHEN s0 = 1 AND s1= 0 ELSE2 WHEN s0 = 0 AND s1 = 1 ELSE3;x <= a AFTER 0.5 NS WHEN select = 0 ELSEb AFTER 0.5 NS WHENselect = 1 ELSEc AFTER 0.5 NS WHEN select = 2 ELSEd AFTER 0.5 NS;END dataflow;关键

18、字ARCHITECTURE本声明描述了一个实体的构架。该构造体的名字是数据流。该实体的构架是一种被称为多路复用的描述。实体和结构连接之间的原因是一个实体可以有多个构造体来描述实体的行为。例如,一个构造可能是一个行为描述,另一个可能是结构性的描述。在关键字ARCHITECTURE和BEGIN的文字区域是本地信号和供日后使用的组件。在这个例子中的信号选择被宣布为当地的信号。构造体的申明区域是由关键字BEGIN开始的。所有在BEGIN和END netlist statement之间的申明被称为并列的申明,因为所有的申明同时执行。1.3 MAX+PLUS的介绍 Max+plus是Altera公司提供的

19、FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。Max+plus界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在Max+plus上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。1.3.1 Max+plus开发系统的特点开放的界面:Max+plus支持与Cadence,Exemplarlogic,Mentor Graphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。与结构无关:Max+plus系统的核心Complie

20、r支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。完全集成化:Max+plus的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。丰富的设计库:Max+plus提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function)。模块化工具:设计人员可以从各种设计输入、处理和较验选项中进行选择从而使设计环境用户

21、化。硬件描述语言(HDL):Max+plus软件支持各种HDL设计输入选项,包括VHDL、Verilog HDL和Altera自己的硬件描述语言AHDL。Opencore特征:Max+plus软件具有开放核的特点,允许设计人员添加自己认为有价值的宏函数。1.3.2 Max+plus 功能简介原理图输入(Graphic Editor):MAX+PLUSII软件具有图形输入能力,用户可以方便的使用图形编辑器输入电路图,图中的元器件可以调用元件库中元器件,除调用库中的元件以外,还可以调用该软件中的符号功能形成的功能块。硬件描述语言输入(Text Editor):MAX+PLUSII软件中有一个集成的

22、文本编辑器,该编辑器支持VHDL,AHDL和Verilog硬件描述语言的输入,同时还有一个语言模板使输入程序语言更加方便,该软件可以对这些程序语言进行编译并形成可以下载配置数据。波形编辑器(Waveform Editor):在进行逻辑电路的行为仿真时,需要在所设计电路的输入端加入一定的波形,波形编辑器可以生成和编辑仿真用的波形(*.SCF文件),使用该编辑器的工具条可以容易方便的生成波形和编辑波形使用时只要将欲输入波形的时间段用鼠标涂黑,然后选择工具条中的按钮,例如,如果要某一时间段为高电平,只需选择按钮”1”。还可以使用输入的波形(*.WDF文件)经过编译生成逻辑功能块,相当于已知一个芯片的

23、输入输出波形,但不知是何种芯片,使用该软件功能可以解决这个问题,设计出一个输入和输出波形相同CPLD电路。管脚(底层)编辑窗口(Floorplan Editor):该窗口用于将已设计好逻辑电路的输入输出节点赋予实际芯片的引脚,通过鼠标的拖拉,方便的定义管脚的功能。自动错误定位:在编译源文件的过程中,若源文件有错误,Max+Plus2软件可以自动指出错误类型和错误所在的位置。逻辑综合与适配:该软件在编译过程中,通过逻辑综合 (Logic Synthesizer)和适配(Fitter) 模块,可以把最简单的逻辑表达式自动的吻合在合适的器件中。设计规则检查:选取CompileProcessingDe

24、sign Doctor菜单,将调出规则检查医生,该医生可以按照三种规则中的一个规则检查各个设计文件,以保证设计的可靠性。一旦选择该菜单,在编译窗口将显示出医生,用鼠标点击医生,该医生可以告诉你程序文件的健康情况。多器件划分(Partitioner):如果设计不能完全装入一个器件,编译器中的多器件划分模块,可自动的将一个设计分成几个部分并分别装入几个器件中,并保证器件之间的连线最少。编程文件的产生: 编译器中的装配程序(Assembler)将编译好的程序创建一个或多个编程目标文件:EPROM配置文件(*.POF)例如,MAX7000S系列SRAM文件(*.SCF)例如,FLEX8000系列的配置

25、芯片EPROMJEDEC文件(*.JED)十六进制文件(*.HEX)文本文件(*.TTF)串行BIT流文件(*.SBF)仿真:当设计文件被编译好,并在波形编辑器中将输入波形编辑完毕后,就可以进行行为仿真了,通过仿真可以检验设计的逻辑关系是否准确。分析时间(Analyze Timing):该功能可以分析各个信号到输出端的时间延迟,可以给出延迟矩阵和最高工作频率。器件编程:当设计全部完成后,就可以将形成的目标文件下载到芯片中,实际验证设计的准确性。1.3.3 Max+plus设计过程设计流程:使用Max+plus软件设计流程由以下几部分组成。如图1所示: 图1 开发流程图(1)、设计输入:可以采用

26、原理图输入、HDL语言描述、EDIF网表输入及波形输入等几种方式。(2)、编译:先根据设计要求设定编译参数和编译策略,如器件的选择、逻辑综合方式的选择等。然后根据设定的参数和策略对设计项目进行网表提取、逻辑综合和器件适配,并产生报告文件、延时信息文件及编程文件,供分析仿真和编程使用。(3)、仿真:仿真包括功能仿真、时序仿真和定时分析,可以利用软件的仿真功能来验证设计项目的逻辑功能是否正确。(4)、编程与验证:用经过仿真确认后的编程文件通过编程器(Programmer)将设计下载到实际芯片中,最后测试芯片在系统中的实际运行性能。在设计过程中,如果出现错误,则需重新回到设计输入阶段,改正错误或调整

27、电路后重复上述过程。设计步骤:(1)输入项目文件名(File/Project/Name)(2)输入源文件(图形、VHDL、AHDL、Verlog和波形输入方式)(Max+plus/graphic Editor;Max+plus/Text Editor;Max+plus/Waveform Editor)(3)指定CPLD型号(Assign/Device)(4)设置管脚、下载方式和逻辑综合的方式(Assign/Global Project Device Option,Assign/Global Logic Synthesis)(5)保存并检查源文件(File/project/Save &

28、Check)(6)指定管脚(Max+plus/Floorplan Editor)(7)保存和编译源文件(File/project/Save & Compile)(8)生成波形文件(Max+plus/Waveform Editor)(9)仿真(Max+plus/Simulator)(10)下载配置(Max+plus/Programmer)常用菜单简介:该软件的菜单主要有:MAX+PLUS菜单(MAX+PLUS)、文件菜单(File),该文件菜单随所选功能的不同而不同、模板菜单(Templates),该模板使编写VHDL和AHDL设计文件更容易和方便、指定菜单(Assign)、选择菜单(O

29、ption)。该软件的菜单繁多,要想都学会有一定的难度,主要原因是资料问题。但是常用的菜单会使用还是可能的。如何获得帮助:最直接的帮助来自于Max+plus的Help菜单。若需要某个特定项目的帮助信息,可以同时按<Shift>+<F1>键或者选用工具栏中的快速帮助按钮“”。此时,鼠标变为带问号的箭头,点击“特定的项目”就可弹出相应的帮助信息。这里的“特定项目”,可以包含某个器件的图形、文本编辑中的单词,菜单选项,甚至可以是一个弹出的窗口。2 自动售货机的设计2.1 设计说明 本文设计的自动售货机4可销售牛奶(2元)、果汁(3元)两种商品;售货机可识别1元和5元两种货币,

30、在一次购买过程中,可购买一个或多个商品,系统会自动计算所需钱数和找零钱数并自动找零。另外有3个发光二极管、6个LCD数码管。3个发光二极管分别用来显示交易成功、交易失败、正在找零。6个LCD数码管:2个用来显示所需金额,2个用来显示已付金额,2个用来显示找零数。2.1.1 流程说明本文设计的自动售货机当通电时,表示一次投币销售过程的开始。顾客选择一种商品或多种则进入投币状态。若不投币,则自动返回初始状态。投币后,系统自动计算所投钱数。若投币够,则出货找零。若投币不够,等待10秒后,顾客没有继续投币,则退币并回到初始状态。本系统的投币销售流程图如图2所示:图2 流程图2.1.2 各模块说明本文设

31、计的自动售货机总体分三个模块5:总控模块、二进制译码模块、BCD码译码模块。其它功能本文不予讨论。总控模块:总控模块是本系统最重要的模块,该模块大体有5个输入端口和6个输出端口。其输入端口包括 clk、coin1(投入一元货币)、coin5(投入5元货币)、price2(选择2元的商品)、price3(选择3元的商品),输出端口有paid(已投入多少钱)、needed(还需要多少钱)、moneyout(找零)、success(灯亮表示交易成功)、failure(灯亮表示交易失败)、showmoneyout(灯亮表示正在找零)。该模块实现了本系统最重要的交易过程,包括选择商品、投入货币、计算货币

32、,找零出货等。二进制译码模块:该模块有一个输入端和两个输出端。输入端b是一个4位的二进制数,输出端bcd0、bcd1,是两个4位的BCD码。该模块的主要功能是实现将主控模块输出的二进制数(paid、needed、moneyout)转换成BCD码,以便输出到七段显示数码器上而显示出来。该模块的原理是将一个4位的二进制数转换成2个4位的BCD码,分别为高4位和低4位。BCD码译码模块:该模块有一个输入端和一个输出端。输入端d是一个4位的BCD码,输出端q是一个7位数,输出连接到一个LCD数码管以显示出来。2.1.3 各模块的连接各模块的连接如图3所示:图3 硬件模块连接图如图3所示,左边的5个端口

33、为输入端口,连接的模块是主控模块。中间的3个输出端口连接3个LED指示灯,分别指示交易成功、交易失败、需要找零。中间的3个模块是二进制译码模块,分别将主控模块输出的paid、needed、moneyout转换成两个4位的BCD码。最右边的6个模块是BCD译码模块,输出端口连接6个LCD七段显示数码管。2.2 状态之间的转换 本文所设计的自动售货机进程可分为7个状态6:a,b,c,d,e,f,g。a为开始状态,当有键按下时即进入b状态(投币状态)。当等待十秒还没投币时即进入e状态,e状态返回a状态。当有货币投入,但投币不够时,即进入c状态(继续投币),若等待十秒不投,即进入g状态(退钱),若投币

34、但还不够,则继续投币。当投币够了,即进入d状态(出货找零)。之后进入f状态(延时)后返回a状态。3 仿真时序图3.1 主控模块的仿真图4 主控模块只选一次但不投币的仿真 如图4所示:选择3元商品,不再投币,所需货币显示3元,10秒后,failure为高电平,表示交易失败,延时显示后,回到初始状态。源程序见附录的主控模块。图5 主控模块多次选择但不投币的仿真如图5所示:选择3元商品后,在10秒内,再次选择2元商品;此后,不再投币,所需货币先为3元,后为5元,10秒后,failure出现高电平,表示交易失败,延时显示后,回到初始状态。源程序见附录的主控模块。图6 主控模块交易成功但不找零的仿真如图

35、6所示:选择3元商品后,在10秒内,再次选择2元商品;所需货币先是3元,后为5元,此后,在一定时限内投入5元钱,所需货币为0元,success为高电平,表示交易成功,不找零,延时显示后,回到初始状态。源程序见附录的主控模块。图7 主控模块交易成功且找零的仿真如图7所示:选择3元商品后,在10秒内,再次选择2元商品;所需货币先为3元,后为5元,此后,在一定时限内先后投入1元和5元,所需货币分别变为4元,0元,success为高电平,表示交易成功。showmoneyout为高电平,表示要找零,moneyout显示为1元,表示找零1元。延时显示,其后回到初始状态。源程序见附录的主控模块。图8 主控模

36、块连续交易成功的仿真如图8所示:先分别选择3元和2元的商品,所需货币先后显示3元和5元,再投入1元和5元,所需货币显示分别为4元,0元。success为高电平,表示一次交易成功,同时showmoneyout也为高电平,表示需要找零,moneyout显示为1元,再选择3元的商品,投入5元,所需货币先后为3元和0元。success为高电平,表示第二次交易成功,showmoneyout为高电平,表示要找零,moneyout显示为2元。图8显示连续交易。源程序见附录的主控模块。图9 主控模块钱不够但不再投币的仿真如图9所示:选择3元商品后,在10秒内,再次选择2元商品;所需货币先后显示3元和5元。此后

37、,在一定时限内投入1元,所需货币显示4元,其后,等待再次投币,若超过一定时限(10秒)不再投币,认为放弃,failure为高电平,表示交易失败。showmoneyout为高电平,表示要退币,moneyout显示1元,即退币1元;延时显示后,回到初始状态。源程序见附录的主控模块。3.2 二进制译码的仿真 图10 二进制译码的仿真如图10所示:分别将从0到F各位二进制数转换为两位的BCD码数。如图所示,将一个4位的二进制数转化为两个4位的BCD码数的功能得到实现。源程序见附录的二进制译码模块。3.3 BCD码译码的仿真图11 BCD码译码的仿真如图11所示:将从0到7各位BCD码转化为七段译码显示

38、出来,其中7E在七段数码管上显示0,30显示1,6D显示2等等。如图所示,将BCD码转化为七段数码显示的功能得到实现。源程序见附录的BCD码译码模块。3.4 TOP文件的仿真 图12 TOP文件的仿真如图12所示:先选择一个3元的商品,10秒内再选择一个2元的商品;此后,在一定时间内,先后投入一元和5元,显示交易成功,并找零一元。在七段数码管上所需货币先后显示00元、03元、05元,当投入一元后,显示04元,再投入5元后,显示00元。而已投货币先后显示00元、投入一元后,显示01元,再投入5元,显示06元。同样,找零货币先后显示00元、01元。由此可见,系统的各功能实现成功。源程序见附录的顶层

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

40、件电路心中有数,不能一味地追求代码的完美,而应该以实现的硬件电路的性能优劣为标准。答谢:在完成本系统的设计过程中,本人得到老师的悉心指导和王尧君同学的帮助,在此深表谢意。 参考文献1 李仁发,凌纯清,徐成.VHDL数字系统设计(第二版). 北京:电子工业出版社出版. 20072 甘历 VHDL应用于开发实践. 北京:科学出版社.20033 Mark Zwolinski Digital System Design with VHDL.BeiJing:Publishing House of Electronics Industry.2007 4王晓峰电子设计的EDA技术应用J长春师范学院学报:自然

41、科学版,2005,24(5):55565DOULOS AThe designer S guide to VHDLEBOL200706066侯伯亨VHDL硬件描述语言与数字逻辑电路设计M陕西:西安电子科技大学出版社,1999东方人华MAX+PLUS I1入门与提高M北京:清华大学出版社,2004附录:系统各功能模块的实现:主控模块的完整程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shouhuojioriginal isport( clk: in std_logic; co

42、in1:in std_logic;coin5:in std_logic;price2:in std_logic;price3:in std_logic;paid:out std_logic_vector(3 downto 0);needed:out std_logic_vector(3 downto 0);success:out std_logic;failure:out std_logic;showmoneyout:out std_logic;moneyout:out std_logic_vector(3 downto 0);end shouhuojioriginal;architectur

43、e behav of shouhuojioriginal istype state_type is (qa,qb,qe,qc,qg,qd,qf);signal current_state :state_type:=qa;signal q:integer range 0 to 100;begin process(clk)variable paidtemp:std_logic_vector(3 downto 0);variable neededtemp: std_logic_vector(3 downto 0);variable backmoney: std_logic_vector(3 down

44、to 0);variable pricetemp:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thencase current_state iswhen qa =>paidtemp:="0000"neededtemp:="0000"backmoney:="0000"pricetemp:="0000"q<=0;showmoneyout<='0'moneyout<="000

45、0"paid<="0000"needed<="0000"failure<='0'success<='0'if price2='1' or price3='1' then current_state<=qb;if price2='1' then pricetemp:=pricetemp+2;neededtemp:=pricetemp;Elsepricetemp:=pricetemp+3;neededtemp:=pricetemp;end

46、if;end if;paid<=paidtemp;needed<=neededtemp; when qb=>if coin1='1'or coin5='1' then if coin1='1' then paidtemp:=paidtemp+1; else paidtemp:=paidtemp+5; end if; if paidtemp>=pricetemp then backmoney:=paidtemp-pricetemp; neededtemp:="0000"current_state<=

47、qd; else neededtemp:=pricetemp-paidtemp;backmoney:="0000" current_state<=qc;q<=0; end if; paid<=paidtemp; needed<=neededtemp; end if; if q<8 then q<=q+1; if price2='1' or price3='1' then q<=0; if price2='1' then pricetemp:=pricetemp+2; neededtem

48、p:=neededtemp+2; elsepricetemp:=pricetemp+3;neededtemp:=neededtemp+3;end if;paid<=paidtemp;needed<=neededtemp;end if; else current_state<=qe; q<=0; end if; when qe=>failure<='1' if q<4 then q<=q+1; else current_state<=qa;q<=0; end if; when qc=> if coin1='

49、1' or coin5='1' then if coin1='1' then paidtemp:=paidtemp+1; else paidtemp:=paidtemp+5; end if; if paidtemp>=pricetemp then neededtemp:="0000" backmoney:=paidtemp-pricetemp; current_state<=qd; else neededtemp:=pricetemp-paidtemp; backmoney:="0000" curren

50、t_state<=qc; end if; paid<=paidtemp; needed<=neededtemp; end if; if coin1/='1' and coin5/='1' then if q<10 then q<=q+1; else current_state<=qg; end if; else q<=0; end if; when qg=> failure<='1' showmoneyout<='1'moneyout<=paidtemp; curr

51、ent_state<=qf;q<=0; when qd=> success<='1' if backmoney>"0000" then showmoneyout<='1'moneyout<=backmoney;end if;current_state<=qf;q<=0;when qf=> if q<4 then q<=q+1;else current_state<=qa;q<=0;end if;end case;end if;end process;end b

52、ehav;二进制译码模块的完整程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity code1 isport( b:in std_logic_vector(3 downto 0);bcd0:out std_logic_vector(3 downto 0); bcd1:out std_logic_vector(3 downto 0);end code1;architecture one of code1 isbeginprocess(b)begincase b iswhen&quo

53、t;0000"=>bcd0<="0000"bcd1<="0000"when"0001"=>bcd0<="0001"bcd1<="0000"when"0010"=>bcd0<="0010"bcd1<="0000"when"0011"=>bcd0<="0011"bcd1<="0000"when&quo

54、t;0100"=>bcd0<="0100"bcd1<="0000"when"0101"=>bcd0<="0101"bcd1<="0000"when"0110"=>bcd0<="0110"bcd1<="0000"when"0111"=>bcd0<="0111"bcd1<="0000"when&quo

55、t;1000"=>bcd0<="1000"bcd1<="0000"when"1001"=>bcd0<="1001"bcd1<="0000"when"1010"=>bcd0<="0000"bcd1<="0001"when"1011"=>bcd0<="0001"bcd1<="0001"when&quo

56、t;1100"=>bcd0<="0010"bcd1<="0001"when"1101"=>bcd0<="0011"bcd1<="0001"when"1110"=>bcd0<="0100"bcd1<="0001"when"1111"=>bcd0<="0101"bcd1<="0001"when oth

57、ers=>null;end case;end process;end one;BCD码译码模块的完整程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity code2 isport(d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0);end code2;architecture one of code2 isbeginprocess(d)begincase d iswhen"000

58、0"=>q<="1111110"when"0001"=>q<="0110000"when"0010"=>q<="1101101"when"0011"=>q<="1111001"when"0100"=>q<="0110011"when"0101"=>q<="1011011"when"011

59、0"=>q<="1011111"when"0111"=>q<="1110000"when"1000"=>q<="1111111"when"1001"=>q<="1110011"when others=>q<="0000000"end case;end process;end one;顶层文件的完整程序如下:library IEEE;use IEEE.STD_LOGIC

60、_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity top isPort ( clk1:in std_logic;C1,C5,P2,P3:in std_logic; paid_lcd0,paid_lcd1,needed_lcd0,needed_lcd1,Mout_lcd0,Mout_lcd1:out std_logic_vector(6 downto 0);s,f,showout :out std_logic ); end top;architecture one of top iscomponent shouhuojiorigina

温馨提示

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

评论

0/150

提交评论