数字钟课程设计说明书.docx

上传人:b****5 文档编号:7776905 上传时间:2023-01-26 格式:DOCX 页数:24 大小:392.95KB
下载 相关 举报
数字钟课程设计说明书.docx_第1页
第1页 / 共24页
数字钟课程设计说明书.docx_第2页
第2页 / 共24页
数字钟课程设计说明书.docx_第3页
第3页 / 共24页
数字钟课程设计说明书.docx_第4页
第4页 / 共24页
数字钟课程设计说明书.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数字钟课程设计说明书.docx

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

数字钟课程设计说明书.docx

数字钟课程设计说明书

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

信息工程学院

题目:

数字钟

设计目的:

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

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

要求完成的主要任务:

1、课程设计工作量:

1周。

2、技术要求:

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

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

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

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

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

时间安排:

1、2015年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是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。

在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。

这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。

这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

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

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

关键词:

QuartusⅡ;VHDL;数字钟;

 

1绪论

FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。

用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。

当需要修改FPGA功能时,只需换一片EPROM即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

本设计是通过对数字钟个组要组成部分的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设计思想

该数字钟可以实现3个功能:

计时功能、整点报时功能和重置时间功能,因此有3个子模块:

计时、报时、重置时间。

其中计时模块有4部分构成:

秒计时器、分计时器和时计时器。

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

3数字钟的设计

3.1设计原理与方法

数字计时器基本功能是计时,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为4KHZ,通过分频获得所需脉冲频率1Hz,1KHz,500Hz。

为产生秒位,设计一个模60计数器,对1HZ的脉冲进行秒计数产生秒位,为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成为产生时位,用一个模24计数器对分位的进位脉冲进行计数。

整个数字计时器的计数部分共包括六位时十位、时个位、分十位、分个位、秒十位和秒个位。

显示功能是通过数选器、译码器、码转换器和7段显示管实现的。

因为实验中只用一个译码显示单元,7个7段码,6个用于显示时分秒,一个显示星期,所以通过4个7选一MUX和一个3-8译码器配合根据计数器的信号进行数码管的动态显示。

清零功能是通过控制计数器清零端的电平高低来实现的。

只需使清零开关按下时各计数器的清零端均可靠接入有效电平,本实验中是低电平,而清零开关断开时各清零端均接入无效电平即可。

校分校时功能由防抖动开关、逻辑门电路实现。

其基本原理是通过逻辑门电路控制分计数器的计数脉冲。

当校分校时开关断开时,计数脉冲由低位计数器提供,当按下校分校时开通时,既可以手动触发出发式开关给进位脉冲,也可以有恒定的1Hz脉冲提供恒定的进位信号,计数器在此脉冲驱动下可快速计数。

为实现可靠调时,采用防抖动开关,由D触发器实现,克服开关接通或断开过程中产生的一串脉冲式振动。

保持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。

正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。

整点报时功能可以通过组合逻辑电路实现。

当计数器的各位呈现特定的电平时,可以选通特定的与门和或门将指定的频率信号送入蜂鸣器中实现在规定的时刻以指定频发音报时。

3.2单元模块设计

3.2.1按键消抖电路模块

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

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

完成程序后可以创建元件。

3.2.2分频器模块设计

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

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

图3-1分频器

3.2.3计数器模块设计

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

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

图3-3时钟电路

图3-4日30进制计数器图3-5月12进制计数器

秒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所示。

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

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

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

其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八段译码模块设计

一个数码管是由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:

integerrange0to1500;--2500

begin

if(rst_n='0')then

elsif(clk'eventandclk='1')then

if(cnt1=5000)then

cnt1:

=0;

clk_1000<=notclk_1000;--1000hz

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

当前位置:首页 > 高等教育 > 理学

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

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