EDA课程设计-自动饮料售卖机.doc_第1页
EDA课程设计-自动饮料售卖机.doc_第2页
EDA课程设计-自动饮料售卖机.doc_第3页
EDA课程设计-自动饮料售卖机.doc_第4页
EDA课程设计-自动饮料售卖机.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要:本设计通过运用eda技术,选择fpga芯片实现关于自动饮料售卖机控制电路的设计与仿真,其fpga设计为采用verilog hdl 硬件描述语言描述自动饮料售卖机控制电路,完成对电路功能的仿真以及实现。本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数和计算,将投入的总金额用两位数码管显示出来,当达到了交易金额时,闸门打开,汽水掉出来,当超出了交易金额时,则饮料售卖机自动找钱,输出部分通过组合逻辑电路实现。由于本设计是采用fpga芯片实现相应功能,所以与传统的设计方式相比,fpga芯片将大量的电路功能集成到一个芯片中,并且可以由用户自行设计逻辑功能,进而提高了该系统的集成度和可靠性。关键词:eda技术、fpga芯片、硬件描述语言astract: the design by using eda, choose the fpga realizing automatic drinks sold chip control circuit design and simulation, the fpga design for using verilog hdl hardware description language describes automatic control circuit, selling drinks to the simulation and realization circuit function. this system consists of external investment coins to produce pulse detecting and the pulse count and calculation, the total amount of investment will be displayed with two digital tube, when the transaction amount, to open gate, soda drop out, when beyond the transaction amount, beverage sales machine, automatic change by the assembly logic circuit output part. because of this design is adopted fpga realizing the function, so the chip with the traditional design methods, the fpga chips will be integrated into a circuit function in a chip, and can be designed by the user, and then improve the logic function of this system integration and reliability.keywords: eda, fpga chips, hardware description language前言21世纪人类将全面进入信息化社会,对微电子信息技术和微电子vlsi基础技术将不断提出更高的发展要求,微电子技术仍将继续是21世纪若干年代中最为重要的和最有活力的高科技领域之一。而集成电路(ic)技术在微电子领域占有重要的地位。伴随着ic技术的发展,电子设计自动化(electronic design automation eda)己经逐渐成为重要设计手段,其广泛应用于模拟与数字电路系统等许多领域。 vhdl是广泛使用的设计输人硬件语言,可用于数字电路与系统的描述、模拟和自动设计.cpld/fpga(复杂可编程逻辑器件/现场可编程门阵列)为数字系统的设计带灵活性,兼有串/并行工作方式和高集成度、高速、高可靠性等明显的特点,cpld/fpga的时钟延迟可达纳秒级,结合其并行工作方式,在超高速领域和实时测控方面有非常广泛的应用。 本次设计的目的是使用可编程逻辑器件设计一个自动饮料售卖机,取代传统人工售卖的方式。设计要求通过用一片cpld/fpga进行设计一个自动饮料售卖机,自动饮料售卖机应具有如下的特点:首先能识别投入的不同面值的货币(如0.5元,1元的硬币)并能对所投的不同币值的货币进行计数,当达到了购买商品的数量时,可以将控制饮料的闸门打开,投放出饮料,这种自动饮料售卖机具有退还多出的货币的功能。这种售卖机要有较高的可靠性,能给人们的日常生活带事极大的方便。整个系统采用 verilog hdl程序编写,并能进行硬件仿真。课题除了学习相应的硬件知识外,还要学习如何使用vhdl语言设计可编程逻辑器件。 目 录1、eda技术及设计背景51.1 eda技术的介绍51.2 eda技术的应用51.3 eda技术的发展51.4 eda技术的发展趋势61.5 fpga工作原理及其基本特点71.6 cpld与fpga的关系71.7 自动饮料售卖机的特点81.8 quartus ii 简介82、整体设计方案的论证92.1 设计内容92.2 设计方案比较92.3 方案论证102.4 方案选择103、单元模块设计与实现103.1有源晶振电路113.2供电电路113.3 复位电路123.4 数码管显示电路143.5 最小系统原理154、系统软件实现及仿真154.1 verilog结构图154.2 键盘去抖电路164.3 脉冲展宽电路174.4 穆尔型状态选择电路184.5 编译结果194.6仿真结果:204.7 rtl描述215、总结215.1、设计小结215.2、设计优化226、致谢227、参考文献221、eda技术及设计背景1.1 eda技术的介绍eda是电子设计自动化(electronic design automation)的缩写,在20世纪60年代中期从计算机辅助设计(cad)、计算机辅助制造(cam)、计算机辅助测试(cat)和计算机辅助工程(cae)的概念发展而来的计算机软件系统。eda技术是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。利用eda工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出ic版图或pcb版图的整个过程的计算机上自动处理完成。现在对eda的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有eda的应用。目前eda技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到eda技术。本文所指的eda技术,主要针对电子电路设计、pcb设计和ic设计。eda设计可分为系统级、电路级和物理实现级。 1.2 eda技术的应用eda在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。在教学方面,几乎所有理工科(特别是电子信息)类的高校都开设了eda课程。主要是让学生了解eda的基本概念和基本原理、掌握用hdl语言编写规范、掌握逻辑综合的理论和算法、使用eda工具进行电子电路课程的实验验证并从事简单系统的设计。一般学习电路仿真工具(如multisim、pspice)和pld开发工具(如altera/xilinx的器件结构及开发系统),为今后工作打下基础。科研方面主要利用电路仿真工具(multisim或pspice)进行电路设计与仿真;利用虚拟仪器进行产品测试;将cpld/fpga器件实际应用到仪器设备中;从事pcb设计和asic设计等。在产品设计与制造方面,包括计算机仿真,产品开发中的eda工具应用、系统级模拟及测试环境的仿真,生产流水线的eda技术应用、产品测试等各个环节。如pcb的制作、电子设备的研制与生产、电路板的焊接、asic的制作过程等。从应用领域来看,eda技术已经渗透到各行各业,如上文所说,包括在机械、电子、通信、航空航航天、化工、矿产、生物、医学、军事等各个领域,都有eda应用。另外,eda软件的功能日益强大,原来功能比较单一的软件,现在增加了很多新用途。如autocad软件可用于机械及建筑设计,也扩展到建筑装璜及各类效果图、汽车和飞机的模型、电影特技等领域。1.3 eda技术的发展eda技术的发展始于70年代,至今经历了三个阶段。电子线路的cad(计算机辅助设计)是eda发展的初级阶段,是高级eda系统的重要组成部分。它利用计算机的图形编辑、分析和存储等能力,协助工程师设计电子系统的电路图、印制电路板和集成电路板图;采用二维图形编辑与分析,主要解决电子线路设计后期的大量重复性工作,可以减少设计人员的繁琐重复劳动,但自动化程度低,需要人工干预整个设计过程。这类专用软件大多以微机为工作平台,易于学用,设计中小规模电子系统可靠有效,现仍有很多这类专用软件被广泛应用于工程设计。80年代初期,eda技术开始技术设计过程的分析,推出了以仿真(逻辑模拟、定时分析和故障仿真)和自动布局与布线为核心的eda产品,这一阶段的eda已把三维图形技术、窗口技术、计算机操作系统、网络数据交换、数据库与进程管理等一系列计算机学科的最新成果引入电子设计,形成了cae计算机辅助工程。也就是所谓的eda技术中级阶段。其主要特征是具备了自动布局布线和电路的计算机仿真、分析和验证功能。其作用已不仅仅是辅助设计,而且可以代替人进行某种思维。cae这种以原理图为基础的eda系统,虽然直观,且易于理解,但对复杂的电子设计很难达到要求,也不宜于设计的优化。 所以,90年代出现了以自动综合器和硬件描述语言为基础,全面支持电子设计自动化的esda(电子系统设计自动化),即eda阶段、也就是目前常说的eda.过去传统的电子系统电子产品的设计方法是采用自底而上(bottom_ up)的程式,设计者先对系统结构分块,直接进行电路级的设计。这种设计方式使设计者不能预测下一阶段的问题,而且每一阶段是否存在问题,往往在系统整机调试时才确定,也很难通过局部电路的调整使整个系统达到既定的功能和指标,不能保证设计一举成功。eda技术高级阶段采用一种新的设计概念:自顶而下(top_ down)的设计程式和并行工程(concurrent engineering)的设计方法,设计者的精力主要集中在所要电子产品的准确定义上,eda系统去完成电子产品的系统级至物理级的设计。此阶段eda技术的主要特征是支持高级语言对系统进行描述,高层次综合(high level synthesis)理论得到了巨大的发展,可进行系统级的仿真和综合。1.4 eda技术的发展趋势从目前的eda技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。中国eda市场已渐趋成熟,不过大部分设计工程师面向的是pcb制板和小型asic领域,仅有小部分(约11%)的设计人员开发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要引进和学习一些最新的eda技术。在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(cad)、计算机辅助工程(cae)、计算机辅助工艺(capp)、计算机机辅助制造(cam)、产品数据管理(pdm)、制造资源计划(mrpii)及企业资源管理(erp)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(m3c)结构。在asic和pld设计方面,向超高速、高密度、低功耗、低电压方面发展。外设技术与eda工程相结合的市场前景看好,如组合超大屏幕的相关连接,多屏幕技术也有所发展。中国自1995年以来加速开发半导体产业,先后建立了几所设计中心,推动系列设计活动以应对亚太地区其它eda市场的竞争。在eda软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有asic设计工具,但不对外开放。中国华大集成电路设计中心,也提供ic设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具在各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年夏合增长率分别达到了50%和30%。eda技术发展迅猛,完全可以用日新月异来描述。eda技术的应用广泛,现在已涉及到各行各业。eda水平不断提高,设计工具趋于完美的地步。eda市场日趋成熟,但我国的研发水平仍很有限,尚需迎头赶上。1.5 fpga工作原理及其基本特点fpga的工作原理:fpga采用了逻辑单元阵列lca(logic cell array)这样一个概念,内部包括可配置逻辑模块clb(configurable logic block)、输出输入模块iob(input output block)和内部连线(interconnect)三个部分。fpga的基本特点:1)采用fpga设计asic电路,用户不需要投片生产,就能得到合用的芯片。 2)fpga可做其它全定制或半定制asic电路的中试样片。 3)fpga内部有丰富的触发器和io引脚。 4)fpga是asic电路中设计周期最短、开发费用最低、风险最小的器件之一。 5) fpga采用高速chmos工艺,功耗低,可以与cmos、ttl电平兼容。 可以说,fpga芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 fpga是由存放在片内ram中的程序来设置其工作状态的,因此,工作时需要对片内的ram进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,fpga芯片将eprom中数据读入片内编程ram中,配置完成后,fpga进入工作状态。掉电后,fpga恢复成白片,内部逻辑关系消失,因此,fpga能够反复使用。fpga的编程无须专用的fpga编程器,只须用通用的eprom、prom编程器即可。当需要修改fpga功能时,只需换一片eprom即可。这样,同一片fpga,不同的编程数据,可以产生不同的电路功能。因此,fpga的使用非常灵活。1.6 cpld与fpga的关系早在1980年代中期,fpga已经在pld设备中扎根。cpld和fpga包括了一些相对大数量的可以编辑逻辑单元。cpld逻辑门的密度在几千到几万个逻辑单元之间,而fpga通常是在几万到几百万。 cpld和fpga的主要区别是他们的系统结构。cpld是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而fpga却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。 cpld和fpga另外一个区别是大多数的fpga含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。一个因此有关的重要区别是很多新的fpga支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些fpga可以让设备的一部分重新编辑而其他部分继续正常运行。1.7 自动饮料售卖机的特点自动饮料售卖机是集光、机、电、机械加工、制冷、加温、防伪识别及电子软件技术于一体的高新技术产品,具有以下特点: 昼夜服务、方便自如 全天24小时提供自助消费服务,可随时随地满足消费需求,方便市民。 自动找零、兑零方便 使用10元、5元纸币及1元、0.5元硬币,且自动找零(1元、0.5元硬币),方便 乘车、搭地铁。 操作简单、快捷新颖 放入纸币或硬币,按下相应按钮,所选商品即到眼前,倍添购物乐趣。1.8 quartus ii 简介quartus ii 是altera公司的综合性pld开发软件,支持原理图、vhdl、veriloghdl以及ahdl(altera hardware description language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整pld设计流程。 quartus ii可以在xp、linux以及unix上使用,除了可以使用tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 quartus ii支持altera的ip核,包含了lpm/megafunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方eda工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方eda工具。 此外,quartus ii 通过和dsp builder工具与matlab/simulink相结合,可以方便地实现各种dsp应用系统;支持altera的片上可编程系统(sopc)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 maxplus ii 作为altera的上一代pld设计软件,由于其出色的易用性而得到了广泛的应用。目前altera已经停止了对maxplus ii 的更新支持,quartus ii 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。altera在quartus ii 中包含了许多诸如signaltap ii、chip editor和rtl viewer的设计辅助工具,集成了sopc和hardcopy设计流程,并且继承了maxplus ii 友好的图形界面及简便的使用方法。 altera quartus ii 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。2、整体设计方案的论证2.1 设计内容要求设计一种通用自动饮料售卖机的控制电路,这种控制电路应具有以下的功能:1、首先能识别投入的不同面值的货币(如0.5元,1元的硬币)。2、并能对所投的不同币值的货币进行计数。3、当达到了购买商品的数量时,可以将控制饮料的闸门打开,投放出饮料。4、这种自动饮料售卖机具有退还多出的货币的功能。2.2 设计方案比较方案一:通过运用以at89s52单片机为核心,加以外部电源供电、12mhz的晶振时钟电路、复位电路,来实现基于单片机的自动饮料售卖机控制电路的系统设计。由于这种方案具有结构简单、单片机技术比较成熟和硬件部分成本低等特点,所以该方案的各部分电路都比较容易实现,而且其系统的可靠性也比较高。其原理框图如图2-1:电源电路时钟电路复位电路控制饮料闸门打开控制零钱找补闸门打开at89s52单片机 图2-1单片原理框图图2-2 软件流程方案二:通过运用eda技术,基于现场可编程逻辑门阵列fpga芯片,采用veriloghdl硬件描述语言实现自动饮料售卖机控制电路的设计。较单片机而言fpga有以下优点:1、fpga有丰富的io资源,可以很容易用不同ip连接各种外设。2、fpga不同逻辑可以并行执行,可以同时处理不同任务从而fpga的工作效率更高。3、fpga内部集成锁相环,可以把外部时钟倍频,核心频率可以达到几百m,比单片机运行速度快很多。其系统原理框图如图2-3所示:shoumaijiclkout1 outa weixhuanbduanxuan7:0图2-3系统原理框图 2.3 方案论证通过方案一二的比较,可以看出方案一的设计使用分立元件电路较为多,因此会增加电路调试难度,且电路的不稳定性也会随之增加,而采用fpga芯片实现的电路,由于在整体性上较好,在信号的处理和整个系统的控制中,fpga的方案能大大缩减电路的体积,提高电路的稳定性。此外其先进的开发工具使整个系统的设计调试周期大大缩短,一般来讲,同样的逻辑,基于fpga要比基于单片机要快很多,因为它们工作的原理是完全不同的。单片机是基于指令工作的,同样的激励到达单片机后,单片机首先要判断,然后读取相应的指令,最后作出相应,这每一步都是需要在单片机的时钟驱动下一步步的进行。而基于fpga则是把相应的逻辑“暂时”固化为硬件电路了,它对激励作出的响应速度就是电信号从fpga的一个管脚传播另一个管脚的传播速度,当然这指的是异步逻辑,同时电信号也要在芯片内进行一些栅电容的充放电动作,但这些动作都是非常非常快的。 2.4 方案选择结合自动售卖机的整体性能以及要求的提升,也对其各个部件的性能提出了更高的要求,尤其在现代soc技术的引领下,人们对低故障、高实时、高可靠、高稳定的性能更加青睐。结合本设计的要求及综合以上比较的情况,我们选择了基于fpga的自动饮料售卖机的电路方案。3、单元模块设计与实现3.1有源晶振电路图3-1有源晶振电路石英晶片之所以能当为振荡器使用,是基于它的压电效应:在晶片的两个极上加一电场,会使晶体产生机械变形;在石英晶片上加上交变电压,晶体就会产生机械振动,同时机械变形振动又会产生交变电场,虽然这种交变电场的电压极其微弱,但其振动频率是十分稳定的。当外加交变电压的频率与晶片的固有频率(由晶片的尺寸和形状决定)相等时,机械振动的幅度将急剧增加,这种现象称为“压电谐振”。 压电谐振状态的建立和维持都必须借助于振荡器电路才能实现。图3-1所示,采用有源晶振作为时钟信号源,它是一个完整的振荡器,其内部除了石英晶体外还有阻容软件和晶体管,有源晶振信号质量好,比较稳定,而且连接方式比较简单。为了使有源晶振能输出较好的波形,必须保证供电的稳定。所以在晶振电路的前端加了个小电容对电源进行滤波,在时钟输出端加了个小电阻,能有效抑制高次谐波和实现阻抗匹配。 3.2供电电路图3-2 5v电源电路图图3-3 2.5v电源电路图图3-4 3.3v电源电路图本设计中使用到了三个电源,第一是+5v的电源,用于为上拉电阻以及数码管显示电路提供电压;第二是+3.3v电源,用于为fpga芯片提供工作电压;第三是+2.5v电源,用于为fpga芯片内核工作提供电压。在fpga芯片管脚上,+2.5v电源必须接在内核电源输入端(vccint)上,而vccio是芯片输入输出引脚工作电源,根据输入输出的设备不同,可以接2.5 v、3.3 v或5.0 v。3.3 复位电路在上电或复位过程中,控制cpu的复位状态:这段时间内让cpu保持复位状态,而不是一上电或刚复位完毕就工作,防止cpu发出错误的指令、执行错误操作,也可以提高电磁兼容性能。无论用户使用哪种类型的fpga芯片,总要涉及到复位电路的设计。而复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是复位电路设计不可靠引起的。本次设计的复位电路在系统接电后由3.3v经r1给c1充电,此时reset上得到低电平.经过一段时间后,c1被充满,reset点电平升高.最后稳定在高电平.这是接电后的情况,即上电复位. 另一个情况是当按下快关时,c77经过r1放电到地,reset被瞬间拉到低电平,当按键放开后,c1再次通过r2充电,经过一段时间后稳定到高电平.完成手动复位.复位电路如图3-3所示。图3-5 复位电路3.4 数码管显示电路图 3-6 led显示电路led显示有静态显示和动态方式两种工作方式。led显示器工作于静态显示方式时,各位的共阳极连接在一起并接+5v,每位的段码线分别与一个8位的锁存器输出相连。之所以为静态显示,是因为各个led的显示字符的字符一经确定,相应的锁存器的段码输出将维持不变,直到送入另外一个字符的段码为止。但是静态显示方式下,各位led的段码线都是独立的,因此一个4位的led显示器需要占用4*8+4=36个i/o口,在这种情况下为了简化接线,因此本设计中采用的是动态扫描方式来显示距离。在动态显示方式下,通常将所有位的段码线相应并联在一起,由一个8位的i/o口控制,形成段码线的多路复用,而各位的共阳极或共阴极分别由相应的i/o口控制,形成段码线的多路复用,而各位的分时选通。图3-4所示的电路时一个四位的led显示电路。其中段码线占用一个8位的i/o口,而位选线占用四位i/o口。由于各段码线并联,8位i/o口输出的段码对各个显示位来说都是相同的。因此,在同一时刻,如果各位位选线都处于选通状态的话,四位led将显示相同的字符。若要各位led能同时显示出与本位相应的显示字符,就必须采用动态显示方式,即在某一时刻,只让某一位的位选线处于选能状态,而其他各位的位选处于关闭状态,同时,段码线输出相应的要显示的字符段码。这样,在同一时刻,四位的led中只有选通的那一位显示出字而其他三位则是熄灭的。同样在下一时刻,只让下一位的位选处于选通状态,而其他各位的位选线处于关闭状态,在段码线上将要显示出字符的段码,则同一时刻,只有选通位显示相应的字符。如此循环下去,就可以使各位显示出将要显示的字符。3.5 最小系统原理图3-7最小系统电路原理图本设计的电路实现是基于fpga最小系统原理图,再配以所需的外设。最小系统设计包含了时钟产生电路模块、程序下载配置电路模块、电源电路模块,通过连线将各个模块进行连接成最小系统。由于本设计电路比较简单,外设比较少,四位的led数码管 动态扫描显示前面计数器的计数值即频率值。将外设与最小系统进行合理正确连接,即可实现本设计的电路原理要求。4、系统软件实现及仿真4.1 verilog结构图verilog结构图由三部分组成:键盘去抖电路,脉冲展宽电路,穆尔型状态选择电路。 其电路原理图如图4-1所示:图4-1 电路原理图每一路的输入都经过键盘去抖电路和脉冲展宽电路之后再送给售卖机状态判断电路。ck_coin是键盘去抖电路的时钟,用这个时钟去检测按键状态;clk_vender是脉冲展宽电路和售卖机状态判断电路的时钟,脉冲展宽电路利用产生脉宽2倍于此时钟的脉冲信号作为售卖机判断电路的输入。ck_coin和clk_vender可以用一个分频器电路从ck_coin中产生clk_vender,这样系统就只有一个时钟,在此代码中没有加分频电路。 4.2 键盘去抖电路键盘去抖电路功能:对按键设定时钟判断,按键高电平至少维持三个时钟周期才产生按键信号,其他小于3个时钟周期的电平认为是抖动,予以消除。同时每次按下一个键,产生一个与键盘检测电路时钟相同脉宽的脉冲信号表示有按键,如果按键高电平持续维持很多时钟周期,只判定按键一次。键盘去抖电路源代码:module coins(coin, clk, res);input coin, clk;output res;reg 1:0 status;reg res_con, res_in;always (posedge clk or negedge coin)begin if(!coin) status=0; else begin if(clk & (status=0) status=1; else if(clk & (status=1) begin res_in=1;status=2; end else if(clk & (status=2) res_in=0; endendalways (negedge clk)begin if(res) res_con=0; else res_con=1;endassign res=res_in&res_con;endmodule4.3 脉冲展宽电路脉冲展宽电路功能:因为去抖电路产生的按键脉冲位于按键高电平的中间,与clk_coin的脉宽一样,而clk_vender的脉宽远远大于clk_coin,所以这样直接用clk_vender去检测按键脉冲,很显然无法正确判断。同时还会出现按键没有完全结束,但是结果已经产生,这样不合乎逻辑。用脉冲展宽电路把原来的按键窄脉冲展宽成clk_vender脉宽的两倍,便于正确检测输入信号。脉冲展宽电路源代码:module smith(clk, data_in, data_out,rst);input clk, data_in,rst;output data_out;reg data_out,data_temp;reg1:0 count;always (posedge data_in or posedge clk or negedge rst )begin if(!rst) data_temp=0; else if(data_in) data_temp=1; else if(count=2b01)data_temp=0; endalways (posedge clk or negedge rst)begin if(!rst) count=0; else if(data_out)count=count+1; else count=0; endalways(negedge clk or negedge rst)begin if(!rst) data_out=0; else if(count=2b01)data_out=0; else if(!clk & data_temp)data_out =1; endendmodule4.4 穆尔型状态选择电路穆尔型状态选择电路功能:根据输入决定输出状态,利用状态机来实现。先对各种输入产生一个输出状态,然后根据这些状态来赋值最后的输出。穆尔型状态电路的输出仅仅取决于状态state,米利型状态电路的输出不仅取决于状态,还取决于当前的输入,这在程序中能够体现。(此部分代码来源于introductory digital systems laboratory 的 l6: fsms and synchroniizatiion部分,其中详细讲述了两种状态选择方式的优缺点和状态流程图。)穆尔型状态选择电路源代码:module moorevender (n, d, q, dc, dn, dd, clk, reset, state); input n, d, q, clk, reset;output dc, dn, dd;output 3:0 state;reg 3:0 state, next;reg dc,dd,dn;parameter idle = 0;parameter got_5c = 1;parameter got_10c = 2;parameter got_15c = 3;parameter got_20c = 4;parameter got_25c = 5;parameter got_30c = 6;parameter got_35c = 7;parameter got_40c = 8;parameter got_45c = 9;parameter got_50c = 10;parameter return_20c = 11;parameter return_15c = 12;parameter return_10c = 13;parameter return_5c = 14;always (posedge clk or negedge reset)if (!reset) state = idle;else state = next;always (state or n or d or q) begincase (state)idle: if (q) next = got_25c;else if (d) next = got_10c;else if (n) next = got_5c;else next = idle;got_5c: if (q) next = got_30c;else if (d) next = got_15c;else if (n) next = got_10c;else next = got_5c;got_10c: if (q) next = got_35c;else if (d) next = got_20c;else if (n) next = got_15c;else next = got_10c;got_15c: if (q) next = got_40c;else if (d) next = got_25c;else if (n) next = got_20c;else next = got_15c;got_20c: if (q) next = got_45c;else if (d) next = got_30c;else if (n) next = got_25c;else next = got_20c;got_25c: if (q) next = got_50c;else if (d) next = got_35c;else if (n) next = got_30c;else next = got_25c;got_30c: next = idle;got_35c: next = return_5c;got_40c: next = return_10c;got_45c: next = return_15c;got_50c: next = return_20c;return_20c: next = return_10c;return_15c: next = return_5c;return_10c: next = idle;return_5c: next = idle;default: next = idle;endcaseendalways (posedge clk)begindc = (state = got_30c | state = got_35c |state = got_40c | state = got_45c |state = got_50c);dn = (state = return_5c);dd = (state = return_20c | state = return_15c |state = return_10c);endendmodule4.5 编译结果设定 sell.bdf文件为顶层文件,进行编译,编译成功。编译结果如图4-2所示:图4-2 编译结果4.6 仿真结果:图4-3 仿真波形图d,n,q是按键输入,带有抖动过程。d1,n1,q1是去抖电路输出,可以看到只产生一个按键脉冲,此脉冲脉宽为clk_coin的脉宽(2微秒)。d2,n2,q2是展宽电路输出,产生2倍于clk_vender脉宽的脉冲(20微秒),并且在此脉冲对应的clk_vender只有一个时钟上升沿,这样防止错误检测。可以看到输出结果正确。输入5+10+25=40。输出一瓶饮料,找零10。在微秒级别设定仿真,可以消除不必要的毛刺。对输入信号做两次处理变换的目的在于:让输入独立于售卖机的检测时钟,任何状态下,只要只有一次按键,无论按键发生在时钟的哪个阶段,无论按键持续了多少个时钟周期,都认为投币一次,这样更符合实际情况。4.7 rtl描述系统级设计的下一个层次是rtl设计,一般来说,系统级设计只用于仿真,验证系统功能,筒仓不支持综合,因此需要进行rtl设计。rtl:寄存器级的基本部件是寄存器、计数器、多路复用器和算术逻辑单元(alu),这些基本部件有时也称为功能块。寄存级的基本部件通常采用真值表和状态来表示。本设计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论