基于Verilog语言的简单自动售货机doc.docx

上传人:b****7 文档编号:11413831 上传时间:2023-02-28 格式:DOCX 页数:25 大小:330.46KB
下载 相关 举报
基于Verilog语言的简单自动售货机doc.docx_第1页
第1页 / 共25页
基于Verilog语言的简单自动售货机doc.docx_第2页
第2页 / 共25页
基于Verilog语言的简单自动售货机doc.docx_第3页
第3页 / 共25页
基于Verilog语言的简单自动售货机doc.docx_第4页
第4页 / 共25页
基于Verilog语言的简单自动售货机doc.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于Verilog语言的简单自动售货机doc.docx

《基于Verilog语言的简单自动售货机doc.docx》由会员分享,可在线阅读,更多相关《基于Verilog语言的简单自动售货机doc.docx(25页珍藏版)》请在冰豆网上搜索。

基于Verilog语言的简单自动售货机doc.docx

基于Verilog语言的简单自动售货机doc

 

EDA设计基础实验课程论文

 

题目基于Verilog语言的简单自动售货机

学院通信学院

专业班级通信111班

学生姓名大彬哥

指导教师大力会

 

2013年6月12日

摘要

本设计是以现场可编程逻辑器件(FPGA)为核心的自动售货机,利用QuartusⅡ软件编写VerilogHDL硬件描述语言程序以实现自动售货功能。

本设计主要以程序为主,硬件方面则使用实验箱,将程序各变量端口与实验箱管脚进行相应的配置,用八个开关分别代表商品价格、所投钱币价格及确认付款找零操作。

当选择好商品并投币后,数码管显示所选商品价格及投入钱币价格;按下确认付款开关,数码管显示应该找多少钱,蜂鸣器响,对应商品LED灯亮。

若所投钱币不足所选商品价格,对应警告钱币不足的LED灯亮。

关键字:

现场可编程逻辑器件VerilogHDL自动售货机QuartusⅡ

 

Abstract

Thisdesignisanauto-vendingmachinebasedonfieldprogrammablelogicdevices(FPGA).WeuseQuartusⅡtowriteprocedureinverilogHDLwhichisalanguagetodescribehardware.Theprocedurewillrealizethefunctionofauto-vendingmachine.

Thisdesignismainlyaboutprocedure.Forthehardware,weuseexperimentalbox.Weallocateallvariablequantitiesintheproceduretothefeetinexperimentalbox.Weuseeightswitchrespectivelyrepresentcommoditypricesandthrowmoneypriceandconfirmpaymentchangeoperation.Whenchoosinggoodcommoditiesandcoin,digitalpipedisplayselectedcommoditypricesandmoneyprice.Whenpressingconfirmpaymentswitch,digitalpipedisplayshouldfindhowmuchmoney,buzzersounded,correspondingcommodityLEDlights.Ifthrowmoneyshortageselectedcommodityprices,correspondingwarningmoneyshortageofLEDlights.

Keywords:

FPGAVerilogHDLauto-vendingmachineQuartusⅡ

 

第1章绪论

1.1概述

随着电子技术的发展,现场可编程门阵列FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子CAD软件,在实验室里就可以设计自己的专用集成电路ASIC器件。

这种可编程ASIC不仅使设计的产品达到小型化、集成化和高可靠性,而且器件具有用户可编程特性,大大缩短了设计周期,减少了设计费用,降低了设计风险。

目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要求,自上至下地逐层完成相应的描述﹑综合﹑优化﹑仿真与验证,直到生成器件,实现电子设计自动化。

其中电子设计自动化(EDA)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。

EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

VerilogHDL是众多EDA软件中的一个,结合我们这学期所学课程,本次设计采用的是Verilog公司推出的Verilog硬件描述语言,目的是为了将我们所学应用到实际生活中,同时加深我们对Verilog硬件描述语言,FPGA芯片等等的认识与掌握。

1.2课题的背景、目的

二十一世纪是信息化高速发展的世纪,因此在二十一世纪掌握前沿技术是十分有必要的。

本次课题是计算机组成原理的课程设计,这次课题旨在通过自己对所需功能芯片的设计与实现来巩固以前所学的计算机硬件基础知识,同时也提高动手实践的能力,还有为将来进行更大规模更复杂的开发积累经验。

自动售货是20世纪70年代在日本、欧美发展起来的一种全新的消费方式,自动售货机(VendingMachines)商业起源于本世纪的六十年代,由美国的Mars家族发明。

自动售货机又被称为24小时营业的微型自助超市,它的售货领域非常广泛,是发达国家商品零售的一种主要方式。

自动售货机作为一种先进的消费方式,已经成为城市现代文明发达程度的重要标志,其新颖、时尚的购物方式,24小时营业的特点给人们生活带来了便利,美化了城市环境,受到消费者的欢迎。

但是在我国自动售货机的普及还不及发达国家,主要原因是我国EDA技术的应用水平长期落后于发达国家。

1.3课题设计环境

1.3.1EDA的应用及发展趋势

EDA在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。

在教学方面,几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。

主要是让学生了解EDA的基本概念和基本原理、掌握用HDL语言编写规范、掌握逻辑综合的理论和算法、使用EDA工具进行电子电路课程的实验并从事简单系统的设计。

一般学习电路仿真工具(如EWB、PSPICE)和PLD开发工具(如Altera/Xilinx的器件结构及开发系统),为今后工作打下基础。

科研方面主要利用电路仿真工具(EWB或PSPICE)进行电路设计与仿真;利用虚拟仪器进行产品测试;将CPLD/FPGA器件实际应用到仪器设备中;从事PCB设计和ASIC设计等。

从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。

中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员研发复杂的片上系统器件。

为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。

在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。

要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。

有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。

开展“数控化”工程和“数字化”工程。

自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。

在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。

在EDA软件开发方面,目前主要集中在美国。

但各国也正在努力开发相应的工具。

日本、韩国都有ASIC设计工具,但不对外开放。

中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。

相信在不久的将来会有更多更好的设计工具有各地开花并结果。

据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。

EDA技术发展迅猛,完全可以用日新月异来描述。

EDA技术的应用广泛,现在已涉及到各行各业。

EDA水平不断提高,设计工具趋于完美的地步。

EDA市场日趋成熟,但我国的研发水平很有限,需迎头赶上。

1.3.2Quartus简介

本次课题设计方案要用到的开发环境是Altera公司的综合性PLD/FPGA开发软件QuartusII,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。

目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。

Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。

AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

QuartusII提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:

可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;

芯片(电路)平面布局连线编辑;

LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;

功能强大的逻辑综合工具;

完备的电路功能仿真与时序逻辑仿真工具;

定时/时序分析与关键路径延时分析;

可使用SignalTapII逻辑分析工具进行嵌入式的逻辑分析;

支持软件源文件的添加和创建,并将它们链接起来生成编程文件;

使用组合编译方式可一次完成整体设计流程;

自动定位编译错误;

高效的期间编程与验证工具;

可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;

能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。

1.3.3FPGA介绍

FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、FPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。

FPGA采用了逻辑单元阵列LCA这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。

FPGA的基本特点主要有以下几点:

一、FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

二、FPGA可做其它全定制或半定制ASIC电路中的试样片。

三、FPGA内部有丰富的触发器和I/O引脚。

四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。

用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中的数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程即可。

当需要修改FPGA功能时,只须换一块EPROM第8页即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

FPGA的配置模式非常灵活,它可以有多种配置方式:

平行主模式为一片FPGA加一片EPROM的方式;主从模式为多片FPGA加一片PROM;串行模式可以采用串行PROM编程FPGA外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

第2章系统设计

2.1系统设计

(1)用四个发光二极管分别模拟售出价值为5角、1元、1.5元和2元的小商品,购买者可以通过开关选择任意一种标价中的小商品。

(2)灯亮时表示该小商品售出。

(3)用开关分别模拟5角、1元硬币和5元纸币投入,可以用几只发光二极管(或数码管)分别代表找回剩余的硬币。

(4)每次只能售出一种小商品,当所投硬币达到或超过购买者所选面值时,售出货物并找回剩余的硬币,回到初始状态;

(5)当所投硬币值不足面值时,可通过一个复位键退回所投硬币,回到初始状态。

2.2系统设计方案比较

2.2.1总体设计

总体设计采用FPGA来设计的原理图如图1-1所示它由控制输入电路、FPGA显示电路和电机驱动组成。

图1-1采用FPGA设计的自动售货机原理方框图

控制输入电路主要是为用户设计的,起到一个输入控制的作用。

FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现自动售货机运作的主要控制模块。

将编写好的HDL程序烧制到现场可编程逻辑器件FPGA中,然后通过

控制输入电路把信号输入到FPGA,由八个开关控制输入信号即消费者选择商品和消费者投币及确认消费,动态数码管显示输出信号即找零环节和所选择的商品、消费者投币。

2.2.2总体设计设计方案比较

本设计可以通过多种方案来实现,下面就主要的三种方案进行阐述和比较。

方案一:

采用数字逻辑电路制作,用IC器件连接焊接外围电路实现,这种电路很直观,简单方便。

但应用数字逻辑电路制作,使用的器件较多,连接复杂,体积大,功耗大。

电路中焊点和线路较多会,使成品的稳定度和精度大大降低。

方案二:

使用现场可编程逻辑器件(FPGA)制作,利用VerilogHDL硬件描述语言编程进行控制,然后烧写实现。

方案三:

单片机现在已经达到很成熟的阶段了,它的应用也十分广泛。

采用单片机来实现自动售货机,它的原理方框图与用FPGA来实现的原理方框图类似,如图1.2所示。

图1-2采用单片机实现自动售货机的原理方框图

图1-1和图1-2的基本原理都相同,唯一不同的是一个是用FPGA来制作,一个是用单片机来实现。

采用单片机来实现自动售货机,主要的核心是单片机程

序的设计。

方案比较:

对于自动售货机的设计,三个方案均可以实现,但是第一个方案中采用的是数字逻辑电路来制作,该电路硬件所需的器材多,体积庞大,比较复杂,而且精度和稳定度都不是很高。

第二个方案采用的是现场可编程逻辑器件来实现,它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度。

还可以用软件QuartusⅡ软件进行仿真和调试等。

可以充分利用HDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活调试方便,修改容易.方案三也有它的优点,但同时也存在缺点。

它对设计者的要求比较高,设计者对软硬件必须十分熟悉。

和方案二来比它的实验仿真没有方案二简单直观,调试也有一定的难度。

在外界环境相同的条件下,方案三设计出来的产品精度和稳定度要比方案二稍微差一些。

因此,自动售货机的设计我们选择方案二来实现。

第3章详细设计

3.1自动售货机主要功能

自动售货机控制要求对机内商品信息进行识别,对投入的货币进行运算,并根据所投入的货币数值判断是否能够购买某种商品,并做出相应的反应。

本文设计的自动售货机控制系统主要可以实现投币处理、计算投币总额、输出商品,输出找零等功能,系统工作流程如图3-1所示

图3-1自动售货机系统工作流程图

3.2设计思路及原理

3.2.1模块描述与实现

自动售货机的问题实际上就是状态转换的问题,不同的状态对应不同的输出,具体的来说就是输入不同币值的钱后对应着不同的作用结果。

因此将此问题分为两部分来考虑,即输入和输出。

输入部分包括时钟信号、投币信号、商品选择信号、货物信号、确定信号、复位信号。

因为币值只考虑5角、1元和5元的情况,因此可以分别用三个输入端代替。

同样对于四种商品的选择也可用四个输入端代替。

输出部分包括币值显示信号、输出货物信号、警告信号以及找零信号。

综上,给出如下输入输出变量:

输入变量:

时钟信号(clk):

每个时钟的上升沿触发系统的状态转换。

复位信号(reset):

上升沿触发,按下后自动回到初始状态。

投币信号(btn_mon):

有5角、1元、5元高电平有效。

货物信号(btn_sell):

有四种,高电平有效

确定信号(ok):

高电平有效。

输出变量:

显示信号(dis_mony):

显示投入的币额。

货物信号(led):

对应卖出的货物。

显示信号(dis_price):

货物对应的价钱。

警告信号(led_warn):

钱不足时发出警告信号。

3.2.2电路原理图

图3-2-2电路仿真图

3.3自动售货机状态描述

判断开关被按下的个数N。

若N>=2表示所选本次选择无效,返回初始状态;若N=1则显示所选商品,并继续执行下面的流程。

4个开关分别代表四种商品。

3个开关分别代表投入0.5元,1元,5元,统计投入总额。

投入总额与商品价格做比较,如果总额<商品价格,退钱并返回初始状态如果总额>=商品价格,则继续执行下面的程序。

找零=总额-商品价格,数码管显示找零金额。

状态如图3-2所示:

图3-1自动售货机状态图

3.4详细状态描述

自动售货机控制系统的工作过程中,可分为四个状态:

初始状态、选商品状态、投币状态和找零状态。

在每一个状态中完成特定的功能。

3.4.1初始状态

在初始状态下,自动售货机通电,初始化机内商品信息(包括商品种类、每种商品的数量以及价格)。

3.4.2选商品状态

分别有价格为0.5元、1元、1.5元和2元的商品,每次选择商品前,设置一个标志位btn_sell表示选择商品状态。

此自动售货机每一次售货时只能一次选择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。

选择商品后,数码管显示所选商品价格。

3.4.3投币状态

当选好商品后,开始投币。

同样有一标志位btn_price表示投币金额。

投币口只接受三种面值的钱币0.5元、2元和5元,可以同时投入多种面值钱币。

投完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;若确认购买商品,则进入下一状态——找零状态。

3.4.4找零状态

投完币,并确认购买商品后,进入找零状态。

首先要将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;若大于等于商品价格,则两者做差,得到需要找零的钱。

 

第4章软件设计

4.1分析与设计思路

自动售货机控制系统的功能模块逻辑上划分为商品信息存储模块、商品选择模块、投币处理模块,找零模块和显示模块。

1商品信息存储模块该模块的功能是将商品的单价、数量存储到自动售货机中,price、quantity分别表示商品的单价与数量数据信号,item为商品的种类。

2商品选择模块该模块功能是对商品进行选择与购买。

当对四种商品进行选择时,由sel的选择信号的个数来表示所选择的商品类型。

get为对商品进行确认购买的信号。

3投币处理模块该模块是对投入的硬币进行处理的过程,输出参数coin为投币数值计数器,以0.5元为单位进行计算。

整个模块功能类似于计钱器,可准确计算投入的硬币数,记录并保存投入的总币值。

4找零模块该模块主要完成找零操作。

通过计钱器coin计算余额,然后输出找零的控制信号act5、act10。

5显示模块该模块用来显示钱数和商品数量。

用于钱数显示时,将计钱器coin转换成BCD码,然后经译码器译码并显示。

用于商品数量显示时,将计算得出的最终商品数量quantity先转换成BCD码,然后经译码器译码并显示。

程序可分为以下模块

1)分频模块。

2)计时模块。

用于控制确认键后到恢复初始化的3秒计时。

3)识别模块。

将每种硬币、货品的拨码开关信号转变为编码。

4)清零模块。

用于销售总额的清零。

5)初始化模块

6)控制模块。

用于数据读入、投币不足、交易成功状态的控制及转化。

7)显示模块

4.2框图

4.3程序总流程图

4.4程序

module

auto_seller(clk,rst,dis_mony,dis_price,btn_ok,btn_mon,btn_sell,led_warn,led,beep);

inputclk,rst,btn_ok;

input[2:

0]btn_mon;//选择放入的钱

input[3:

0]btn_sell;//选择商品bbt_5,gz_10,kqs_15,kl_20

output[3:

0]led;//led_5,led_10,led_15,led_20

outputled_warn;//钱不足,指示灯

output[11:

0]dis_mony;//数码管显示投入面值,dia_mony[10:

7]=com位选,dis_mony[7:

0]=段码

output[11:

0]dis_price;//数码管显示价钱

outputbeep;

regclk_500Hz;

reg[3:

0]led;//led_5,led_10,led_15,led_20

regled_warn;//警告放入钱不足

reg[11:

0]dis_mony;

reg[11:

0]dis_price;

reg[31:

0]counter;

reg[9:

0]price,price_all;

reg[1:

0]flag=2'b00;//数码管显示标志位

regbeep=0;

parameterCOUNT1=25'd10000;

/*分频使数码管显示稳定*/

always@(posedgeclk)

begin

if(counter==0)

begin

counter<=COUNT1;

clk_500Hz<=~clk_500Hz;

e

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1