




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大连理工大学 电子1401 . . .大连理工大学本科实验报告题目:基于Verilog语言的简单自动售货机课程名称: 自动售货机 学院(系): 电信学部 专 业: 电子信息工程 班 级: 电子1401 学生姓名: . 学 号: 完成日期: 2016-07-10 成 绩: 2016 年 07 月 12 日课程设计得分表考 勤课程设计40分考试60分合计最后得分自动售货机:一、基本功能1、设计一个自动售货机,能够提供3-4种不同价格的货物。2、可以进行投币,投币的钱数至少是2种以上,钱数在售货机中能够进行累加并用数码管显示。3、进行交易的时候,如投入钱数高于所购买商品价格,则交易成功,出货物,并可以选择是找零或是继续购买;若钱数不够,则提示钱数不够。要求通过数码管显示余额。二、扩展功能用LCD液晶屏来显示购买的信息。报告目录:摘要-2第一章:概述-3第二章:FPGA与quartus II简介-5第三章:系统设计-7第四章:详细设计-9第五章:实际代码剖析-13第六章:结论及结果说明-18摘 要本设计是以现场可编程逻辑器件(FPGA)为核心的自动售货机,利用Quartus软件编写Verilog HDL硬件描述语言程序以实现自动售货功能。本设计主要以程序为主,硬件方面则使用ED2开发板,将程序各变量端口与开发板的管脚进行相应的配置。其中:用个12开关:1个表示进入购买菜单,退出购买菜单同时清零、6个表示投入钱币价格组合,4个表示选取不同的货物,1个确认付款找零取货操作。总共有n个LED灯: 1个表示进入购买菜单,4个表示4种不同的货物, 1个报警灯(假设投入钱币不足或者投钱有误),1个模拟出货口,1个模拟找零出口。利用8个数码管显示,2个完成投入总额,2个完成找零余额显示,另外4个显示大写英文单词“SHOP”弥补扩展功能中的LCD显示。过程描述:按进入购买菜单键进入购买系统,选择按钮选择好商品并利用投币按钮,由2数码管显示投入钱币总额;然后按下确认付款开关,另外2个数码管显示应该找零钱数(钱不够退钱数),对应商品LED灯亮显示卖出此货物,并且有一个LED灯亮表明出货。若所投钱币不足所选商品价格,对应警告钱币不足的LED灯亮。最后按推出购买菜单键,清零并退钱。关键字:FPGA Verilog HDL Quartus ED2开发板 自动售货机完成日期:2016年07月12日作者简介:罗红郊(1994),男,青海西宁人,本科学生,电子信息工程通讯作者:电话 E-mail: 第1章 绪 论1.1 概述以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。FPGA一般来说比ASIC(专用集成电路)的速度要慢,实现同样的功能比ASIC电路面积要大。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)。31.2 课题的背景、目的二十一世纪是信息化高速发展的世纪,因此在二十一世纪掌握前沿技术是十分有必要的。本次课题是计算机组成原理的课程设计,这次课题旨在通过自己对所需功能芯片的设计与实现来巩固以前所学的计算机硬件基础知识,同时也提高动手实践的能力,还有为将来进行更大规模更复杂的开发积累经验。自动售货是20世纪70年代在日本、欧美发展起来的一种全新的消费方式,自动售货机(Vending Machines)商业起源于本世纪的六十年代,由美国的Mars家族发明。自动售货机又被称为24小时营业的微型自助超市,它的售货领域非常广泛,是发达国家商品零售的一种主要方式。自动售货机作为一种先进的消费方式,已经成为城市现代文明发达程度的重要标志,其新颖、时尚的购物方式,24小时营业的特点给人们生活带来了便利,美化了城市环境,受到消费者的欢迎。但是在我国自动售货机的普及还不及发达国家,主要原因是我国EDA技术的应用水平长期落后于发达国家。DE2 是 Altera 公司针对大学教学及研究机构推出的 FPGA 多媒体开发平台。DE2 为用 户提供了丰富的外设及多媒体特性,并具有灵活而可靠的外围接口设计。DE2 能帮助使用 者迅速理解和掌握实时多媒体工业产品设计的技巧,并提供系统设计的验证。DE2 平台的 实际和制造完全按照工业产品标准进行,可靠性很高 图示:DE2开发板第2章 FPGA与quartus II简介. FPGA介绍FPGAFPGA取自Field Programmable Gate Array的首个字母,即现场(Field)可编程(Programmable)逻辑阵列(Gate Array),简称“可编程逻辑器件”FPGA两大主要厂商:1.ALTERA九十年代后发展很快,Altera的开发软件包括使用广泛的MAXPLUS和近年来新推出的Quartus /index.jsp2.Xilinx(赛灵思)FPGA的发明者,老牌PLD公司,开发软件为Foundition和ISE /FPGA内部结构1.包括三个基本部分:可编程逻辑功能块(逻辑单元LE);可编程输入/输出块(I/O);可编程互连资源;2.可编程体现在两个方面:内部逻辑功能可编程;外部I/O引脚分配可编程;FPGA设计方法1.电子产品设计方法发展趋势分立器件=可编程领域;“硬”设计= “软”设计;板级设计=片上系统设计;2.FPGA可成为新一代设计方法的载体本课程所使用的FPGA设计方法;开发语言:硬件描述语言(VHDL);开发平台: Quartus II;硬件描述语言(HDL)1.硬件描述语言是一种用形式化方法描述数字电路和系统的语言,是对可编程逻辑器件进行编程的工具语言 2.使用最广泛的HDL:VHDL和Verilog HDL都是IEEE的标准语言;有一定区别,但只要学会使用其中一门,就能很快掌握另外一门;相对来说,工业界IC设计使用Verilog比较多,而大学教学则VHDL比较多;2.2. Quartus II介绍Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。Quartus II1.Quartus II 是Altera公司的综合性PLD开发软件,支持VHDL、 VerilogHDL 、原理图 以及AHDL等多种设计输入形式2.内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程3.目前最新的版本为15.0Quartus II平台设计步骤1.新建工程2.输入代码文件并添加到工程3.编译工程,语法错误修改4.功能仿真、调试5.管脚定义6.下载第3章 系统设计3.1 设计要求3.1.1基本功能、设计一个自动售货机,能够提供3-4种不同价格的货物。、可以进行投币,投币的钱数至少是2种以上,钱数在售货机中能够进行累加并用数码管显示。、进行交易的时候,如投入钱数高于所购买商品价格,则交易成功,出货物,并可以选择是找零或是继续购买;若钱数不够,则提示钱数不够。要求通过数码管显示余额。3.1.2扩展功能用LCD液晶屏来显示购买的信息。3.2 设计分析及系统方案设计3.2.1设计分析.用四个发光二极管分别模拟售出价值为5角、1元、2元和3元的小商品,购买者可以通过开关选择任意一种标价中的小商品。.对应开关上的灯亮时表示该小商品售出。.用开关分别模拟5角、1元硬币和5元纸币投入,用2个数码管显示投入多少钱。.每次只能售出一种小商品,当所投硬币达到或超过购买者所选面值时,按投币结束开关,售出货物并找回剩余的硬币,回到初始状态,用2个绿灯模拟出货和找零的出口,若灯亮则找零出货,否则失败。.当所投硬币值不足面值,按投币完成开关,系统的报警灯会亮,此时将会将已投入的硬币进行退钱即退钱灯亮。.当购买完毕,或者投币有误后,可以按清零开关,回到最初的状态。用户可将继续进行购买。3.2.2系统设计方案 总体设计采用FPGA来设计的原理图如图1所示它由控制输入电路、FPGA显示电路和模拟出货口模拟电机进行出货。图1 采用FPGA设计的自动售货机原理方框图控制输入电路主要是为用户设计的,起到一个输入控制的作用。FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现自动售货机运作的主要控制模块。将编写好的verilog程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把信号输入到FPGA,由12个开关控制输入信号即消费者选择商品和消费者投币及确认消费,动态数码管显示输出信号即找零环节和所选择的商品、消费者投币,几个LED灯显示购买菜单下各种情况的状态。3.2.3系统工作流程图自动售货机控制要求对机内商品信息进行识别,对投入的货币进行运算,并根据所投入的货币数值判断是否能够购买某种商品,并做出相应的反应。本文设计的自动售货机控制系统主要可以实现投币处理、计算投币总额、输出商品,输出找零等功能,系统工作流程如图2 所示图2 自动售货机系统工作流程图第4章 详细设计4.1 系统模块与实现自动售货机的问题实际上就是状态转换的问题,不同的状态对应不同的输出,具体的来说就是输入不同币值的钱后对应着不同的作用结果。因此将此问题分为两部分来考虑,即输入和输出。 输入部分包括时钟信号、投币信号、商品选择信号、货物信号、确定信号、复位信号。因为币值只考虑5角、1元和5元的情况,考虑到商品总价的约束性,总共安排了6位二进制,并用开关实现的货币组合,最高位为5元的1位只能投一次即可能买所有商品,3元的2位有4种组合也可以满足购买所有商品,5毛的有3位总共8种组合也可满足要求。因此可以分别用6个输入端代替。同样对于4种商品的选择也可用4个输入端代替。 输出部分包括币值显示信号、输出货物信号、警告信号以及找零信号利用数码管和LED灯进行显示。综上,给出如下输入输出变量:4.1.1输入变量:时钟信号(clk):每个时钟的上升沿触发系统的状态转换。复位信号(rst):上升沿触发,按下后自动回到初始状态,1个开关。投币信号(btn_mon):有5角、1元、5元高电平有效,8个开关。货物信号(btn_sell):有4种货物选择,高电平有效,4个开关。确定信号(btn_ok):确认完成投币,高电平有效,1个开关。4.1.2输出变量:显示系统(dis_rst):显示在不在购买系统。显示投币总额(dis_mony):显示投入的币额。货物信号(led):对应卖出的货物。显示找零总额(dis_price):货物对应的价钱。警告信号(led_warn):钱不足时发出警告信号。出货模拟口(led_out):模拟出货口,灯亮表示出货。模拟找钱口(led_dis_price):模拟找钱口,灯亮表示出钱。4.2 电路原理图4.3 简单状态图描述判断开关被按下的个数N。若N=2表示所选本次选择无效,返回初始状态;若N=1则显示所选商品,并继续执行下面的流程。4个开关分别代表四种商品。6个开关分别代表投入0.5元,1元,5元,统计投入总额并显示。投入总额与商品价格做比较,如果投入总额=商品价格,则继续执行下面的程序。找零=总额-商品价格,数码管显示找零金额。状态如图3所示:4.4 详细状态描述自动售货机控制系统的工作过程中,可分为四个状态:初始状态、选商品状态、投币状态和找零状态。在每一个状态中完成特定的功能。4.4.1初始状态在初始状态下,自动售货机通电,初始化机内商品信息(包括商品种类、每种商品的数量以及价格(将会以标签形式贴在样品上)。4.4.2 选择货物状态 分别有价格为0.5元、1元、2元和3元的商品,每次选择商品前,设置一个标志位btn_sell表示选择商品状态。此自动售货机每一次售货时只能一次选择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。4.4.3投币状态当选好商品后,开始投币。同样有一标志位btn_price表示投币金额。投币口只接受三种面值的钱币0.5元、1元和5元,可以同时投入多种面值钱币。投完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;若确认购买商品,则进入下一状态找零状态。4.4.4找零状态投完币,并确认购买商品后,进入找零状态。首先要将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;若大于等于商品价格,则两者做差,得到需要找零的钱。第5章 实际代码剖析5.1 自动售货机代码module vending_machine(clk,dis_rst,rst,dis_money,dis_price,btn_ok,btn_mon,btn_sell,led_warn,led,led_out,led_dis_price,shop); /*此段代码对变量进行定义,和各个变量的介绍*/*输入定义*/input clk,rst,btn_ok;input 5:0 btn_mon; /选择放入的钱input 3:0 btn_sell; /选择商品bbt_5,gz_10,kqs_20,kl_50/*输出定义*/output 3:0 led; /led_5,led_10,led_20,led_30output led_warn; /钱不足或投钱出错,指示灯output led_out; output dis_rst; /出货,指示灯output led_dis_price; /找钱;output 13:0 dis_money; /数码管显示投入面值dis_mony7:0=段码output 13:0 dis_price; /数码管显示价钱output shop; reg clk_500Hz;reg 3:0 led; reg led_warn; /警告放入钱不足或投钱错误reg 13:0 dis_money;reg 13:0 dis_price;reg 9:0 disprice; reg 9:0 price,price_all;reg 1:0 flag = 2b00; /数码管显示标志位reg led_out = 0;reg dis_rst;reg 31:0 counter;reg led_dis_price;reg 27:0shop;parameter COUNT1 = 25d10000;/*分频使数码管显示稳定*/always (posedge clk) begin if(counter= 0) begin counter = COUNT1; clk_500Hz = clk_500Hz; end else counter = counter-1; end/*此段中有进入购买菜单,进行选择货物,投币,判断购买等功能*/ always (negedge rst or posedge clk) begin if(rst=0) /假如不在购买状态(初始状态),清零 begin led = 4b0000; /LED灭 price_all = 0; /价格清零 led_warn = 0; /报警灯灭 led_out=0; /模拟出货灯灭 price = 0; /选择货物为空 disprice=0; /找零为零 led_dis_price=0;/不出钱找零 dis_rst = 0; /显示不在购买状态 end else /*进入购买菜单*/ begindis_rst=1; case(btn_mon) /三种面值5毛,1元,5元,由于一次只能购买一次,所以5元最多只能投1次,1元的最多投3次,5毛最多投7次 /没有投入钱 6b0_00_000:begin price_all = 0;end /只有5毛 6b0_00_001:begin price_all = 5;end 6b0_00_010:begin price_all = 10;end 6b0_00_011:begin price_all = 15;end 6b0_00_100:begin price_all = 20;end 6b0_00_101:begin price_all = 25;end 6b0_00_110:begin price_all = 30;end 6b0_00_111:begin price_all = 35;end /只有1元 6b0_01_000:begin price_all = 10;end 6b0_10_000:begin price_all = 20;end 6b0_11_000:begin price_all = 30;end /只有5元 6b1_00_000:begin price_all = 50;end /1元加5毛 6b0_01_001:begin price_all = 15;end 6b0_01_010:begin price_all = 20;end 6b0_01_011:begin price_all = 25;end 6b0_01_100:begin price_all = 30;end 6b0_01_101:begin price_all = 35;end 6b0_01_110:begin price_all = 40;end 6b0_01_111:begin price_all = 45;end 6b0_10_001:begin price_all = 25;end 6b0_10_010:begin price_all = 30;end 6b0_10_011:begin price_all = 35;end 6b0_10_100:begin price_all = 40;end 6b0_10_101:begin price_all = 45;end 6b0_10_110:begin price_all = 50;end 6b0_10_111:begin price_all = 55;end 6b0_11_001:begin price_all = 35;end 6b0_11_010:begin price_all = 40;end 6b0_11_011:begin price_all = 45;end 6b0_11_100:begin price_all = 50;end 6b0_11_101:begin price_all = 55;end 6b0_11_110:begin price_all = 60;end 6b0_11_111:begin price_all = 65;end /假设投入5元加其他则出现错误 default:begin price_all = -1;end endcase case(btn_sell) /*这段代码定义所选商品的价格*/ 4b0001:begin price = 5;end 4b0010:begin price = 10;end 4b0100:begin price = 20;end 4b1000:begin price = 30;end default:begin price = 0;end endcase if(btn_ok = 1) /*按下完成投币按钮*/ begin if(price_all price) /放入钱不足或者投钱错误 begin price = 0; led_dis_price = 1; /投钱错误或者不足 退钱 led_warn = 1; /指示灯说明出现投币不足或错误 end else /金钱足够 begin disprice = price_all-price; /算差价 led_dis_price = 1; led_out = 1; /购买成功 找钱 case(price) /LED灯显示某货物卖出 5: begin led = 4b0001;end 10:begin led = 4b0010;end 20:begin led = 4b0100;end 30:begin led = 4b1000;end endcase end end end end/*分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格*/always (posedge clk_500Hz) begin case(flag) 2b00: begin dis_price13:7=led7(disprice%10); dis_price6:0=led7(disprice/10); flag = 2b01; end 2b01: begin dis_money13:7=led7(price_all%10); dis_money6:0=led7(price_all/10); flag = 2b00; end endcase end/*此段仅作为英文单词SHOP的显示*/always (posedge clk_500Hz) beginshop27:21=led7(5); shop20:14=led7(10);shop13:7=led7(0);shop6:0=led7(11);end/*数码管段码表,其中包括09的显示,还有h和p*/function 6:0 led7;input 3:0 dis_input; begin case (dis_input) 4d0:led7=7b1000000; 4d1:led7=7b1111001; 4d2:led7=7b0100100; 4d3:led7=7b0110000; 4d4:led7=7b0011001; 4d5:led7=7b0010010; 4d6:led7=7b0000010; 4d7:led7=7b1111000; 4d8:led7=7b0000000; 4d9:led7=7b0010000;4d10:led7=7b0001001;4d11:led7=7b0001100; default : led7=7b0111111; endcase endendfunctionendmodule注:上述代码已通过编译和仿真第6章 结论及结果说明6.1 实验调试6.1.1调试步骤调试环境:win7 quartus II 6.0 DE2开发板1.软件调试:运行Quartus II 6.0软件,观看仿真波形,仿真波形如下:6.1.2.硬件调试:.运行Quartus II软件,新建工程。.建立文本文件Verilog HDL File。在文件中写入程序。保存,编译。.分配管脚。保存,编译。.将生成的.sof文件写入DE2开发板。.根据要求选择几种买东西的可能情况,在实验箱上实验,观察记录结果。.DE2管脚分配:6.1.3验现象.选择买0.5元的商品,投5元的金额,调试现象如下:a.选择标价为0.5元商品。b.按下5元投币键,对应数码管显示5.0。c.按下确认购买开关,找零时,对应余额数码管显示4.5,对应0.5元商品的LED灯亮。模拟出货口灯亮,模拟找零口灯亮。d.按下完成购物键即退出购买菜单,所有清零。.选择3元的商品,投2.5元的金额,调试现象如下:a.选择3元的商品。b.按下2.5元的投币键的组合,对应数码管显示2.5。c.按下完成投币,找零显示2.5元,退回所投的钱,表示警告的LED灯亮(交易不成功)6.2 结果与分析通过上面的步骤将程序代码下载到DE2开发板,并验证了在仿真中的结果的正确性。自动售货机能出售5角、1元、2元和3元四种商品。出售哪种商品可由顾客按动相应的一个按键即可,并同时用数码管显示出此商品的价格;顾客投入硬(纸)币的钱数也是有5角、1元、5元三种,可以进行各种规定的钱数组合,此操作通过按动相应的一个按键来模拟,并同时用数码管将投币额显示出来;顾客投币后,按一次确认键,如果投币额不足时则报警灯亮,同时退回顾客所有投入所有的钱,如果投币额足够时自动送出货物(送出的货物用所对应的不同的指示灯进行提示),同时模拟出货口灯亮,模拟找钱口灯亮模拟找钱,找回的钱数用数码管显示出来;顾客一旦按动确认键后,自动售货机即可自动恢复到初始状态,此时才允许顾客进行下一次购货操作;此售货机设有一个由商家控制的整体复位控制,当整体复位信号有效时,所有输出均为零。6.2.1调试过程中出现的问题及原因:数码管显示不正确。a.管脚配置不正确导致数码管显示异常。b.重新分配管脚后,仍为先前程序的操作结果。重新配置管脚后,未运行程序,使得烧写进去的仍为原先的程序。显示投币错误a. 程序的价钱组合出错,更改组合重新编译调试。6.3整体结果分析6.3.1总体上满足设计要求,但是有很多细节处理的不够好。1. 结束购买后进行再
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新任经理发言稿
- 家长会 德育发言稿
- 时间的脚印白板课件
- 宇通客车现金流量质量分析
- 秋天的思念课件大纲
- 2025版房地产精装修施工合同包含建筑节能认证服务
- 二零二五年新能源企业劳动保密及保密义务协议
- 2025版车辆买卖合同担保及车辆改装服务范本
- 2025版花卉进出口贸易合同
- 2025版某局信息化项目劳务分包结算规范合同
- 意大利米兰整骨技术的案例分享-之评估篇
- 煤矿岗位标准化作业流程
- LOI意向书中英文模板
- 部编小学语文6年级上册第8单元作业设计5
- 传染病学课件:新发和再现传染病
- 新人教版六年级上册数学教材解读
- 注塑机定期保养记录表2016
- 成人癌性疼痛护理指南解读
- 新视野大学英语(第四版)读写教程1(思政智慧版) 课件 Unit 4 Social media matters Section A
- 浅谈实现小学语文单元整体教学的有效策略
- 手动液压叉车安全技术培训
评论
0/150
提交评论