数字钟EDA综合课程设计.docx

上传人:b****7 文档编号:24009277 上传时间:2023-05-23 格式:DOCX 页数:20 大小:113.22KB
下载 相关 举报
数字钟EDA综合课程设计.docx_第1页
第1页 / 共20页
数字钟EDA综合课程设计.docx_第2页
第2页 / 共20页
数字钟EDA综合课程设计.docx_第3页
第3页 / 共20页
数字钟EDA综合课程设计.docx_第4页
第4页 / 共20页
数字钟EDA综合课程设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数字钟EDA综合课程设计.docx

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

数字钟EDA综合课程设计.docx

数字钟EDA综合课程设计

北华航天工业学院

《EDA技术综合设计》

课程设计报告

 

报告题目:

数字钟

作者所在系部:

电子工程系

作者所在专业:

自动化专业

作者所在班级:

作者姓名:

指导教师姓名:

完成时间:

2010—12—03

 

内容摘要

VHDL是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage的缩写,意思是超高速集成电路硬件描述语言。

对于复杂的数字系统的设计,它有独特的作用。

它的硬件描述能力强,能轻易的描述出硬件的结构和功能。

这种语言的应用至少意味着两种重大的改变:

电路的设计竟然可以通过文字描述的方式完成;电子电路可以当作文件一样来存储。

随着现代技术的发展,这种语言的效益与作用日益明显,每年均能够以超过30%的速度快速成长。

这次毕业设计的内容是在简要介绍了VHDL语言的一些基本语法和概念后,进一步应用VHDL,在MAX+plusII的环境下设计一个数字钟,最后通过仿真出时序图实现预定功能。

数字钟的时间显示用到了七段数码管(或称七段显示器)的电路设计,内部的时间控制输出则用到了各种设计,包括:

加法计数器,扫描电路,控制秒、分、时的分频电路,各种数制的转换。

 

关键词:

VHDL,数字钟,MAX+plusII,时序仿真图。

目录

1、实验目的……………………………………………………………………………1

二、硬件要求……………………………………………………………………………1

三、实验原理……………………………………………………………………………1

四、模块说明……………………………………………………………………………1

1.秒计数器………………………………………………………………………………1

2.分计数器………………………………………………………………………………2

3.小时计数器……………………………………………………………………………3

4.报警模块………………………………………………………………………………4

5.扫描模块………………………………………………………………………………5

6.译码模块………………………………………………………………………………6

7.顶层文件………………………………………………………………………………8

五、整体连接图…………………………………………………………………………9

六、实验步骤……………………………………………………………………………10

七、实验结果……………………………………………………………………………10

八、实验总结……………………………………………………………………………10

九、参考文献……………………………………………………………………………10

 

课程设计任务书

课题名称

数字钟

完成时间

2010-12-03

指导教师

职称

学生姓名

班级

总体设计要求和技术要点

利用VHDL进行数字钟设计,主要完成以下功能:

1.具有时、分、秒计数显示功能,以24小时循环计时。

2.具有清零,调节小时、分钟功能。

3.具有整点报时功能,整点报时的同时LED灯花样显示。

工作内容及时间进度安排

周5:

硬件仿真

周6:

验收答辩

课程设计成果

1.与设计内容对应的软件程序

2.课程设计报告书

3.成果使用说明书

4.设计工作量要求

一、实验目的

(1)掌握多位计数器相连的设计方法。

(2)掌握十进制、六进制、二十四进制计数器的设计方法。

(3)巩固多位共阴极扫描显示数码管的驱动及编码。

(4)掌握扬声器的驱动。

(5)LED灯的花样显示。

(6)掌握EDA技术的层次化设计方法。

二、硬件要求

(1)主芯片EPF10K10LC84-4。

(2)8个LED灯。

(3)蜂鸣器。

(4)8位八段扫描共阴极数码显示管。

(5)三个按键开关(清零,调小时,调分钟)。

三、实验原理

在同一芯片EPF10K10上集成了如下电路模块:

(1)时钟计数:

秒——60进制BCD码计数;

分——60进制BCD码计数;

时——24进制BCD码计数;

同时整个计数器有清零,调分,调时功能。

在接近整数时间能提供报时信号。

(2)具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。

(3)蜂鸣器在整点时有报时驱动信号产生。

(4)LED灯在整点时有花样显示信号产生。

四、模块说明

时钟的设计共化分为6个模块:

秒计数器(count60),分计数器(count601),小时计数器(count24),报警电路(bs),扫描电路(set),译码电路(led7)。

下面具体分析各个模块的原理、内容和功能。

1.秒计数器(count60)

能够实现60进制循环计数,带有复位端reset、手动调分功能端setmin和向分进位端c,受时钟上升沿信号控制,其文本语言(文件名:

count60.vhd)为底层文本,图1为秒计数器的仿真波形图。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNT60IS

PORT(CLK,RESET,SETMIN:

INSTD_LOGIC;

SEC0,SEC1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C:

OUTSTD_LOGIC);

1

ENDCOUNT60;

ARCHITECTUREONEOFCOUNT60IS

SIGNALSEC0_T,SEC1_T:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALE_1,E_2:

STD_LOGIC;

BEGIN

SEC0<=SEC0_T;SEC1<=SEC1_T;

E_2<=(NOTSETMINandCLK);

C<=(E_1orE_2);

PROCESS(CLK,RESET,SETMIN)

BEGIN

IFRESET='0'THEN

SEC0_T<="0000";SEC1_T<="0000";

ELSIFCLK'EVENTANDCLK='1'THEN

IFSEC0_T="1001"THEN

SEC0_T<="0000";SEC1_T<=SEC1_T+1;

ELSE

SEC0_T<=SEC0_T+1;

ENDIF;

IFSEC0_T="1001"ANDSEC1_T="0101"THEN

SEC0_T<="0000";SEC1_T<="0000";E_1<='1';

ELSEE_1<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDONE;

图1.六十进制秒计数器的仿真波形

2.分计数器(COUNT601)

能够实现60进制循环计数,带有带有复位端reset、手动调小时功能端sethour和向分进位端CO,受时钟上升沿信号控制。

其文本语言(文件名:

COUNT601.vhd)为底层文本,图2为分计数器的仿真波形图

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNT601IS

PORT(CLK,RESET,CLK1,SETHOUR:

INSTD_LOGIC;

2

MIN0,MIN1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CO:

OUTSTD_LOGIC);

ENDCOUNT601;

ARCHITECTUREONEOFCOUNT601IS

SIGNALMIN0_T,MIN1_T:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALENHOUR_1,ENHOUR_2:

STD_LOGIC;

BEGIN

MIN0<=MIN0_T;MIN1<=MIN1_T;

ENHOUR_2<=(NOTSETHOURandCLK1);

CO<=(ENHOUR_1orENHOUR_2);

PROCESS(CLK,RESET,SETHOUR)

BEGIN

IFRESET='0'THEN

MIN0_T<="0000";MIN1_T<="0000";

ELSIFCLK'EVENTANDCLK='1'THEN

IFMIN0_T="1001"THEN

MIN0_T<="0000";MIN1_T<=MIN1_T+1;

ELSEMIN0_T<=MIN0_T+1;

ENDIF;

IFMIN0_T="1001"ANDMIN1_T="0101"THEN

MIN0_T<="0000";MIN1_T<="0000";

ENHOUR_1<='1';

ELSEENHOUR_1<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDONE;

图2.六十进制分计数器的仿真波形

3.小时计数器(COUNT24)

能够实现24进制循环计数,带有复位端reset,受时钟上升沿信号控制。

其文本语言(文件名:

COUNT24.vhd)为底层文本,图3为分计数器的仿真波形图。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNT24IS

PORT(CLK,RESET:

INSTD_LOGIC;

3

H0,H1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOUNT24;

ARCHITECTUREONEOFCOUNT24IS

SIGNALH0_T,H1_T:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

H0<=H0_T;H1<=H1_T;

PROCESS(CLK,RESET)

BEGIN

IFRESET='0'THEN

H0_T<="0000";H1_T<="0000";

ELSIFCLK'EVENTANDCLK='1'THEN

IFH0_T="1001"THEN

H0_T<="0000";H1_T<=H1_T+1;

ELSE

H0_T<=H0_T+1;

ENDIF;

IFH0_T="0011"ANDH1_T="0010"THEN

H0_T<="0000";H1_T<="0000";

ENDIF;

ENDIF;

ENDPROCESS;

ENDONE;

图3.小时计数器的仿真波形

4.报警模块(BS)

能够实现整点报时和循环点亮3只LED灯,工作时受时钟上升沿控制。

其文本语言(文件名:

BS.vhd)为底层文本,图4为其仿真波形。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYBSIS

PORT(CLK:

INSTD_LOGIC;

M0,M1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

SPEAK:

OUTSTD_LOGIC;

4

LAMP:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDBS;

ARCHITECTUREONEOFBSIS

SIGNALCOUNT:

STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALCOUNT1:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

SPEAKER:

PROCESS(CLK)

BEGIN

SPEAK<=COUNT1

(1);

IFCLK'EVENTANDCLK='1'THEN

IFM0="0000"ANDM1="0000"THEN

IFCOUNT1>="10"THEN

COUNT1<="00";

ELSECOUNT1<=COUNT1+1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESSSPEAKER;

LAMPER:

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCOUNT<="10"THEN

IFCOUNT<="00"THEN

LAMP<="001";

ELSIFCOUNT<="01"THEN

LAMP<="010";

ELSIFCOUNT<="10"THEN

LAMP<="100";

ENDIF;

COUNT<=COUNT+1;

ELSECOUNT<="00";

ENDIF;ENDIF;

ENDPROCESSLAMPER;

ENDONE;

图4.声光报警仿真波形

5

5.扫描模块(SET)

能够实现逐次扫描秒个位、秒十位、分个位、分十位、时个位、时十位,并输出扫描数据和相应位的点dp,带有复位端reset,受扫描时钟上升沿控制。

其文本语言(文件名:

SET.vhd)为底层文本,图5为其仿真波形。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSETIS

PORT(CLK1,RESET:

INSTD_LOGIC;

SE0,SE1,MI0,MI1,HU0,HU1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

DP:

OUTSTD_LOGIC);

ENDSET;

ARCHITECTUREONEOFSETIS

SIGNALCOUNT:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIGSEL<=COUNT;

PROCESS(CLK1)

BEGIN

IFRESET='0'THENCOUNT<="000";

ELSIFCLK1'EVENTANDCLK1='1'THEN

IFCOUNT="101"THENCOUNT<="000";

ELSECOUNT<=COUNT+1;

ENDIF;

ENDIF;

CASECOUNTIS

WHEN"000"=>DOUT<=SE0;DP<='0';

WHEN"001"=>DOUT<=SE1;DP<='0';

WHEN"010"=>DOUT<=MI0;DP<='1';

WHEN"011"=>DOUT<=MI1;DP<='0';

WHEN"100"=>DOUT<=HU0;DP<='1';

WHENOTHERS=>DOUT<=HU1;DP<='0';

ENDCASE;

ENDPROCESS;

ENDONE;

6

图5.时间数据扫描分时选择模块的仿真波形

6.译码器模块(LED7)

能够实现译码功能,将扫描到的数据能够译码显示在7段数码管上,输出端led[6..0]分别对应数码管的a~g。

其文本语言(文件名:

LED7.vhd)为底层文本。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYLED7IS

PORT(DIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDLED7;

ARCHITECTUREONEOFLED7IS

BEGINPROCESS(DIN)

BEGIN

CASEDINIS

WHEN"0000"=>DOUT<="1111110";

WHEN"0001"=>DOUT<="0110000";

WHEN"0010"=>DOUT<="1101101";

WHEN"0011"=>DOUT<="1111001";

WHEN"0100"=>DOUT<="0110011";

WHEN"0101"=>DOUT<="1011011";

WHEN"0110"=>DOUT<="1011111";

WHEN"0111"=>DOUT<="1110000";

WHEN"1000"=>DOUT<="1111111";

WHEN"1001"=>DOUT<="1111011";

WHENOTHERS=>DOUT<="0000000";

ENDCASE;

ENDPROCESS;

ENDONE;

7

7.顶层文件

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYCLOCK_TOPIS

PORT(CLK,RESET,CLKDSP,SETMIN,SETHOUR:

INSTD_LOGIC;

A,B,C,D,E,F,G:

OUTSTD_LOGIC;

LAMP,SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

DP,SPEAKER:

OUTSTD_LOGIC);

ENDCLOCK_TOP;

ARCHITECTUREONEOFCLOCK_TOPIS

COMPONENTCOUNT60--秒计数器COUNT60的元件声明

PORT(CLK,RESET,SETMIN:

INSTD_LOGIC;

SEC0,SEC1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

C:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCOUNT601--分计数器COUNT601的元件声明

PORT(CLK,RESET,CLK1,SETHOUR:

INSTD_LOGIC;

MIN0,MIN1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CO:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCOUNT24--时计数器COUNT24的元件声明

PORT(CLK,RESET:

INSTD_LOGIC;

H0,H1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENT;

COMPONENTSET--时间数据扫描分时选择SET的元件声明

PORT(SE0,SE1,MI0,MI1,HU0,HU1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

RESET,CLK1:

INSTD_LOGIC;

DOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

DP:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTLED7--7段译码LED7的元件声明

PORT(DIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDCOMPONENT;

COMPONENTBS--报警单元BS的元件声明

PORT(CLK:

INSTD_LOGIC;

M0,M1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

SPEAK:

OUTSTD_LOGIC;

LAMP:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDCOMPONENT;

SIGNALSECOND_0,SECOND_1,MINUTE_0,

MINUTE_1,HOUR_0,HOUR_1,SELTIME:

STD_LOGIC_VECTOR(3DOWNTO0);

8

SIGNAL

JIN1,JIN2:

STD_LOGIC;

SIGNAL

LEDOUT:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

A<=LEDOUT(6);B<=LEDOUT(5);C<=LEDOUT(4);D<=LEDOUT(3);E<=LEDOUT

(2);F<=LEDOUT

(1);G<=LEDOUT(0);

U1:

COUNT60PORTMAP(RESET=>RESET,CLK=>CLK,--秒计数器元件例化

SETMIN=>SETMIN,

C=>JIN1,SEC0=>SECOND_0,

SEC1=>SECOND_1);

U2:

COUNT601PORTMAP(RESET=>RESET,CLK1=>CLK,--分计数器元件例化

SETHOUR=>SETHOUR,

CLK=>JIN1,CO=>JIN2,

MIN0=>MINUTE_0,MIN1=>MINUTE_1);

U3:

COUNT24PORTMAP(CLK=>JIN2,

RESET=>RESET,--时计数器元件例化

H0=>HOUR_0,H1=>HOUR_1);

U4:

SETPORTMAP(SE0=>SECOND_0,--时间数据扫描分时选择元件例化

SE1=>SECOND_1,

MI0=>MINUTE_0,MI1=>MINUTE_1,

HU0=>HOUR_0,HU1=>HOUR_1,

CLK1=>CLKDSP,RESET=>RESET,

DOUT=>SELTIME,SEL=>SEL,DP=>DP);

U5:

LED7PORTMAP(DIN=>SELTIME,--7段译码LED7的元件例化

DOUT=>LEDOUT);

U6:

BSPORTMAP(CLK=>CLK,M0=>MINUTE_0,--报警单元BS的元件例化

M1=>MINUTE_1,SPEAK=>SPEAKER,

LAMP=>LAMP);

ENDONE;

 

五、数字钟的整体连接图

9

图6.数字钟各个模块连接示意图

六、实验步骤

(1)安装MAX+plusⅡ软件,为本项设计建立文件夹。

(2)输入设计项目的各个模块,存盘检查,编译并仿真至无误。

(3)调用底层文件的各个模块,连接整体原理图,进行存盘检查,编译仿真至无误。

(4)将PC机与试验箱进

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

当前位置:首页 > 求职职场 > 简历

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

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