哈尔滨工业大学SOPC及EDA技术课程1SOPC及EDA技术课程结业报告题目:基于状态机的自动售货机设计院(系)电气工程及其自动化姓名学号班号哈尔滨工业大学SOPC及EDA技术课程2基于状态机的自动售货机设计一.实验目的1.学习FPGA入门知识,了解FPGA的编程形式;2.掌握QuartusII的使用步骤;3.掌握基于状态机原理的自动售货机设计过程。二.实验原理自动售货机是可完成无人自动售货,集光、机、电一体化的商业自动化设备。自动售货机不受任何场地限制,方便快捷,可以每天24小时售货,因此深受上班族的欢迎,很多城市的公共场所里面都放置有自动售货机,出售的商品五花八门,从饮料、零食、香烟、糖果,到牙刷、方便面、自动照相机。近年来,我国的自动售货机行业突飞猛进:在汽车总站、商厦、医院、小区、学校等地区纷纷涌现出自动售货机的踪迹。这种方便快捷的购物方式越来越受到人们的青睐,同时也是现代化城市配套设施的需求。因为自动售货机作为社会上完成商品零售和综合服务的独立设施,所以必须要求它的结构可靠、稳定而且执行效率高。传统的自动售货机控制系统采用单片机作为控制核心,这样不仅会在输入输出接口上做大量的工作,而且系统的抗干扰性也比较差。可编程控制器(ProgrammableLogicalController,简称PLC)是综合了计算机技术、自动控制技术和通讯技术而发展起来的一种新型的工业控制装置,它具有可靠性高、编程简单、维护方便等优点,已在工业控制领域得到广泛地应用。PLC是以CPU为核心,综合了计算机技术和通信技术发展起来的一种通用的工业自动控制装置,是现代工业控制的三大支柱(PLC、机器人和CAD/CAM)之一。PLC的工作原理与计算机的工作原理基本是一致的,可以简单地表述为在系统程序的管理下,通过运行应用程序完成用户任务。但是PLC也有它自己的特点,PLC在确定了工作任务,装入了专用程序后成为一种专用机,它采用循环扫描工作方式,系统工作任务管理及应用程序执行都是用循环扫描方式完成的。目前,可编程控制器在国内外已广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保等各行各业。自动售货机以其新奇、文明、高档、灵活方便等优点深受广大市民青睐。自动售货机最基本的功能是对投入的货币进行运算,并根据所投入的货币数值判断是否能够购买某种商品,并做出相应的反映。因此,售货机应能够辨识机内包含的商品,能够对所投入的币值进行累计,并提供所要购买的商品。当按下选择商哈尔滨工业大学SOPC及EDA技术课程3品的按钮时,自动售货机根据投入的币值,起动电机,提取商品到出货口,顾客取出商品,完成此次交易。在实际生活中,我们见到的售货机可以销售一些简单的日用品,如饮料、常用药品和小的生活保健用品等。售货机的基本功能就是对投入的货币进行运算,并根据货币数值判断是否能够购买某种商品,并做出相应的反应。举一个简单的例子来说明。例如:售货机中有8种商品,其中01号商品(代表第一种商品)价格为1.50元,02商品为2.50元,其余类推。现投入1个1元硬币,当投入的货币超过01商品的价格时,01商品的选择按钮处应有变化,提示可以购买,其他商品同比。当按下选择01商品的价格时,售货机进行减法运算,从投入的货币总值中减去01商品的价格同时启动相应的电机,提取01号商品到出货口。此时售货机继续进行等待外部命令,如继续交易,则同上,如果此时不再购买而按下退币按钮,售货机则要进行退币操作,退回相应的货币,并在程序中清零,完成此次交易。由此看来,售货机一次交易要涉及加法运算、减法运算以及在退币时的除法运算,这是它的内部功能。还要有货币识别系统和货币的传动来实现完整的售货、退币功能。为简单计,本次实验只要求设计一个简单的自动售货机逻辑电路。它的投币口每次只能投入一枚五角或一元的硬币。投入一元五角钱硬币后机器自动给出一杯饮料;投入两元(两枚一元)硬币后,在给出饮料的同时找回一枚五角的硬币,投币时只能一个一个地投。三.实验步骤及实验结果1.电路变量分析根据设计要求,共有七个变量。clk:时钟输入;reset:系统复位信号;half_dollar:代表投入五角硬币;one_dollar:代表投入一元硬币;half_out:售货机找回一枚五角硬币信号;dispense:机器售出一瓶饮料;collect:提示投币者取走饮料。2.状态转换图的确定该电路一共用3个状态就可以完成设计要求。状态idle,表示为投入任何硬币状态;状态half,表示投入五角钱的状态;状态one,表示投入一元钱的状态。当投入一元五角钱时,给出一杯饮料并转到状态idle;投入两元(两枚一哈尔滨工业大学SOPC及EDA技术课程4元)硬币后,在给出饮料的同时找回一枚五角的硬币并转到状态idle,状态装换图如下图1所示:图1自动售货机状态图图1中如果当前状态为idle(即未投入硬币),则投入五角钱即输入为01则状态转到half,在状态half下再投入五角钱则转到one;在idle状态投入一元钱即输入为10则直接转到状态one,在one状态下如果再投入五角钱,则输出dispense为1、half_out为0,表示机器售出一瓶饮料,售货机不找回五角硬币。3.利用QuartusII软件仿真实现3.1新建工程machine_sell选择FileNewProjectWizard,新建工程文件,输入工程名为machine_sell(注意此处工程名与工程的顶层实体名必须一致)。在Availabledevices列表中选择FPGA型号EP2C70F896C6(本实验为仿真实验,此处不作硬性要求)。3.2设计输入在当前工程下,选择FileNew菜单,接着选择VerilogHDLFile,单击OK,打开TextEditor。选择FileSaveas菜单,将文件保存到工程下,文件名为machine_sell,保存类型为VerilogHDLFile,则生成machine_sell.v文件。3.3Verilog语言描述利用VerilogHDL语言编写的源程序如下:modulemachine_sell(one_dollar,half_dollar,collect,half_out,dispense,reset,clk);parameteridle=2'b00,half=2'b01,one=2'b10;//代表投入币值的几种情况inputone_dollar,half_dollar,reset,clk;outputcollect,half_out,dispense;regcollect,half_out,dispense;reg[1:0]D;always@(posedgeclk)哈尔滨工业大学SOPC及EDA技术课程5beginif(reset)begindispense=0;collect=0;half_out=0;D=idle;endelsecase(D)idle:if(half_dollar)begindispense=0;collect=0;half_out=0;D=half;endelseif(one_dollar)begindispense=0;collect=0;half_out=0;D=one;endelsebegindispense=0;collect=0;half_out=0;D=idle;endhalf:if(half_dollar)begindispense=0;collect=0;half_out=0;D=one;endelseif(one_dollar)begindispense=1;collect=1;哈尔滨工业大学SOPC及EDA技术课程6half_out=0;D=idle;endelsebegindispense=0;collect=0;half_out=0;D=half;endone:if(half_dollar)begindispense=1;collect=1;half_out=0;D=idle;endelseif(one_dollar)begindispense=1;collect=1;half_out=1;D=idle;endelsebegindispense=0;collect=0;half_out=0;D=one;endendcaseendendmodule3.4仿真电路图保存上述源程序,进行综合编译。编译无误后,生成仿真电路图(RTLviewer)如下图2所示:哈尔滨工业大学SOPC及EDA技术课程7图2自动售货机仿真电路图3.5仿真结果在同一工程下创建波形文件(VectorWaveformFile)machine_sell.vwf如下图3所示:图3波形文件单击SimulatorSettings,将Simulationmode设置为Functional,最后单击仿真按钮启动功能仿真。仿真结果如下图4所示:图4仿真波形图由图4所示仿真结果可知:当reset为1时,系统复位,状态机的状态为初始状态idle。投入五角硬币,状态转到half状态,再投入五角状态转到one状态,再投入五角状态回到idle状态,同时输出信号dispense和collect为1,驱动执行机构售出一瓶饮料,并提示投币者取走饮料。四.实验结果分析哈尔滨工业大学SOPC及EDA技术课程81.本次仿真实验通过对自动售货机状态转换图的分析得出其工作原理,并根据工作原理编写出VerilogHDL源程序;2.通过仿真验证,该设计能较好的实现自动售货机的基本功能;3.根据仿真结果,仿真输出与理论值相比有一定的延时,这是系统误差,难以消除。五.实验结论及总结通过此次仿真实验—基于状态机的自动售货机的设计,我掌握了QuartusII软件的基本使用方法以及VerilogHDL语言的语法特点,可以初步编写一些逻辑功能较为简单的源程序。同时,通过此次实验,我掌握了设计工作的完整流程,为以后的课程设计积累了宝贵的经验。最后,实验过程中难免遇到一些问题,我们要冷静分析,找出原因。总之,通过此次实验,我学到了许多有益的知识。