FPGA《基于VHDL微波炉课程设计》.docx
《FPGA《基于VHDL微波炉课程设计》.docx》由会员分享,可在线阅读,更多相关《FPGA《基于VHDL微波炉课程设计》.docx(30页珍藏版)》请在冰豆网上搜索。
FPGA《基于VHDL微波炉课程设计》
微波炉控制器的FPGA实现
摘要
该设计用VHDL语言在MAX+PLUSⅡ软件平台上通过编译、模拟仿真,完成了微波炉控制功能,实现了微波炉的测试、时间设置、烹调计时、完成提示等设计,并对时钟分频作了一定的探讨.此设计采用了现场可编程逻辑器件FPGA的 ASIC设计,由控制模块、装载模块、计时模块和显示模块四大模块组成,而且它可以将所有器件集成在一块芯片上,体积大大减小,且外围电路很简单,易于实现.
关键词:
FPGA;VHDL;微波炉控制器;仿真
第一章绪论
第一节课题背景介绍
一、产品背景介绍
PercyL.Spencer在1946年构想出微波炉的概念,在1950年取得专利.微波炉的运作机制为微波在水中能产生摩擦热的原理。
早期微波炉尺码庞大,重量超过300公斤和高度超过1.5米,所以主要在大型餐厅和食物市场使用。
第一部家用微波炉是在1965年由Raytheon集团生产。
二、国内产品发展现状
现在,中国已成为全球最大的微波炉生产基地,据估计,中国微波炉年产量已达2000万台左右,从2001年中国市场的需求量来看,约在700万台左右。
中国微波炉市场经过前几年的洗牌,已由前几年的300多家减少至目前的100多家,其中在市场上可统计的仅30多家。
洋品牌在早期的微波炉市场份额,几乎占据了绝大部分的市场。
但初期由于微波炉市场属于导入期,价格高,消费者接受的少,自1996年以后,惠而浦、松下等大部分都退出了中国市场,主要以出口为主.1998年后,外资品牌中以韩国品牌LG、三星表现较为突出,逐渐跨入第2、第3名,微波炉第一品牌为格兰仕。
2000年,美的介入,迅速崛起成为行业第三,三星也逐渐退出市场。
经过60年的发展,微波炉已经成为人们日用生活中的必不可少的厨房电器,大大降低了家庭妇女的工作量和工作强度.据统计,微波炉目前在日本、美国、西欧等发达国家地区的普及率高达98%,在中国城镇的普及率也已近90%。
这个数字甚至超过了彩电和洗衣机的普及程度。
三、产品发展趋势
随着人们生活水平的提高和信息化的发展,家用电器层出不穷,各种功能也越来越完善,其中微波炉是现代家庭的必备产品,它的质量和性能的高低,将会极大的影响人们的生活水平和质量.为此,设计一个高质量的微波炉控制系统是非常有必要的。
微波炉开始进入越来越多的家庭,他给人们的生活带来了极大的方便。
微波炉由2450MHz的超高频来加热食物.他省时、省电、方便和卫生,作为现代的烹饪工具,微波炉的控制器体现着他的重要性能指标。
目前大部分微波炉控制器采用单片机进行设计,带南路比较复杂性能不够灵活。
本文采用先进的EDA技术,利用QuartusII工作平台和VHDL设计语言,设计了一种新型的微波炉控制器芯片,该芯片具有系统复位、时间设定和烹饪计时的功能,用一片FPGA芯片实现,所以能设计出一款方便安全操作的微波炉是非常有必要的。
第二章电子设计自动化概述
第一节VHDL简介
随着VLSI、EDA(ElectronicDesignAutomation)工具的迅速发展,用户系统的设计从单纯的ASIC(ApplicationSpecificIntegratedCircuit)设计向着系统单片化SOC(SystemOnaChip)设计的方向发展.同时网络技术的发展,共享IP知识产权的开放式系统设计成为新模式,芯片工艺物理设计与系统设计相分离,使用户系统设计人员可直接从事芯片设计.多种技术的融合,系统的功能复合化程度越来越高;对系统设计方法学和工具的要求更高;系统设计日趋软件硬化、硬件软化,并使两者得到了有机的融合,形成了更为强大的ESDA(ElectronicSystemDesignAutomation)。
VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)是IEEE(InstituteofElectricalandElectronicsEngineers)标准的硬件描述语言,是现代电子系统设计的首选硬件设计计算机语言.本篇介绍VHDL的语法基础、用VHDL进行系统设计的基本方法、以及VHDL的设计实例等。
从宏观的角度看,VHDL的语法构成了程序的各组成部分;微观上看VHDL的语法是各种语句的运用细节。
本章在VHDL的特性之后,从这两个角度简要介绍VHDL的语法基础。
硬件描述语言HDL(HardwareDescriptionLanguage)诞生于1962年.HDL是用形式化的方法描述数字电路和设计数字逻辑系统的语言。
主要用于描述离散电子系统的结构和行为。
与SDL(SoftwareDescriptionLanguage)相似,经历了从机器码(晶体管和焊接)、汇编(网表)、到高级语言(HDL)的过程.
20世纪80年代美国国防部开发VeryHighSpeedIntegratedCircuit—VHSIC,用于描述集成电路的结构和功能。
此后,硬件描述语言向标准化方向发展,1987年成为IEEEStandard1076,称为VHDL语言。
它也是美国国防部标准(MIL—STD-454L)。
1993年该标准增修为IEEE1164标准。
1996年,再次加入电路合成的标准程序和规格,成为IEEE1076.3标准。
1995年VerilogHDL也成为IEEE标准。
VHDL与VerilogHDL一起成为业界主选的硬件描述语言。
一、VHDL的特点
应用VHDL进行系统设计,有以下几方面的特点。
(一)功能强大
VHDL具有功能强大的语言结构。
它可以用明确的代码描述复杂的控制逻辑设计.并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。
VHDL是一种设计、仿真和综合的标准硬件描述语言。
(二)可移植性
VHDL语言是一个标准语言,其设计描述可以为不同的EDA工具支持。
它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。
此外,通过更换库再重新综合很容易移植为ASIC设计。
(三)独立性
VHDL的硬件描述与具体的工艺技术和硬件结构无关.设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。
程序设计的硬件目标器件有广阔的选择范围,可以是各系列的CPLD、FPGA及各种门阵列器件。
(四)可操作性
由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。
(五)灵活性
VHDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数.使其在任何大系统的设计中,随时可对设计进行仿真模拟。
所以,即使在远离门级的高层次(即使设计尚未完成时),设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。
二、VHDL的设计步骤
采用VHDL的系统设计,一般有以下6个步骤.
(1)要求的功能模块划分;
(2)VHDL的设计描述(设计输入);
(3)代码仿真模拟(前仿真);
(4)计综合、优化和布局布线;
(5)布局布线后的仿真模拟(后仿真);
(6)设计的实现(下载到目标器件)。
三、VHDL的设计简述
VHDL描述数字电路系统设计的行为、功能、输入和输出。
它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构.
VHDL将一个设计称为一个实体Entity(元件、电路或者系统),并且将它分成外部的可见部分(实体名、连接)和内部的隐藏部分(实体算法、实现)。
当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库.所以,内部和外部的概念对系统设计的VHDL是十分重要的。
外部的实体名或连接由实体声明Entity来描述.而内部的实体算法或实现则由结构体Architecture来描述。
结构体可以包含相连的多个进程process或者组建component等其他并行结构。
需要说明的是,它们在硬件中都是并行运行的。
VHDL程序设计的基本结构如下:
库、程序包
实体Entity
结构体Architecture、
进程process、
组件component等
配置Configuration
表1VHDL程序设计的基本结构
一个实体可以对应一个或者多个结构体。
结构体可以包含一个或者多个进程或者组件。
四、VHDL的描述风格
设计实体的逻辑功能由VHDL的结构体具体描述。
用户可以使用不同程度的语句类型和抽象方式来描述不同程度的设计。
例如系统级的、板级的、芯片级的或者模块级的设计.对于相同的逻辑行为可以有不同的语句表达方式。
在VHDL结构体中这种不同的描述方式或者说建模方法,通常可归纳为行为(Behavioral)级描述、数据流(Dataflow)级描述和结构(Structural)级描述。
(一)行为级描述
通过一组串行的VHDL进程,反映设计的功能和算法,而没有直接指明或涉及实现这些行为的硬件结构,包括硬件特性、连线方式和逻辑行为方式。
行为级描述主要指顺序语句描述,即通常是指含有进程的非结构化的逻辑描述。
(二)数据流级描述
将数据看成从设计的输入端流到输出端,反映从输入数据到输出数据所发生的立即变换。
数据流描述主要是指非结构化的并行语句描述;是建立在用并行信号赋值语句描述基础上的。
数据流描述方式可比较直观地表达底层逻辑行为。
(三)结构级描述
将设计看成多个功能块的相互连接,并且主要通过功能块的组件例化来表示.结构级描述方式采用了结构化、模块化的设计思想,适合于大型复杂性设计。
VHDL通过这三种描述方法或称描述风格,从不同的侧面描述结构体的行为方式。
其中,行为描述的抽象程度最高,最能体现VHDL描述高层次结构和系统的能力.正是VHDL语言的行为描述能力使自顶向下的设计方式成为可能.
在实际应用中,为了能兼顾整个设计的功能、资源和性能几方面的因素,通常将以上三种描述方式混合使用.
第三章总体设计
第一节课题的主要内容及基本要求
要求采用EDA技术设计一个微波炉控制器,可完成以下功能:
(1)可控制烹调的开关;
(2)可设置烹调时间,(假设系统最长的烹调时间为59分59秒);
(3)可显示烹调的剩余时间.
第二节设计思路
现代数字系统设计一般采用自顶向下的方法,其过程大致可分为三个大的步骤:
系统调研;模块的划分;模块的实现。
承接一个数字系统设计的课题后,一般不要急于动手设计,而应对课题作充分的分析和调研,然后确定初步的方案.
分析:
课题的任务、要求、原理和使用条件等。
调研:
课题现状并和相同或相近课题进行比较。
现代数字系统设计一般是将其划分为控制器和受控电路两大部分,控制器由ASM图或MDS图决定,而受控电路则使用各种通用模块实现。
下面分析微波炉定时器的工作过程及基本要求:
上电后,系统处于复位状态。
工作时首先进行烹调时间设置,并使用数码管显示时间信息,设要求最长的烹调时间为59分59秒,时间设置完毕后系统自动回到初始状态;按开始烹调按键进入烹调状态,时间显示数码管按每秒减1的倒计时方式显示剩余烹调时间;烹调结束后,系统回到复位状态。
系统要求分析及初步方案的确定:
根据系统的基本要求,着重应考虑如下问题:
(1)计时电路的设计:
芯片内部产生和外部提供.本例中由外部时钟电路以BCD码的形式提供.
(2)时间设置出错及工作过程的取消等情况的处理:
设置一个复位按键。
(3)数码管状态的检测:
设置数码管检测按键,按动该按键后,数码管能够显示“8888"的信息。
(4)时间显示电路:
采用4位7段显示数码管显示,并由芯片直接驱动。
(5)微波管的驱动:
设置一个输出驱动控制烹调状态的继电器即可.
第三节设计方案
微波炉控制器系统可由以下三个电路模块组成:
状态控制电路,其功能是控制微波炉工作过程中的状态转换,并发出相关控制信号;数据装载电路,其功能是根据控制信号选择定时时间,测试数据或计时完成信息的载入;计时器电路,其功能是对时钟进行减法计数,提供烹调完成时的状态信号。
微波炉控制器的系统框图如图1所示。
其中,CLK为时钟输入信号,时钟上升沿敏感;RESET为复位信号,高电平有效时系统复位清零;TEST为数码显示管测试信号,高电平有效系统显示8888;SET_T高电平有效时允许设置烹饪时间;KEY为定时时间输入信号,用于设置烹饪时间的长短,其高到低分别表示时间分、秒的十位、个位;START为烹调开始信号,高电平有效时开始烹调;输出信号COOK指示微波炉状态,高电平时表示烹调进行时;SEC0、SEC1、MIN0、MIN1分别表示秒个位、秒十位、分个位、分十位.
图1微波炉控制器系统框图
微波炉控制器的工作流程图如图2所示。
首先,对系统进行复位清零,使其各电路模块均处于初始状态;当烹饪时间设置信号SET_T有效时,读入时间信号KEY[3.。
0]的取值,此时系统显示设置的时间信息,再按下SET_T确定设置时间完成。
按下开始键START,系统进入烹调状态,COOK信号变为高电平,时钟计数器开始减法计数,MIN1、MIN0、SEC1、SEC0显示剩余烹调时间。
烹调结束,系统恢复初始状态.
当系统处于复位清零状态时,按下显像管测试按钮TEST,将对显像管是否正常工作进行测试,正常工作时,显像管输出全8。
第四章模块分析
第一节状态控制电路模块
状态控制器的功能根据输入信号和自身当时所处的状态完成状态的转换和输出相应的控制信号,其模块框图如图3所示。
其中,输出信号LD_DONE指示数据装载电路载入的烹调结束的状态信息的显示的驱动信息数据;LD_CLK显示数据装载电路的设置的时间数据;LD_TEST指示数据装载电路载入的用于测试的数据,以显示驱动信息数据;COOK指示烹饪的状态,并提示计时器进行减法计算;KEY为定时时间输入信号,用于设置烹饪时间的长短,其高到低分别表示时间分、秒的十位、个位。
当LD_DONE有效时,输出烹调结束数据。
当LD_CLK有效时,输出烹调的设置时间数据。
当LD_TEST有效时,输出数码管测试数据--包括6个输入信号和4个输出信号。
图3状态控制电路模块框图
根据微波炉工作流程的描述,分析状态转换条件及输出信号,可以得到如图4所示的微波炉控制器的状态转换图.
图中,当RESET信号有效时,系统复位清零;输入/输出对应烹调时间设置、显示译码测试、完成信号显示和减法计数定时四种状态进行相应的转换。
第二节数据装载电路模块
数据装载电路的本质是一个三选一多路选择器,其模块框图如图5所示.
图5数据装载电路模块框图
当LD_DONE有效时,输出烹调结束的信息数据数据。
当L_CLK有效时,输出烹调的设置时间数据。
当L_TEST有效时,输出数码管测试数据。
LOAD信号为LD_DONE时DATEOUT输出KEY有效指示。
第三节计时器模块
电路计时模块可以由十进制减法计数器和六进制减法计数器级联组成,其中,两个十进制的减法计数器用于分、秒的个位减法计数,两个六进制的减法计数器用于分、秒的十位减法计数。
由六进制计数器和十进制计数器级联构成的计时模块原理图如图6所示.
图6计时器模块原理图
计时器模块的框图如图7所示.
图7计时器模块框图
LOAD有效时完成装入功能,COOK(EN)有效时执行减计数;CLR由RESET发出信号,清除装载已存的数据;DONE返回给控制器,MIN和SEC显示所剩时间和测试状态信息、烹调结束状态信息等.
第五章程序设计及仿真
第一节程序简要说明
程序分为多个模块进行编写,这样既符合编程模块化的要求也方便编写和阅读。
按照以上功能和模块分析,可以将程序划分几个模块:
状态控制电路模块controller、数据装载电路模块loader、计时器模块counter,其中计时器模块又可以划分2个模块:
十进制功能编写cnt10,6进制功能编写cnt6,一起完成计时功能。
本次程序编写调试软件平台是QuartusII4。
1.
详细的源程序可查看附录二。
第二节仿真时序图
下面我们分别考察微波炉总的功能、计时器模块和数据装载电路模块的正确性(其他模块的仿真略).
一、微波炉总的功能仿真
微波炉总的功能仿真波形图如下:
图8微波炉总的功能仿真波形图
图中,CLK是输入脉冲,RESET复位,SET_T设置时间,KEY按键输入,START开始计时,COOK正在烹饪,MIN和SEC是时间显示,LED2[1]是显示设置时间信号,LED[0]是显示烹饪时间信号。
从仿真波形中可看出,按下RESET,所有信号复位为零,按下TEST,显像管显示8888,按下SET_T后KEY输入有效,MIN和SEC显示输入值,KEY输入完成并按下SET_T,表示设置时间完成,再按下START,开始烹饪并进行减法计数,MIN和SEC显示剩余时间,此时输出COOK变为高电平。
二、计时器模块仿真波形
计时器模块仿真波形如下:
图9计时器模块仿真波形图
图中,LOAD为高电平时读取信号DATA的值,当COOK信号为高电平时,对DATA的值进行减法计数,并在每个时钟周期都输出减法计数器的当前值。
仿真结果与预先设定的电路功能相吻合。
第六章硬件调试
经过软件平台上的编译仿真,终于可以在硬件上进行调试.本次试验所用的硬件平台是ACEX1K系列的EP1K30TC144—3。
在开发板上用到的第3个硬件模块:
4个八段数码管、3个LED、8个按键。
以下是模块3的接线盒引脚分配:
图11接线盒引脚分配
本次试验为了观察操作方便,数码管用了第8、7、5、4个显像管;LED分别用了D8、D7、D1;按键则8个全部使用。
表2对应的键位功能
键8
RESET
D8
LED2[1]
键7
SET_T
D7
LED2[0]
键6
TEST
D1
COOK
键5
START
显像管8
MIN1
键4
KEY[3]
显像管7
MIN0
键3
KEY[2]
显像管5
SEC1
键2
KEY[1]
显像管4
SEC0
键1
KEY[0]
CLOCK0
CLK
表3具体的引脚分配
分配好引脚,下载程序到硬件之后就可以调试了.首先按下TEST,显示8888则测试模式运行正常;按下SET_T设置时间,LED[1]亮,再输入所学要的时间,再次按下SET_T关闭设置时间,LED[1]灭;按下START,开始计时,LED[0]、COOK亮,当时间回到0000时,灯全灭,完成试验。
总结
本次课程设计是微波炉控制器的FPGA实现,微波炉控制器系统可由三个电路模块组成:
状态控制电路模块controller、数据装载电路模块loader、计时器模块counter。
在QUARTUSII上进行程序的编程、仿真,在编译仿真通过后,最终在试验箱调试成功,实现设计任务书所要求的指标。
本次课程设计从收集资料到完成论文共历时2个星期.在课程设计期间,在温习旧知识的同时,还学习了许多新的东西,把他们运用到这次设计中,加深了对之前学到的知识的理解.通过此次设计,我收获了很多关于EDA技术与VHDL的知识。
特别是QUARTUSII软件的应用,从安装到使用,在到对在仿真时遇到问题的解决,明白了理论是完美的,而实际仿真是会有延时、毛刺等问题,所以在仿真是如何设置时钟也是值得好好考虑的。
同时此次设计使我的动手能力提高了许多,能够让我在设计电路时,自己来解决碰到的问题,学会了怎样去分析电路,怎样把所学到的知识和实际相起来。
但是由于在很多方面都没有经验,在设计中遇到了很多困难,今后将努力克服自己在完成课程设计过程中暴露出来的不足之处。
附录一原理图
附录二源程序
————-——--—--—--—---————-——---—-—-—--—--———---————----—-————-———-—-——-——--—---———--—-———---
—-状态控制电路的VHDL实现如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE。
STD_LOGIC_UNSIGNED。
ALL;
USEIEEE。
STD_LOGIC_ARITH.ALL;
ENTITYcontrollorIS
PORT(
RESET:
INSTD_LOGIC;--复位信号
KEY:
INSTD_LOGIC_VECTOR(3DOWNTO0);-—输入时间
SET_T:
INSTD_LOGIC;-—时间设置信号
START:
INSTD_LOGIC;—-开始烹调信号
TEST:
INSTD_LOGIC;—-显示电路测试信号
CLK:
INSTD_LOGIC;—-时钟脉冲
DONE:
INSTD_LOGIC;-—完成信号
COOK:
OUTSTD_LOGIC;——指示烹调状态,提示计时器开始计数
LD_TEST:
OUTSTD_LOGIC;—-指示数据装载电路载入的用于测试的数据
LD_CLK:
OUTSTD_LOGIC;——指示数据装载电路载入设置时间数据
DATA:
OUTSTD_LOGIC_VECTOR(15DOWNTO0);--16位数据
LED_SET_T:
OUTSTD_LOGIC;--LED显示状态
LD_DONE:
OUTSTD_LOGIC-—LED显示完成
);
ENDcontrollor;
ARCHITECTURErtlOFcontrollorIS
TYPESTATESIS(IDLE,LAMP_TEST,SET_CLOCK,TIMER,DONE_MSG);
SIGNALNXT,CUR:
STATES;—-2个信号:
下一状态、当前状态
SIGNALDATATMP:
STD_LOGIC_VECTOR(15DOWNTO0);
SIGNALSET_T0:
STD_LOGIC;—-设置时间信号
BEGIN
PROCESS(CLK,RESET)-—时钟和复位的进程
BEGIN
IFRESET=’1'THEN——复位时将IDLE(显示0000)赋予当前状态
CUR<=IDLE;
ELSIFCLK'EVENTANDCLK='1'THEN
CUR<=NXT;--如果不是,遇到上边沿则自动跳转下一状态
ENDIF;
ENDPROCESS;
PROCESS(RESET,KEY)--复位和输入的进程
BEGIN--可以让输入4位数字显示时间
IFRESET='1'THEN——复位时不论任何状态数码管都将显示0000
DATATMP<=(others=>'0');
ELSE
IFKEY(3)’EVENTANDKEY(3)=’1’THEN—-设置分的十位
IFDATATMP(15DOWNTO12)="0101"THEN——5自动跳转到0
DATATMP(15DOWNTO12)〈=”0000";
ELSE
DATATMP(15DOWNTO12)〈=DATATMP(15DOWNTO12)+1;
ENDIF;--否则自动加1
ENDIF;