您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > HDL(Verilog)课程设计报告(自动售货机)
HDL(Verilog)课程设计报告(自动售货机)2011-03-0221:51:23|分类:电子、课程设计类|标签:fpgaveriloghdl自动售货机quartus|字号大中小订阅摘要本设计是以现场可编程逻辑器件(FPGA)为核心的自动售货机,利用QuartusⅡ软件编写verilogHDL硬件描述语言程序以实现自动售货功能。本设计主要以程序为主,硬件方面则使用实验箱,将程序各变量端口与实验箱管脚进行相应的配置,用八个开关分别代表商品价格、所投钱币价格及确认付款找零操作。当选择好商品并投币后,数码管显示所选商品价格及投入钱币价格;按下确认付款开关,数码管显示应找多少钱,蜂鸣器响,对应商品LED灯亮。若所投钱币不足所选商品价格,对应警告钱币不足的LED灯亮。关键字:FPGA、VerilogHDL、自动售货机、QuartusⅡAbstractThisdesignisanauto-vendingmachinebasedonfieldprogrammablelogicdevices(FPGA).WeuseQuartusⅡtowriteprocedureinverilogHDLwhichisalanguagetodescribehardware.Theprocedurewillrealizethefunctionofauto-vendingmachine.Thisdesignismainlyaboutprocedure.Forthehardware,weuseexperimentalbox.Weallocateallvariablequantitiesintheproceduretothefeetinexperimentalbox.Weuseeightswitchrespectivelyrepresentcommoditypricesandthrowmoneypriceandconfirmpaymentchangeoperation.Whenchoosinggoodcommoditiesandcoin,digitalpipedisplayselectedcommoditypricesandmoneyprice.Whenpressingconfirmpaymentswitch,digitalpipedisplayshouldfindhowmuchmoney,buzzersounded,correspondingcommodityLEDlights.Ifthrowmoneyshortageselectedcommodityprices,correspondingwarningmoneyshortageofLEDlights.Keywords:FPGA、VerilogHDL、auto-vendingmachine、QuartusⅡ目录摘要I第一章系统设计11.1系统设计11.2系统设计方案比较11.2.1总体设计11.2.1设计方案比较1第二章详细设计22.1自动售货机状态描述22.2详细状态描述32.2.1初始状态32.2.2选商品状态32.2.3投币状态32.2.4找零状态3第三章软件设计33.1程序总流程图33.2程序4第四章结果与讨论74.1实验调试74.1.1调试步骤74.1.2实验现象74.2结果与分析8总结8参考文献8附录9第一章系统设计1.1系统设计(1)用四个发光二极管分别模拟售出价值为5角、1元、1.5元和2元的小商品,购买者可以通过开关选择任意一种标价中的小商品。(2)灯亮时表示该小商品售出。(3)用开关分别模拟5角、1元硬币和5元纸币投入,可以用几只发光二极管(或数码管)分别代表找回剩余的硬币。(4)每次只能售出一种小商品,当所投硬币达到或超过购买者所选面值时,售出货物并找回剩余的硬币,回到初始状态;(5)当所投硬币值不足面值时,可通过一个复位键退回所投硬币,回到初始状态。1.2系统设计方案比较1.2.1总体设计采用FPGA来设计的原理图如图1.1所示.它由控制输入电路、FPGA、显示电路电路组成。图1.1采用FPGA设计的自动售货机原理方框图控制输入电路主要是为用户设计的,起到一个输入控制的作用。FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现自动售货机运作的主要控制模块。将编写好的HDL程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把信号输入到FPGA,由八个开关控制输入信号即消费者选择商品和消费者投币及确认消费,动态数码管显示输出信号即找零环节和所选择的商品、消费者投币。1.2.2设计方案比较本设计可以通过多种方案来实现,下面就主要的三种方案进行阐述和比较。方案一:采用数字逻辑电路制作,用IC器件连接焊接外围电路实现,这种电路很直观,简单方便。但应用数字逻辑电路制作,使用的器件较多,连接复杂,体积大,功耗大。电路中焊点和线路较多会,使成品的稳定度和精度大大降低。方案二:使用现场可编程逻辑器件(FPGA)制作,利用VerilogHDL硬件描述语言编程进行控制,然后烧写实现。方案三:单片机现在已经达到很成熟的阶段了,它的应用也十分广泛。采用单片机来实现自动售货机,它的原理方框图与用FPGA来实现的原理方框图类似,如图1.2所示。图1.2采用单片机实现自动售货机的原理方框图图1.1和图1.2的基本原理都相同,唯一不同的是一个是用FPGA来制作,一个是用单片机来实现。采用单片机来实现自动售货机,主要的核心是单片机程序的设计。方案比较:对于自动售货机的设计,三个方案均可以实现,但是第一个方案中采用的是数字逻辑电路来制作,该电路硬件所需的器材多,体积庞大,比较复杂,而且精度和稳定度都不是很高。第二个方案采用的是现场可编程逻辑器件来实现,它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度。还可以用软件QuartusⅡ软件进行仿真和调试等。可以充分利用HDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易.方案三也有它的优点,但同时也存在缺点。它对设计者的要求比较高,设计者对软硬件必须十分熟悉[2]。和方案二来比它的实验仿真没有方案二简单直观,调试也有一定的难度。在外界环境相同的条件下,方案三设计出来的产品精度和稳定度要比方案二稍微差一些。因此,自动售货机的设计我们选择方案二来实现。第二章详细设计2.1自动售货机状态描述判断开关被按下的个数N。若N=2表示所选本次选择无效,返回初始状态;若N=1则显示所选商品,并继续执行下面的流程。3个开关分别代表三种商品。4个开关分别代表投入0.5元,1元,2元,5元,统计投入总额。投入总额与商品价格做比较,如果总额商品价格,退钱并返回初始状态如果总额=商品价格,则继续执行下面的程序。找零=总额-商品价格,数码管显示找零金额。状态图如图2.1所示:图2.1自动售货机状态图2.2详细状态描述2.2.1初始状态各变量都设置为零,按下rst键后,一切恢复到初始状态。2.2.2选商品状态分别有价格为0.5元、1元、1.5元和2元的商品,每次选择商品前,设置一个标志位btn_sell表示选择商品状态。此自动售货机每一次售货时只能一次选择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。选择商品后,数码管显示所选商品价格。2.2.3投币状态当选好商品后,开始投币。同样有一标志位btn_price表示投币金额。投币口只接受三种面值的钱币0.5元、2元和5元,可以同时投入多种面值钱币。投完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;若确认购买商品,则进入下一状态——找零状态。2.2.4找零状态投完币,并确认购买商品后,进入找零状态。首先要将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;若大于等于商品价格,则两者做差,得到需要找零的钱。第三章软件设计3.1程序总流程图3.2程序moduleauto_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_20output[3:0]led;//led_5,led_10,led_15,led_20outputled_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_20regled_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)beginif(counter==0)begincounter=COUNT1;clk_500Hz=~clk_500Hz;endelsecounter=counter-1;endalways@(negedgerstorposedgeclk)beginif(!rst)beginled=4'b0000;//LED灭price_all=0;//价格清零led_warn=0;price=0;beep=0;endelsebegin/*三种面值共8种组合*/case(btn_mon)3'b001:beginprice_all=5;end3'b010:beginprice_all=10;end3'b100:beginprice_all=50;end3'b011:beginprice_all=15;end3'b101:beginprice_all=55;end3'b110:beginprice_all=60;end3'b111:beginprice_all=65;enddefault:beginprice_all=0;endendcasecase(btn_sell)4'b0001:beginprice=5;end4'b0010:beginprice=10;end4'b0100:beginprice=15;end4'b1000:beginprice=20;enddefault:beginprice=0;endendcaseif(btn_ok==1)beginif(price_allprice)//放入钱不足beginled_warn=1;price=0;endelsebegin//金钱足够price_all=price_all-price;beep=1;case(price)//LED灯显示货物卖出5:beginled=4'b0001;end10:beginled=4'b0010;end15:beginled=4'b0100;end20:beginled=4'b1000;endendcaseendendelsebeep=0;endend/*分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格*/always@(posedgeclk_500Hz)begincase(flag)2'b00:begindis_mony={4'b1110,led7(price_all%10),1'b1};dis_price={4'b1110,led7(price%10),1'b1};f
本文标题:HDL(Verilog)课程设计报告(自动售货机)
链接地址:https://www.777doc.com/doc-1900735 .html