VHDL实现数字钟课设报告[推荐]

时间:2019-05-13 23:58:02下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《VHDL实现数字钟课设报告[推荐]》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《VHDL实现数字钟课设报告[推荐]》。

第一篇:VHDL实现数字钟课设报告[推荐]

东北大学信息学院

课程设计报告

课程设计题目:用VHDL语言实现数字钟的设计

班 级:电子1001班 学 号:20102594 姓 名:刘云飞

指导老师:李世平、李宁

设计时间:2012年12月

东北大学信息学院

摘要

随着EDA技术的发展,EDA在通信、电子等领域占有十分重要的地位。本设计介绍了基于VHDL语言的数字钟的设计。数字钟的功能是对年、月、日、时、分、秒、星期,以及闹钟时、分的预置;在正常计数时的时、分与闹钟设定的时、分相同时,实现报时,同时以stop和pass键对闹钟进行停止及延迟响铃的控制;在整点的时候led灯闪烁一下。其中,用set脉冲的不同实现对预置,正常计时,闹钟的控制。Set为1~12分别控制显示年月日、预置年月日、时分秒、星期、显示时分秒、预置闹钟时分、显示闹钟预置的时分。预置时用up的高、低电平实现对各预置量的加、减控制。将1KHZ的时钟进行分频为1HZ,实现每次脉冲为1秒。经仿真和验证显示,此数字钟切实可行,可以实现显示时间和闹钟的功能。

关键词:VHDL语言,数字钟,预置

东北大学信息学院

目录

摘 要............................................................2

1、设计目的.........................................................4

2、设计内容和要求...................................................4

3、设计原理.........................................................4

3.1 数字钟功能介绍..........................................................................................................4 3.2 数字钟设计原理..........................................................................................................5

4、VHDL程序设计.....................................................6

4.1 整体设计思路................................................................................................................6 4.2 各模块设计方法............................................................................................................7 4.2.1 顶层模块...............................................................................................................7 4.2.2 其他模块...............................................................................................................8 4.2.3 程序包模块.........................................................................................................13

5、仿真与分析......................................................13

5.1 仿真结果....................................................................................................................13 5.2 仿真分析....................................................................................................................16

6、课程设计总结....................................................16

7、参考文献........................................................17

东北大学信息学院

1、设计目的

掌握利用可编程逻辑器件和EDA设计工具进行电子系统设计的方法。

2、设计内容和要求

用VHDL语言实现数字钟的设计,要求设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。Up为高电平时,upclk有脉冲到达时,预置位加1。否则减1。

3、设计原理 3.1 数字钟功能介绍

数字钟具有计时、预置、报时的功能。以不同的set脉冲控制各个功能。

(1)在计时功能中,数字钟实现对年月日时分秒即星期的计时,并可以通过LED数码管分别显示年月日、或时分秒、或星期、或闹钟的时分。

(2)在预置功能中,可以通过UP键对各需要预置的量进行控制。UP=1时,进行“加”控制,UP=0时,进行“减”控制。

(3)在报时功能中,分为整点报时和设置时间报时。其中整点报时以ce作为使能输入端,在整点时灯进行一秒闪烁;设置时间报时以enable作为使能输入端,enable=1时设置时间报时功能启动,在闹钟预置时间与时钟当前时间相同时报时,若此时按下stop,闹钟立即停止并不再响铃,若按下pass,则闹钟立即停止,但三分钟后再响,如此循环5次后不再响铃,若什么都不按,闹钟响铃持续1分钟。

东北大学信息学院

3.2 数字钟设计原理

本设计功能有8个子模块:分频模块、时分秒模块、日模块、年月模块、闹钟预置模块、星期模块、响铃模块。通过元件例化由顶层文件timekeeper综合。

整体设计框图及外观图如(图 3-1)及(图3-2)

图3-1 数字钟设计整体框图

东北大学信息学院

图3-2 数字钟外观图

4、VHDL程序设计

4.1 整体设计思路

采用自上而下的方法进行整体设计。整个设计共分为8个模块,通过顶

层文件timekeeper元件例化将8个模块各个端口对应相连。在设计各个模块时所用到的其它运算方法等放于work库中,通过程序包及程序包体的方式对所使用函数进行定义。

主要使用的语句有:元件例化语句,过程语句,信号赋值语句,if语句,case语句(在状态机中)。

图(4-1)表示了个模块的连接及连接是所用到的触发器等。

东北大学信息学院

图4-1

整体结构图

4.2 各模块设计方法

4.2.1 顶层模块

顶层模块timekeeper是.对对所有模块的综合。

它包含的功能是:通过元件例化连接各模块;实现对闹钟控制位sp2的控制;实现闹钟的整点报时闪烁。

输入端:up

全局加减选择,控制预置时的加减

setpin 设定选择

东北大学信息学院

upclk 加减触发

f1000 时钟输入

输出端:a0~d1 八位数码管控制引脚的输出

z

整点报时输出 4.2.2 其他模块

1、时分秒模块

时分秒模块h_m_s是对时、分、秒正常计时(set=0 or 1 or 12)和预置时分秒(set=5 or 6 or 7)的实现。

分和秒由两个六十进制实现,时由24进制实现。当时间达到23时59分59秒时,时分秒全部归零,进位位ov由零变为1,通过管脚连接到date模块的时钟计数信号clk0,开启date模块。

2、日的模块

日的模块date实现日子进行正常计时(set=0 or 1 or 12)和预置(set=4)。

由于每月的天数与月份、年份有关,故需判断年月。(1)(2)(3)当1、3、5、7、8、10、12月时,每月31天,使用31进制。当4、6、9、11月时,每月30天,使用30进制。当2月时,分闰年和平年。闰年29天,平年28天。

闰年和平年的判断方法是:由于通过年月模块传输的年份为两位BCD码。若高位信号为“xxx0”且低位信号为“xx00”或高位信号为“xxx1”且低位信号为“xx10”,则可判定为闰年,否则为平年。

以上各月,当日期至月底时返回1,进位位ov变为1通过管脚连接年月模块的时钟计数信号clk0,开启年月模块。

3、年月模块

年月模块year_mon实现年月正常计时(set=0 or 1 or 12)和年、月的预置(set=2 or 3)。

月为12进制,当达到12时变回为1,同时使年份进1。由两位BCD码表示年份,故可以表示100年之年的所有年,为100进制。

东北大学信息学院

图4-2 year_mon和date模块的电路连接图

4、星期模块

星期模块week的功能是实现对星期的计时(set=0 or 1 or 12)和预置(set=8)。为七进制。

图4-3 week模块的RTL

5、闹钟模块

东北大学信息学院

闹钟模块alarm是对闹钟时和分的预置(set=10 or 11)。时为24进制,分为60进制。

图4-3 alarm模块的RTL

另外,在顶层模块timekeeper,当闹钟预置时间与计时时间相同时(仅时、分),闹钟响铃,当不对其进行任何操作时,响铃维持1分钟。响铃方式见4.2.7响铃模块。

6、响铃模块

响铃模块alarm是对闹钟响铃的控制。其中主要包含:

Enable:当enable=1时,闹钟可以工作。

Sp2 :当顶层模块闹钟时间与计时相等时,sp2=1,响铃开启。Stop :闹钟停止并不再响铃。

Pass :闹钟停止但三分钟后再响,循环5次。Sp :响铃输出。Sp=1时响铃,sp=0时不响。本模块主要使用的方法是状态机。相应状态转换图如下:

东北大学信息学院

图 4-4 响铃模块状态转换图

在状态t_pass时,使用计数的方法实现对3分钟,5次循环的计数。

图 4-5 计数的流程图

东北大学信息学院

图4-6 speak模块的RTL

7、分频模块

分频模块fenpin使输入为1KHZ时钟信号时,接入电路经分频后仍能按1HZ即1s计数。

图4-7 fenpin模块的RTL

8、显示模块

显示模块led即七段数码管的显示电路。

东北大学信息学院

图4-8 led模块的RTL 4.2.3 程序包模块

程序模块是对各模块所用到的函数的定义,通过程序包package定义时、日、月、年等的增减函数(procedure),并用程序包体package body具体说明函数的内容。通过use.work.pac.all语句调用程序包,使程序书写更加方便简洁。

5、仿真与分析

5.1 仿真结果

1、h_m_s模块

东北大学信息学院

表示当up=1时,时钟时(set=5)、分(set=6)、秒(set=7)从0开始加。

图 5-1

2、date模块

以下为对应月份截图。另外,当日期由最末变为1时,ov进1以控制year_mon模块。

(1)大月:每月31天。

图5-2-1(2)小月:每月30天。

图5-2-2(3)平年2月:每月28天。

东北大学信息学院

图5-2-3(3)闰年2月:每月29天。

图5-2-4

3、year_mon模块

图5-3

4、week模块

前半部分up=1,为加,1~7,后半部分up=0,为减,6~1

图5-4

5、alarm模块

下图反映对闹钟时(set=10)、分(set=11)的预置,up=1为加。

图 5-5

6、speak模块

(1)按下pass

由下图可见,当时间相同sp为高电平;按下pass后sp变为低电平,三分钟

东北大学信息学院

后sp又为高电平。

图5-6-1(2)按下stop

由下图可见,当时间相同时sp为高电平,按下stop后sp变为低电平。

图 5-6-2

5.2 仿真分析

各模块仿真均可实现,且波形显示可以实现预想的功能。

6、课程设计总结

通过这次的课程设计,我又一次系统的复习了VHDL语言,通过实践对VHDL语言和EDA技术有了更具现实性应用性的了解,并熟练了相关软件的使用方法。

此次课程设计的内容是数字钟,我学会了如何利用元件例化将各个模块结合起来,而不是一味的想起一个功能设计一个功能,而是有一个总体的自上而下的设计,建立基本的设计框图(如图 3-1),再进行具体的设计。

在程序调试的过程中,出现了很多的问题。我发现往往是一行出现了错误导致了接下来一系列错误的出现。

还有在仿真中出现错误的红线,并出现了‘U’字符,全都是未设置初值所致。而在设置初值时仍然出现了问题。最开始我想定义一个clr信号,当clr为高电平时各功能清零,但是在实际仿真时,由于常常要看在月末或类似23时59分59秒这样的时刻是否有进位信号进为高电平,从零开始显然让仿真变的十

东北大学信息学院

分麻烦,如果可以直接赋初值到接近进位的时刻就会让仿真变得简便。即使用信号赋初值的方法对信号进行赋初值,既解决错误又利于仿真。

在最后对顶层仿真时出现了很多的问题,最后发现都是未对应的问题。当然,我的设计还有很多不足的地方。比如有一处的竞争冒险产生的毛刺没有解决。最开始是将speak模块控制信号sp2的相关程序写在了alarm模块,仿真时发现在一处出现了毛刺,在对闹钟进行预置时分时的第一个时间都未足一个时钟周期(如图 5-5)。后来我想是否因为alarm模块有两个process进程,就将sp2的相关程序挪到了顶层模块,但是最后还是没有实现。咨询了一下同学们,他们都说这没有问题,不需要解决,所以就没有解决这个问题。

此次课程设计我学到了很多,但是我觉得应该放在刚刚考完EDA之后,那时候对只是记得比较清楚,不像在这次设计时很多知识都想不起来了。其他的对我帮助都很大。

7、参考文献 李景华,杜玉远等著.可编程逻辑器件与EDA技术.沈阳:东北大学出版社,2000 2 齐怀印等.高级逻辑器件与设计.北京:电子工业出版社,1996 3 可编程逻辑器件与数字系统设计[M].北京航天航空大学出版社,1999 4 刘真,毕才术.数字逻辑与计算机设计[M ]北京:高等教育出版社,2002 5 王小军.VHDL简明教程[M].北京:清华大学出版社,1997

第二篇:数字钟课设任务书

课程设计任务书

一、设计课题

数字钟

二、设计时间

2011年 6 月 20日至2011年 6 月 24日

三、设计内容及要求

1、设计要求

1)时间以24小时为一个周期; 2)能显示时、分、秒,24小时制;

3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; 4)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时; 5)为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。6)在完成上述设计内容的基础上,可以自行设计一些附加功能。注意:硬件资源的节约,否则器件内资源会枯竭。

2、工作任务与要求

1)搜集有关资料,进行方案设计,画出总体设计框图,说明抢答器由哪些相对独立的功能模块组成,标出各个模块之间互相联系,并以文字对原理作辅助说明。

2)进行电路参数分析、论证,以及电路可靠性分析。3)设计各个功能模块的电路图,加上原理说明。

4)在验证各个功能模块基础上,对整个电路的元器件和布线,进行合理布局,画出总体电路图。

3、设计报告正文内容要求

1)设计目的。2)设计指标。3)设计方案及论证。

4)画出设计的原理框图,并要求说明该框图的工作过程及每个模块的功能。5)画出各功能模块的电路图,加上原理说明(例如抢答门及控制电路,锁存器及译码显示原理等)。

6)画出总布局接线图(集成块按实际布局位置画,关键的连接应单独画出,集成块的引脚须按实际位置画,并注明名称。)

7)元器件清单。

胡静波

第三篇:基于VHDL的多功能数字钟设计报告

基于VHDL的多功能数字钟

设计报告

021215班 卫时章 02121451

一、设计要求

1、具有以二十四小时制计时、显示、整点报时、时间设置和闹钟的功能。

2、设计精度要求为1秒。

二、设计环境:Quartus II

三、系统功能描述

1、系统输入:时钟信号clk采用50MHz;系统状态及较时、定时转换的控制信号为k、set,校时复位信号为reset,均由按键信号产生。

2、系统输出:LED显示输出;蜂鸣器声音信号输出。

3、多功能数字电子钟系统功能的具体描述如下:

(一)计时:正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。

(二)校时:在计时显示状态下,按下“k”键,进入“小时”待校准状态,若此时按下“set”键,小时开始校准;之后按下“k”键则进入“分”待校准状态;继续按下“k”键则进入“秒”待复零状态;再次按下“k”键数码管显示闹钟时间,并进入闹钟“小时”待校准状态;再次按下“k”键则进入闹钟“分”待校准状态;若再按下“k”键恢复到正常计时显示状态。若校时过程中按下“reset”键,则系统恢复到正常计数状态。(1)“小时”校准状态:在“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。(2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。(3)“秒”校准状态:在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。

(4)闹钟“小时”校准状态:在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。

(5)闹钟“分”校准状态:在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。

(三)整点报时:蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,结束时为整点。

(四)显示:采用扫描显示方式驱动4个LED数码管显示小时、分,秒由两组led灯以4位BCD 码显示。

(五)闹钟:闹钟定时时间到,蜂鸣器发出频率为1000Hz的高音,持续时间为60秒。

四、各个模块分析说明

1、分频器模块(freq.vhd)(1)模块说明:输入一个频率为50MHz的CLK,利用计数器分出 1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity freq is

port

(CLK: in std_logic;

--输入时钟信号

q1KHz: buffer std_logic;

q500Hz: buffer std_logic;

q2Hz: buffer std_logic;

q1Hz: out std_logic);end freq;

architecture bhv of freq is begin P1KHZ:process(CLK)variable cout:integer:=0;begin

if CLK'event and CLK='1' then

cout:=cout+1;

--每来个时钟上升沿时cout开始计数 if cout<=25000 then q1KHz<='0';

--当cout<=25000时,q1KHz输出“0”

elsif cout<50000 then q1KHz<='1';--当25000

else cout:=0;

--输出“1”,完成1KHz频率输出 end if;

end if;end process;

P500HZ:process(q1KHz)

--q1KHz作为输入信号,分出q500Hz variable cout:integer:=0;begin if q1KHz'event and q1KHz='1' then cout:=cout+1;if cout=1 then q500Hz<='0';

--二分频

elsif cout=2 then cout:=0;q500Hz<='1';end if;

end if;end process;

P2HZ:process(q500Hz)variable cout:integer:=0;begin if q500Hz'event and q500Hz='1' then cout:=cout+1;if cout<=125 then q2Hz<='0';

elsif cout<250 then q2Hz<='1';

else cout:=0;end if;

end if;end process;

P1HZ:process(q2Hz)variable cout:integer:=0;begin if q2Hz'event and q2Hz='1' then cout:=cout+1;if cout=1 then q1Hz<='0';

elsif cout=2 then cout:=0;q1Hz<='1';end if;

end if;end process;end bhv;(3)模块图:

2、控制器模块(contral.vhd)(1)模块说明:输入端口k,set键来控制6个状态,这六个状态分别是: 显示计时时间状态,调计时的时、分、秒的3个状态,调闹铃的时、分的3个状态,reset键是复位键,用来回到显示计时时间的状态。(2)波形仿真图:

(3)模块图:

3、二选一模块(mux21a.vhd)(1)源程序: library ieee;

use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity mux21a is port(a,b,s:in bit;

y:out bit);end entity mux21a;

architecture one of mux21a is begin

process(a,b,s)begin if s='0' then

y<=a;

--若s=0,y输出a,反之输出b。else y<=b;end if;end process;end architecture one;(2)仿真波形图:

(3)模块图:

4、计时模块

a.秒计时(second.vhd)(1)仿真波形图:

(2)模块图:

b.分计时(minute.vhd)(1)仿真波形图:

(2)模块图:

c.小时计时(hour.vhd)(1)仿真波形图:

(2)模块图:

d.闹钟分计时(cntm60b.vhd)(1)仿真波形图:

(2)模块图:

e.闹钟小时计时(cnth24b.vhd)(1)仿真波形图:

(2)模块图:

5、闹钟比较模块(compare.vhd)(1)模块说明:比较正常计数时间与闹钟定时时间是否相等,若相等,compout输出“1”,反之输出“0”。(2)仿真波形图:

(3)模块图:

6、报时模块(bell.vhd)(1)模块说明:该模块既实现了整点报时的功能,又实现了闹铃的功能,蜂鸣器通过所选频率的不同,而发出不同的声音。(2)仿真波形图:

(3)模块图:

7、控制显示模块(show_con.vhd)(1)模块说明:该模块实现了数码管既可以显示正常时间,又可以显示闹钟时间的功能;调时过程的定时闪烁功能也在此模块中真正实现。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show_con is

port(th1,tm1,ts1:in std_logic_vector(7 downto 4);

th0,tm0,ts0:in std_logic_vector(3 downto 0);

bh1,bm1:in std_logic_vector(7 downto 4);

bh0,bm0:in std_logic_vector(3 downto 0);

sec1,min1,h1: out std_logic_vector(7 downto 4);

sec0,min0,h0: out std_logic_vector(3 downto 0);

q2Hz,flashs,flashh,flashm,sel_show:in std_logic);end show_con;

architecture rtl of show_con is begin process(th1,tm1,ts1,th0,tm0,ts0,bh1,bm1,bh0,bm0,q2Hz,flashs,flashh,flashm,sel_show)

begin

if sel_show='0'then

if(flashh='1'and q2Hz='1')then

h1<=“1111”;h0<=“1111”;--显示小时数码管以2Hz闪烁

min1<=tm1;min0<=tm0;

sec1<=ts1;sec0<=ts0;

elsif(flashm='1'and q2Hz='1')then

h1<=th1;h0<=th0;

min1<=“1111”;min0<=“1111”;

sec1<=ts1;sec0<=ts0;

elsif(flashs='1'and q2Hz='1')then

h1<=th1;h0<=th0;

min1<=tm1;min0<=tm0;

sec1<=“1111”;sec0<=“1111”;

else

h1<=th1;h0<=th0;

min1<=tm1;min0<=tm0;

sec1<=ts1;sec0<=ts0;

end if;

elsif sel_show='1'then--若sel_show为“1”,数码管显示闹钟时间

if(flashh='1' and q2Hz='1')then

h1<=“1111”;h0<=“1111”;

min1<=bm1;min0<=bm0;

sec1<=“0000”;sec0<=“0000”;

elsif(flashm='1' and q2Hz='1')then

h1<=bh1;h0<=bh0;

min1<=“1111”;min0<=“1111”;

sec1<=“0000”;sec0<=“0000”;

else

h1<=bh1;h0<=bh0;

min1<=bm1;min0<=bm0;

sec1<=“0000”;sec0<=“0000”;

end if;

end if;

end process;end rtl;(3)模块图:

8、动态扫描显示模块(scan_led.vhd)(1)模块说明:由4组输入信号和输出信号进而实现了时钟时、分的动态显示。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity scan_led is port(clk1:in std_logic;

h0:in std_logic_vector(3 downto 0);

h1:in std_logic_vector(7 downto 4);

min0:in std_logic_vector(3 downto 0);

min1:in std_logic_vector(7 downto 4);

ML:out std_logic_vector(7 downto 0);

MH:out std_logic_vector(7 downto 0);

HL:out std_logic_vector(7 downto 0);

HH:out std_logic_vector(7 downto 0));end scan_led;

architecture one of scan_led is signal cnt4:std_logic_vector(1 downto 0);signal a: std_logic_vector(3 downto 0);begin p1:process(clk1)begin

if clk1'event and clk1 ='1' then

cnt4<=cnt4+1;

if cnt4=3 then

cnt4<=“00”;end if;end if;end process p1;

p2:process(cnt4,h1,h0,min1,min0)begin case cnt4 is

--控制数码管位选 when “00”=>case min0 is

when “0000”=>ML<=“11000000”;

when “0001”=>ML<=“11111001”;

when “0010”=>ML<=“10100100”;

when “0011”=>ML<=“10110000”;

when “0100”=>ML<=“10011001”;

when “0101”=>ML<=“10010010”;

when “0110”=>ML<=“10000010”;

when “0111”=>ML<=“11111000”;

when “1000”=>ML<=“10000000”;

when “1001”=>ML<=“10010000”;

when others=>NULL;

end case;when “01”=>case min1 is

when “0000”=>MH<=“11000000”;

when “0001”=>MH<=“11111001”;

when “0010”=>MH<=“10100100”;

when “0011”=>MH<=“10110000”;

when “0100”=>MH<=“10011001”;

when “0101”=>MH<=“10010010”;

when “0110”=>MH<=“10000010”;

when “0111”=>MH<=“11111000”;

when “1000”=>MH<=“10000000”;

when “1001”=>MH<=“10010000”;

when others=>NULL;

end case;when “10”=>case h0 is

when “0000”=>HL<=“11000000”;

when “0001”=>HL<=“11111001”;

when “0010”=>HL<=“10100100”;

when “0011”=>HL<=“10110000”;

when “0100”=>HL<=“10011001”;

when “0101”=>HL<=“10010010”;

when “0110”=>HL<=“10000010”;

when “0111”=>HL<=“11111000”;

when “1000”=>HL<=“10000000”;

when “1001”=>HL<=“10010000”;

when others=>NULL;

end case;when “11”=>case h1 is

when “0000”=>HH<=“11000000”;

when “0001”=>HH<=“11111001”;

when “0010”=>HH<=“10100100”;

when “0011”=>HH<=“10110000”;

when “0100”=>HH<=“10011001”;

when “0101”=>HH<=“10010010”;

when “0110”=>HH<=“10000010”;

when “0111”=>HH<=“11111000”;

when “1000”=>HH<=“10000000”;

when “1001”=>HH<=“10010000”;

when others=>NULL;

end case;when others =>null;end case;end process p2;end one;(3)模块图:

五、端口设定

k:button2,set:button1,reset:button0 ; Bell:SW1 用于开关蜂鸣器;

六、顶层电路图

七、心得体会

此次的数字钟设计重在于按键的控制和各个模块代码的编写,虽然能把键盘接口和各个模块的代码编写出来,并能正常显示,但对于各个模块的优化设计还有一定的缺陷和不足,比如对按键消抖等细节处并未作出优化。

经过此次数字钟的设计,我确实从中学到很多的东西。首先,通过VHDL硬件语言的学习,我充分认识到了功能模块如何用语言实现,让我初步了解到了一个数字电路用硬件语言设计的方式和设计思想。其次,也让我深深地体会到实践的重要性,起初我学VHDL语言的时候,只是学得书本上的知识,经过这次课程设计,通过对模块的语言实现,对于VHDL语言我有了更深的认识。而且在程序错误的发现和改正的过程中,我得到了更多的收获,也确实让我进步了不少。再次,当我遇到一些问题的时候,请教老师,和同学们一起讨论,令我受益颇多!最后,这个多功能数字电子钟是自我创造与吸取借鉴共同作用的产物,是自我努力的结果。这让我对数字电路的设计充满了信心。虽然课程设计已经结束,但这并不代表着我已经真正掌握了VHDL语言,仍需继续学习!

第四篇:用状态机实现的EDA多功能数字钟课程设计VHDL代码

设计并实现具有一定功能的数字钟

1、该数字钟可以实现3个功能:计时功能、整点报时功能和重置时间功能,因此有3个功能:计时、重置时间、复位。

2、对所有设计的小系统能够正确分析;

3、基于VHDL语言描述系统的功能;

4、在quartus 2环境中编译通过;

5、仿真通过并得到正确的波形;

6、给出相应的设计报告。

其中计时模块有4部分构成:秒计时器(second)、分计时器(minute)、时计时器(hour)、日计时器(date)、月计时器(mouth)、年计时器(year)

1)秒计时器(second)是由一个60进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,秒计时器清0;set 为置数信号,当set为0时,秒计时器置数,置s1的值。clk为驱动秒计时器的时钟,sec为秒计时器的输出,ensec为秒计时器的进位信号,作为下一级的时钟输入信号。

2)分计时器(minute)是由一个60进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,分计时器清0;set 为置数信号,当set为0时,分计时器置数,置m1的值。clkm为驱动分计时器工作的时钟,与ensec相连接;min为分计时器的输出;enmin为分计时器的进位信号,作为下一级的时钟输入信号。

3)时计时器(hour)是由一个24进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,时计时器清0;set 为置数信号,当set为0时,时计时器置数,置h1的值。clkh为驱动时计时器工作的时钟,与enmin相连接;hour为时计时器的输出;enhour为时计时器的进位信号,作为下一级的时钟输入信号。

4)日计时器(date1)是由一个60进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,星期计时器清0;set 为置数信号,当set为0时,星期计时器置数,置d1的值。clkd为驱动星期计时器工作的时钟,与enhour相连接;date为日计时器的输出,endate为分计时器的进位信号,作为下一级的时钟输入信号,由于月份的天数存在天数不同,闰年2月的天数为28天等情况,还设计了一个润年判别器,准确显示时间。

5)月计时器(mouth)是由一个60进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,星期计时器清0;set 为置数信号,当set为0时,星期计时器置数,置mou1的值,clkmou为驱动星期计时器工作的时钟,与enday相连接;mou为日计时器的输出,enmou为分计时器的进位信号,作为下一级的时钟输入信号。6)计时器(year)是由一个60进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,星期计时器清0;set 为置数信号,当set为0时,星期计时器置数,置y1的值,clky为驱动星期计时器工作的时钟,与enmou相连接;year为日计时器的输出。VHDL程序

1、屏幕切换模块

运用状态机进行屏幕切换,分别显示年月日,以及时分秒 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity mux3 is

Port(clk,Reset,sel : in std_logic;

int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--rst must

a1,a2,a3,a4,a5,a6: out std_logic_vector(3 downto 0));end mux3;

architecture Behavioral of mux3 is

TYPE states IS(st0, st1, st2, st3, st4, st5, st6, st7);

SIGNAL STX: states;

begin

COM1 : PROCESS(STX,int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12)

BEGIN--决定转换状态的进程

CASE STX IS

WHEN st0 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6;

WHEN st1 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12;

WHEN st2 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12;

WHEN st3 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12;

WHEN st4 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12;

WHEN st5 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6;

WHEN st6 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6;

WHEN st7 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6;

WHEN OTHERS => NULL;

END CASE;

END PROCESS COM1;REG: PROCESS(clk,Reset,sel)

--主控时序进程

BEGIN

IF Reset = '1' THEN

STX<= st0;

--异步复位

ELSIF clk='1' AND clk'EVENT THEN

if sel='1' then

CASE STX IS

WHEN st0=>STX<=st1;

WHEN st1=>STX<=st2;

WHEN st2=>STX<=st3;

WHEN st3=>STX<=st4;

WHEN st4=>STX<=st5;

WHEN st5=>STX<=st6;

WHEN st6=>STX<=st7;

WHEN st7=>STX<=st0;

END CASE;

END IF;

END if;END PROCESS;

2、显示切换程序 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity mux1 is

Port(clk,ina,inb,sel,Reset : in std_logic;

result : out std_logic);end mux1;

architecture Behavioral of mux1 is

TYPE state IS(st0,st1,st2,st3,st4,st5,st6,st7);

SIGNAL STX:state;begin REG1: PROCESS(ina,inb,STX)

BEGIN

CASE STX IS

WHEN st0=>result<=ina;

WHEN st1=>result<=ina;

WHEN st2=>result<=inb;

WHEN st3=>result<=inb;

WHEN st4=>result<=inb;

WHEN st5=>result<=inb;

WHEN st6=>result<=inb;

WHEN st7=>result<=inb;

END CASE;

END PROCESS;REG2:PROCESS(clk,sel,Reset)BEGIN IF(Reset='1')THEN

STX<=st0;ELSIF(clk'EVENT AND clk='1')THEN

if sel='1' then CASE STX IS WHEN st0=>STX<=st1;WHEN st1=>STX<=st2;WHEN st2=>STX<=st3;WHEN st3=>STX<=st4;WHEN st4=>STX<=st5;WHEN st5=>STX<=st6;WHEN st6=>STX<=st7;WHEN st7=>STX<=st0;

END CASE;END IF;end if;END PROCESS REG2;

end Behavioral;

3、置数操作模块

运用状态机,进行置数操作 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity mux is

Port(clk,ina,inb,sel,Reset : in std_logic;

r1,r2,r3,r4,r5,r6 : out std_logic);end mux;

architecture Behavioral of mux is TYPE state IS(st0,st1,st2,st3,st4,st5,st6,st7);

SIGNAL STX:state;begin PROCESS(ina,inb,STX)BEGIN CASE STX IS WHEN st0=>r1<=ina;r2<='0';r3<='0';r4<='0';r5<='0';r6<='0';WHEN st1=>r1<=ina;r2<='0';r3<='0';r4<='0';r5<='0';r6<='0';WHEN st2=>r1<='0';r2<='0';r3<='0';r4<='0';r5<='0';r6<=inb;WHEN st3=>r1<='0';r2<='0';r3<='0';r4<='0';r5<=inb;r6<='0';WHEN st4=>r1<='0';r2<='0';r3<='0';r4<=inb;r5<='0';r6<='0';WHEN st5=>r1<='0';r2<='0';r3<=inb;r4<='0';r5<='0';r6<='0';WHEN st6=>r1<='0';r2<=inb;r3<='0';r4<='0';r5<='0';r6<='0';WHEN st7=>r1<=inb;r2<='0';r3<='0';r4<='0';r5<='0';r6<='0';END CASE;END PROCESS;PROCESS(clk,sel,Reset)BEGIN IF(Reset='1')THEN STX<=st0;ELSIF(clk'EVENT AND clk='1')THEN if sel='1' then CASE STX IS WHEN st0=>STX<=st1;WHEN st1=>STX<=st2;WHEN st2=>STX<=st3;WHEN st3=>STX<=st4;WHEN st4=>STX<=st5;WHEN st5=>STX<=st6;WHEN st6=>STX<=st7;WHEN st7=>STX<=st0;

END CASE;END IF;end if;END PROCESS;end Behavioral;end Behavioral;

4、秒显示模块 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity secute1 is

Port(clkm,set,reset : in std_logic;

sec2,sec1 : inout std_logic_vector(3 downto 0);

ensec : out std_logic);end secute1;

architecture Behavioral of secute1 is

begin

Process(clkm,reset,set)

Begin

If reset='1' then sec2<=“0000”;sec1<=“0000”;

Elsif set='1' then sec2<=“0101”;sec1<=“1000”;

Elsif(clkm'event and clkm='1')then

if sec2=“0101” AND sec1=“1001” then sec2<=“0000”;sec1<=“0000”;ensec<='1';

elsif sec1=“1001” then sec2<=sec2+'1';sec1<=“0000”;ensec<='0';

else sec1<=sec1+'1';ensec<='0';

end if;end if;End process;end Behavioral;

5、分显示模块 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity minute1 is

Port(clkm,set,reset : in std_logic;

min2,min1 : inout std_logic_vector(3 downto 0);

enmin : out std_logic);end minute1;

architecture Behavioral of minute1 is

begin

Process(clkm,reset,set)

Begin

If reset='1' then min2<=“0000”;min1<=“0000”;

Elsif set='1' then min2<=“0101”;min1<=“1000”;

Elsif(clkm'event and clkm='1')then

if min2=“0101” AND min1=“1001” then min2<=“0000”;min1<=“0000”;enmin<='1';

elsif min1=“1001” then min2<=min2+'1';min1<=“0000”;enmin<='0';

else min1<=min1+'1';enmin<='0';

end if;end if;End process;end Behavioral;

6、小时显示模块 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity hour1 is

Port(clkh,set,reset: in std_logic;

hor2,hor1 : inout std_logic_vector(3 downto 0);

enhour : out std_logic);end hour1;

architecture Behavioral of hour1 is

begin Process(clkh,reset,set)

Begin

If reset='1' then hor2<=“0000”;hor1<=“0000”;

Elsif set='1' then hor2<=“0010”;hor1<=“0011”;

Elsif(clkh'event and clkh='1')then

if hor2=“0010” AND hor1=“0011” then hor2<=“0000”;hor1<=“0000”;enhour<='1';

elsif hor1=“1001” then hor2<=hor2+'1';hor1<=“0000”;enhour<='0';

else hor1<=hor1+'1';enhour<='0';

end if;

end if;End process;end Behavioral;

7、日显示模块(已加入闰年判断功能)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity date1 is

Port(clkd,set : in std_logic;

dat2,dat1 : inout std_logic_vector(3 downto 0);

endate : out std_logic);end date1;

architecture Behavioral of date1 is

begin

Process(clkd,set)

Begin

if set='1' then dat2<=“0010”;dat1<=“1000”;

Elsif(clkd'event and clkd='1')then

if dat2=“0011” AND dat1=“0000” then dat2<=“0000”;dat1<=“0001”;endate<='1';elsif dat1=“1001” then dat2<=dat2+'1';dat1<=“0000”;endate<='0';

else dat1<=dat1+'1';endate<='0';

end if;end if;End process;end Behavioral;

8、月显示模块 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity month1 is

Port(clkn,set: in std_logic;

mon2,mon1 : inout std_logic_vector(3 downto 0);

enmon : out std_logic);end month1;

architecture Behavioral of month1 is

begin

Process(clkn,set)

Begin

if set='1' then mon2<=“0000”;mon1<=“0110”;

Elsif(clkn'event and clkn='1')then

if mon2=“0001” AND mon1=“0010” then mon2<=“0000”;mon1<=“0001”;enmon<='1';

elsif mon1=“1001” then mon2<=mon2+'1';mon1<=“0000”;enmon<='0';

else mon1<=mon1+'1';enmon<='0';

end if;end if;End process;

9、年显示模块 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;

entity yearth1 is

Port(clkn,set: in std_logic;

year2,year1 : inout std_logic_vector(3 downto 0);

enyear : out std_logic);end yearth1;

architecture Behavioral of yearth1 is

begin

Process(clkn,set)

Begin

if set='1' then year2<=“0001”;year1<=“0001”;

Elsif(clkn'event and clkn='1')then

if year2=“1001” AND year1=“1001” then year2<=“0000”;year1<=“0001”;

elsif year1=“1001” then year2<=year2+'1';year1<=“0000”;enyear<='0';

else year1<=year1+'1';enyear<='0';

end if;end if;

end Behavioral;

第五篇:电工电子课设-数字钟元器件清单

数字钟课程设计元器件清单单价(元/个)1、2、3、共阳极数码管:6个174LS247集成芯片:6块1 74LS90集成芯片:6块14、CD4060集成芯片:1块5、74LS00集成芯片:1块6、74LS74集成芯片:2块7、74LS20集成芯片:2块8、74LS08集成芯片:2块9、74LS04集成芯片:1块10、74LS32集成芯片:1块11、22pf电容:2个12、32768时钟晶体:1个13、1K电阻:1个

14、三极管:1个15、100Ω电阻:6个

17、蜂鸣器:1个

18、小饭盒:1个

19、面包板:1块1 1 1 11 111

下载VHDL实现数字钟课设报告[推荐]word格式文档
下载VHDL实现数字钟课设报告[推荐].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    数字电子技术课设(数字钟)

    太原理工大学现代科技学院学院《数字电子技术》课程设计报告数字电子技术课程设计报告 题目: 多功能数字钟课程设计 学年:2007 学期:第二学期专业:自动化班级:0703 学号:0710055......

    EDA实现多功能数字钟

    EDA实现多功能数字钟 实 验 报 告 专业班级:学生姓名:学生学号: 目录 一、内容摘要 二、实验要求 三、各底层模块设计 四、总体方案 五、 心得体会一、实验内容 利用 QuartusI......

    eda 实现多功能数字钟

    一、标题:EDA实现多功能数字钟 二、任务书:设计要求是用FPGA器件和EDA技术实现多功能数字钟的设计,⑴ 控制功能包括①以数字形式显示时、分、秒的时间;②小时计数器为24进制;③分......

    用VHDL语言编写的数字钟程序5篇

    永州职业技术学院 课 程 设 计 课程名称: EDA技术实用教程 题 目:基于FPGA的数字钟设计 系、专业: 电子技术系应用电子 年级、班级: 07级电子大专 学生姓名: 冯 苗 指导老师: 龙......

    多功能数字钟课程设计VHDL代码书上程序改

    library ieee; use ieee.std_logic_1164.all; entity clock is port( clk1hz:in std_logic;--1hz脉冲-- clk100:in std_logic;--100hz脉冲-- weekclk:in std_logic;--星期调......

    数据结构课设报告

    华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告 课程设计报告 题目:华科校园导航 课程名称:数据结构课程设计 专业班级: 学号: 姓名: 指导教师: 报告日期:......

    ERP课设报告

    《企业资源计划ERP》 课程设计 题目:关于企业实施ERP对人力资源管理影响的探究班 级 信管 092 专 业 信息管理和信息系统 学 号 3090561053 姓 名 窦 婷 地 点 经济与管理学......

    财务会计课设报告(最终定稿)

    武汉理工大学《财务会计课程设计》报告书13年我们一起做的财务会计课程设计财务会计课程设计,是我的第三次专业课程设计,说实话做起来应该轻车熟路,但实际却不是如此。在刚开始......