FPGA基于VHDL微波炉课程设计方案.doc_第1页
FPGA基于VHDL微波炉课程设计方案.doc_第2页
FPGA基于VHDL微波炉课程设计方案.doc_第3页
FPGA基于VHDL微波炉课程设计方案.doc_第4页
FPGA基于VHDL微波炉课程设计方案.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

FPGA基于VHDL微波炉课程设计方案第一章 绪 论第一节 课题背景介绍一、产品背景介绍Percy L.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( Electronic Design Automation )工具的迅速发展,用户系统的设计从单纯的ASIC(Application Specific Integrated Circuit)设计向着系统单片化SOC(System On a Chip)设计的方向发展。同时网络技术的发展,共享IP知识产权的开放式系统设计成为新模式,芯片工艺物理设计与系统设计相分离,使用户系统设计人员可直接从事芯片设计。多种技术的融合,系统的功能复合化程度越来越高;对系统设计方法学和工具的要求更高;系统设计日趋软件硬化、硬件软化,并使两者得到了有机的融合,形成了更为强大的ESDA( Electronic System Design Automation )。VHDL(Very High Speed Integrated Circuit Hardware Description Language)是IEEE(Institute of Electrical and Electronics Engineers)标准的硬件描述语言,是现代电子系统设计的首选硬件设计计算机语言。本篇介绍VHDL的语法基础、用VHDL进行系统设计的基本方法、以及VHDL的设计实例等。从宏观的角度看,VHDL的语法构成了程序的各组成部分;微观上看VHDL的语法是各种语句的运用细节。本章在VHDL的特性之后,从这两个角度简要介绍VHDL的语法基础。硬件描述语言HDL(Hardware Description Language)诞生于1962年。HDL是用形式化的方法描述数字电路和设计数字逻辑系统的语言。主要用于描述离散电子系统的结构和行为。与SDL(Software Description Language)相似,经历了从机器码(晶体管和焊接)、汇编(网表)、到高级语言(HDL)的过程。20世纪80年代美国国防部开发Very High Speed Integrated CircuitVHSIC,用于描述集成电路的结构和功能。此后,硬件描述语言向标准化方向发展,1987年成为IEEE Standard 1076,称为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 表 1 VHDL程序设计的基本结构一个实体可以对应一个或者多个结构体。结构体可以包含一个或者多个进程或者组件。四、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所示。接通电源初始状态时间设置显示8888烹调完成SET_TTEST?START?时间到?NYNYNYNY图2 工作流程图首先,对系统进行复位清零,使其各电路模块均处于初始状态;当烹饪时间设置信号SET_T有效时,读入时间信号KEY3.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所示的微波炉控制器的状态转换图。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完成信息显示状态T烹调时间设置状态T显示译码测试状态T 图中,当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,一起完成计时功能。本次程序编写调试软件平台是Quartus II 4.1。详细的源程序可查看附录二。第二节 仿真时序图下面我们分别考察微波炉总的功能、计时器模块和数据装载电路模块的正确性(其他模块的仿真略)。一、微波炉总的功能仿真微波炉总的功能仿真波形图如下:图8 微波炉总的功能仿真波形图图中,CLK是输入脉冲,RESET复位,SET_T设置时间,KEY按键输入,START开始计时,COOK正在烹饪,MIN和SEC是时间显示,LED21是显示设置时间信号,LED0是显示烹饪时间信号。从仿真波形中可看出,按下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 对应的键位功能键8RESETD8LED21键7SET_TD7LED20键6TESTD1COOK键5START显像管8MIN1键4KEY3显像管7MIN0键3KEY2显像管5SEC1键2KEY1显像管4SEC0键1KEY0CLOCK0CLK表3 具体的引脚分配分配好引脚,下载程序到硬件之后就可以调试了。首先按下TEST,显示8888则测试模式运行正常;按下SET_T设置时间,LED1亮,再输入所学要的时间,再次按下SET_T关闭设置时间,LED1灭;按下START,开始计时,LED0、COOK亮,当时间回到0000时,灯全灭,完成试验。总 结本次课程设计是微波炉控制器的FPGA实现,微波炉控制器系统可由三个电路模块组成:状态控制电路模块controller、数据装载电路模块loader、计时器模块counter。在QUARTUSII上进行程序的编程、仿真,在编译仿真通过后,最终在试验箱调试成功,实现设计任务书所要求的指标。本次课程设计从收集资料到完成论文共历时2个星期。在课程设计期间,在温习旧知识的同时,还学习了许多新的东西,把他们运用到这次设计中,加深了对之前学到的知识的理解。通过此次设计,我收获了很多关于EDA技术与VHDL的知识。特别是QUARTUS II软件的应用,从安装到使用,在到对在仿真时遇到问题的解决,明白了理论是完美的,而实际仿真是会有延时、毛刺等问题,所以在仿真是如何设置时钟也是值得好好考虑的。同时此次设计使我的动手能力提高了许多,能够让我在设计电路时,自己来解决碰到的问题,学会了怎样去分析电路,怎样把所学到的知识和实际相起来。但是由于在很多方面都没有经验,在设计中遇到了很多困难,今后将努力克服自己在完成课程设计过程中暴露出来的不足之处。附录一 原理图附录二 源程序- -状态控制电路的VHDL实现如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;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 STD_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_TEST,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)赋予当前状态 CUR=IDLE; ELSIF CLKEVENT AND CLK=1 THEN CUR=NXT; -如果不是,遇到上边沿则自动跳转下一状态 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 DOWNTO 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) = 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; ELSE DATATMP(3 DOWNTO 0) = DATATMP(3 DOWNTO 0) + 1; END 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 = 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=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 loader IS 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) CONSTANT 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;-十进制计数器LIBRARY IEEE;USE IEEE.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 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 TMP=TMP-1; END IF; END IF; END IF; 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; DATAIN: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; ELSIF CLKEVENT AND CLK=0THEN -上升沿时进行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( COOK: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); -分十位 DONE:OUT STD_LOGIC -完成 );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

温馨提示

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

评论

0/150

提交评论