EDA数字时钟课程设计.docx

上传人:b****8 文档编号:9243016 上传时间:2023-05-17 格式:DOCX 页数:10 大小:149.60KB
下载 相关 举报
EDA数字时钟课程设计.docx_第1页
第1页 / 共10页
EDA数字时钟课程设计.docx_第2页
第2页 / 共10页
EDA数字时钟课程设计.docx_第3页
第3页 / 共10页
EDA数字时钟课程设计.docx_第4页
第4页 / 共10页
EDA数字时钟课程设计.docx_第5页
第5页 / 共10页
EDA数字时钟课程设计.docx_第6页
第6页 / 共10页
EDA数字时钟课程设计.docx_第7页
第7页 / 共10页
EDA数字时钟课程设计.docx_第8页
第8页 / 共10页
EDA数字时钟课程设计.docx_第9页
第9页 / 共10页
EDA数字时钟课程设计.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA数字时钟课程设计.docx

《EDA数字时钟课程设计.docx》由会员分享,可在线阅读,更多相关《EDA数字时钟课程设计.docx(10页珍藏版)》请在冰点文库上搜索。

EDA数字时钟课程设计.docx

EDA数字时钟课程设计

EDA课程设计报告书

 

课题名称

数字时钟

姓名

学号

院系

专业

指导教师

 

一、设计任务及要求:

1、使学生掌握EDA开发工具QuartusII5.0的常用工具的使用。

2、使学生掌握EDA设计流程及输入方法。

3、使学生掌握的硬件描述语言VHDL的基本应用。

4、使学生掌握原理图输入、波形图输入、VHDL文本输入等硬件设计方法。

5、使学生掌握硬件测试的方法,验证实际设计电路的。

6、使学生了解FPGA/CPLD工作原理及结构。

指导教师签名:

年月日

二、指导教师评语:

 

指导教师签名:

年月日

三、成绩

 

验收盖章

年月日

数字时钟

一.设计目的

综合本学期所学知识设计数字时钟,使用VHDL语言进行编程,掌握多位计数器相连的设计方法;掌握二十四进制,六十进制计数器的设计方法;掌握电子电路一般的设计方法,并了解电子产品的研制开发过程,基本掌握电子电路安装和调试的方法。

培养独立分析问题,解决问题的能力。

二.设计的主要内容及方法

1.用HDL语言编写时分秒计时器程序;

2.编写顶层文件,用来对元件进行例化,以及对端口进行映射;

3.编译、仿真并生成波形图;

4.生成元件;

三.设计原理

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

它的计时周期为24小时;显示满刻度为23时59分59秒,另外具备校时功能和报时功能。

因此,一个基本的数字钟电路主要由“时”“分”“秒”计数器校时电路组成。

将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累加60秒发送一个“分脉冲”信号,该信号将被送到“时计数器”。

“时计数器”采用24进制计数器,可实现对一天24小时的累计。

钟计数采用层次化设计,将设计任务分成若干个模块。

规定每一模块的功能和各模块之间的接口。

a.second(秒)60进制BCD码计数;

b.minute(分)60进制BCD码计数;

c.hour(时)24进制BCD码计数;

d.clocktop顶层设计;

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

端口引脚名称

输入 clk,reset,setmin,sethour; 

输出 second-daout,minute-daout,hour-daout;

四.设计过程

SECOND模块:

用来对秒进行计时,当记到计数器的低四位为1001时,若高三位不是101时,则秒计数器加7,目的是使计数值变为BCD码。

若高三位是101时,则有一进位。

当计数器的低四位不为1001时,计数器加1。

SECOND模块给MINUTE的时钟由SETMINUTE和它本身记到60的进位两部分组成。

SECOND模块源程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysecondis

    port(clk,reset,setmin:

instd_logic;--时钟信号、复位输入端

          enmin:

outstd_logic;--分钟进位输出

          daout:

outstd_logic_vector(6downto0)--秒输出端

        );

endentitysecond;

architecturefunofsecondis

      signalcount:

std_logic_vector(6downto0);

      signalenmin_1,enmin_2:

std_logic;--信号变量定义

begin

      daout<=count;

      enmin_2<=(setminandclk);

      enmin<=(enmin_1orenmin_2);

process(clk,reset,setmin)

begin

if(reset='1')thencount<="0000000";--对秒计时器清零

elsif(clk'eventandclk='1')then--当产生时钟上升沿是进行计数

    if(count(3downto0)="1001")then

  if(count<16#60#)then

      if(count="1011001")then

    enmin_1<='1';count<="0000000";--当秒计数至59秒产生分钟进位信号

else

      count<=count+7;--秒计数器加7,使计数值变为BCD码

endif;

  else

      count<="0000000";--对计数值清零

  endif;

  elsif(count<16#60#)then

    count<=count+1;--当计数值少于60时计数值加一

    enmin_1<='0'after100ns;

  else

      count<="0000000";--计数值等于60时对计数值清零

    endif;

    endif;

  endprocess;

endfun;

SECOND生成的元件如图4.1:

图4.1

MINUTE模块:

用来对分进行计时,当记到计数器的低四位为1001时,若高三位不是101时,则分计数器加7,目的是使计数值变为BCD码。

若高三位是101时,则有一进位。

当计数器的低四位不为1001时,计数器加1。

MINUTE模块的时钟由SETMIN和SECOND记到60的进位两部分组成。

MINUTE模块源程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityminuteis

    port(clk,reset,clk1,sethour:

instd_logic;--时钟信号、复位端口定义

          enhour:

outstd_logic;--时计数信号进位端

          daout:

outstd_logic_vector(6downto0)–分钟计数输出

        );

endentityminute;

architecturefunofminuteis

      signalcount:

std_logic_vector(6downto0);

      signalenhour_1,enhour_2:

std_logic;--信号变量定义

begin

      daout<=count;

      enhour_2<=(sethourandclk1);

      enhour<=(enhour_1orenhour_2);--

process(clk,reset,sethour)

begin

if(reset='1')thencount<="0000000";--对计数值复位

elsif(clk'eventandclk='1')then--当产生时钟上升沿是进行计数

    if(count(3downto0)="1001")then

  if(count<16#60#)then

      if(count="1011001")then

    enhour_1<='1';count<="0000000";--当计数值为59时产生小时进位信号,

--并清计数值

else

      count<=count+7;--若高三位不是101,则分计数器加7,使计数值变为BC码

endif;

  else

      count<="0000000";

  endif;

  elsif(count<16#60#)then

    count<=count+1;--当计数值小于60时计数值加一

    enhour_1<='0'after100ns;--时钟中间信号延时100纳秒置零

  else

      count<="0000000";--当计数值等于60时对计数清零

    endif;

    endif;

  endprocess;

endfun;

MINTUE生成元件如图4.2:

图4.2

HOUR模块:

用来对时进行计数,当记到计数器的低四位为1001时,若高三位小于010时,则时计数器加7,目的是使计数值变为BCD码。

当计数器的高三位小于010,低四位小于1001时,计数器加1;若当计数器记到0100100时,则有一进位。

HOUR模块的时钟由SETHOUR和MINUTE记到60的进位两部分组成。

HOUR模块源程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityhouris

    port(clk,reset:

instd_logic;--时钟信号、复位信号输入端

        daout:

outstd_logic_vector(5downto0)--小时信号输出端

          );

endentityhour;

architecturefunofhouris

  signalcount:

std_logic_vector(5downto0);--信号变量定义

begin

    daout<=count;

  process(clk,reset)

begin

if(reset='1')then

      count<="000000";--当复位信号为“1”时,对计数清零

  elsif(clk'eventandclk='1')then--当产生时钟上升沿时进行计数操作

    if(count(3downto0)="1001")then

      if(count<16#23#)then

        count<=count+7;--当记到计数器的低四位为1001时,若高三位小于010时,--则时计数器加7,使计数值变为BCD码。

    else

        count<="000000";--当计数等于24时对计数清零

  endif;

  elsif(count<16#23#)then

      count<=count+1;--当计数值小于23时对计数值进行加一操作

  else

    count<="000000";--当计数值等于24时对计数值清零

      endif;

    endif;

    endprocess;

endfun;

HOUR生成元件如图4.3:

图4.3

顶层CLOCK_TOP模块:

顶层模块的作用是将各个模块组合到一起,从而实现最终的功能。

其输入即为各个模块的输入,用来对元件进行例化,以及对端口进行映射。

HOUR模块源程序如下:

libraryieee;

useieee.std_logic_1164.all;

entityclock_topis

port(clk,reset,setmin,sethour:

instd_logic;

      second_daout,minute_daout:

outstd_logic_vector(6downto0);

hour_daout:

outstd_logic_vector(5downto0)

    );

endclock_top;

architectureaofclock_topis

componentsecond--秒计数元件声明

port(clk,reset,setmin:

instd_logic;

daout:

outstd_logic_vector(6downto0);

enmin:

outstd_logic);

endcomponent;

componentminute--分计数元件声明

  port(clk,reset,clk1,sethour:

instd_logic;

      enhour:

outstd_logic;

    daout:

outstd_logic_vector(6downto0));

endcomponent;

componenthour--小时计数元件声明

  port(clk,reset:

instd_logic;

      daout:

outstd_logic_vector(5downto0));

  endcomponent;

signalenmin_re,enhour_re:

std_logic;

begin

u1:

secondportmap(reset=>reset,

  clk=>clk,

  setmin=>setmin,

  enmin=>enmin_re,

  daout=>second_daout);--秒端口关联

u2:

minuteportmap(clk=>enmin_re,

  reset=>reset,

  clk1=>clk,

  sethour=>sethour,

  enhour=>enhour_re,

  daout=>minute_daout);--分端口关联

u3:

hourportmap(clk=>enhour_re,

  reset=>reset,

  daout=>hour_daout);--时计数端口关联

enda;

生成电路元件图如图4.4:

图4.4

五.仿真波形图

计时仿真波形图如图5.1

图5.1

输入:

CLK—时钟脉冲,RESET—复位信号,SETMIN—分加1信号,SETHOUR—秒加1信号

输出:

SECOND_DAOUT—秒输出,MINUTE_DAOUT—分输出,HOUR_DAOUT—时输出

时序仿真:

程序主要运用计数器完成,在时钟脉冲的作用下,完成时钟功能,由时序图可以看出每一个时钟脉冲上升沿秒加1,当接收到reset信号,即reset为高电平,所有计数为零,并重新计数,setmin和sethour可以完成调节时钟功能,都是高电平调节,每来一个脉冲,相应的时或分加1。

六.设计总结

通过两周的单片机课程设计使我对单片机这门课程有了更加深入的了解,知道它是一门需要不断地实践才能真正掌握的课程。

这次单片机课程设计不仅使我熟悉手机键盘的工作原理,工作过程和所需的相关器件,而且增加对单片机编程方法,编程步骤,相应的操作流程和软件操作等的熟悉度。

更重要的是使我在设计的过程中积累对数字电路简单系统的实际制作经验,培养独立设计电路系统的专业素养,也深刻认识到其他相关课程之间的联系对于我们电子信息工程专业的学生重要性。

只有认真扎实的学好相应的基础课程才能在以后的学习工作中解决更加复杂困难的问题。

参考文献

[1]彭伟,单片机C语言程序设计实训100例.北京航空航天大学出版社.2010.5.1.

[2]楼然苗,51系列单片机设计实例.北京航空航天出版社.2003.3:

100-115.

[3]唐俊翟,单片机原理与应用.冶金工业出版社.2003.9:

255-258.

[4]刘瑞新,单片机原理及应用教程.机械工业出版社,2003.7:

56-89.

[5]吴国经,单片机应用技术.中国电力出版社,2004.1:

89-103.

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2