EDA课设数字钟.docx

上传人:b****6 文档编号:5362577 上传时间:2022-12-15 格式:DOCX 页数:25 大小:92.94KB
下载 相关 举报
EDA课设数字钟.docx_第1页
第1页 / 共25页
EDA课设数字钟.docx_第2页
第2页 / 共25页
EDA课设数字钟.docx_第3页
第3页 / 共25页
EDA课设数字钟.docx_第4页
第4页 / 共25页
EDA课设数字钟.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

EDA课设数字钟.docx

《EDA课设数字钟.docx》由会员分享,可在线阅读,更多相关《EDA课设数字钟.docx(25页珍藏版)》请在冰豆网上搜索。

EDA课设数字钟.docx

EDA课设数字钟

课程设计任务书

学生姓名:

董勇涛专业班级:

电子科学与技术0902班

指导教师:

梁小宇工作单位:

信息工程学院

题目:

数字钟

设计目的:

1、掌握在QuartusⅡ软件的使用方法,并能熟练的在QuartusⅡ环境中运用VHDL语言完成一些简单程序的设计;

2、掌握数字钟的主要功能与在FPGA中的实现方法。

要求完成的主要任务:

1、课程设计工作量:

1周。

2、技术要求:

(1)设计一个6位LED动态扫描显示的数字钟,根据一个控制键能选择显示时、分、秒或年、月、日;

(2)通过拨码开关可以进行时、分、年、月、日的调整,可以实现翻屏;

3、查阅至少5篇参考文献。

按《武汉理工大学课程设计工作规范》要求撰写设计报告书。

全文用A4纸打印,图纸应符合绘图规范。

时间安排:

1、2012年6月11日集中,作课设具体实施计划与课程设计报告格式的要求说明。

2、2012年6月12日至2012年6月15日查阅相关资料,学习电路的工作原理。

3、2012年6月17日至2012年6月19日,方案选择和电路设计。

4、2012年6月20日至2012年6月21日,电路调试和设计说明书撰写。

5、2011年6月22日上交课程设计成果及报告,同时进行答辩。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

目录

摘要I

AbstractII

1绪论1

2设计内容及要求1

2.1设计目的及主要任务1

2.1.1设计目的1

2.1.2设计任务及要求1

2.2设计思想2

3数字钟的设计4

3.1设计原理与方法4

3.2单元模块设计4

3.2.1分频计模块设计4

3.2.2消抖电路模块设计5

3.2.3计数器模块设计5

3.2.4闹钟及蜂鸣器设计7

3.2.5多路复用器模块设计8

3.2.6八段译码模块设计8

3.3数字钟设计总原理图8

4编译报告8

4.1设计原理与方法8

5电路仿真与硬件调试9

5.1电路仿真9

5.2硬件调试10

6总结与心得体会10

参考文献11

附录12

摘要

EDA技术在进入21世纪后,得到了更大的发展。

在仿真和设计两方面支持标准硬件描述语言的功能越来越强大,软硬件技术也进一步得到了融合,在电子行业的产业领域、技术领域和设计应用领域得到了进一步的肯定,使得复杂电子系统的设计和验证趋于简单化。

[1]

本设计是通过QuartusⅡ软件、VHDL语言编程及FPGA芯片来实现常见的数字钟,该数字钟可以根据一个控制键能选择显示时、分、秒或年、月、日。

本设计中用8位LED数码管显示时、分和秒,年、月、日,同时可以通过按键调整时、分、及对秒进行清零。

关键词:

QuartusⅡ;VHDL;数字钟;

 

Abstract

EDAtechnologyinthe21centuryhasachievedgreatsuccess.Inthesimulationanddesigntwoaspectsofhardwaredescriptionlanguagesupportstandardfunctionmoreandmorepowerful,softwareandhardwaretechnologyalsofurthergotfusion,intheelectronicsindustryindustryfield,technologyanddesignapplicationfieldhasbeenfurthersure,makingcomplexelectronicsystemdesignandvalidationtendtobesimple.[1]

ThedesignisbyQuartusⅡsoftware,VHDLlanguageprogrammingandCPLDchiptoachieveacommondigitalclock,thedigitalclockaccordingtoacontrolkeyscanchoosetodisplayhours,minutesandsecondsoryear,month,day,andcandisplayscrolloff.Thisdesignusing6LEDdigitaltubedisplayhours,minutesandseconds,butwiththe8-bitLEDdigitaltubedisplayyear,month,day,atthesametimecanbeadjustedthroughtheDIPswitcheshour,minute,year,monthandday,andonthesecondstoClear.

Keywords:

QuartusⅡ;VHDL;DigitalClock;

 

1绪论

FPGA(现场可编程门阵列)和CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,他们是在PAL,GAL等逻辑器件的基础上发展起来的。

同以往的PAL,GAL相比较,FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。

这样的FPGA/CPLD实际上就是一个子系统部件。

比较典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,他们开发较早,占用了较大的PLD市场。

[2]

本设计是通过对数字钟个组要组成部分的VHDL源程序编程和顶层文件的生成来实现的。

在本设计中数字钟的主要组成部分有拨码开关模块、按键修改模块,计数器模块、分频计模块、七段译码器模块和数据选择器模块。

通过按键可以实现选择显示时、分、秒或年、月、日,同时可以显示翻屏,还可以通过按键调整时、分及对秒进行清零。

2设计内容及要求

2.1设计目的及主要任务

2.1.1设计目的

(1)初步掌握Quartus软件的使用方法,提高运用硬件描述语言VHDL的能力,初步了解时序电路的设计。

(2)利用对生活中熟悉的电子表,用语言设计相似功能的数字钟。

2.1.2设计任务及要求

完成以下基本要求及进行提高:

(1)设计一个6位LED动态扫描显示的数字钟,根据一个控制键能选择显示时、分、秒或年、月、日;

(2)通过按键可以进行时、分、年、月、日的调整,可以实现翻屏;

(3)可以设置闹钟时间及整点报时,闹铃蜂鸣器频率为1000Hz,整点报时频率为2000Hz;

(4)具有定时翻屏功能,每隔54s,显示一次年月日;

(5)运用图形设计方法完成顶层原理图的设计。

2.2设计思想

本次设计中根据数字钟的工作原理首先进行计数器的设计,其中包括分秒60进制计数器、时24进制计数器、日30进制计数器、月12进制计数器和年10进制计数器,然后根据要求设置一个6选1的数据选择器并且通过控制键实现选择显示时、分、秒或年、月、日,最后再设置3个按键调整数字钟,并且通过一个七段译码器和8进制计数器控制七段数码管实现显示。

3数字钟的设计

3.1设计原理与方法

数字电子钟由振荡器、分频器计数器、译码显示、报时等电路组成。

振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。

秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。

计满后各计数器清零,重新计数。

计数器的输出分别经译码器送数码管显示,计时出现误差时,可以用校时电路“校时”“校分”“清零”。

秒脉冲可以通过分频电路得到。

通过报时设计模块可以实现整点报时及定时闹铃,译码显示由七段译码器完成,显示由数码管构成,采用的是动态显示方式。

数码管动态显示:

动态扫描电路将计数器输出的8421BGD码转换为数码管需要的逻辑状态,并且输出数码管的片选信号和为选信号。

所谓动态扫描显示方式是在显示某一位LED显示块的数据的时候,让其它位不显示,然后再显示下一位的数据。

只要保证每一位显示的时间间隔不要太大,利用人眼的视觉暂留的现象,就可以造成各位数据同时显示的假象。

一般每一位的显示时间为1~10ms。

[3]

3.2单元模块设计

3.2.1分频器模块设计

根据设计要求,需要将开发板的50MHZ信号分出1HZ和1KHZ共2种时钟信号,1HZ脉冲信号用来提供计数模块的时钟信号——在1HZ的脉冲下,每隔一秒,秒自加一次,1KHZ脉冲信号用来提供消抖电路的时钟信号,cnt用于数码管扫描。

完成程序后可以创建原理图元件,其元件符号如图3-1所示。

图3-1分频器

3.2.2按键消抖电路模块

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号并不稳定,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

[4]因而在闭合及断开的瞬间均有一连串的抖动,抖动的时间的长短有按键的机械特性决定,一般为5ms~10ms。

完成程序后可以创建元件,其元件符号如图3-2所示。

图3-2消抖电路

 

3.2.3计数器模块设计

计数器模块主要由秒60进制计数模块、分60进制计数模块、时24进制计数模块、日30进制计数模块、月12进制计数模块、年计数模块和8进制计数器。

下图3-3是将60进制计数模块、分60进制计数模块、时24进制计数模块融合为一个模块。

图3-3时钟电路

秒60进制计数模块的时钟信号为1HZ的脉冲信号,每计数到59便会产生一次进位作为分60进制计数模块的时钟信号,该模块加入一个清零端,当CS为1时,秒计数模块中的个位和十位同时为零,当CS为1时正常计数.分60进制计数模块的时钟信号为秒计数模块的进位信号,其通过一个增加键CM对其调整。

时24进制计数模块的时钟信号为分计数模块的进位信号,其通过一个增加键CH对其调整。

其中UP,CHANGE信号说明如下,当UP信号为高时时,表示数码管翻屏了,即显示年月日的时间为6ms。

UP信号为低电平时,显示时分秒。

在UP有效时,CHANGE为低电平,所有数码管上部分熄灭,下部分显示年月日的下半部分,CHANGE为高电平时,正常显示年月日部分,直到UP为低。

[5]

日30进制计数模块的时钟信号为时计数模块的进位信号,其通过一个置数端load对其调整。

日30进制计数器的VHDL程序如附录所示,完成程序后可以创建元件,其元件符号如图3-4所示。

图3-4日30进制计数器

 

月12进制计数模块的时钟信号为日计数模块的进位信号,其通过一个置数端对其调整。

月12进制计数器的VHDL程序如附录所示,完成程序后可以创建元件,其元件符号如图3-5所示。

图3-5月12进制计数器

年进制计数模块的时钟信号由月计数模块的进位信号产生,年计数模块又由四个十进制计数器组成,分别是个位、十位、百位和千位计数模块组成,中间由进位信号连接。

其VHDL程序如附录所示,完成程序后可以创建元件,其元件符号分别如图3-6、图3-7、图3-8和图3-9所示。

图3-6年个位计数器图3-7年十位计数器

图3-8年百位计数器元件图3-9年千位计数器元件符号

同时,本设计中还需要设计一个8进制计数器用来提供七段数码管的位选码和数据选择器的状态信号。

其程序如附录所示,其元件符号如图3-2-10所示。

图3-108进制计数器

 

3.2.4闹钟及蜂鸣器设计

本设计只针对时分秒进行定时,并可任意设定定时时间。

整点报时蜂鸣器的频率是2000Hz,闹钟是1000Hz。

元件符号如图3-11所示。

图3-11闹钟及蜂鸣器

3.2.5多路复用器模块设计

将经过七段译码后的时分秒,年月日在数码管上显示出来。

为了实现自动向上滚动和手动翻屏,加入了UP,CHANGE,信号来实现向上滚动。

加入拨码开关KEY_SEL,来实现手动翻屏。

元件符号如图3-12所示。

图3-12多路复用器

3.2.6八段译码模块设计

一个数码管是由8段LED显示的,0-9对应着不同的字形。

数码管是共阳的,使用共阳字型码。

需要将BCD码转换成数码管可以显示的码,该模块的程序如附录所示,其元件符号如图3-13所示。

图3-13八段译码

3.3数字钟设计总原理图

利用至顶向下的设计方法,新建一个BlockDiagram,在QuartusⅡ环境下连接各模块组成数字钟的总原理图如图3-14所示。

图3-14数字钟总原理图

4编译报告

4.1数字钟设计编译报告

将各模块正确连线后,编译无警告,生成编译报告如图。

发现,总的逻辑单元使用了184,其中组合逻辑使用184,时序逻辑使用98,由此看出,在Alter的EP2C5Q208芯片中,一个LE包括一个Combinationlogic和一个Timinglogic。

如图4-1。

图4-1数字钟编译报告

5电路仿真与硬件调试

5.1电路仿真

经过尝试,发现数字钟的设计用波形仿真看到与实际相符的数据很困难,因为50M的时钟要分成1HZ的时钟,1000HZ的时钟,分在秒跳动60才跳一次,时在分跳动60才跳一次,受到simulatortool工作界面的限制,并不能完整的观察到时分秒,年月日的信息,因此只选择的clock模块的进行了仿真。

如下图。

图5-1计数模块仿真波形图

七段数码显示译码器LED的仿真,其中Din[3..0]为BCD码输入,LED7S[6..0]为七段译码输出(高电平有效)。

其仿真输出波形如图5-2所示。

图5-2七段译码模块仿真波形图

5.2硬件调试

经过调试,仿真结果正确后,将sof文件转换成固化到芯片的适合JTAG下载的jic文件。

连接硬件系统后,通上电源,经QuartusⅡ中的PROGRAMMER菜单,调出编程器窗口,删掉sof文件,现在转换成功的jic文件。

一切就绪后,按下编程器窗口中的“START”按钮,设计的内容就开始下载到FPGA芯片中。

通过实验箱上的拨码开关和按键开关可以逐一对数字钟的功能进行验证。

通过数码管显示可知本设计可以实现基本的时、分、秒及年、月、日的计数,通过按键和拨码开关的配合可以实现时、分、秒和年、月、日的校准以及显示翻屏。

故本设计完全符合设计要求。

6总结与心得体会

由于一直在学习FPGA,所以拿到课程设计的题目时胸有成竹,我想对于我来说,设计出来毫无困难,所以就想在题目的要求上上一个高度。

之前都是用VHDL语言生成模块直接例化,这次我选择了利用更直观的原理图设计方法。

连线时也遇到过小小的麻烦,比如刚开始总线不知怎么解决,PIN_NAME不知道怎么命名。

图连完后,编译通过,对原理图设计有了整题把握,以后做设计的时候,对于接口比较复杂的还是用原理图设计比较方便。

后来就考虑如何玩点花样,毕竟单调的显示时分秒还是驾轻就熟的。

改动如下:

1.将区分时分秒,年月日的--改成动态的了,随着1HZ的时钟两灭,看着形象多了。

2.在利用按键手动翻屏的基础上,加了个自动翻屏,毕竟有时候并不想动手去看日期,自动翻屏的目的是想让日期从下往上浮动,可惜不是16*16的点阵,效果不佳。

路漫漫其修远兮,吾将上下而求索。

参考文献

[1]卢毅,赖杰.VHDL与数字电路设计.科学出版社,2009.

[2]北京理工大学ASIC研究所.《VHDL语言100例详解》.清华大学出版社,2001.

[3]杨丽英.《电路EDA技术与应用》.清华大学出版社,2011.

[4]谢自美.《电子线路设计》(第二版).华中科技大学出版社,2000.

[5]赵世强.《电子电路EDA技术》.西安电子科技大学出版社,2006.

 

附录

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

packagemy_packageis

functionbcd_to_seg7(signalbcd:

integerrange0to9)returnstd_logic_vector;

proceduresec_min_hour(signaln:

inintegerrange0to59;signalshi,ge:

outinteger);

endmy_package;

packagebodymy_packageis

functionbcd_to_seg7(signalbcd:

integerrange0to9)returnstd_logic_vectoris

variableseg7:

std_logic_vector(7downto0);

begin

casebcdis

when0=>

seg7:

=x"c0";

when1=>

seg7:

=x"f9";

when2=>

seg7:

=x"a4";

when3=>

seg7:

=x"b0";

when4=>

seg7:

=x"99";

when5=>

seg7:

=x"92";

when6=>

seg7:

=x"82";

when7=>

seg7:

=x"f8";

when8=>

seg7:

=x"80";

when9=>

seg7:

=x"90";

whenothers=>

endcase;

returnseg7;

endbcd_to_seg7;

proceduresec_min_hour(signaln:

inintegerrange0to59;signalshi,ge:

outinteger)is

begin

casenis

when0|1|2|3|4|5|6|7|8|9

=>shi<=0;

when10|11|12|13|14|15|16|17|18|19

=>shi<=1;

when20|21|22|23|24|25|26|27|28|29

=>shi<=2;

when30|31|32|33|34|35|36|37|38|39

=>shi<=3;

when40|41|42|43|44|45|46|47|48|49

=>shi<=4;

when50|51|52|53|54|55|56|57|58|59

=>shi<=5;

whenothers=>

null;

endcase;

casenis

when0|10|20|30|40|50

=>ge<=0;

when1|11|21|31|41|51

=>ge<=1;

when2|12|22|32|42|52

=>ge<=2;

when3|13|23|33|43|53

=>ge<=3;

when4|14|24|34|44|54

=>ge<=4;

when5|15|25|35|45|55

=>ge<=5;

when6|16|26|36|46|56

=>ge<=6;

when7|17|27|37|47|57

=>ge<=7;

when8|18|28|38|48|58

=>ge<=8;

when9|19|29|39|49|59

=>ge<=9;

whenothers

=>null;

endcase;

endsec_min_hour;

endmy_package;

------------------------main.vhd----------

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

usework.my_package.all;

entitydigitalclockis

port(clk:

instd_logic;

rst_n:

instd_logic;

cs:

instd_logic;

cm:

instd_logic;

ch:

instd_logic;

key_sel:

instd_logic;

buzz:

inoutstd_logic;

wei_sel:

outstd_logic_vector(7downto0);

data_out:

outstd_logic_vector(7downto0)

);

enddigitalclock;

architecturebehaviorofdigitalclockis

signalsec:

integerrange0to59:

=50;

signalmin:

integerrange0to59:

=59;

signalhour:

integerrange0to23:

=0;

signalsec_ge:

integerrange0to9;

signalmin_ge:

integerrange0to9;

signalhour_ge:

integerrange0to9;

signalsec_shi:

integerrange0to9;

signalmin_shi:

integerrange0to9;

signalhour_shi:

integerrange0to9;

signalclk_1:

std_logic;

signalclk_1000:

std_logic;

signalbuzz_freque:

integer;

signalkey_value:

integer;

signalcnt:

integerrange0to7;---thescanfrequence

signalH:

std_logic;

signalup,change:

std_logic;

begin

process(clk,rst_n)--dividertheclktodifferenthz

variablecnt1:

integerrange0to5000;--9999

variablecnt2:

integerrange0to2;

variablecnt3:

integerrange0to1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1