FPGA《基于VHDL微波炉课程设计》_第1页
FPGA《基于VHDL微波炉课程设计》_第2页
FPGA《基于VHDL微波炉课程设计》_第3页
FPGA《基于VHDL微波炉课程设计》_第4页
FPGA《基于VHDL微波炉课程设计》_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、1微波炉控制器的 FPGA 实现 2目 录第一章 绪 论.1第一节 课题背景介绍.1第二章 电子设计自动化概述.2第一节 VHDL 简介.2第三章 总体设计.5第一节 课题的主要内容及基本要求.5第二节 设计思路.5第三节 设计方案.6第四章 模块分析.8第一节 状态控制电路模块.9第二节 数据装载电路模块.10第三节 计时器模块.11第五章 程序设计及仿真.12第一节 程序简要说明.12第二节 仿真时序图.13第六章 硬件调试.13总 结 .16致 谢 .17参考文献.18附录一 原理图.19附录二 源程序.203摘摘 要要该设计用语言在软件平台上通过编译、模拟仿真,完成了微波炉控制功能,实

2、现了微波炉的测试、时间设置、烹调计时、完成提示等设计,并对时钟分频作了一定的探讨。此设计采用了现场可编程逻辑器件的设计,由控制模块、装载模块、计时模块和显示模块四大模块组成,而且它可以将所有器件集成在一块芯片上,体积大大减小,且外围电路很简单,易于实现。关键词:;微波炉控制器;仿真第一章 绪 论第一节 课题背景介绍一、产品背景介绍Percy L.Spencer 在 1946 年构想出微波炉的概念,在 1950 年取得专利。微波炉的运作机制为微波在水中能产生摩擦热的原理。早期微波炉尺码庞大,重量超过 300 公斤和高度超过 1.5 米,所以主要在大型餐厅和食物市场使用。第一部家用微波炉是在 19

3、65 年由 Raytheon 集团生产。二、国内产品发展现状现在,中国已成为全球最大的微波炉生产基地,据估计,中国微波炉年产量已达 2000 万台左右,从 2001 年中国市场的需求量来看,约在 700 万台左右。中国微波炉市场经过前几年的洗牌,已由前几年的 300 多家减少至目前的 100多家,其中在市场上可统计的仅 30 多家。洋品牌在早期的微波炉市场份额,几乎占据了绝大部分的市场。但初期由于微波炉市场属于导入期,价格高,消费者接受的少,自 1996 年以后,惠而浦、松下等大部分都退出了中国市场,主要以出口为主。1998 年后,外资品牌中以韩国品牌 LG、三星表现较为突出,逐渐跨入第 2、

4、第 3 名,微波炉第一品牌为格兰仕。2000 年,美的介入,迅速崛起成为行业第三,三星也逐渐退出市场。经过 60 年的发展,微波炉已经成为人们日用生活中的必不可少的厨房电器,大大降低了家庭妇女的工作量和工作强度。据统计,微波炉目前在日本、美国、西欧等发达国家地区的普及率高达 98%,在中国城镇的普及率也已近 90%。这个数字甚至超过了彩电和洗衣机的普及程度。三、产品发展趋势随着人们生活水平的提高和信息化的发展,家用电器层出不穷,各种功能也越来越完善,其中微波炉是现代家庭的必备产品,它的质量和性能的高低,将4会极大的影响人们的生活水平和质量。为此,设计一个高质量的微波炉控制系统是非常有必要的。微

5、波炉开始进入越来越多的家庭,他给人们的生活带来了极大的方便。微波炉由 2450MHz 的超高频来加热食物。他省时、省电、方便和卫生,作为现代的烹饪工具,微波炉的控制器体现着他的重要性能指标。目前大部分微波炉控制器采用单片机进行设计,带南路比较复杂性能不够灵活。本文采用先进的EDA 技术,利用 QuartusII 工作平台和 VHDL 设计语言,设计了一种新型的微波炉控制器芯片,该芯片具有系统复位、时间设定和烹饪计时的功能,用一片FPGA 芯片实现,所以能设计出一款方便安全操作的微波炉是非常有必要的。第二章 电子设计自动化概述第一节 VHDL 简介随着VLSI、EDA( Electronic D

6、esign Automation )工具的迅速发展,用户系统的设计从单纯的ASIC(Application Specific Integrated Circuit)设计向着系统单片化SOC(System On a Chip)设计的方向发展。同时网络技术的发展,共享IP 知识产权的开放式系统设计成为新模式,芯片工艺物理设计与系统设计相分离,使用户系统设计人员可直接从事芯片设计。多种技术的融合,系统的功能复合化程度越来越高;对系统设计方法学和工具的要求更高;系统设计日趋软件硬化、硬件软化,并使两者得到了有机的融合,形成了更为强大的 ESDA( Electronic System Design Au

7、tomation ) 。VHDL(Very High Speed Integrated Circuit Hardware Description Language)是 IEEE(Institute of Electrical and Electronics Engineers)标准的硬件描述语言,是现代电子系统设计的首选硬件设计计算机语言。本篇介绍 VHDL 的语法基础、用 VHDL 进行系统设计的基本方法、以及VHDL 的设计实例等。从宏观的角度看,VHDL 的语法构成了程序的各组成部分;微观上看 VHDL的语法是各种语句的运用细节。本章在 VHDL 的特性之后,从这两个角度简要介绍 VHD

8、L 的语法基础。硬件描述语言 HDL(Hardware Description Language)诞生于 1962 年。HDL 是用形式化的方法描述数字电路和设计数字逻辑系统的语言。主要用于描述离散电子系统的结构和行为。与 SDL(Software Description Language)相似,经历了从机器码(晶体管和焊接) 、汇编(网表) 、到高级语言(HDL)的过程。20 世纪 80 年代美国国防部开发 Very High Speed Integrated CircuitVHSIC,用于描述集成电路的结构和功能。此后,硬件描述语言向标准化方向发5展,1987 年成为 IEEE Stand

9、ard 1076,称为 VHDL 语言。它也是美国国防部标准(MIL-STD-454L) 。1993 年该标准增修为 IEEE1164 标准。1996 年,再次加入电路合成的标准程序和规格,成为 IEEE1076.3 标准。1995 年 VerilogHDL 也成为 IEEE 标准。VHDL 与 VerilogHDL 一起成为业界主选的硬件描述语言。一、VHDL 的特点应用 VHDL 进行系统设计,有以下几方面的特点。(一)功能强大VHDL 具有功能强大的语言结构。它可以用明确的代码描述复杂的控制逻辑设计。并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。VHDL 是一种设计、仿

10、真和综合的标准硬件描述语言。(二)可移植性VHDL 语言是一个标准语言,其设计描述可以为不同的 EDA 工具支持。它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。此外,通过更换库再重新综合很容易移植为 ASIC 设计。(三)独立性VHDL 的硬件描述与具体的工艺技术和硬件结构无关。设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。程序设计的硬件目标器件有广阔的选择范围,可以是各系列的 CPLD、FPGA 及各种门阵列器件。(四)可操作性由于 VHDL 具有类属描述语句和子程序调用等功能,对于已完成

11、的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。(五)灵活性VHDL 最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。使其在任何大系统的设计中,随时可对设计进行仿真模拟。所以,即使在远离门级的高层次(即使设计尚未完成时) ,设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。二、VHDL 的设计步骤采用 VHDL 的系统设计,一般有以下 6 个步骤。(1)要求的功能模块划分;(2)VHDL 的设计描述(设计输入) ;6(3)代码仿真模拟(前仿真) ;(4)计综合、优化和布局布线;(5)布局布线后的仿真模拟(后仿真) ;(

12、6)设计的实现(下载到目标器件) 。三、VHDL 的设计简述VHDL 描述数字电路系统设计的行为、功能、输入和输出。它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构。VHDL 将一个设计称为一个实体 Entity(元件、电路或者系统) ,并且将它分成外部的可见部分(实体名、连接)和内部的隐藏部分(实体算法、实现) 。当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库。所以,内部和外部的概念对系统设计的 VHDL 是十分重要的。外部的实体名或连接由实体声明 Entity 来描述。而内部的实体算法或实现则由结构体 Architecture 来描述。结构体可以包

13、含相连的多个进程 process 或者组建 component 等其他并行结构。需要说明的是,它们在硬件中都是并行运行的。VHDL 程序设计的基本结构如下:库、程序包实体 Entity结构体 Architecture、 进程 process、 组件 component 等配置 Configuration 表 1 VHDL 程序设计的基本结构一个实体可以对应一个或者多个结构体。结构体可以包含一个或者多个进程或者组件。四、VHDL 的描述风格设计实体的逻辑功能由 VHDL 的结构体具体描述。用户可以使用不同程度的语句类型和抽象方式来描述不同程度的设计。例如系统级的、板级的、芯片级的或者模块级的设计

14、。对于相同的逻辑行为可以有不同的语句表达方式。在VHDL 结构体中这种不同的描述方式或者说建模方法,通常可归纳为行为(Behavioral)级描述、数据流(Dataflow)级描述和结构(Structural)级描述。(一)行为级描述通过一组串行的 VHDL 进程,反映设计的功能和算法,而没有直接指明或涉7及实现这些行为的硬件结构,包括硬件特性、连线方式和逻辑行为方式。行为级描述主要指顺序语句描述,即通常是指含有进程的非结构化的逻辑描述。(二)数据流级描述将数据看成从设计的输入端流到输出端,反映从输入数据到输出数据所发生的立即变换。数据流描述主要是指非结构化的并行语句描述;是建立在用并行信号赋

15、值语句描述基础上的。数据流描述方式可比较直观地表达底层逻辑行为。(三)结构级描述将设计看成多个功能块的相互连接,并且主要通过功能块的组件例化来表示。结构级描述方式采用了结构化、模块化的设计思想,适合于大型复杂性设计。VHDL 通过这三种描述方法或称描述风格,从不同的侧面描述结构体的行为方式。其中,行为描述的抽象程度最高,最能体现 VHDL 描述高层次结构和系统的能力。正是 VHDL 语言的行为描述能力使自顶向下的设计方式成为可能。在实际应用中,为了能兼顾整个设计的功能、资源和性能几方面的因素,通常将以上三种描述方式混合使用。第三章 总体设计第一节 课题的主要内容及基本要求要求采用 EDA 技术

16、设计一个微波炉控制器,可完成以下功能:(1)可控制烹调的开关;(2)可设置烹调时间, (假设系统最长的烹调时间为 59 分 59 秒) ;(3)可显示烹调的剩余时间。第二节 设计思路现代数字系统设计一般采用自顶向下的方法,其过程大致可分为三个大的步骤:系统调研;模块的划分;模块的实现。承接一个数字系统设计的课题后,一般不要急于动手设计,而应对课题作充分的分析和调研,然后确定初步的方案。分析:课题的任务、要求、原理和使用条件等。调研:课题现状并和相同或相近课题进行比较。现代数字系统设计一般是将其划分为控制器和受控电路两大部分,控制器由 ASM 图或 MDS 图决定,而受控电路则使用各种通用模块实

17、现。下面分析微波炉定时器的工作过程及基本要求: 上电后,系统处于复位状态。工作时首先进行烹调时间设置,并使用数码管显示时间信息,设要求最长的烹调时间为 59 分 59 秒,时间设置完毕后系统8自动回到初始状态;按开始烹调按键进入烹调状态,时间显示数码管按每秒减1 的倒计时方式显示剩余烹调时间;烹调结束后,系统回到复位状态。系统要求分析及初步方案的确定:根据系统的基本要求,着重应考虑如下问题: (1)计时电路的设计:芯片内部产生和外部提供。本例中由外部时钟电路以 BCD 码的形式提供。(2)时间设置出错及工作过程的取消等情况的处理:设置一个复位按键。 (3)数码管状态的检测:设置数码管检测按键,

18、按动该按键后,数码管能够显示“8888”的信息。(4)时间显示电路:采用 4 位 7 段显示数码管显示,并由芯片直接驱动。 (5)微波管的驱动:设置一个输出驱动控制烹调状态的继电器即可。第三节 设计方案微波炉控制器系统可由以下三个电路模块组成:状态控制电路,其功能是控制微波炉工作过程中的状态转换,并发出相关控制信号;数据装载电路,其功能是根据控制信号选择定时时间,测试数据或计时完成信息的载入;计时器电路,其功能是对时钟进行减法计数,提供烹调完成时的状态信号。微波炉控制器的系统框图如图 1 所示。其中,CLK 为时钟输入信号,时钟上升沿敏感;RESET 为复位信号,高电平有效时系统复位清零;TE

19、ST 为数码显示管测试信号,高电平有效系统显示 8888;SET_T 高电平有效时允许设置烹饪时间;KEY 为定时时间输入信号,用于设置烹饪时间的长短,其高到低分别表示时间分、秒的十位、个位;START 为烹调开始信号,高电平有效时开始烹调;输出信号 COOK 指示微波炉状态,高电平时表示烹调进行时;SEC0 、SEC1、MIN0、MIN1 分别表示秒个位、秒十位、分个位、分十位。9 图 1 微波炉控制器系统框图微波炉控制器的工作流程图如图 2 所示。接通电源初始状态时间设置显示 8888烹调完成SET_TTEST?START?时间到?NYNYNYNY图 2 工作流程图首先,对系统进行复位清零

20、,使其各电路模块均处于初始状态;当烹饪时时间输入时钟输入复位输入时间设置输入开始按键数码管测试输入分秒信号输 出驱动烹调输出显示设置时间和烹饪时间信号10间设置信号 SET_T 有效时,读入时间信号 KEY3.0的取值,此时系统显示设置的时间信息,再按下 SET_T 确定设置时间完成。按下开始键 START,系统进入烹调状态,COOK 信号变为高电平,时钟计数器开始减法计数,MIN1、MIN0、SEC1、SEC0 显示剩余烹调时间。烹调结束,系统恢复初始状态。当系统处于复位清零状态时,按下显像管测试按钮 TEST,将对显像管是否正常工作进行测试,正常工作时,显像管输出全 8。第四章 模块分析第

21、一节 状态控制电路模块状态控制器的功能根据输入信号和自身当时所处的状态完成状态的转换和输出相应的控制信号,其模块框图如图 3 所示。其中,输出信号 LD_DONE 指示数据装载电路载入的烹调结束的状态信息的显示的驱动信息数据;LD_CLK 显示数据装载电路的设置的时间数据;LD_TEST 指示数据装载电路载入的用于测试的数据,以显示驱动信息数据;COOK 指示烹饪的状态,并提示计时器进行减法计算;KEY 为定时时间输入信号,用于设置烹饪时间的长短,其高到低分别表示时间分、秒的十位、个位。当 LD_DONE 有效时,输出烹调结束数据。当LD_CLK 有效时,输出烹调的设置时间数据。当 LD_TE

22、ST 有效时,输出数码管测试数据包括 6 个输入信号和 4 个输出信号。11图 3 状态控制电路模块框图根据微波炉工作流程的描述,分析状态转换条件及输出信号,可以得到如图 4 所示的微波炉控制器的状态转换图。TEST/LD_TESTRESET初 始状 态IDLESET_CLOCKLAMP_TESTDONE_MSGTIMERSTART&DONE&TEST&SET_T/COOKLD_DONE/COOKX/LD_DONEX/LD_CLKSET_T&TEST/LD_CLKX/LD_TESTDONE/LD_DONE图 4 状态控制器状态转换图减法计数定时状态T完成信息显示

23、状态T烹调时间设置状态T显示译码测试状态T 图中,当 RESET 信号有效时,系统复位清零;输入/输出对应烹调时间设置、显示译码测试、完成信号显示和减法计数定时四种状态进行相应的转换。12第二节 数据装载电路模块数据装载电路的本质是一个三选一多路选择器,其模块框图如图 5 所示。图 5 数据装载电路模块框图当 LD_DONE 有效时,输出烹调结束的信息数据数据。当 L_CLK 有效时,输出烹调的设置时间数据。当 L_TEST 有效时,输出数码管测试数据。LOAD 信号为 LD_DONE 时 DATEOUT 输出 KEY 有效指示。第三节 计时器模块 电路计时模块可以由十进制减法计数器和六进制减

24、法计数器级联组成,其中,两个十进制的减法计数器用于分、秒的个位减法计数,两个六进制的减法计数器用于分、秒的十位减法计数。由六进制计数器和十进制计数器级联构成的计时模块原理图如图 6 所示。13图 6 计时器模块原理图计时器模块的框图如图 7 所示。图 7 计时器模块框图LOAD 有效时完成装入功能,COOK(EN)有效时执行减计数;CLR 由 RESET发出信号,清除装载已存的数据;DONE 返回给控制器,MIN 和 SEC 显示所剩时间和测试状态信息、烹调结束状态信息等。14第五章 程序设计及仿真第一节 程序简要说明程序分为多个模块进行编写,这样既符合编程模块化的要求也方便编写和阅读。按照以

25、上功能和模块分析,可以将程序划分几个模块:状态控制电路模块 controller、数据装载电路模块 loader、计时器模块 counter,其中计时器模块又可以划分 2 个模块:十进制功能编写 cnt10,6 进制功能编写 cnt6,一起完成计时功能。本次程序编写调试软件平台是 Quartus II 4.1。详细的源程序可查看附录二。第二节 仿真时序图下面我们分别考察微波炉总的功能、计时器模块和数据装载电路模块的正15确性(其他模块的仿真略) 。一、微波炉总的功能仿真微波炉总的功能仿真波形图如下:图 8 微波炉总的功能仿真波形图图中,CLK 是输入脉冲,RESET 复位,SET_T 设置时间

26、,KEY 按键输入,START 开始计时,COOK 正在烹饪,MIN 和 SEC 是时间显示,LED21是显示设置时间信号,LED0是显示烹饪时间信号。从仿真波形中可看出,按下 RESET,所有信号复位为零,按下 TEST,显像管显示 8888,按下 SET_T 后 KEY 输入有效,MIN 和 SEC 显示输入值,KEY 输入完成并按下 SET_T,表示设置时间完成,再按下 START,开始烹饪并进行减法计数,MIN 和 SEC 显示剩余时间,此时输出 COOK 变为高电平。二、计时器模块仿真波形计时器模块仿真波形如下:16图 9 计时器模块仿真波形图图中,LOAD 为高电平时读取信号 DA

27、TA 的值,当 COOK 信号为高电平时,对DATA 的值进行减法计数,并在每个时钟周期都输出减法计数器的当前值。仿真结果与预先设定的电路功能相吻合。第六章 硬件调试经过软件平台上的编译仿真,终于可以在硬件上进行调试。本次试验所用的硬件平台是 ACEX1K 系列的 EP1K30TC144-3。在开发板上用到的第 3 个硬件模块:4 个八段数码管、3 个 LED、8 个按键。以下是模块 3 的接线盒引脚分配: 6 5 4 3 2 1 0 R 45678 D 1 2 3 4 5 6 7 8 4 0 6 2 8 4 0 6 17图 11 接线盒引脚分配本次试验为了观察操作方便,数码管用了第 8、7、

28、5、4 个显像管;LED 分别用了 D8、D7、D1;按键则 8 个全部使用。表 2 对应的键位功能键 8RESETD8LED21键 7SET_TD7LED20键 6TESTD1COOK键 5START显像管 8MIN1键 4KEY3显像管 7MIN0键 3KEY2显像管 5SEC1键 2KEY1显像管 4SEC0键 1KEY0CLOCK0CLK表 3 具体的引脚分配18分配好引脚,下载程序到硬件之后就可以调试了。首先按下 TEST,显示8888 则测试模式运行正常;按下 SET_T 设置时间,LED1亮,再输入所学要的时间,再次按下 SET_T 关闭设置时间,LED1灭;按下 START,开

29、始计时,LED0、COOK 亮,当时间回到 0000 时,灯全灭,完成试验。19总 结本次课程设计是微波炉控制器的 FPGA 实现,微波炉控制器系统可由三个电路模块组成:状态控制电路模块 controller、数据装载电路模块 loader、计时器模块 counter。在 QUARTUSII 上进行程序的编程、仿真,在编译仿真通过后,最终在试验箱调试成功,实现设计任务书所要求的指标。本次课程设计从收集资料到完成论文共历时 2 个星期。在课程设计期间,在温习旧知识的同时,还学习了许多新的东西,把他们运用到这次设计中,加深了对之前学到的知识的理解。通过此次设计,我收获了很多关于 EDA 技术与VH

30、DL 的知识。特别是 QUARTUS II 软件的应用,从安装到使用,在到对在仿真时遇到问题的解决,明白了理论是完美的,而实际仿真是会有延时、毛刺等问题,所以在仿真是如何设置时钟也是值得好好考虑的。同时此次设计使我的动手能力提高了许多,能够让我在设计电路时,自己来解决碰到的问题,学会了怎样去分析电路,怎样把所学到的知识和实际相起来。但是由于在很多方面都没有经验,在设计中遇到了很多困难,今后将努力克服自己在完成课程设计过程中暴露出来的不足之处。20附录一 原理图21附录二 源程序- -状态控制电路的 VHDL 实现如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A

31、LL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY controllor IS PORT( RESET:IN STD_LOGIC; -复位信号 KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0);-输入时间 SET_T:IN STD_LOGIC;-时间设置信号 START:IN STD_LOGIC;-开始烹调信号 TEST:IN STD_LOGIC;-显示电路测试信号 CLK:IN STD_LOGIC; -时钟脉冲 DONE:IN STD_LOGIC;-完成信号 COOK:OUT S

32、TD_LOGIC;-指示烹调状态,提示计时器开始计数 LD_TEST:OUT STD_LOGIC; -指示数据装载电路载入的用于测试的数据 LD_CLK:OUT STD_LOGIC; -指示数据装载电路载入设置时间数据 DATA:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);-16 位数据 LED_SET_T:OUT STD_LOGIC; -LED 显示状态 LD_DONE:OUT STD_LOGIC -LED 显示完成 );END controllor;ARCHITECTURE rtl OF controllor ISTYPE STATES IS(IDLE,LAMP_T

33、EST,SET_CLOCK,TIMER,DONE_MSG);SIGNAL NXT,CUR:STATES; -2 个信号:下一状态、当前状态SIGNAL DATATMP:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL SET_T0: STD_LOGIC; -设置时间信号BEGIN PROCESS(CLK,RESET) -时钟和复位的进程 BEGIN IF RESET=1 THEN -复位时将 IDLE(显示 0000)赋予当前状态22 CUR=IDLE; ELSIF CLKEVENT AND CLK=1 THEN CUR=NXT; -如果不是,遇到上边沿则自动跳转下一

34、状态 END IF;END PROCESS; PROCESS(RESET,KEY) -复位和输入的进程 BEGIN -可以让输入 4 位数字 显示时间 IF RESET = 1 THEN -复位时不论任何状态数码管都将显示 0000 DATATMP 0); ELSE IF KEY(3)EVENT AND KEY(3) = 1 THEN -设置分的十位 IF DATATMP(15 DOWNTO 12) = 0101 THEN -5 自动跳转到 0 DATATMP(15 DOWNTO 12) = 0000; ELSE DATATMP(15 DOWNTO 12) = DATATMP(15 DOWNT

35、O 12) + 1; END IF; -否则自动加 1 END IF; IF KEY(2)EVENT AND KEY(2) = 1 THEN -设置分的个位 IF DATATMP(11 DOWNTO 8) = 1001 THEN -9 自动跳转到 0 DATATMP(11 DOWNTO 8) = 0000; ELSE DATATMP(11 DOWNTO 8) = DATATMP(11 DOWNTO 8) + 1; END IF; -否则自动加 1 END IF; IF KEY(1)EVENT AND KEY(1) = 1 THEN -设置秒的十位 IF DATATMP(7 DOWNTO 4)

36、= 0101 THEN -5 自动跳转到 0 DATATMP(7 DOWNTO 4) = 0000; ELSE DATATMP(7 DOWNTO 4) = DATATMP(7 DOWNTO 4) + 1; END IF; -否则自动加 1 END IF; IF KEY(0)EVENT AND KEY(0) = 1 THEN -设置秒的个位 IF DATATMP(3 DOWNTO 0) = 1001 THEN -9 自动跳转到 0 DATATMP(3 DOWNTO 0) = 0000; ELSE23 DATATMP(3 DOWNTO 0) = DATATMP(3 DOWNTO 0) + 1; E

37、ND IF; END IF; -否则自动加 1 END IF; DATA = DATATMP; END PROCESS; PROCESS(SET_T,RESET) -设置时间和复位进程 BEGIN IF RESET = 1 THEN -复位时设置时间变为低电平 SET_T0 = 0; ELSIF SET_TEVENT AND SET_T = 1 THEN -按下 SET_T 键时 SET_T0 = NOT SET_T0; -SET_T 非它前之状态 END IF; IF SET_T0 = 1 THEN LED_SET_T = 1; -赋予 SET_T 持续电平 ELSE LED_SET_T =

38、 0; -赋予 SET_T 持续电平 END IF; END PROCESS;PROCESS(CLK,CUR,SET_T,START,TEST,DONE) ISBEGIN NXT=IDLE; -将 IDLE 载入 NXT LD_TEST=0; -复位 LD_DONE=0; LD_CLK=0; COOK -译码器显示测试状态 LD_TEST=1; COOK -烹调时间测试状态 LD_CLK=1; COOK -完成信息显示状态 LD_DONE=0; COOK -初始状态定义 IF TEST=1 THEN NXT=LAMP_TEST; -设置 TEST LD_TEST=1; ELSIF SET_T0

39、=1 THEN -设置 SET_T NXT=SET_CLOCK; LD_CLK=1; ELSIF START=1 AND DONE=0 THEN -设置计时模式 NXT=TIMER; COOK IF DONE=1 THEN -设置计时完成 NXT=DONE_MSG; LD_DONE=0; ELSE NXT=TIMER; COOKNULL; END CASE; END PROCESS;END rtl;-数据装载电路的 VHDL 实现如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY loa

40、der IS25 PORT( DATAIN:IN STD_LOGIC_VECTOR(15 DOWNTO 0); -输入 16 位数据 LD_TEST:IN STD_LOGIC; LD_CLK:IN STD_LOGIC; LD_DONE:IN STD_LOGIC; DATAOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); -输出 16 位数据 LOAD:OUT STD_LOGIC -选择状态 );END loader;ARCHITECTURE rtl OF loader ISBEGIN PROCESS(DATAIN,LD_TEST,LD_CLK,LD_DONE) CO

41、NSTANT ALLS:STD_LOGIC_VECTOR(15 DOWNTO 0)-测试信息 :=1000100010001000; -显示 8888 CONSTANT DONE:STD_LOGIC_VECTOR(15 DOWNTO 0)-烹调完成信息 :=1010101111001101; VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN LOAD-测试 DATAOUT-烹调完成 DATAOUT DATAOUTNULL; END CASE; END PROCESS;END rtl;-十进制计数器26LIBRARY IEEE;USE IEEE.

42、STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 IS PORT( CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; -CLR:清除数据 EN:IN STD_LOGIC; -信号使能 DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -输入的 4 位数据 Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -输出的 4 位数据 CARRY_OUT:OUT STD_LOGIC -数据装载 );END cnt10;ARCHITECTURE

43、rtl OF cnt10 IS SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); -链接输入输出BEGIN -数据的信号 PROCESS(CLK,LOAD,CLR,EN) BEGIN IF CLR = 1 THEN -当 CLR 高电平,数据变为 0000 TMP= 0000; ELSIF LOAD=1THEN -否则装载输入的数据 TMP=DATAIN; ELSIF CLKEVENT AND CLK=0THEN -上升沿时,执行 10 进制减法 IF EN=1THEN IF TMP=0000THEN -0 跳转到 9 TMP=1001; ELSE -自动减 1

44、 TMP=TMP-1; END IF; END IF; END IF;27 IF TMP=0000THEN CARRY_OUT=1; -COOK=CARRY_OUT ELSE CARRY_OUT=0; END IF; END PROCESS; Q=TMP;END rtl;-六进制减法计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt6 IS PORT( CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; EN:IN STD_LOGIC; DAT

45、AIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC );END cnt6;ARCHITECTURE rtl OF cnt6 ISSIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK,LOAD,CLR,EN) BEGIN IF CLR = 1 THEN TMP= 0000; ELSIF LOAD=1 THEN TMP=DATAIN; 28 ELSIF CLKEVENT AND CLK=0THEN

46、 -上升沿时进行 6 进制减法 IF EN=1THEN IF TMP=0000THEN -0 自动跳转到 5 TMP=0101; ELSE TMP=TMP-1; -否则自动减 1 END IF; END IF; END IF; IF TMP=0000THEN CARRY_OUT=1; -赋值给 COOK ELSE CARRY_OUT=0; END IF; END PROCESS; Q=TMP;END rtl;-计时电路的 VHDL 实现如下:-计数器电路模块设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter IS PORT( CO

47、OK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; CLK:IN STD_LOGIC; DATA:IN STD_LOGIC_VECTOR(15 DOWNTO 0); SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -秒个位 SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -秒十位 MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -分个位 MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -分十位29 DONE:OUT STD_LOGIC -完成 );

48、END counter;ARCHITECTURE rtl OF counter IS-定义十进制和六进制计数器电路模块COMPONENT cnt10 IS PORT( CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; EN:IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -输入 Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -输出 CARRY_OUT:OUT STD_LOGIC -状态 );END COMPONENT cnt10;COMPONENT cnt6 IS PORT(

49、CLK:IN STD_LOGIC; LOAD,CLR:IN STD_LOGIC; EN:IN STD_LOGIC; DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC );END COMPONENT cnt6;SIGNAL CLK0:STD_LOGIC;SIGNAL S0:STD_LOGIC;SIGNAL S1:STD_LOGIC;SIGNAL S2:STD_LOGIC;SIGNAL S3:STD_LOGIC;BEGIN -元件例化30 CLK0

50、= NOT CLK; U1:cnt10 PORT MAP(CLK0,LOAD,CLR,COOK,DATA(3 DOWNTO 0),SEC0,S0); U2:cnt6 PORT MAP(S0,LOAD,CLR,COOK,DATA(7 DOWNTO 4),SEC1,S1); U3:cnt10 PORT MAP(S1,LOAD,CLR,COOK,DATA(11 DOWNTO 8),MIN0,S2); U4:cnt6 PORT MAP(S2,LOAD,CLR,COOK,DATA(15 DOWNTO 12),MIN1,S3); DONE=S0 AND S1 AND S2 AND S3;END rtl;-顶层模块的 VHDL 实现如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY top IS PORT( KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -输入 4 位 16 进制 RESET:IN STD_LOGIC; -复位键 SET_T:IN STD_LOGIC; -设置时间 START:IN STD_LOGIC; -开始计时 TEST:IN STD_LOGIC; -测试模式 CLK :IN STD_LOGIC; -输入脉冲 COOK:OUT STD_LOGIC; -烹调状态 L

温馨提示

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

最新文档

评论

0/150

提交评论