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

上传人:b****5 文档编号:6766445 上传时间:2023-01-10 格式:DOCX 页数:20 大小:238.32KB
下载 相关 举报
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课程设计报告

题目:

数字钟课程设计

系(院):

计算机工程学院

专业:

计算机(嵌入式系统软件设计)

班级:

计算机107*班

学号:

**

姓名:

*******

指导教师:

**********

学年学期:

2009~2010学年第1学期

2009年12月18日

设计任务书

课题

名称

数字钟设计实验

设计

目的

1.掌握VHDL的编程方法,掌握数字钟设计原理;

2.通过课程设计,要掌握使用EDA工具设计方法,包括图形设计输入、编译、软件仿真、下载和硬件仿真等全过程。

3.综合运用专业及基础知识,解决实际工程技术问题的能力;

4.学习资料的收集与整理,学会撰写课程设计报告。

实验

环境

1.微型电子计算机(PC);

2.安装WindowsXP以上操作系统,QuartusII及等开发工具。

任务

要求

1.使用集成开发软件QuartusII的使用及设计过程,熟悉EDA设计方法,掌握图形设计方法,了解VHDL硬件描述语言,并且要求熟练使用VHDL语言。

2.利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;

3.在第15周末之前完成预设计,并请指导教师审查,通过后方可进行下一步工作;

4.结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字(不含代码)。

工作进度计划

序号

起止日期

工作内容

1

在预设计的基础上,进一步查阅资料,完善设计方案。

2

设计总体方案,构建、绘制流程框图,编写代码,上机调试。

3

测试程序,完善功能,撰写设计报告。

4

参加答辩,根据教师反馈意见,修改、完善设计报告。

指导教师(签章):

年月日

摘要:

EDA技术在硬件实现方面融合了大规模集成电路制造技术,IC版图设计技术、ASIC测试与封装技术、FPGA/CPLD编程下载技术、自动检测技术等;在计算机辅助工程方面融合了计算机辅助技术(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)、计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子线路设计理论、数字信号处理技术、数字系统建模和优化技术及长线技术理论等等。

因此EDA技术为现代电子理论和设计的表达与实现提供了可能性。

在现代技术的所有领域中,纵观许多得以飞速发展的科学技术,多为计算机辅助设计,而非自动化设计。

显然,最早进入设计自动化的技术领域之一是电子技术,这就是为什么电子技术始终处于所有科学技术发展最前列的原因之一。

不难理解,EDA技术已不是某一学科的分支,或某种新的技能技术,应该是一门综合性学科。

它融合多学科于一体,打破了软件和硬件间的壁垒,是计算机的软件技术与硬件实现、设计效率和产品性能合二为一,它代表了电子设计技术合应用激活速的发展方向。

数字钟以成为人们常生活中数字电子钟一般由振荡器,分频器,译码器,显示器等部分组成。

数字钟的应用非常广泛,应用于人家庭以及车站。

码头。

剧场,办公室等公共场所,给人们的生活,学习,工作,娱乐带来极大的方便,由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确,性能稳定,携带方便等特点,它还用于计时,自动报时及自动控制等各个领域。

尽管目前市场上以有现成数字钟集成电路芯片,价格便宜这些都是数字电路中最基本的,应用最广的电路。

数字电子钟的基本逻辑功能框图如下:

它是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。

他的计时装置的周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能。

关键词:

EDAVHDL语言数字钟计时器

 

目次

Notableofcontentsentriesfound.

1、数字钟的综合概述

人类社会已进入到高度发达的信息化社会。

信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。

电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。

实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,ElectronicsDesignAutomation)技术,EDA技术的发展和推广应用又极大地推动了电子信息产业的发展。

为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。

目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。

数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。

数字钟的设计方法有许多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机/FPGA来实现电子钟等等。

这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,并便于功能的扩展。

2、 数字钟的设计要求和结构

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

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

计时、报时(alarm1)、重置时间(s1、m1、h1、d1)。

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

秒计时器(second1)、分计时器(minute1)和时计时器(hour1)

     秒计时器(second1)是由一个60进制的计数器构成的,具有清0、置数和计数功能。

其中reset为清0信号,当reset为0时,秒计时器清0;set为置数信号,当set为0时,秒计时器置数,置s1的值。

clk为驱动秒计时器的时钟,sec为秒计时器的输出,ensec为秒计时器的进位信号,作为下一级的时钟输入信号。

     分计时器(minute1)是由一个60进制的计数器构成的,具有清0、置数和计数功能。

其中reset为清0信号,当reset为0时,分计时器清0;set为置数信号,当set为0时,分计时器置数,置m1的值。

clkm为驱动分计时器工作的时钟,与ensec相连接;min为分计时器的输出;enmin为分计时器的进位信号,作为下一级的时钟输入信号。

     时计时器(hour1)是由一个24进制的计数器构成的,具有清0、置数和计数功能。

其中reset为清0信号,当reset为0时,时计时器清0;set为置数信号,当set为0时,时计时器置数,置h1的值。

clkh为驱动时计时器工作的时钟,与enmin相连接;hour为时计时器的输出;enhour为时计时器的进位信号,作为下一级的时钟输入信号。

        报时模块(alarm1)的功能是当整点(将min作为该模块的输入信号,min=00)时,alarm输出高电平,并且持续1分钟。

数字钟的工作原理图如下所示:

“EDA课程设计论文-数字钟-仿真波形”图1

3、  数字钟模块设计

秒计时器(second1)

Libraryieee;

Usesecond1is

Port(clks,reset:

instd_logic;

Sec1,sec2:

bufferstd_logic_vector(3downto0);--秒输出端

Ensec:

outstd_logic);--秒计时器的进位,用来驱动分计时器

End;

Architectureaofsecond1is

Begin

Process(clks,reset)

Begin

Ifreset='0'then

Sec1<="0000";

Sec2<="0000";

ensec<='0';--对秒计时器清0

Elsifclks'eventandclks='1'then

if(sec1="1001"andsec2="0101")then

Sec1<="0000";

Sec2<="0000";

ensec<='1';--重复计数并产生进位

elsif(sec1="1001")then

Sec1<="0000";

Sec2<=sec2+1;

ensec<='0';

else

sec1<=sec1+1;

ensec<='0';--以驱动下一级

endif;

endif;

Endprocess;

End; 

分计时器(minute1)

Libraryieee;

Useminute1is

Port(clkm,reset:

instd_logic;

Min1,Min2:

bufferstd_logic_vector(3downto0);--秒输出端

Enmin:

outstd_logic);--秒计时器的进位,用来驱动分计时器

End;

Architectureaofminute1is

Begin

Process(clkm,reset)

Begin

Ifreset='0'then

Min1<="0000";

Min2<="0000";

enmin<='0';--对计时器清0

Elsifclkm'eventandclkm='1'then

if(Min1="1001"andMin2="0101")then

Min1<="0000";

Min2<="0000";

enmin<='1';--重复计数并产生进位

elsif(Min1="1001")then

Min1<="0000";

Min2<=Min2+1;

enmin<='0';

else

min1<=min1+1;

enmin<='0';--以驱动下一级

endif;

endif;

Endprocess;

End; 

时计时器(hour1)

Libraryieee;

Usehour1is

Port(clkh,reset:

instd_logic;

End;

Architectureaofhour1is

Begin

Process(clkh,reset)

Begin

Ifreset='0'then

hou1<="0000";

hou2<="0000";--对时计时器清0

Elsifclkh'eventandclkh='1'then

if(hou1="0011"andhou2="0010")then

hou1<="0000";

hou2<="0000";

--重复计数

elsif(hou1="1001")then

hou1<="0000";

hou2<=hou2+1;

else

hou1<=hou1+1;

endif;

endif;

Endprocess;

End; 

星期计时器(day1)

Libraryieee;

Useday1is

Port(clkd,set,reset:

instd_logic;

d1:

instd_logic_vector(2downto0);           ――置数端(星期)

day:

bufferstd_logic_vector(2downto0));       ――星期输出端

end;

Architectureaofday1is

Begin

Process(clkd,reset,set,d1)

  Begin

  Ifreset='0'thenday<="000";                 ――对星期计时器清0

   Elsifset='0'thenday<=d1;                   ――对星期计时器置d1的数

   Elsifclkd'eventandclkd='1'then

Ifday=6thenday<="000";                ――重复计数 

Elseday<=day+1;

Endif;

Endif;

Endprocess;

End;

 

报时模块(alarm1)

Libraryieee;

Usealarm1is

Port(reset:

instd_logic;

Min1,min2:

instd_logic_vector(3downto0);

Alarm:

outstd_logic);--输出的报时信号

End;

Architectureaofalarm1is

Begin

Alarm<='0'whenmin1="0000"andmin2="0000"andreset='1'

else'1';--当分为0且清0

--信号无效时,输出高电平并持续至分不为0

end;

分频模块

libraryIEEE;

usejhgjghis

port(clk,reset:

instd_logic;

q:

outstd_logic);

endjhgjgh;

architectureBehavioralofjhgjghis

signalcnt:

integer:

=0;

signalclks:

std_logic:

='0';

begin

process(clk,reset)

begin

ifreset='0'then

clks<='0';

elsif(clk'eventandclk='1')then

ifcnt=then

cnt<=0;

clks<=not(clks);

else

cnt<=cnt+1;

clks<=clks;

endif;

endif;

endprocess;

q<=clks;

endBehavioral;

译码模块

Libraryieee;

Useyimais

Port(sec1,sec2,min1,min2,hou1,hou2:

instd_logic_vector(3downto0);

s1,s2,m1,m2,h1,h2:

outstd_logic_vector(6downto0));

End;

Architectureaaaaofyimais

Begin

Process(sec1)

Begin

Casesec1is

when"0000"=>s1<="1000000";

when"0001"=>s1<="1111001";

when"0010"=>s1<="0100100";

when"0011"=>s1<="0110000";

when"0100"=>s1<="0011001";

when"0101"=>s1<="0010010";

when"0110"=>s1<="0000010";

when"0111"=>s1<="1111000";

when"1000"=>s1<="0000000";

when"1001"=>s1<="0010000";

whenothers=>s1<="XXXXXXX";

endcase;

endprocess;

Process(sec2)

Begin

Casesec2is

when"0000"=>s2<="1000000";

when"0001"=>s2<="1111001";

when"0010"=>s2<="0100100";

when"0011"=>s2<="0110000";

when"0100"=>s2<="0011001";

when"0101"=>s2<="0010010";

when"0110"=>s2<="0000010";

when"0111"=>s2<="1111000";

when"1000"=>s2<="0000000";

when"1001"=>s2<="0010000";

whenothers=>s2<="XXXXXXX";

endcase;

endprocess;

Process(min1)

Begin

Casemin1is

when"0000"=>m1<="1000000";

when"0001"=>m1<="1111001";

when"0010"=>m1<="0100100";

when"0011"=>m1<="0110000";

when"0100"=>m1<="0011001";

when"0101"=>m1<="0010010";

when"0110"=>m1<="0000010";

when"0111"=>m1<="1111000";

when"1000"=>m1<="0000000";

when"1001"=>m1<="0010000";

whenothers=>m1<="XXXXXXX";

endcase;

endprocess;

Process(min2)

Begin

Casemin2is

when"0000"=>m2<="1000000";

when"0001"=>m2<="1111001";

when"0010"=>m2<="0100100";

when"0011"=>m2<="0110000";

when"0100"=>m2<="0011001";

when"0101"=>m2<="0010010";

when"0110"=>m2<="0000010";

when"0111"=>m2<="1111000";

when"1000"=>m2<="0000000";

when"1001"=>m2<="0010000";

whenothers=>m2<="XXXXXXX";

endcase;

endprocess;

Process(hou1)

Begin

Casehou1is

when"0000"=>h1<="1000000";

when"0001"=>h1<="1111001";

when"0010"=>h1<="0100100";

when"0011"=>h1<="0110000";

when"0100"=>h1<="0011001";

when"0101"=>h1<="0010010";

when"0110"=>h1<="0000010";

when"0111"=>h1<="1111000";

when"1000"=>h1<="0000000";

when"1001"=>h1<="0010000";

whenothers=>h1<="XXXXXXX";

endcase;

endprocess;

Process(hou2)

Begin

Casehou2is

when"0000"=>h2<="1000000";

when"0001"=>h2<="1111001";

when"0010"=>h2<="0100100";

when"0011"=>h2<="0110000";

when"0100"=>h2<="0011001";

when"0101"=>h2<="0010010";

when"0110"=>h2<="0000010";

when"0111"=>h2<="1111000";

when"1000"=>h2<="0000000";

when"1001"=>h2<="0010000";

whenothers=>h2<="XXXXXXX";

endcase;

endprocess;

end;

                                  

4、数字钟系统设计

 将上述5个程序作为底层文件,存放在同一个文件夹中,然后按下面的图将这几个文件连接起来,并用元件例化语句编写顶层文件的程序,如下:

“EDA课程设计论文-数字钟-仿真波形”图2

Libraryieee;

Usetopclockis

Port(clk,reset:

instd_logic;

Alarm:

outstd_logic;

Sec1,sec2,min1,min2,hou1,hou2:

bufferstd_logic_vector(3downto0);

s1,s2,m1,m2,h1,h2:

outstd_logic_vector(6downto0));

End;

Architectureoneoftopclockis

Componentsecond1--秒元件的例化

Port(clks,reset:

instd_logic;

Sec1,sec2:

bufferstd_logic_vector(3downto0);

Ensec:

outstd_logic);

EndComponent;

Componentminute1--分元件的例化

Port(clkm,reset:

instd_logic;

min1,min2:

bufferstd_logic_vector(3downto0);

Enmin:

outstd_logic);

EndComponent;

Componenthour1--时元件的例化

Port(clkh,reset:

instd_logic;

hou1,hou2:

bufferstd_logic_vector(3downto0));

EndComponent;

Componentyima--星期元件的例化

Port(sec1,sec2,min1,min2,hou1,hou2:

instd_logic_vector(3downto0);

s1,s2,m1,m2,h1,h2:

outstd_logic_vector(6downto0));

EndComponent;

Componentalarm1--报时元件的例化

Port(reset:

instd_logic;

min1,min2:

instd_logic_vector(3downto0);

alarm:

outstd_logic);

EndComponent;

Componentjhgjgh

port(clk,reset:

instd_logic;

q:

outstd_logic);

EndComponent;

signalenm,enh,enk:

std_logic;--秒分、分时、时星期之间的连接信号

begin

uo:

jhgjghportmap(reset=>reset,clk=>clk,q=>enk);

u1:

second1portmap(reset=>reset,

sec1=>sec1,sec2=>sec2,c

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

当前位置:首页 > 医药卫生 > 基础医学

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

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