毕业论文-基于FPGA的投币式多功能充电器控制电路设计与实现_第1页
毕业论文-基于FPGA的投币式多功能充电器控制电路设计与实现_第2页
毕业论文-基于FPGA的投币式多功能充电器控制电路设计与实现_第3页
毕业论文-基于FPGA的投币式多功能充电器控制电路设计与实现_第4页
毕业论文-基于FPGA的投币式多功能充电器控制电路设计与实现_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、大连东软信息学院毕业设计(论文) 摘要大连东软信息学院本科毕业设计(论文)论文题目论文题目:基于FPGA的投币式多功能充电器控制电路设计与实现系 所: 电子工程系 专 业:电子信息工程(集成电路设计与系统方向) 学生姓名: 学生学号: 指导教师: 导师职称: 讲 师 完成日期: 2014年 4月 28日 大连东软信息学院Dalian Neusoft University of Information大连东软信息学院毕业设计(论文) Abstract I基于FPGA的投币式多功能充电器控制电路设计与实现摘 要随着科学技术的发展,大量使用电池供电的便携式电子产品进入人们的日常生活中,如手机、数码相

2、机、MP3等。这些电子产品给我们带来了各种娱乐方式。但这些设备维持其功能性的关键在于自身电量的充足。充电器恰好能够提高用电设备的续航能力。因此,设计一款投币式多功能充电器显的尤为重要。本文介绍的就是基于FPGA的投币式多功能充电器控制电路设计,功能是对投币器检测到的钱币信息进行计数,并通过金额情况进行对外充电电路的控制。主要模块包括:投币金额计数模块、信息显示控制模块、充电计时控制模块等。采用两位数码管显示投币数和倒计时的相关信息。该系统的控制电路基于FPGA,利用verilog HDL硬件描述语言实现。使用Quartus 软件进行设计,运用ModelSim就行仿真验证看是否达到预期功能。最终

3、借助开发板就行功能演示。关键词:FPGA,投币式,充电器Design of Coin Multi-function Charger Control Circuit Based on FPGAAbstractWith the science and technology developing, battery-powered portable electronic products come out, such as cell phone, digital camera, mp3 etc .We have colorful life because of using electronic pro

4、ducts .But we must ensure have good batteries in our portable electronic products. Using chargers can solve the problem. Therefore ,Its important that to design Coin multi-function charger .The paper is mainly about the design of coin multi-function charger control circuit. It contains with some mod

5、ules like Amount of coin counting module, Information display control module, charging controlling, charging timing control module, etc .Using nixietubes to displays relevantinformation.The design is based on FPGA and used verilog language. Using Quartus software to carry on the design .Using ModelS

6、im simulation to test the desired function .Finally Demofunctionality with the help of development board.Key words: FPGA,Coin,Charger大连东软信息学院毕业设计(论文) 目录目 录 TOC o 1-3 u 摘 要 PAGEREF _Toc387691814 h IIAbstract PAGEREF _Toc387691815 h III第1章 绪论 PAGEREF _Toc387691816 h 11.1 背景和意义 PAGEREF _Toc387691817 h

7、11.2 目前蓄电池的现状 PAGEREF _Toc387691818 h 11.3 电池发展趋势 PAGEREF _Toc387691819 h 1第2章关键技术介绍 PAGEREF _Toc387691820 h 32.1关键性开发技术的介绍 PAGEREF _Toc387691821 h 32.1.1FPGA技术 PAGEREF _Toc387691822 h 32.1.2Verilog HDL语言 PAGEREF _Toc387691823 h 32.1.3按键消抖技术 PAGEREF _Toc387691824 h 32.1.4时钟分频技术 PAGEREF _Toc387691825

8、 h 52.1.5数码管显示原理 PAGEREF _Toc387691826 h 52.2 开发软件 PAGEREF _Toc387691827 h 62.2.1 QuartusII PAGEREF _Toc387691828 h 72.2.2ModelSim PAGEREF _Toc387691829 h 72.2.3 Microsoft Office Visio PAGEREF _Toc387691830 h 8第3章系统需求分析 PAGEREF _Toc387691831 h 93.1 构架概述 PAGEREF _Toc387691832 h 93.2系统工作流程 PAGEREF _To

9、c387691833 h 103.3 系统设计方法 PAGEREF _Toc387691834 h 113.4系统设计的技术可行性分析 PAGEREF _Toc387691835 h 11第4章系统设计 PAGEREF _Toc387691836 h 134.1 设计指导思想和原则 PAGEREF _Toc387691837 h 134.2 系统设计流程 PAGEREF _Toc387691838 h 134.3数据通道的设计 PAGEREF _Toc387691839 h 144.4状态转换图 PAGEREF _Toc387691840 h 154.5系统结构图 PAGEREF _Toc38

10、7691841 h 16第5章系统实现 PAGEREF _Toc387691842 h 175.1 主要模块的实现 PAGEREF _Toc387691843 h 175.1.1时钟分频模块 PAGEREF _Toc387691844 h 175.1.2控制充电电路模块 PAGEREF _Toc387691845 h 175.1.3显示模块 PAGEREF _Toc387691846 h 185.1.4系统整体实现 PAGEREF _Toc387691847 h 195.2 系统的代码实现 PAGEREF _Toc387691848 h 205.2.1时钟模块代码实现 PAGEREF _Toc

11、387691849 h 205.2.2控制模块代码实现 PAGEREF _Toc387691850 h 205.2.3信息显示控制模块 PAGEREF _Toc387691851 h 23第6章系统测试 PAGEREF _Toc387691852 h 246.1 模块仿真测试 PAGEREF _Toc387691853 h 246.1.1时钟分频模块测试 PAGEREF _Toc387691854 h 246.1.2控制模块测试 PAGEREF _Toc387691855 h 246.1.3显示模块测试 PAGEREF _Toc387691856 h 256.1.4系统整体测试 PAGEREF

12、 _Toc387691857 h 25第7章结论 PAGEREF _Toc387691858 h 27参考文献 PAGEREF _Toc387691861 h 28致 谢 PAGEREF _Toc387691862 h 30大连东软信息学院毕业设计(论文)- 第1章 绪论1.1 背景和意义随着越来越多的便携式电器的出现,对电池的续航能力要求也越来越高,为了解决这个问题各大电子公司都采取了各种方法,例如:优化系统软件,加强对新型电池的开发研究等。但如今电池的发展远达不到用户的需求。在以快节奏生活为主的今天,在某些特殊的场合,人们总是被突如其来的电池没电的问题带来了很大的困扰,因此,在一些公共场合

13、投币式多功能充电器的出现就显的很有必要。本文论述的基于FPGA的投币式多功能充电器控制电路设计正是基于以上社会背景。利用FPGA的优越性设计一款方便、实用的充电器控制电路。该款充电器可适用于各种公共场合,通过投币充电的方式解决手机等电子设备在急需使用的过程中出现了电池没电的现象。1.2 目前蓄电池的现状HYPERLINK /SEARCH/ART/%BB%AF%D1%A7%B5%E7%D4%B4.HTM化学电源是人类目前可以利用的HYPERLINK /SEARCH/ART/%B8%DF%D0%A7%C4%DC%D4%B4.HTM高效能源之一。HYPERLINK /SEARCH/ART/%D0%E

14、E%B5%E7%B3%D8.HTM蓄电池也称作二次电源,它是一种把化学反应所释放出来的能量直接转变成直流电能的装置。近几十年来,由于交通、通讯、计算机产业的高速发展,其产品系列、产品种类、产品性能发生了巨大变化,以此满足不同用途的需要。目前,蓄电池主要应用于各种车辆、船舶、飞机等内燃机的起动以及照明、蓄能、不间断电源、移动通讯、便携式电动工具、电动玩具当中。常用的蓄电池有铅酸蓄电池、镉镍蓄电池、铁镍蓄电池、金属氧化物蓄电池、锌银蓄电池、锌镍蓄电池、氢镍蓄电池、锂离子蓄电池等。现在市场上的电池主要有镍镉电池、镍氢电池和锂电池。便携式电子产品目前主要采用镍镉电池和镍氢电池。镍镉电池价格低廉,但其体

15、积较大,而且受记忆效应影响;镍氢电池的性能比较好,但是寿命较短,价格也较高。锂离子电池的性能最好,价格昂贵。所以就目前看来电池的更新远远达不到人类的需求,所以充电器的普及就变的很有必要了。1.3 电池发展趋势尽管在相比其它种类的电池,锂电池的性能最好,但是随着电子产品的高度集成化,便携式电子产品成为市场主流,人们日益追求功能强大体积轻便的电子设备,这对电池的续航能力提出了更高的要求。显然,锂电池的续航能力并不能满足人们的要求。随着科学的社会的发展,科学的进步,电池的发展也在不断的进步,目前微型固体分子燃料电池的研发进行的如火如荼。大连东软信息学院毕业设计(论文)第2章关键技术介绍2.1关键性开

16、发技术的介绍在本次设计的过程中,运用到了许多专业知识,也用到了较多的专业软件,下面就对本次设计中涉及到的一些关键技术及相关软件进行简要介绍。2.1.1FPGA技术FPGA(Field Programmable Gate Array)中文名称现场可编程门阵列,它的主要组成部分为:可配置逻辑模块HYPERLINK /wiki/CLB o CLBCLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(HYPERLINK /wiki/interconnect t _blank o interconnectinterconnect

17、)三个部分。一个FPGA中包含着许多的逻辑门、HYPERLINK /view/6159.htm t _blank寄存器和I/O接口资源。一片FPGAHYPERLINK /view/26651.htm t _blank芯片所能设计实现的系统可堪比数百片甚至更多标准的数字集成电路所实现的系统。FPGA的结构十分灵活,用户可通过对HYPERLINK /view/1520672.htm t _blank逻辑单元的编程、内部连线的编程和I/O单元的编程,实现使用者所需要的逻辑功能,达到设计者的各种预期设计目标。其主要的优点有:运行的速度快,功能消耗低,有极强的通用性,因而在复杂系统的设计中很受设计者的欢

18、迎。其次, 现场可编程门阵列还可以进行动态配置、在线系统重新组构(可以在系统工作运行的各个不同时间段,按设计者的需要对电路的功能就行重新修改,使系统具备多种与空间或时间相关的任务)和硬件软化、软件硬化等功能。于此同时,FPGA还可以使硬件的功能都用软件来代替,也可以用软件来实现硬件才能实现的功能。总的来说它是一款半定制的电路,在专用集成电路(ASIC)领域中得到了广泛的应用,既有效的解决了定制电路的一些缺点,又克服了原有可编程逻辑器件门电路数量有限的缺点。在本次设计中就是基于FPGA进行设计的。2.1.2Verilog HDL语言Verilog HDL是HYPERLINK /view/2527

19、8.htm t _blank硬件描述语言的一种硬件描述语音(HDL:Hardware Description Language),它以HYPERLINK /view/5777152.htm t _blank文本形式来描述HYPERLINK /view/987445.htm t _blank数字系统硬件的结构和行为,用它可以表示逻辑电路图、HYPERLINK /view/3524173.htm t _blank逻辑表达式,还可以表示HYPERLINK /view/494470.htm t _blank数字逻辑系统所完成的逻辑功能。使用Verilog描述硬件的基本设计单元是模块(module)。设

20、计功能复杂的电子电路时,主要是通过模块的相互连接调用来实现的。模块被包含在关键字module、endmodule之内。Verilog语音中的模块与C语言中的函数类似,它够提供输入、输出端口,通过实例化调用其他模块,也可以被其他模块实例调用。设计模块中可以包括组合逻辑部分、过程时序部分。2.1.3按键消抖技术 通常的按键大多数使用的是机械弹性开关,其工作原理是机械触点具有弹性作用,让机械触点打开、关闭。但是按键开关在关闭的时候不可能马上就稳定地接通,当然在断开时也不可能马上实现断开。所以在开关在打开和关闭的那一瞬间都会有一连串的抖动的现象出现,为了不产生这种现象而采取的措施就是按键消抖。如图2.

21、1所示消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响。按键如果不消除抖动,那么检测到的低电平的次数就不止一次,那我们按键一次,会检测到多次,这是我们不希望看到的。在按键闭合达到稳定的状态时再读取按键这是的状态,而且必须判别到安键释放达到稳定之后再进行处理。 图2.1按键示意图按键的消抖方法,可以分为硬件或软件两种方法。在按键数较少情况下可采用硬件方法消除键抖动。如图2.2所示,是采用RS触发器常用的硬件去抖方法。众所周知,RS触发器是由两个与非门电路构成的。当按键没有按下时,电路输出的结果是0;当键按下的时候,其输出的结果是1。这时按键的机械性能就发挥了作用,让按键因弹性抖动而产生瞬

22、间的断开(抖动跳开B),但是要确保按键不能回到A的原始状态,从而使得双稳态电路的状态不发生改变,保持输出为0,因此产生的波形不可能带抖动。换句话来说,即使在B点产生了抖动的电压波形,但经过双稳态电路处理之后,其输出的矩形波是正规的。 图2.2硬件消抖示意图如果按键的数量相对较多,那么经常采用软件的方法去实现消抖,具体方法是检测到按键闭合信号后执行一个延时程序,一般为5ms10ms的延时,让前沿抖动消失后再一次检测按键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失后才能转入该键的处理程序。一般来说,软件消抖的方法是不断检测按键

23、值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时5ms10ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的5ms10ms恰好避开了抖动期。在本次设计中,本文采用的是Verilog HDL语言实现按键消抖。2.1.4时钟分频技术传统频率源一般只提供单一频率,而且是由HYPERLINK /search?word=%E7%9F%B3%E8%8B%B1%E6%99%B6%E6%8C%AF&fr=qb_search_exp&ie=utf8 t _blank石英晶振器(Quartz Crystal OSC)通过振荡产生,

24、体积大成本高不方便并且只能产生单一频率;但是目前大多数HYPERLINK /search?word=%E7%94%B5%E5%AD%90%E7%B3%BB%E7%BB%9F&fr=qb_search_exp&ie=utf8 t _blank电子电路系统都要求有多种不同的频率,以满足设计中的不各种不同要求,并且很多器件或者是电路对频率都一定的要求,它们只能在规定范围的频率信号下正常工作,这时就需要用HYPERLINK /search?word=%E5%88%86%E9%A2%91&fr=qb_search_exp&ie=utf8 t _blank分频的技术对HYPERLINK /search?w

25、ord=%E6%97%B6%E9%92%9F%E9%A2%91%E7%8E%87&fr=qb_search_exp&ie=utf8 t _blank时钟频率进行多样的化分HYPERLINK /search?word=%E5%88%86%E9%A2%91&fr=qb_search_exp&ie=utf8 t _blank了,以满足各种器件和电路正常工作的需求。一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,所以在FPGA中FPGA时钟分频使用的比较频繁,在设计中,设计者通过分析在设计中所需要的时钟频率对FPGA的系统时钟进行频率处理,使之达到原来的1/N倍频率,以满足设计的需要。分频器主要的

26、类型可分为偶数分频、奇数分频、半整数分频和小数分频,如果在设计过程中采用参数化设计,就可以随时改变参量以得到不同的分频需要。在对时钟要求不是很严格的FPGA系统中,分频通常都是通过计数器的循环计数来实现的。2.1.5数码管显示原理在FPGA开发板中,我们最常用的是显示器件就是七段式或八段式LED数码显示管,它们两者之间的区别就是八段比七段多了一个小数点,其它的基本相同。所谓的八段就是指在数码管里有八个发光的LED二极管,用户通过定义控制不同的LED的亮和灭将所需的字形显示出来。除此之外,数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让它们接地,这样给任何一个LE

27、D的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。其原理图如图2.3所示。图2.3数码管原理示意图其中引脚图的两个COM端连在一起,是公共端,共阴极数码管要将其接地,共阳极数码管将其接正5伏的电源。一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0 x3f;共阳数码管

28、的字符编码为11000000,即0 xc0。可以看出两个编码的各位正好相反。如图2.4所示。图2.4数码管示意图2.2 开发软件在本次设计中,我们运用到了几款专业的设计、仿真及画图软件,它们的运用给本次设计提供了极大的方便,对设计的成功完成起着关键性的作用。下面便对本次设计中,运用到的相关开发软件进行简要描述。2.2.1 QuartusIIQuartus II软件是由Altera公司开发的一款软件,该软件功能强大,支持多种形式的设计输入,例如VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language)等,内嵌综合器以及仿真器,可以完成

29、从设计输入到硬件配置的完整PLD设计流程。其次,它的兼容性是极强的,可以在多种操作系统下工作,例如windowXP、window7、Linux以及Unix等,在设计流程中,不仅可以使用TelHYPERLINK /view/54.htm t _blank脚本完成,而且还提供了完善的用户图形界面设计方式。最为重要的是它的运行速度快,界面统一,功能集中,易学易用。QuartusII支持器件的数量也是极为可观的,它支持Altera公司的一系列器件。用户可以充分利用成熟的模块,简化设计的复杂程度、加快设计速度。Altera Quartus II作为一种可编程逻辑的设计环境,由于其强大的设计功能,受到数字

30、系统设计者广泛的欢迎。作为一款广受好评的可编程逻辑设计软件,它主要功能及特点如下:首先它提供了完全集成的且与电路结构无关的开发包环境,包括了数字逻辑设计中的全部,其中包括:可利用原理图、结构图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件。对电路芯片平面布局连线的编辑,并且内置了强大的逻辑综合工具。其次,它的仿真功能也不可忽略,它能对电路功能与时序逻辑进行仿真。再者,软件还具有一定的分析能力,可以对定时/时序与关键路径延时进行分析;使用组合编译方式可以一次性完成整体设计流程,是一种高效的器件编程与验证工具;除此之外,QuartusII也可以支持第三方EDA工具

31、,对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。例如,生成EDA软件使用的VHDL网表文件和Verilog网表文件。2.2.2ModelSimModelSim是由HYPERLINK /view/1667387.htm t _blankMentor公司推出的一款HYPERLINK /view/561380.htm t _blank仿真软件,目前在业界被称为最优秀的硬件语言HYPERLINK /view/561380.htm t _blank仿真软件,它能提供良好的仿真环境, 它支持HYPERLINK /view/2375980.htm t _blank单

32、内核的VHDL和Verilog混合仿真的HYPERLINK /view/557623.htm t _blank仿真软件,这点在业界来说是唯一的。它采用直接优化的HYPERLINK /view/553519.htm t _blank编译技术、Tcl/Tk技术、和单一内核仿真技术,具有编译仿真速度快的特点,其次,它与编译的代码和平台无关,这便于保护IP核。软件具有个性化的图形界面和HYPERLINK /view/1309799.htm t _blank用户接口,为用户加快调错提供强有力的手段,是FPGA/HYPERLINK /view/3080633.htm t _blankASIC设计的首选HY

33、PERLINK /view/561380.htm t _blank仿真软件。作为一款优秀的语言仿真软件,它可以对RTL和门级进行优化,可以HYPERLINK /view/5708679.htm t _blank本地编译结构,也可以跨平台跨版本仿真,而且编译仿真速度快。在软件中还可以对HYPERLINK /view/60376.htm t _blank源代码模版进行管理及修改其次,软件集成了众多调试功能,其中包括:HYPERLINK /view/2466792.htm t _blank性能的分析、波形的比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object

34、、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件HYPERLINK /view/278359.htm t _blank断点等;除此之外,软件对System C的直接支持,和HDL任意混合,支持HYPERLINK /view/842700.htm t _blankSystemVerilog的设计,对系统级描述语言有最全面的支持,可以单独或同时进行行为(behavioral)、RTL级、和门级(gate-level)的代码都是Modelsim显著的优点。在本次设计中,就是运用该款软件对设计进行仿真,以验证功能的正确性。2.2.3 Microsoft Office Visio

35、Office Visio是一款功能强大的绘图软件,主要针对于IT和商务人员对复杂的信息、系统和流程进行可视化处理、分析和交流。Microsoft Office Visio能创建具有专业外观图表,能记录分析信息、数据、系统和过程。Visio与其他图形软件相比具有更高的可视性与直观性,并且操作简单对使用者无技能基础要求。应用此软件,可以绘制多种图表,例如组织结构图、日程表、状态图、流程图等。在本次项目设计过程中,通过Visio可以方便快捷的绘制完成了系统流程图、数据通道图和状态机等各种图形的绘制工作。第3章系统需求分析3.1 构架概述投币式多功能充电器控制电路可以基于FPGA技术利用verilog

36、语言在Quartus开发环境中设计实现。该控制电路可以通过对投币数量的多少的控制对充电时间进行控制,并显示相关信息。主要模块包括:投币金额计数模块、信息显示控制模块、充电计时控制模块、控制模块,如图3.1所示。 图3.1功能模块示意图投币金额计数模块主要实现的功能是记录使用者投放的硬币数量,来确定充电模块对充电电池进行相应时间的充电。信息显示控制模块主要实现的功能是利用数码管来显示投币的数量、充电时间等信息,给使用者传达一系列反馈信息,以达到人机互动的目的。充电计时控制模块主要功能是通过对使用者投币数量的多少确定并控制充电时间。控制模块主要功能是收集各模块的信息,进行处理,再根据处理结果给对应

37、模块下达下一步指示。特殊情况下,当按下确认健时,即充电已经开始,硬币不能再投入,即便再投入,系统不累计金额,数码管不再显示投币金额的增加,而显示充电时间。3.2系统工作流程在设计的前期明确系统工作的流程至关重要,系统流程图能表现出系统的工作流程,表达系统的流动情况,是在对整个系统有一定的认识后做出的。通过该图能看出系统的合理性,明确设计目标,是设计前期的必要步骤。下图便是本次设计的系统工作流程图。 图3.2系统流程图如图3.2所示,当系统正常工作时,首先进入等待状态,等待用户进行投币。在用户进行投币行为后,系统判断所投硬币金额,当确定为五角时,系统计数加一,当判断所投硬币为一元时,计数加二。然

38、后进入下一状态,用户确定是否投币结束,如果用户未按确定键,则系统跳回等待投币状态,表示可以继续投币,用户可以继续投币,系统将继续记录投币金额,如果用户按下确定键,则表示投币结束,进入下一状态及开始充电。此时,用户将无法继续投币。当充电开始后,通过数码显示管显示充电时间,以判断是否充电结束,当充电结束后,清除本次充电所记录数据,返回等待状态。3.3 系统设计方法 数字系统的设计方法通常分为两大类,分别是:自上而下设计和自下而上设计。一般自上而下的设计是从系统级开始设计的,首先,将系统划分为若干个基本单元,然后每个在对基本单元进行划分为下一层次的若干基本单元,以此类推。从某种意义上来讲,自下而上的

39、设计过程可以看作是自上而下设计的逆过程。同样自下而上设计也是从系统级开始的,就是从设计的最底层开始对整个设计进行逐次划分,但是值得注意的是设计必须从已经存在的基本单元出发,所以在划分的同时首先要考虑的是基本单元是否存在。最终我们要实现设计最底层的单元是已经制造出来的单元,或者是已开发好的单元再或者是可以通过外购得到的基本单元。自下而上设计的基本流程:首先在划分完模块之后,独立设计每个子模块,设计完成后,在对设计好的模块进行优化处理。然后在顶层的设计中集成所有已经优化好的子模块,最后进行总体设计的验证。在综合和优化之后将每个子模块具有的单独的网表整合在顶层的设计中。这样在顶层模块设计中,各个子模

40、块之间的性能都不会相互影响。与此同时,由于在高层次进行设计的主要仿真和调试过程,所以能够及时的发现结构设计上的错误,减少了设计工作的浪费,同时又减少了模块逻辑仿真的工作量。本次设计使用的就是自上而下的设计方法。 3.4系统设计的技术可行性分析本文采用的设计思想是自上而下的设计思路,从系统级设计入手。首先对顶层进行功能划分和结构模块的设计。在完成对整个系统有一定的认识后,开始着手整体流程图的设计。首先明确系统的工作流程,画出工作流程图。然后,通过对工作流程图的提炼和分析设计出相应的数据通道和控制单元。数据通道的各个模块包括:数据选择模块、累加器模块、译码器模块、寄存器模块、计数器模块、比较器模块

41、、减法器模块等。控制单元部分通过有限状态机来设计实现,合理设计各个状态的控制及转移。控制单元发送数据通道所需的控制信号,接收来自数据通道的状态信号,监控整个系统的运行;数据通道接受并处理来自控制单元的控制信号,并把处理的结果反馈给控制单元。此外,利用Altera公司开发的Quartus软件,对每个模块进行设计。然后通过仿真软件ModelSim对设计的各个模块进行仿真测试,确保整个设计的顺利进行。最后利用FPGA开发板进行功能测试,并且不断地进行优化。第4章系统设计4.1 设计指导思想和原则 本课题是基于FPGA的投币式多功能充电器控制电路设计。该电路的设计基于FPGA利用verilog硬件描述

42、语音实现,系统根据数字系统设计和实现的基本流程及基本规则采用由上而下的设计方法进行设计,主要流程包括对整体流程图的设计、数据通道和控制单元的设计、利用硬件描述语音及Verilog语言描述实现、最后通过ModelSim仿真软件对各个模块和整体系统进行功能仿真,并在设计过程中不断的进行优化。4.2 系统设计流程本次设计基本按照以下流程进行,如图4.1所示图4.1 项目设计流程(1)规划与设计阶段充分合理的规划设计对一个项目及时如质如量完成具有不可忽视的作用,设计者必须做好前期各项准备,包括了解该设计的背景环境、开发软硬件等。明确设计所需实现的功能。对设计所需用到的方法及各项知识做出归纳。(2)数据

43、通道及状态机的设计数据通道与状态机的设计能很好的体现出设计的思路,能初步看出设计的可行性。(3)模块划分在对设计整体有了深入的了解后对系统结构进行优化,决定系统模块组成部分并且确定各个模块已经具备的各种功能。(4)代码编写根据前期的设计与优化后,利用verilog硬件描述语言对各个模块就行描述。(5)功能仿真在完成代码的编写过程后,就进入到测试仿真阶段,利用ModelSim工具进行逻辑测试与仿真,确保设计正确性,功能的完整性。(6)开发板验证 基于FPGA特点,利用开发板模拟实现设计,验证预期目标是否实现。4.3数据通道的设计数据通道大致能表现出系统的实现思路,是设计环节中最为重要的步骤之一。

44、下图便是本次设计中的数据通道。通过该图可以基本看出,本次设计的设计思路。 图4.2数据通道图如图4.2所示,首先当有投币信号进入时,通过一个选择器input_m判断硬币金额,然后在确定投币金额后通过译码器decoder将所投币的金额转换为时间,这个时间就是充电时间,将时间信号分别送给一个寄存器Reg_time和减法器Sub,然后减法器通过周期为1S的时钟对所等数据进行逐一递减,然后通过数码显示管显示充电信息。其次,循环计数器Time_counter与Reg_time中的时间进行比对,通过比较器Time_equal比对,当两者数值相等是,则表示充电完成,然后输出充电完成信号,反之充电未完成。模块

45、图详细端口说明见表4.1表4.1 端口说明表信号名称I/O功能描述Input_1I输入一元按键Input_5I输入五角按键OutO输出投币金额Charge_timeI充电时间Data_timeO/I充电时间ClkI时钟RstI复位En2I使能Clear2I清除Data_counterO/I充电计数EqualityO比较En2I使能Led_inI数码管输入Led_outO数码管输出4.4状态转换图状态转换图,它表现的是系统中各个状态的互相转换及转换所需要的条件。控制单元发送数据通道所需的控制信号,接收来自数据通道的状态信号,对整个系统的运行进行监控,以保证系统的正常运行。这是设计环节中极为重要和

46、关键的步骤。下图便是本次设计中的状态转换图。图4.3状态转换图如图4.3所示,idel状态:准备状态。投币状态:等待投币信号,通过sum数值是否发生改变,判断是否投币以便进入下一个状态。在这个状态中,首先有2个信号add1,add2。分别表示投入的是5角还是1元硬币。当检测完所投硬币的类型后,在将信号送给下一状态。同时,这个状态中还要接收下一状态传来的信号,已确定不投币无效,即已经开始充电,不在接受投币。这一状态当接收到上以状态发出的add1和add2后分别做出sum+1,sum+2的处理,然后还有一个确定投币结束信号,当该信号有效时,则跳转到下一状态,并且将信号给予wait状态,然后进入下一

47、状态。充电状态:接受投币结束信号后,开始充电。并通过计数器进行充电计时。完成状态:当充电时间结束后,发出结束信号给下一状态。接受到充电完成信号后,数据清零,回到idle状态。4.5系统结构图通过对设计的深入研究,对系统进行一些列的优化,最终确定系统的各个模块及模块功能。基本构架分为三部分:计时钟分频模块,充电控制模块,最后是充电显示模块。详细系统结构框图如图4.4所示。图4.4系统结构框第5章系统实现5.1 主要模块的实现在投币式多功能充电器控制电路设计过程中,系统主要由三大模块组成,分别为时钟分频模块、控制充电电路模块、显示模块。下面分别介绍一下这三大模块。5.1.1时钟分频模块如图5.1所

48、示,根据设计所需,将原时钟分成三种时钟频率,分别是1HZ、1000HZ、50HZ。1HZ的时钟周期为1S的时钟主要,用于倒计时。1000HZ的时钟周期为1ms用于数码管的显示所需。50HZ的时钟周期为20ms,用于控制电路充电模块。时钟分频的本质就是计数器记到一定的数值进行一次反转。所以一般用计数器实现分频。在时钟分频模块中,各个端口说明表见表5.1。图5.1时钟分频模块表5.1时钟分频模块端口说明表端口I/O功能描述ClkI原始时钟RstnI复位功能Clk 1O1HZ时钟分频Clk 1000O1000HZ时钟分频Clk 50O50HZ时钟分频5.1.2控制充电电路模块控制充电模块,是本次设计

49、中的核心模块之一,由该模块控制统计投币数量的多少,及确定是否投币完成,并由金额确定充电时间。在设计实现的该模块的过程中,考虑到现实和实验之间的差别,特将1S看成1min,进行设计。下这个模块中,由于设计的需要,要使用到拨动开关,所以这里需要使用按键防抖技术。以确保按键功能的实现。各个端口的详细说明见表5.2。图5.2控制充电电路模块表5.2控制充电电路模块端口说明表端口I/O功能描述clkI原始时钟rstnI复位信号Key in1I投币五角按键Key in2I投币一元按键Key in3I确定投币按键Clk 50I50HZ时钟Clk 1I1HZ时钟Second 1O输出秒的个位Second 2O

50、输出秒的十位Cnt 1O统计五角投币数量Cnt 22O统计一元投币数量5.1.3显示模块显示模块是显示投币金额数量、充电时间的模块,是本次设计的重要模块之一。在显示模块中,使用数码管显示相关信息。各个端口的详细说明见表5.3。图5.3显示模块表5.3显示模块端口说明表端口名称I/O功能说明ClkI原始时钟Clk 1000I1000HZ时钟rstnI复位信号Key in4I显示切换Second 1I输入秒的十位Second 2I输入秒的十位Cnt1I统计投币数量Cnt22I统计投币数量rten_smg_dataO数码管输出sm_bit_rO数码管输出5.1.4系统整体实现在Quartus II软

51、件中,通过添加顶层文件与各模块之间连接上,形成完整系统。系统整体实现如图5.4所示。图5.4项目整体RTL综合5.2 系统的代码实现5.2.1时钟模块代码实现时钟分频的本质就是计数器记到一定的数值就进行一次翻转,所以在verilog语音中用计数器实现时钟分频。具体代码如下。always ( posedge clk or negedge rstn )if( !rstn )count1 = 26d0;else if( count1 = HZ_1 )count1 = 26d0;elsecount1 = count1 + 1b1;always ( posedge clk or negedge rstn

52、 )if( !rstn )count2 = 20d0;else if( count2 = HZ_50 )count2 = 20d0;elsecount2 = count2 + 1b1;always ( posedge clk or negedge rstn )if( !rstn )count3 = 16d0;else if( count3 = HZ_1000 )count3 = 16d0;elsecount3 = count3 + 1b1;5.2.2控制模块代码实现在控制模块中,由于系统后期利用FPGA开发板验证功能,用到了机械开关,所以在这个模块中运用到了防抖技术。消抖是为了避免在按键按下或

53、是抬起时 HYPERLINK /search?word=%E7%94%B5%E5%B9%B3&fr=qb_search_exp&ie=utf8 t _blank 电平剧烈抖动带来的影响。一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时20ms,再次检测,如果按键还为0,那么就认为有按键输入。在本次设计中,通过寄存器,将按键信号延时一个周期的方式,所用时钟频率为50HZ及20ms一个周期,延时的20ms恰好避开了抖动期。从而实现按键的消抖。具体代码如下。always (posedge

54、clk or negedge rstn) if (!rstn) low_sw1 = 1b1; else if( clk_50 ) low_sw1 = key_in1;always (posedge clk or negedge rstn)if (!rstn) low_sw2 = 1b1; else if( clk_50 ) low_sw2 = key_in2; always (posedge clk or negedge rstn) if (!rstn) low_sw3= 1b1; else if( clk_50 ) low_sw3 = key_in3; reg low_sw_r1; reg

55、low_sw_r2; reg low_sw_r3; always ( posedge clk or negedge rstn ) if (!rstn) low_sw_r1 = 1b1; else low_sw_r1 = low_sw1; always ( posedge clk or negedge rstn ) if (!rstn) low_sw_r2 = 1b1; else low_sw_r2 = low_sw2;always ( posedge clk or negedge rstn ) if (!rstn) low_sw_r3 = 1b1;else low_sw_r3 = low_sw

56、3;用硬件描述语言对状态机进行描述,具有一定灵活性,通过一些规范的描述风格,我们可以使描述更加安全、规范。分段式是最为常用的一种方法。根据状态机的三要素,我们知道对状态机的描述,需要描述清楚三点关键内容:第一,各个状态的转移情况;第二,每个状态的输出是信号什么;第三,各个状态之间转移所需要的相关条件。由于受可综合条件的限制,描述方法一般分成三种:一段式,二段式及三段式。所谓的一段式,就是将整个状态机写在一个always模块里,该模块既描述了状态的转移又描述状态的输入和输出。但这种方法往往缺乏条理,不便阅读,不利于维护和修改,还经常受到不可综合的问题,所以不建议使用这种方法,一般推荐使用二段式或

57、三段式。所谓二段式,这种方法就是在用硬件描述语言描述时用两个always模块进行描述,一个always模块主要描述状态转移,可以采取同步时序的方法。而另一个always模块则描述状态转移条件和状态转移的规律,在这个always模块中一般采用组合逻辑的方式。而三段式描述方法是在两段式描述方法的基础上发展而来的,顾名思义,这种写法就是利用三个always模块对状态机进行描述,其中一个always模块采用同步时序的方式对状态转移进行描述;另一个always模块采用组合逻辑的方式判断状态转移所要的条件和描述状态转移规律;还有一个always模块则使用同步时许电路描述每个状态的输出。在本次设计中采用二段

58、式描述方法。在控制模块中通过状态机控制投币的次数(即投币的金额)和充电的时间。具体代码如下。case( state ) s0 : begin if( led_ctrl3 = 1 )state = s1;else state = s0;ends1 : begin state = s1;flag= 1;case( cnt_3 ) 5d1 : begincharge_time7:4= 4d0;charge_time3:0= 4d5;end5d2 : begincharge_time7:4= 4d1;charge_time3:0= 4d0;end5d3 : begincharge_time7:4= 4

59、d1;charge_time3:0= 4d5;end5d4 : begincharge_time7:4= 4d2;charge_time3:0= 4d0;end default : begincharge_time7:4=4d0;charge_time3:0=4d0;end endcase end default : begincharge_time = 4d0;state = s0;endendcase endreg 2:0 state_time;parameter s2 = 3d1, s3 = 3d2;always ( posedge clk or negedge rstn ) if( !

60、rstn ) begin second_1 = 4d0;second_2 = 4d0;state_time = s2;led = 0;endelse begincase( state_time ) s2 : beginif( flag = 1 )beginsecond_1 = charge_time7:4;second_2 = charge_time3:0 ;state_time = s3;endend s3: beginstate_time = s3;if( clk_1 ) beginif( second_2 != 4h0 ) beginsecond_2 = second_2 - 1b1;l

温馨提示

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

评论

0/150

提交评论