EDA数字电子钟课程设计

  • 格式:doc
  • 大小:2.30 MB
  • 文档页数:22

第 1 页 共 23 页

一 绪论

1 在信息产业中EDA产生的影响

随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、航天、医学、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升;电子类的高新技术项目的开发也逾益依赖于EDA技术的应用。即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。

2 中国国内EDA发展情况

从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。

中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员工发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。

在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、

第 2 页 共 23 页

通信与计算机(M3C)结构。在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。

3 课程设计目的

(1)加深对VHDL语言设计的理解。

(2)通过对多功能数字时钟的设计加深对EDA课程的理解

(3)通过对多功能数字时钟的设计了解简易集成电路的设计思路

(4)熟悉MAX+PLUS II仿真软件的工作方法及应用技术

4 课题设计内容

本次课程设计的主要目的旨在通过独立完成一个 “电子时钟”的设计,达到对EDA技术的熟练掌握,提升对《EDA技术及应用》课程所学内容的掌握和应用。

在本次课程设计中使用Altera公司的EPF10K10系列的FPGA芯片,基于实验室现有的EDA实验箱,实现“电子时钟”的设计要求。

1、计数24小时的时钟

2、六位数码管显示“时-分-秒”

3、五个功能键

(1) Timer 从其它状态放回时钟状态

(2) Alarm 切换到闹钟时间的设定

(3) Set 按一下,跳到下一个设置区

(4) Down 按一下,所设置区的数字减1

(5) Up 按一下,所设置区的数字加1

4、带有闹钟功能;

5、键盘的设定值要求在LED上显示。

一 设计的总体方案

流程图:

第 3 页 共 23 页

本多功能数字时钟由三个模块组成:

(1)时间显示模式:

24小时制显示当前时间:小时用8与7数码管,分钟用5与4位数码管,秒由2与1位数码管表示,小时与分钟之间、分钟与秒之间用3和6位数码管显示“—”,总计八位七段数码显示管。此模式下显示当前时间。

(2)校时模式:

将time键置于‘0’,运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置。

Set->数码管7-> Set->数码管6-> Set->数码管5-> Set->数码管4-> Set->数码管3-> Set->数码管2-> Set->数码管1

Up->+1;down->-1;

(3)闹钟设定模式:

将time键置于‘1’,设定模式与校时时设定一样,运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置。

Set->数码管7-> Set->数码管6-> Set->数码管5-> Set->数码管4-> Set->数码管3-> Set->数码管2-> Set->数码管1

Up->+1;down->-1;

二 设计的详细原理

第 4 页 共 23 页

此多功能数字时钟是由多个模块组成,各个模块实现各自不同的作用,综合起来,便是多功能数字时钟。

1、主要模块如下:

(1)输入一个250KHZ的方波信号

(2)计时模块:

将time键置于‘0’,用软件设计,当脉冲累计2500000次时secondl自动+1,以此类推,可得出数字时钟,并用8位7段对各时间进行显示。

输入:250KHz脉冲,控制键time等

输出:秒、分、小时

(3)校时模块:

将time键置于‘0’, 运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置。

输入:time状态转换键,set数码管选定键,up+1键,down-1键

输出:设定后的 秒,分,小时

(4)设定闹钟模块:

与校时操作类似,只是先将time键置于‘1’, 再运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置

输入:time状态转换键,set数码管选定键,up+1键,down-1键

输出:所定的闹钟时间 秒,分,小时

(5)整点蜂鸣报时

运用软件进行设置,当minuteH与minuteL均为零时,蜂鸣器响,也就是没次整点时,蜂鸣器自动响一分钟,如果想设置响的时间,可以手动改即可。并且可以手动按下功能键naozhong,这样就可以手动关闭蜂鸣器。

输入:naozhong关闭蜂鸣器键

输出:蜂鸣器发出蜂鸣声

2、功能概述

输入一个250KHZ的方波信号,运用VHDL语言对其进行编译,用计数器对方波信号进行技术,当 cnt=2500000时,secondl自动+1,不断进行累加,可以达到实现数字钟自动计时功能。并且此多功能数字钟设有5个功能键,(1)time键控制显示状态,可以选择时钟状态与闹钟状态的转换(2)naozhong键可以手动关闭蜂鸣器(3) set键可以选择需要改变的数码管,以便进行调时与设定闹钟(4)up键对对应的数据进行+1操作(5)down键对对应的数据进行-1操作。通

第 5 页 共 23 页

过次5个功能键,便可实现多功能数字时钟,拥有计时/校时功能,设定闹钟功能,整点报时功能。

四 设计的步骤和过程

1 计时模块:

if clk_1k'event and clk_1k = '1' then

cnt:=cnt+1;

ct:=ct+1;

if ct=1000 then -- 1 秒计时。

ct:=0;

secondL:=secondL+1;

if secondL=10 then -- 10 秒计时。

secondL:=0;

secondH:=secondH+1;

end if;

if secondH=6 then -- 1 分钟计时。

secondH:=0;

minuteL:=minuteL+1;

end if;

if minuteL=10 then -- 10 分钟计时。

minuteL:=0;

minuteH:=minuteH+1;

end if;

if minuteH=6 then -- 1 小计时时。

minuteH:=0;

hourL:=hourL+1;

end if;

if hourL=10 then -- 10 小时计时。

hourL:=0;

hourH:=hourH+1;

end if;

if hourH=2 and hourL =4 then -- 24 小时计时

hourH:=0;

hourL:=0;

end if;

次模块的主要作用是完成24小时的即时显示。

2校时模块

if clk'event and clk = '1' then

第 6 页 共 23 页

d<=set;

k<=up;

p<=down

if time='0' then

if ( d='0' and set='1')then

stat<=stat+1;

end if;

case stat is

when 1 =>

if(k='0' and up='1')then

hourH<=hourH+1;

elsif( p='0' and down='1')then

hourH<= hourH-1;

end if;

when 2 => if( k='0' and up='1')then

hourL<= hourL+1;

elsif( p='0' and down='1')then

hourL<= hourL-1;

end if;

when 3 => if(k='0' and up='1')then

minuteH<= minuteH +1;

elsif( p='0' and down='1')then

minuteH<= minuteH -1;

end if;

when 4 => if( k='0' and up='1')then

minuteL<= minuteL+1;

elsif( p='0' and down='1')then

minuteL<= minuteL-1;

end if;

when 5=>

if(k='0' and up='1')then

secondH<= secondH +1;

elsif(p='0' and down='1')then

secondH<= secondH-1;