《《电子系统课程设计》报告具有温度显示功能的数字时钟.doc》由会员分享,可在线阅读,更多相关《《电子系统课程设计》报告具有温度显示功能的数字时钟.doc(33页珍藏版)》请在三一办公上搜索。
1、电子系统课程设计报告设计题目:具有温度显示功能的数字时钟专业班级:09电子信息工程(1)班 学生姓名: 学生学号: 指导教师: 完成时间:2012.10.4 报告成绩: 评阅意见: 评阅教师 日期 摘要摘要本设计为一个多功能的数字钟,具有时、分、秒计数显示功能,以24小时循环计数;具有调整时间功能以及整点报时功能;还能显示温度。本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在quaitus工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。系统主芯片采用EP1K100QC208-3,由时钟模块、控制模块、计时模块、数据译码模块、显
2、示以及报时模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的调整控制。关键词 数字钟;硬件描述语言;VHDL;FPGA;键盘接口目录1 绪论12 设计要求说明22.1 设计概述22.2 设计基本要求22.3 设计提高部分要求23 FPGA简介33.1 FPGA概述33.2 FPGA系统设计流程34 数字钟总体设计方案64.1 数字钟的构成64.2 数字钟的工作原理75 单元电路设计85.1 分频模块电路设计与实现85.2 计数模块设计与实现10秒计数模块105.3 动态扫描模块设计与实现115.4. 显示模块的设计与实现1
3、26 调试136.1 调试的步骤136.2 调试中的问题及其解决方法147 仿真148 编程下载158.1编程下载的基本步骤159 实验结论与研究展望159.1 实验结论159.2 研究展望17参考文献17附录181 绪论现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronic design automatic,EDA)技术。本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的
4、描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所设置的功能。因此,按键信息输入是与软件结构密切相关的过程。根据键盘的结构不同,采用不同的编码方法。但无论有无编码以及
5、采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。2 设计要求说明2.1 设计概述本设计的主要内容就是要利用QuartusII软件设计一个数字钟,并下载到FPGA开发板上,并使其能够达到预期的功能目的。所要设计的数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有整点报时、时间可调、
6、和温度显示功能。2.2 设计基本要求(1)能进行正常的时、分、秒计时功能;(2)分别由两个四位共阴数码管显示时分秒的计时;(3) 利用按键可进行时间的调整;2.3 设计提高部分要求(1)使时钟具有整点报时功能(当时钟计到整点时开始报时,在0000”, 0001”,0002”到0010”蜂鸣器每隔一秒鸣叫一次,一直鸣叫十次 );(2)具有温度显示功能;(3)自己添加其他功能;3 FPGA简介3.1 FPGA概述FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic
7、 Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/PGFA。CPLD/PGFA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路。它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。使用CPLA/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。这些优点使得CPLA/FPGA技术在20世纪90年代以后得到飞
8、速的发展,同时也大大推动了EDA软件和硬件描述语言HDL的进步。3.2 FPGA系统设计流程一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是TOP DOWN(自顶向下)的设计方法。目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。CPLD/FPGA系统设计的工作流程如图2-1所示。系统划分编译器代码级功能仿真综合器适配前时序仿真适配器CPLD/F
9、PGA实现适配后仿真模型适配后时序仿真适配报告ASIC实现VHDL代码或图形方式输入仿真综合库器件编程文件图3-1 CPLD/FPGA系统设计流程流程说明:1.工程师按照“自顶向下”的设计方法进行系统划分。2.输入VHDL代码,这是设计中最为普遍的输入方式。此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。3.将以上的设计输入编译成标准的VHDL文件。4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。5.利用综合器对
10、VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。6.利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。一般的设计,也可略去这一步骤。7.利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。8.在适配完成后,产生多项设计结果:(a)适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。
11、根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求。最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。4 数字钟总体设计方案4.1 数字钟的构成数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。图3-1所示为数
12、字钟的一般构成框图。主要包括时间基准电路、计数器电路、控制电路、译码和显示电路。其中的控制逻辑电路是比较灵活多样的,不断完善它可以增强数字钟的功能。译码驱动译码驱动译码驱动译码驱动译码驱动译码驱动时十位计数时个位计数分十位计数分个位计数秒十位计数秒个位计数校时控制电路校分控制电路分频器电路分频器电路晶体振荡器电路1HZ图4-1 数字钟的一般组成框图本设计在上面数字钟结构的基础上还加入了整点报时和温度显示的功能。4.2 数字钟的工作原理振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照
13、“24翻1”规律计数。计满后各计数器清零,重新计数。计数器的输出分别经译码器送数码管显示。时基电路可以由石英晶体振荡电路构成,如果晶振频率为1MHz,经过6次十分频就可以得到秒脉冲信号。译码显示电路由七段译码器完成,显示由数码管构成。5 单元电路设计5.1 分频模块电路设计与实现晶体振荡器是构成数字式时钟的核心,振荡器的稳定度及频率的精度决定了数字钟计时的准确程度,它保证了时钟走时准确及稳定。石英晶体的选频特性非常好,只有某一频率点的信号可以通过它,其它频率段的信号均会被它所衰减,而且,振荡信号的频率与振荡电路中的R、C元件的数值无关。因此,这种振荡电路输出的是准确度极高的信号。然后再利用分频
14、电路,将其输出信号转变为秒信号,其组成框图如图4-1。分频电路石英晶体振荡电路秒信号图5-1 秒信号产生电路框图本系统使用的晶体振荡器电路给数字钟提供一个频率稳定准确的50MHz的方波信号,其输出至分频电路。分频电路的逻辑框图如图4-2所示。图5-2 分频电路模块图5-3 分频模块电路设计其内部结构图见图4-3。电路中采用quaitus元器件库中的计数器7490进行硬件分频。经分频后输出1HZ的标准秒信号CLK1、240HZ用于报时模块的输入信号。该模块的时序仿真图如图4-4所示,满足设计要求。图5-4 分频模块仿真图5.2 计数模块设计与实现 秒计数模块秒计数模块逻辑框图如图4-5所示。图5
15、-5 秒计数模块框图输入端口ENL是秒时钟使能信号,也是整个数字钟的使能信号,高电平有效;RES是异步清零信号;CLK是秒脉冲输入端口;MADD和MDEC是同步校时控制信号,MADD是控制秒信号加一,MDEC是控制秒信号减一;输出端口A3.0是秒时钟的低位,B3.0是高位;CA端口是进位输出端口,当秒计数到59时输出高电平,其它时候输出低电平。秒计数模块的程序如下:秒时钟的仿真波形图如图4-6所示,仿真图满足设计的要求。分计数和时计数模块的设计原理与秒模块的类似。图5-6 秒时钟仿真波形5.3 动态扫描模块设计与实现动态扫描电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且输出
16、数码管的片选信号和位选信号。所谓动态扫描显示方式是在显示某一位LED显示块的数据的时候,让其它位不显示,然后在显示下一位的数据,同时关闭其他显示块。这样做可以使每一个显示块显示与自己相对应的数据。只要保证每一位显示的时间间隔不要太大,利用人眼的视觉暂留的现象,就可以造成各位数据同时显示的假象。一般每一位的显示时间为110ms。动态扫描逻辑框图如图4-18所示。该模块的输入端口DISCLK是频率为500HZ的扫描时钟,故每一位显示的时间为2ms,需要扫描10个数码管,故显示间隔为20ms。由分频模块提供;端口CONV显示转换信号,当其为高电平时,数码管显示时、分和秒。当其为低电平时显示年、月和日
17、;其它输入端口接计数模块输出的数据;输出端口DATAOUT3.0动态输出扫描的数据;端口WSEL3.0输出数码管的片选信号。其VHDL程序描述见附录。图5-7 动态扫描逻辑框图5.4. 显示模块的设计与实现本系统选择3-8译码器作为显示译码电路,选择数码管作为显示单元电路。计数器实现了对时间的累计并以8421BCD码的形式输送到动态扫描模块,再由其输出的端送到3-8译码器,将BCD码转换为七段码,再由数码管显示出来。数码管位选连接电路4-19所示。由于所用到的数码管为两组,故位选电路用到两片译码模块。图5-8数码管位选电路6 调试6.1 调试的步骤对设计电路的调试都是对这个电路在仿真之前、下载
18、到PLD上运行的必要步骤。创建了一个工程,在工程内新建了一个文件,运用模块把电路搭建出来,保存并进行编译,一个电路设计好后将其封装成一个模块(filecreat/updatecreate symbol files for current file)然后可利用模块之间的连接来完成总电路。在QuatrusII中进行的编译主要由五个组成部分。他们分别是Analysis&Synthesis、Partiition Merge、Fitter、Assembler、Classic Timing Analyzer五个步骤。在编译时,软件界面上会显示编译进行的状态。五个步骤由前到后一个一个进行,一般只要完成了An
19、alysis&Synthesis就基本能确保电路正确。我还发现在进行Analysis&Synthesis过程中如果有错误,则错误一般发生在该过程编译的49左右。全部完成后,编译栏上显示编译进度为100%,及其各个步骤的编译时间消耗。同时在编译栏上,系统将给出此次编译时发现此次电路上存在的warning,有时候warning还很多,不过放心,不影响电路的功能。如果编译出现问题,编译会暂停下来,并用红色字体显示出错误所在。双击红色字体会出现会出现错误的位置,可方便将电路修改。修改后再次编译直到没有错误,编译成功。注意,这里有个经验之谈,一旦有错误可能会出现Cant elaborate top-le
20、vel user hierarchy这个提示,你双击它是无法提示错误位置的,必须找到另外的错误提示才行。我曾经就是出了个小错误,结果在错误提示中只去关注解决Cant elaborate top-level user hierarchy这一条,完全不懂它的意思,最后把前面真正的错位解决了,这条提示也就自然消失了。6.2 调试中的问题及其解决方法程序的调试的目的就是为了发现电路上存在的问题,例如语法上的错误,标注错误,接线错误等。我们在调试程序时,错误是难免的,在这里就其中的一部分问题说一下,方便以后别出类似的错误。(1) 没有标明输入、输出内容,或者少标了,以及输入、输出部分的名字和标注的名字不
21、一致等。输出内容少标了只会警告不会错误,但是输入部分一旦少标注了,那电路将无法运行。输入的标注寻找input器件,输出的标注寻找output器件。(2) 接线未能接上,或者器件经过移动后接线出现错误等。(3) 编译前没有将编译的模块置顶(set as top-level entity),如果忘记了,可能编译到别的模块。7 仿真要想对某个电路图经行仿真,仿真前对相应电路经行编译,确保正确后方可新建Vector Waveform File 文件经行仿真。我一般使用的仿真中的simulator tool经行电路的功能仿真,实验中的相应仿真图我也在第4章和相应的原理图放在一块了,那样便于老师查看和比较
22、,在这里就不在赘言了。8 编程下载8.1编程下载的基本步骤编程下载就是将已经经过了调试、并且在一定程度上进行了仿真的程序下载到硬件(SMARTSOPC系统)上,将软件同硬件结合起来,使设计的功能得以真正实现过程。编程下载的过程主要包括以下几个步骤:(1) 再将编译好的程序下载至芯片之前,进行管脚的分配。(2) 选择“AssignmentPins”,在其中对管脚的地址进行下设置。(3) 选择“FileSave”进行对设置的保存。(4) 在DEVICE&PIN,将未使用的管脚设置为高阻设置,以免损坏芯片。(5) 下载。9 实验结论与研究展望9.1 实验结论将设计程序下载到实验箱上运行调试后,最终结
23、果与预期效果基本一致,时、分、秒能够正常计数并能由控制键分别显示,整点报时功能正常。但是由于时间关系,没有调出温度显示功能。在此次的数字钟设计过程中,更进一步地熟悉有关数字电路的知识和具体应用。学会了QuarterII软件进行原理图的绘制,硬件描述语言VHDL的编写,程序的仿真等工作。并能根据仿真结果分析设计的存在的问题和缺陷,从而进行程序的调试和完善。在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如在对具体模块的仿真的过程中,往往没有考虑到整体设计的层面以及与上下模块接口的设计。再加上器件对信号的延时等问题,实际下载到实验箱上后会出现一系列的问题,因此仿真
24、图和电路连接图还是有一定区别的。此次的数字钟设计重在于按键的控制和各个模块代码的编写,虽然能把键盘接口和各个模块的代码编写出来,并能正常显示,但对于各个模块的优化设计还有一定的缺陷和不足。总的来说,通过这次的设计实验更进一步地增强了实验的动手能力,对数字钟的工作原理也有了更加透彻的理解。在本设计调试过程中遇到了一些问题如下:1.当程序下载到实验箱上后,数码管显示全部为零,计数器不工作,经分析得知程序中的总的清零信号保持有效状态,改动程序后计数器开始计数。2.当秒时钟计数到59时变0时,分计数模块滞后计数,考虑的器件的延时,将程序中秒的进位信号提前1秒。3.在检测按键时,由于有些按键控制是秒时钟
25、同步的,所以控制起来显得梢慢些,但是工作正常,能满足实际的需要。9.2 研究展望本设计中虽然有控制键对时钟进行控制,基本要求已经完成,但是温度显示功能没有实现。 本设计是采用硬件描述语言和FPGA芯片相结合进行的数字钟的研究,从中可以看出EDA技术的发展在一定程度上实现了硬件设计的软件化。设计的过程变的相对简单,容易修改等优点,相信随着电子技术的发展,数字钟的功能会更加多样化,满足人们的各种需要。参考文献1 刘君,常明,秦娟,基于硬件描述语言(VHDL)的数字时钟设计,天津理工大学学报,2007,第23卷 第4期,40-412 廖日坤,CPLD/FPGA嵌入式应用开发技术白金手册,中国电力出版
26、社,2003,212-218。3 王开军,姜宇柏,面向CPLD/FPGA的VHDL设计,机械工业出版社,2006,28-65。4 赵保经,中国集成电路大全,国防工业出版社,1985。5 高吉祥,电子技术基础实验与课程设计,电子工业出版社,2002。6 吕思忠,数子电路实验与课程设计,哈尔滨工业大学出版社,2001。附录附录1.源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DIANZIZHONG IS PORT( CLK: IN STD_LOGIC; -计数 JIEZOU:
27、IN STD_LOGIC; -节奏 KAIGUAN: IN STD_LOGIC; -开关 MODE: IN STD_LOGIC; -模式 TIAOFEN: IN STD_LOGIC; -调分 TIAOSHI: IN STD_LOGIC; -调秒 Feng: OUT STD_LOGIC; -蜂鸣器 SEL: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -段选 LIUSHUI: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -位选 led: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -LED灯END ENTITY DIANZI
28、ZHONG;ARCHITECTURE BEHAVE OF DIANZIZHONG ISSIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL CLKIN1: STD_LOGIC;SIGNAL CLKIN2: STD_LOGIC;SIGNAL CLKIN3: STD_LOGIC;SIGNAL CLK1: STD_LOGIC;SIGNAL CO1: STD_LOGIC; -进位SIGNAL CO2: STD_LOGIC;SIGNAL TEMP: INTEGER RANGE 0 TO 25;SIGNAL BCDOUT: STD_LOGIC_VECTOR(3
29、 DOWNTO 0);SIGNAL SEC1,SEC0:STD_LOGIC_VECTOR(3 DOWNTO 0); -秒的十位和个位SIGNAL MIN1,MIN0:STD_LOGIC_VECTOR(3 DOWNTO 0); -分的十位和个位SIGNAL HOUR1,HOUR0:STD_LOGIC_VECTOR(3 DOWNTO 0); -时的十位和个位signal count:std_logic_vector(2 downto 0); -段选signal COM:std_logic_vector(7 downto 0); -位选BEGINPROCESS(CLK) VARIABLE CNT:
30、INTEGER RANGE 0 TO 24999999; -时钟分频 BEGIN IF(CLKEVENT AND CLK=1) THEN IF(CNT=24999999) THEN CNT:=0; CLKIN1=NOT CLKIN1; ELSE CNT:=CNT+1; END IF; END IF; END PROCESS;PROCESS(CLK) VARIABLE CNT: INTEGER RANGE 0 TO 24999; -数码管扫描分频 BEGIN IF(CLKEVENT AND CLK=1) THEN IF(CNT=24999) THEN CNT:=0; CLKIN2=NOT CLK
31、IN2; ELSE CNT:=CNT+1; END IF; END IF; END PROCESS; PROCESS(clk) -整点报时VARIABLE CNT: INTEGER RANGE 0 TO 24000000; -24000000 BEGIN IF(clkevent and clk=1)THEN IF(SEC0=0000 AND SEC1=0000 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=0010 AND SEC1=0000 AND MIN0=0000 AND MIN1=
32、0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=0100 AND SEC1=0000 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=0110 AND SEC1=0000 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=1000 AND SEC1=0000 AND MIN0=0000 AND MIN1=0000) THEN Feng
33、=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=0000 AND SEC1=0001 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=0010 AND SEC1=0001 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=0100 AND SEC1=0001 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE
34、Feng=1; -蜂鸣器不响 IF(SEC0=0110 AND SEC1=0001 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 IF(SEC0=1000 AND SEC1=0001 AND MIN0=0000 AND MIN1=0000) THEN Feng=0; -蜂鸣器响 ELSE Feng=1; -蜂鸣器不响 END IF ; END IF ; END IF ; END IF ; END IF ; END IF ; END IF ; END IF ; END IF ; END IF ; END I
35、F ; END PROCESS ; process(clk) variable cnt: integer range 0 to 6000000; -流水灯节奏 begin if(clkevent and clk=1) then if(jiezou=0) then if(cnt=3000000) then cnt:=0; clk1=not clk1; else cnt:=cnt+1; end if; else if(cnt=6000000) then cnt:=0; clk1=not clk1; else cnt:=cnt+1; end if; end if; end if; end process; process(clk1,KAIGUAN) -流水灯花样显示 begin if(clk1event and clk1=1) then IF(KAIGUAN=1) THEN temp=0; end if; if(KAIGUAN=0) THEN if(temp=25) then temp=0; else templiushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushuiliushui=0