verilog自动售货机.doc
齐 齐 哈 尔 大 学SOPC课程设计(论文)题目: 饮料自动提取机的设计 院(系): 通信与电子工程学院 专业班级: 电子091 学 号: 2009131037 学生姓名: 闫微 指导教师: 董亮 起止时间:2011.12.19-2011.12.30 摘要 饮料自动售货机是台机电一体化的自动化装置,再接收到货币已输入的前提下,靠触摸控制按钮输入信号使控制器启动相关位置的机械装置完成规定动作,将货物输出。当顾客按下需要买的商品所对应的按键时,数码管上显示出该商品的的价格,然后顾客需要将货币投入投币口,数码管上显示出所投币额。当按下确认键,则自动售货机将对投入的货币与商品的价格进行比较。如果投入的币额足够时,则自动送出商品,并且把多余的钱找回,在数码管上显示出来。本课程设计设想采用专用集成电路芯片实现饮料自动提取机的功能。在本次设计中,系统开发平台为Quarter2,硬件描述语言是VerilogHDL。设计方案中,售货机具备硬币识别及找零功能,并能完成四种商品的出售。依据设计方案和设计平台完成了程序编写和程序调试,通过运行 程序及时序波形的仿真有效验证了设计的正确性,初步实现了设计目标。关键词: 自动售货机 VerilogHDL Quarter 目 录第1章 绪论1 饮料自动提取机概况1 本文研究内容2 目的与意义2第2章 系统设计方案3 饮料自动提取机总体设计方案3 系统的参数4第3章 饮料自动提取机的基本原理5 饮料自动提取机功能5 饮料自动提取机的基本组成5 投币信号产生的设计5 时钟电路的设计5 数码显示的设计6第4章 饮料自动提取机软件设计7 软件实现功能综述7 计数功能的设计7 计数功能接口电路7 计数功能程序设计7 投币功能的设计8 投币功能的接口电路8 投币功能程序设计8 显示功能的设计9 显示功能的接口电路9 显示功能程序设计9 显示功能的设计11 显示功能的接口电路11 显示功能程序设计11第5章 饮料自动提取机系统的仿真分析13 系统原理图13 计数功能的仿真分析13 投币功能的仿真分析14 取货功能的仿真分析15 总体功能的仿真分析15第6章 课程设计总结16参考文献17第1章 绪论1.1 饮料自动提取机概况近年来,集成电路技术的迅猛发展,特别是可编程逻辑器件的高速发展,电子设计自动化EDA技术成为电子设计工程师的新宠。EDA技术以计算机为工具完成数字系统的逻辑综合、布局布线和设计仿真等工作。电路设计者只需要完成对系统功能的描述,就可以由计算机软件进行系统处理,最后得到设计结果,并且修改设计方案如同修改软件一样方便。利用EDA工具可以极大地提高设计效率。VHDL是指超高速集成电路硬件描述语言。VHDL主要用于描述数字系统的结构、行为、功能、和接口,除了含有许多具有硬件特征的语句外,VHDL的程序结构特点是,将一项工程设计或称设计实体分成外部和内部。在对一个设计实体定义了外部界面后,一旦其内部开发完成,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部的概念是VHDL系统设计的基本点。利用VHDL语言的方便与强大功能的特点设计了一套自动饮料售货机系统。其用方便、可靠、节省人力的自动饮料售卖机机将在社会生活中成为一种趋势,它的出现一定程度上也体现了现代文明的发展程度。本设计是一套结构简单,操作方便,性能可靠的自动饮料售卖机产品。自动饮料售卖机电路设计采用选择商品电路、投币累加电路、统计卖出商品电路等四个基本电路构成。自动售货机在接受投入钱币后,通过与商品价格比较,确定是否能够售出商品和把算出剩余的钱找回。当商品输出后售货机自动把上次卖出商品的价格和投入的钱币的总和清零,这时才可以进行下次交易。自动售货机还应满足商家查看销售商品的总和及使其清零,和控制该售货机进行整体复位。该售货机可以帮助商家更好的销售商品,并且节省人力,获得更大的利润自动饮料售卖机是能够根据投入的钱币自动取出饮料的机器,它是商业自动化的常用设备,不受时间、地点的限制,能节省人力、方便交易。现代的自动饮料售卖机的种类、结构和功能依出售的饮料种类而异。钱币装置是自动饮料售卖机的核心,其主要功能是确认投入钱币的真伪,分选钱币的种类,计算金额。如果投入的金额达到购买物品的数值即发出售货信号,并找出余钱。自动饮料售卖机自动输出顾客所要的商品。因此,自动售货机在商业,食品行业越来越普及,更方便消费者购买自己所需的商品。自动售卖机是本世纪70年代在日本、欧美发展起来的高新技术现代应用产品,被称为24小时营业的微型超市,售货领域已扩展至小食品、小用品、香烟、 卡、车票、邮票等。目前在40多个国家已经广泛使用,日本平均每23人一台,美国平均每40人一台,欧洲平均每60人一台。在邻国日本,70%份额的罐装饮料市场是通过自动售货机售出的;美国可口可乐公司拥有五十余万台饮料自动售货机分布在世界各地。通过自动售货机销售将成为商品零售业不可分割的重要组成部分。1.2 本文研究内容本次设计的是一个饮料自动提取机。饮料自动提取机主要是由以下几个部分构成,电源电路、数码显示、时钟脉冲、投币脉冲、闸门时间控制等,各部件形成一个简单的饮料自动提取机系统。本设计采用EDA技术,通过FPGA实现了数字电子钟电路的设计,通过QuartusII完成对电路的功能进行仿真。1.3 目的与意义本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数,其中a 表示投入的是0.5元的硬币,b 表示投入的是1元的硬币,每次根据投入的硬币不同而分别计数,并将投入的总金额用两位数码管显示出来,当达到了交易金额时,out产生一个正脉冲,此正脉冲控制闸门打开,汽水掉出来,当超出了交易金额,则out1会产生一个正脉冲,饮料售卖机找回0.5元钱。第2章 系统设计方案2.1 饮料自动提取机总体设计方案自动售货机控制系统设计主要有三个功能模块,一个为售货机模块:该模块能完成货物信息的存储,硬币处理,余额计算。一个为动态扫描模块:功能主要是硬件实验板上让两路信号同时在两个7段数码管上显示出来。另一个为输出控制模块:该模块主要是控制OUT和OUT1输出信号来控制阀门打开与找钱,并且控制阀门的打开时间。 设计思路:控制信号输入到售货机模块,售货机进行各项功能操作,输出信号在7段数码管上显示出来。时钟脉冲阀门控制译码投币信号输入与处理控制器显示 本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数,其中a 表示投入的是0.5元的硬币,b 表示投入的是1元的硬币,每次根据投入的硬币不同而分别计数,并将投入的总金额用两位数码管显示出来,当达到了交易金额时,out产生一个正脉冲,此正脉冲控制闸门打开,汽水掉出来,当超出了交易金额,则out1会产生一个正脉冲,饮料售卖机找回0.5元钱。2.2 系统的参数输入变量:a为投入0.5元信号,b为投入1元信号,a1,b1寄存投入的0.5元和1元硬币数目,时钟clk;输出变量:out为高电平时售卖机闸门打开,汽水掉出来,第3章 饮料自动提取机的基本原理3.1 饮料自动提取机功能本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数,其中a 表示投入的是0.5元的硬币,b 表示投入的是1元的硬币,每次根据投入的硬币不同而分别计数,并将投入的总金额用两位数码管显示出来,当达到了交易金额时,out产生一个正脉冲,此正脉冲控制闸门打开,汽水掉出来,当超出了交易金额,则out1会产生一个正脉冲,饮料售卖机找回0.5元钱。3.2 饮料自动提取机的基本组成 自动饮料售货机主要是由以下几个部分构成,电源电路、数码显示、时钟脉冲、投币脉冲、闸门时间控制等,各部件形成一个简单的自动售货机系统。其实现主要的功能是对投币信号的计数与计算,判断是否达到所买物品的价格,如果不足的显示所投的钱数,钱足则控制闸门三秒后放出饮料。3.2.1 投币信号产生的设计自动售货机的所有信号均由同步时钟信号CLK的正边沿触发,由于售货机的硬币接收器一般是一个机械装置,投币时产生的信号要比同步信号慢得多,一般可以持续好几个周期。必须对投币输入信号进行处理,使每一次投币时在CLK脉冲周期内只能产生一个脉冲作为功能控制模块的投币驱动信号。3.2.2 时钟电路的设计在功能实现模块中,售货机在放出饮料的时候需要延时三秒钟,程序中COUNT1数3000下,因此需要1KHZ的时钟脉冲,设计中为同步时钟,所以此时钟脉冲电路为芯片提供“脉搏”。 图中是一种1KHZ脉冲发生电路。它由集成电路CD4060和晶振、电阻和电容等元件组成。CD4060是14位二进制串行计数、分频器和振荡器。CD4060内部分为两部分,其中一部分是14级计数/分频器,其分频系数为1616348;另一部分既可与外接电阻和电容构成RC振荡器,又可与外接晶体构成高精度的晶体振荡器。在采用一定频率的晶振组成晶振振荡器,其震荡信号经过CD4060内部分频后,在Q输出相应频率的脉冲信号。设计中需要1000HZ的时钟脉冲,所以外接30720HZ的晶振,在Q5端输出大约是1000HZ的时钟脉冲。3.2.3 数码显示的设计根据程序中,在不满足交易金额的时候,需要把所投的币数额显示在数码管上,利用一个控制信号weixuan来控制数码管的显示位置,当weixuan为0时着在低位显示,当weixuan为1时选择高位。硬件中选用两个数码管来显示,芯片输出的电流不能驱动数码管来显示,因此需要74HC245来驱动数码管的显示,E端必须接地,这样芯片才能正常工作,DIR端的功能是:当为高的时候数据A到B,为低的时候B到A。设计中使用两片芯片,一片来让数码管显示数值,一片来控制weixuan让数码选择显示的位置。在74HC245与数码管之间需要用一个电阻。当投入五角的硬币的时候,由于不满足交易金额则数码管上显示0.5,为一元的时候则为01。第4章 饮料自动提取机软件设计4.1 软件实现功能综述在Quartus II软件平台上建立计数器电路的顶层电路文件并完成编译和仿真。用Verilog编写shoumaiji.v文件及注释。Quartus II软件提供完整、易于操作的图形用户界面可以完成整个设计流程中的各个阶段,并提供完整的命令行界面解决方案,使用命令行流程可以降低内存要求,并可使用脚本或标准的命令行选项和命令控制Quartus II软件。4.2 计数功能的设计4.2.1 计数功能接口电路计数功能模块bdf图如图4.2.1所示: a表示投入5角的硬币信号,b表示投入1元的硬币信号,out控制售卖机闸门是否打开,out为高电平时闸门打开;a1记录投入5角硬币的个数,b1记录投入1元硬币的个数。4.2.2 计数功能程序设计module jishu(a,b,out,a1,b1);input a,out,b;output a1,b1;reg 4:1a1,b1; /汽水出来后计数值清零always (posedge a or posedge out)beginif(out=1) a1<=0; /汽水出来后计数值清零else a1<=a1+4'b1;endalways (posedge b or posedge out)beginif(out=1) b1<=0; /汽水出来后计数值清零else b1<=b1+4'b1;endendmodule4.3 投币功能的设计4.3.1 投币功能的接口电路投币功能模块bdf图如图4.3.1所示: clk为时钟信号,a1记录投入5角硬币的个数,b1记录投入1元硬币的个数,out控制售卖机闸门是否打开,out为高电平时闸门打开,out1为找零信号,为高电平时,饮料售卖机找回5角钱。4.3.2 投币功能程序设计module toubi(clk,a1,b1,out,out1);input clk;input 3:0a1,b1; output out; /out为高电平时售卖机闸门打开,汽水掉出来reg out,out1;always(posedge clk) begin else if(b1=3)begin out<=1;out1<=1;end endendmodule4.4 显示功能的设计4.4.1 显示功能的接口电路显示功能模块bdf图如图4.4.1所示: clk为时钟信号,a表示投入5角的硬币信号,b表示投入1元的硬币信号,a1记录投入5角硬币的个数,b1记录投入1元硬币的个数。weixuan是选择要显示的数码管,duanxuan是数码管显示钱数。4.4.2 显示功能程序设计module xianshi (clk,a,b,a1,b1,duanxuan,weixuan,);input clk;input a,b;input 3:0a1,b1; /a为投入0.5元信号,b为投入1元信号output 8:1duanxuan; /输出8位段选信号output weixuan; /输出1位位选信号reg weixuan;reg 8:1duanxuan;reg 31:0count; /数码管动态扫描计数reg 31:0count1; /用于计算售卖机闸门打开时间always(posedge clk) beginif(a1=0&&b1=0) begincount<=count+1; if(count=50) /如果实际运行中发现数码管有闪烁,可以将此数值调小 begin weixuan<=1'b0; duanxuan<=8'b00111111; /0 end if(count=100) /如果实际运行中发现数码管有闪烁,可以将此数值调小 begin weixuan<=1'b1; duanxuan<=8'b00111111; count<=0; end end else if(a=1) /投币0.5元,显示0.5,假设数码管为共阴极的 begin count<=count+1; if(count=50) /如果实际运行中发现数码管有闪烁,可以将此数值调小 begin weixuan<=1'b0; duanxuan<=8'b01101101; /5 end if(count=100) /如果实际运行中发现数码管有闪烁,可以将此数值调小 begin weixuan<=1'b1; duanxuan<=8'b10111111; /0. count<=0; end end else if(b=1) /投币1元,显示01 begin count<=count+1; if(count=50) /如果实际运行中发现数码管有闪烁,可以将此数值调小 begin weixuan<=1'b0; duanxuan<=8'b00000110; /1 end if(count=100) /如果实际运行中发现数码管有闪烁,可以将此数值调小 begin weixuan<=1'b1; duanxuan<=8'b00111111; /0 count<=0; end endendendmodule4.5 取货功能的设计4.5.1 取货功能的接口电路计数功能模块bdf图如图4.5.1所示:clk为时钟信号,a1记录投入5角硬币的个数,b1记录投入1元硬币的个数,out为高电平时闸门打开,out1为找零信号,为高电平时,饮料售卖机找回5角钱。4.5.2 取货功能程序设计module quhuo (clk,a1,b1,out,out1);input clk;input 3:0a1,b1; output out; /out为高电平时售卖机闸门打开,汽水掉出来reg out,out1;reg 31:0count1; always(posedge clk) begin else if(b1=3)begin out<=1;out1<=1;end if(out=1) begin if(count1=3000)/让闸门打开3秒,由于为1KHz时钟,故要数3000下 begin out<=0; out1<=0; count1<=0; end else count1<=count1+1; end endendmodule第5章 饮料自动提取机系统的仿真分析5.1 系统原理图系统整体bdf原理图如图5.1所示:计数功能的仿真分析计数功能仿真图如图5.2所示:图 a为高电平时,投入了5角的硬币,a1、b1记录投入的5角、1元的个数,out为高电平时售卖机闸门打开,汽水掉出来。投币功能的仿真分析投币功能仿真图如图5.3所示:图 a1记录投入5角硬币的数量,b1记录投入以角硬币的数量,out1为找零,当其为高电平时,找零;out为高电平时售卖机闸门打开,汽水掉出来。的仿真分析显示功能仿真图如图5.4所示:图 a 是投入5角硬币信号,a1记录投入5角信号的个数,b是投入1元硬币信号,b1记录投入1元信号个数,duanxuan,weixuan控制数码管显示钱数。取货功能的仿真分析取货功能仿真图如图5.5所示:图 a 1,b1分别记录了5角,1元的个数,5个5角,饮料2.5元,无需找零,out1低电平,out高电平闸门打开,出饮料。3个5角,1个1元,饮料2.5元,无需找零,out1低电平,out高电平闸门打开,出饮料。总体功能的仿真分析总功能仿真图如图5.6所示:图 此图为总体功能仿真图,clk为时钟信号,a为投入5角硬币信号,b为投入1元硬币信号,duanzuan,weixuan显示投入的钱数,out1为找零,当其为高电平时,找零;out为高电平时售卖机闸门打开,汽水掉出来。第6章 课程设计总结经过这次对自动饮料售货机系统的设计,让我对EDA设计有了更进一步的认识,同时也对EDA这门课程游客更深入的了解。这次设计让我了解了关于自动饮料售货机的原理课设计理念,要设计一个电路要先进行软件仿真再进行实际的电路制作。通过这次设计让我收获不小。这次的课程设计终于顺利完成了,也解决了设计中遇见的一些问题。这次设计让我受益匪浅。对软件运用更加的熟练。在摸索该如何设计程序使之实现的过程中,培养并锻炼了我的设计思维,增加了实际操作经验,锻炼了能力,总的来说这次收获了很多,基本能够学以致用。根据所学课程,数字电子技术、模拟电子技术、Verilog、EDA等所学知识的应用在设计过程中都得到了相应巩固,我们对本专业的了解也更深了一层。经过了这次自己实践动手的设计,自己的分析能力得到了提高,动手能力也有很大进步,从中也收获了很多经验,希望今后类似这样课程设计、类似这样的锻炼机会能更多些。我想在今后的实践过程中我会有更大的进步,也会做的越来越好。 参考文献1 2 3 侯建军,SOPC技术基础教程,清华大学出版社,2008-055 束礼宝宋克柱伪随机数发生器的FPGA实现与研究J 电路与系统学报,2003年,第8卷,第3期.6 童诗白. 华成英. 模拟电子技术基础M. 高等教育出版社,2006-57 邱关源. 电路. 高等教育出版社M.8 王新梅. 肖国镇. 纠错码原理与方法M. 西安电子科技大学出版9 曹昕燕. 周凤臣. EDA技术实验与课程设计M. 清华大学出版社,2006-510王金明 数字系统设计与Verilog HDL M 电子工业出版社,2009-1