1、目录前言1摘要2关键词2正文2一、题目分析21、实验目的22、根据目的及要求确定总体方框图23、须完成的技术指标或功能要求2二、设计方案和设计内容31、设计方案32、设计内容3三、设计原理及框图细化31、数字钟的工作原理32、数字钟设计的电路原理图43、数字钟模块功能说明4四、编写应用程序并仿真41、相关程序代码见附件。52、相关仿真图如下:5五、全系统联调,画出整机电路图和波形图61、整机电路原理图画出后如图3.2。62、全系统联调后的波形图和仿真图6六、硬件测试及说明71、编程下载82、硬件调试8七、结论9八、课程总结9九、参考文献10十、 附录(课题背景介绍和源程序)101、EDA技术1
2、02、VHDL的简介103、VHDL语言的特点104、VHDL的设计流程115、源程序代码1117前言 近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:(1)电子器件及其技术的发展将更多地趋向于为EDA服务;(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言VHDL的运用;(4)数字系统的芯片化实现手段已成主流。因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。随着社会的发展,科学技术也在不断的进步。特别是计算机产业,可以说是日新月异,
3、数字钟作为计算机的一个组成也随之逐渐进入人们的生活,从先前的采用半导体技术实现的数字钟到现在广泛应用的采用高集成度芯片实现的数字钟。数字钟正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对数字钟中显示电路进行编程实现。摘要:EDA技术在电子系统设计领域越来越普及,本设计主要利用VHDL语言在EDA平台上设计一个电子数字钟,它的计时周期为24小时,显示满刻度为24时59分59秒,另外还具有校时功能和闹钟功能。总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、
4、译码显示程序模块和拼接程序模块。并且使用QUARTUS II软件进行电路波形仿真,下载到EDA实验箱进行验证。关键词:数字钟 EDA VHDL语言 正文:一、题目分析1、实验目的(1)、熟练地运用数字系统的设计方法进行数字系统设计;(2)、能进行较复杂的数字系统设计;(3)、按要求设计一个数字钟。2、根据目的及要求确定总体方框图 数字时钟控制单元时调整分调整使能端信号CLK信号时显示分显示秒显示24进制60进制60进制LED显示整点报时花样显示图1.1数字钟实现原理框图3、须完成的技术指标或功能要求(1)、时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分60进制计数,即从0到59
5、循环计数,时钟24进制计数,即从0到23循环计数,并且在数码管上显示数值。(2)、时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。(3)、清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。(4)、蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。(5)、LED灯在时钟显示时有花样显示信号产生。即根据进位情况,LED不停的闪烁,从而产生“花样”信号。二、
6、设计方案和设计内容1、设计方案 根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。2、设计内容 利用VHDL设计数字钟显示电路的各个模块,并使用EDA工具对各模块进行仿真验证。数字钟显示电路的设计分为下面几个模块:秒计数模块、分计数模块、小时计数模块.。完成以后把各个模块整合后,显示相应的输出状态。具有可清零、可调时,具有花样显示及整点报时的功能。要求显示秒、分、时,显
7、示格式如下:图2.1 显示格式三、设计原理及框图细化1、数字钟的工作原理数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和一些花样显示、报时等附加功能。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,计数器、校时电路、报时电路和振荡器组成。干电路系统由秒信号发生器、“时、分、秒、”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数
8、器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图如下:图3.1 数字钟的工作原理图2、数字钟设计的电路原理图图3.2进制数字钟的电路图3、 数字钟模块功能说明自顶向下分解图(1)、顶层模块图Clk为1hz信号输入Reset为清零输入Setmin为手动调分S
9、ethour为手动调时h6.0,,h16.0为小时数据输出m6.0, m16.0为分钟数据输出s6.0, s16.0为秒数据输出(2)、秒模块图Clk为1hz信号输入Reset为清零输入Setmin为手动调分cmin为分进位信号dout6.0为数据输出(3)、分模块图 Clk1为1hz信号输入Reset为清零输入Sethour为手动调时Clk为进位脉冲dout6.0为数据输出chour为时进位脉冲(4)、时模块图Clk为进位脉冲dout5.0为数据输出(5)、晶体振荡电路(6)、分频器四、编写应用程序并仿真1、相关程序代码见附件。2、相关仿真图如下:(1)、秒表计数器电路仿真图秒表计数器电路仿
10、真图如图4.1:将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。 图4.1 秒计数器电路仿真图(2)小时计数器电路仿真图时计数器电路仿真图如图4.2:“时计数器”采用24进制计时器,可实现对一天24小时的累计。每累计24小时,发出一个“星期脉冲”信号,该信号将被送到“星期计数器”,图4.2 小时计数器电路仿真图(3)分计数器电路仿真图分计数器电路仿真图如图4.3:“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。图4.3 分计数器电路仿真图(4)、译码驱动电
11、路仿真图译码驱动电路仿真图如图4.4:输入BCD码,输出为共阴极数码管显示码,仿真结果正确。图4.4 译码驱动电路仿真图五、全系统联调,画出整机电路图和波形图1、整机电路原理图画出后如图3.2。2、全系统联调后的波形图和仿真图图5.1全系统联调后的波形图图5.2全系统联调后的仿真图六、硬件测试及说明1、编程下载(1)、首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源(2)、下载方式设定。选择MAX+plusIIProgrammer选项,跳出下图左侧所示的编程器窗口,然后选择OptionsHardware Setup硬件设置选项,其窗口图中左侧所示。在其下拉菜单中选By
12、teBlaster(MV)编程方式。此编程方式对应计算机的并行口下载通道,“MV”是混合电压的意思,主要指对ALTERA的各类芯核电压(如5V、3.3V、2.5V与1.8V等)的FPGA/CPLD都能由此下载。(3)、最后点击start按钮,进入下载模式,等待下载完成以后在试验箱上进行调试检测是否正确。2、硬件调试(1)、任意设置时间,让其从这一时间开始显示图6.1设置时间(2)、时间显示为24进制,当时间显示到大23:59:59后将会从00:00:00开始显示图6.2数字钟为24进制显示图6.3 时间跳变到00 00 00七、结论 系统使用EDA技术设计了数字钟,采用硬件描述语言VHDL按模
13、块化方式进行设计,然后进行编程,时序仿真等。利用VHDL语言完成了数字钟的设计。该数字钟能实现时、分、秒计数的显示功能,且以24小时循环计时。整个系统结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。八、课程总结 经过几周EDA实验的学习,使我受益匪浅。通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知
14、识,理论联系实际,独立自主的进行设计的能力。它增强了我对EDA设计的兴趣,更掌握了基本的电路设计流程、方法以及技巧。这不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。具备了这些基本知识,为今后的自主学习奠定了良好的基础。在编写时可以相互借鉴,这样可以节省一定的时间,尤其是24进制的处理上,我们采用了简单的方法即可完成多个功能的顺利实现。本课程设计在选题和设计过程中得到了查长军老师的悉心指导,查老师多次询问课程设计进程,并多次指导我对课程设计进行修改,帮助我完善了该课程设计。在此对查老师表示诚挚的感谢。 此次设计不足之处是
15、不能进行定时闹钟,这是有待改进的地方,当然我们也可以在闹钟的时候采用音乐提醒,可以和乐曲硬件演奏电路设计相结合,这样数字钟的功能才算是完美。九、参考文献1谭敏、周泽华等.2012.在系统编程技术 实验指导书.合肥:合肥学院电子信息与电气工程系印制2 卢毅、赖杰. 2001.VHDL与数字设计. 北京:科学出版社 3 徐志军等.2000.大规模可编程逻辑器件及其应用.成都:电子科技大学出版社4 Stefan Sjoholm, Lennart Lindh 著,边计年,薛宏熙译.2000.用VHDL设计电子线路.北京:清华大学出版社5 赵雅兴.1999.FPGA原理、设计与应用.天津:天津大学出版社
16、十、 附录(课题背景介绍和源程序)1、EDA技术 EDA是电子设计自动化(Electronic Design Automation)缩写,EDA是以计算机为工具,根据硬件描述语言HDL( Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的
17、描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。2、VHDL的简介 VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标
18、准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。3、VHDL语言的特点(1)、用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。(2)、VHDL元件的设计与工艺u无关,与工艺独立,方便工
19、艺转换。(3)、VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。(4)、可以进行从系统级到逻辑级的描述,即混合描述。(5)、VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。4、VHDL的设计流程(1)、设计规范的定义 明确这个系统有哪些设计要求,和你要想到达的目标。(2)、采用VHDL进行设计描述 这部分包括设计规划和程序的编写。设计规划主要包括设计方式的选择及是否进行模块划分。设计方式一般包括直接设计,自顶向下和自底向下设计,这个和其他软件语言差不多。最重要还是模块划分。(3)、VHDL程序仿真(4)、综合、优化和布局布线 综合指的是将设计描述转化成底层
20、电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。(5)、仿真这个与VHDL程序仿真不同,这个不仅是对逻辑方面的验证,还要进行时序功能验证。(6)、器件编程5、源程序代码(1)、译码驱动模块的VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alert IS PORT(clk:IN STD_LOGIC; dain:IN STD_LOGIC_VECTOR(6 DOWNT
21、O 0); speak:OUT STD_LOGIC; lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END alert;ARCHITECTURE fun OF alert IS SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN speaker:PROCESS(clk) BEGIN -speak=count1(1); IF(clkevent and clk=1)THEN IF(dain=0000000)THEN speak=10)T
22、HEN count1=00;-count1为三进制加法计数器 ELSE count1=count1+1; END IF ; END IF ; END IF ; END PROCESS speaker; lamper:PROCESS(clk) BEGIN IF(rising_edge(clk)THEN IF(count=10)THEN IF(count=00)THEN lamp=001;-循环点亮三只灯 ELSIF(count=01)THEN lamp=010; ELSIF(count=10)THEN lamp=100; END IF; count=count+1; ELSE count=00;
23、 END IF; END IF; END PROCESS lamper;END fun;(2)、秒计数器模块的VHDL源程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second ISPORT( clk,reset,setmin:STD_LOGIC; enmin:OUT STD_LOGIC; daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY second;ARCHITECTURE fun OF second ISSIGNAL
24、count:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enmin_1,enmin_2:STD_LOGIC; -enmin_1为59秒时的进位信号 BEGIN -enmin_2由clk调制后的手动调分脉冲信号串 daout=count; enmin_2=(setmin and clk); -setmin为手动调分控制信号,高电平有效 enmin=(enmin_1 or enmin_2); -enmin为向分进位信号 PROCESS(clk,reset,setmin) BEGIN IF(reset=0)THEN count=0000000; -若reset为0,则异步
25、清零 ELSIF(clk event and clk=1)then -否则,若clk上升沿到 IF(count(3 downto 0)=1001)then -若个位计时恰好到1001即9 IF(count16#60#)then -又若count小于16#60#,即60H IF(count=1011001)then -又若已到59D enmin_1=1;count=0000000;-则置进位为1及count复0 ELSE -未到59D count=count+7; -则加7,而+7=+1+6,即作加6校正 END IF; ELSE -若count不小于16#60#(即count等于或大于16#6
26、0#) count=0000000; -count复0 END IF; -END IF(count16#60#) ELSIF(count16#60#)then -若个位计数未到1001则转此句再判 count=count+1; -若count16#60#则count加1 enmin_1=0after 100 ns; -没有发生进位 ELSE -否则,若count不小于16#60# count=0000000; -则count复0 END IF; -END IF(count(3 DOWNTO 0)=1001) END IF; -END IF(reset=0)END PROCESS;END fun
27、;(3)、分计数器模块的VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute IS PORT(clk,clk1,reset,sethour:IN STD_LOGIC; enhour:OUT STD_LOGIC; daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY minute ;ARCHITECTURE fun OF minute IS SIGNAL count :STD_LOGIC_VECTOR (6 DOWNT
28、O 0); SIGNAL enhour_1, enhour_2: STD_LOGIC; -enmin_1为59分时的进位信号 BEGIN -enmin_2由clk调制后的手动调时脉冲信号串 daout=count; enhour_2= (sethour and clk1); -sethour为手动调时控制信号,高电平有效 enhour= (enhour_1 or enhour_2); PROCESS(clk,reset,sethour) BEGIN IF(reset=0) THEN -若reset为0,则异步清零 count=0000000; ELSIF(clkevent and clk=1)
29、THEN -否则,若clk上升沿到 IF(count (3 DOWNTO 0) =1001)THEN-若个位计时恰好到1001即9 IF(count 16#60#) THEN -又若count小于16#60#,即60 IF(count=1011001) THEN-又若已到59D enhour_1=1; -则置进位为1 count=0000000; -count复0 ELSE count=count+7; -若count未到59D,则加7,即作加6校正 END IF; -使前面的16#60#的个位转变为8421BCD的容量 ELSE count=0000000;-count复0(有此句,则对无效
30、状态电路可自启动) END IF; -END IF(count16#60#) ELSIF (count 16#60#) THEN count=count+1; -若count16#60#则count加1 enhour_1=0 after 100 ns; -没有发生进位 ELSE count=0000000; -否则,若count不小于16#60# count复0 END IF; -END IF(count(3 DOWNTO 0)=1001) END IF; -END IF(reset=0) END process;END fun;(4)、时计数器模块的VHDL源程序LIBRARY IEEE;u
31、se IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY hour IS PORT(clk,reset:IN STD_LOGIC; daout:out STD_LOGIC_VECTOR(5 DOWNTO 0);END ENTITY hour;ARCHITECTURE fun OF hour ISSIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN daout=count; PROCESS(clk,reset) BEGIN IF(reset=0)THEN count=000000
32、; -若reset=0,则异步清零 ELSIF(clkevent and clk=1)THEN -否则,若clk上升沿到 IF(count(3 DOWNTO 0)=1001)THEN -若个位计时恰好到1001即9 IF(count16#23#)THEN -23进制 count=count+7; -若到23D则 else count=000000; -复0 END IF; ELSIF (count16#23#)THEN -若未到23D,则count进1 count=count+1; ELSE -否则清零 count=000000; END IF; -END IF(count(3 DOWNTO 0)=1001) END IF; -END IF(reset=0) END PROCESS;END fun; .忽略此处.
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922