EDA数字电子钟课程设计

发布于:2021-11-27 13:19:17

目录
一 二 三 四 绪论----------------------------------------------------------------------------------------1 设计总体方案----------------------------------------------------------------------------4 详细的设计原理-------------------------------------------------------------------------5 设计的步骤和过程----------------------------------------------------------------------5

1 计时模块------------------------------------------------------------------6 2 校时模块------------------------------------------------------------------7 3 设定闹钟模块-------------------------------------------------------------8 4 显示模块设计------------------------------------------------------------9 5 蜂鸣器模块设计--------------------------------------------------------------------------11 五 设计的仿真和运行结果----------------------------------------------------------------12 六 课程设计心得体会----------------------------------------------14 七 参考书目------------------------------------------------------15

附录----------------------------------------------------------------------------------------15---23

第 1 页 共 23 页

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

2 中国国内 EDA 发展情况
从目前的 EDA 技术来看,其发展趋势是政府重视,使用普及,应用文泛,工具 多样,软件功能强大. 中国 EDA 市场已渐趋成熟,不过大部分设计工程师面向的是 PC 主板和小型 ASIC 领域,仅有小部分(约 11%)的设计人员工发复杂的片上系统器件.为了 与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一 些最新的 EDA 技术. 在信息通信领域,要优先发展高速宽带信息网,深亚微米集成电路,新型元 器件,计算机及软件技术,第三代移动通信技术,信息管理,信息安全技术, 积极开拓以数字技术,网络技术为基础的新一代信息产品,发展新兴产业,培 育新的经济增长点. 要大力*圃煲敌畔⒒, 积极开展计算机辅助设计 (CAD) , 计算机辅助工程(CAE),计算机辅助工艺(CAPP),计算机机辅助制造(CAM), 产品数据管理(PDM),制造资源计划(MRPII)及企业资源管理(ERP)等.有 条件的企业可开展"网络制造",便于合作设计,合作制造,参与国内和国际 竞争.开展"数控化"工程和"数字化"工程.自动化仪表的技术发展趋势的 测试技术,控制技术与计算机技术,通信技术进一步融合,形成测量,控制, 通信与计算机(M3C)结构.在 ASIC 和 PLD 设计方面,向超高速,高密度,低 功耗,低电压方向发展.

第 2 页 共 23 页

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 (5) Up 按一下,跳到下一个设置区 按一下,所设置区的数字减 1 按一下,所设置区的数字加 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; end if; when 6 => if( k='0' and up='1')then secondL<= secondL +1; elsif( p='0' and down='1')then secondL<= secondL-1; end if; when others=>null; end case; end if;
第 7 页 共 23 页

此模块的主要功能是进行时钟初始时间的设置.

3,设定闹钟模块:
if clk'event and clk = '1' then d<=set; k<=up; p<=down; if time='1' 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 alarm_hourH<= alarm_hourH+1; elsif( p='0' and down='1')then alarm_hourH<= alarm_hourH-1; end if; when 2 => if( k='0' and up='1')then alarm_hourL<= alarm_hourL+1; elsif( p='0' and down='1')then alarm_hourL<= alarm_hourL-1; end if; when 3 => if(k='0' and up='1')then alarm_minuteH<= alarm_minuteH +1; elsif( p='0' and down='1')then alarm_minuteH<= alarm_minuteH -1; end if; when 4 => if( k='0' and up='1')then alarm_minuteL<= alarm_minuteL+1; elsif( p='0' and down='1')then alarm_minuteL<= alarm_minuteL-1; end if; when 5=> if(k='0' and up='1')then alarm_secondH<= alarm_secondH +1; elsif(p='0' and down='1')then alarm_secondH<=alarm_secondH-1; end if; when 6 => if( k='0' and up='1')then alarm_secondL<= alarm_secondL +1; elsif( p='0' and down='1')then
第 8 页 共 23 页

alarm_secondL<= alarm_secondL-1; end if; when others=>null; end case; end if;

此模块完成闹钟的设定.

4,显示模块设计
if (time='0') then ahourH<=hourH; ahourL<=hourL; aminuteH<=minuteH; aminuteL<=minuteL; asecondH<=secondH; asecondL<=secondL; elsif(time='1')then ahourH<=alarm_hourH; ahourL<= alarm_hourL; aminuteH<= alarm_minuteH; aminuteL<= alarm_minuteL; asecondH<= alarm_secondH; asecondL<= alarm_secondL; end if; case cnt is -- To display the time. when 0 => L<="000"; -- Enable the leftmost display. case ahourH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when others => null; end case; when 1 => L<="001"; -- Enable the second display. case ahourL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8
第 9 页 共 23 页

when 9 => dled<=X"F6";--9 when others => null; end case; when 2 => L<="010"; -- Enable the third display. dled<=X"01"; -- Blanked. when 3 => L<="011"; -- Enable the fourth display. case aminuteH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; when 4 => L<="100"; -- Enable the fifth display. case aminuteL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; when 5 => L<="101"; -- Enable the sixth display. dled<=X"01"; -- Blanked. when 6 => L<="110"; -- Enable the seventh display. case asecondH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; when 7 => L<="111"; -- Enable the rightmost display case asecondL is when 0 => dled<=X"FC";--0
第 10 页 共 23 页

when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; end case; 此模块实现数字钟的显示及闹钟设定时的显示.

5,蜂鸣器模块设计
if ((hourH = alarm_hourH) and (hourL= alarm_hourL) and (minuteH = alarm_minuteH) and (minuteL = alarm_minuteL)) or ((minuteH=0)and(minuteL=0) )then sound<='1'; end if; if (naozhong='1')then sound<='0'; end if;

此模块实现闹钟蜂鸣以及整点蜂鸣报时.

第 11 页 共 23 页

四,设计的仿真和运行结果
(1)将 time 键置于'0' ,输入 clk 信号,可以得到时钟输出波形为:

此时时钟自动计时, 并且将计时数据传送至显示管显示. 如上图 asecond=second; (2)将 time 键置于'0' ,输入 clk 信号,并将 set 改为 20 分频信号,up 与 down 信号交叉为 1,得到时钟输出波形为:

如图所示此时时间不是正常变化, 因为有手动设置进行 up (+1) 操作和 down (-1) 操作,并且将时间由数码管显示. (3)将 time 键置于'1' ,则显示闹钟初始调节状态:
第 12 页 共 23 页

此时 secondl,secondH,minuteL,minuteH,hourL,hourH 不受影响,均自动计时,但 是并不由数码管进行显示,此时显示的是闹钟初定时间,这时均为 0.由于 set 变化,stat 顺序发生变化. (4)将 time 置于'1' ,并可以改变 set 键进行数码管选择,并用 up(+1)操作 和 down(-1)操作,进行闹钟的初步设定.

第 13 页 共 23 页

五 课程设计的心得体会

EDA 的课程设计持续了两周,但我却觉得仿佛还是当日,真是挥指之间, 时光已匆匆流逝.在这整整两个星期的日子里,我感受到了既是成功做出一个模 块的欢喜,也是修改那无限 errors 时的忧愁,可以说是无数次的苦尽甘来,换来 了最后的成功. 本身我就对动手的实验相当有兴趣,这次能够拥有两周的课程设计时间, 我甚是欣慰.从第一天开始知道我的多功能时钟课题开始,我就第一时间跑去图 书馆借资料,回去反复研究,从看懂程序开始入手.虽然开始有些棘手,但我觉 得特别的兴奋,我不把困难当成拦路虎,反而成为我前进的动力,遇到困难不会 就翻书,找不到就问同学,再不行就上网搜,实在不行再问老师,总之想尽一切 办法找到解决方案.可是事与愿违,我的设计总是出那么一点点的小问题,有时 候编译只出现 1 个 error ,但一改就成了 20 个 errors 了,真是让人哭笑不得,望 天兴叹呀! 经过两三天的基础训练,我终于能够完整的看懂程序.首先我将老师给我 们基本的时钟程序进行编译,封锁引脚,然后在硬件上得到正确的数码管显示. 通过这个最基本的操作,我将大体流程映入脑海,可以举一反三,再困难的程序 也不怕. 整点报时自然是最简单的,我首先就加到程序内部,其次我在网上找到了 闹钟程序,因为跟要求差距过大,所以我先读懂程序,然后根据自己理解,一步 步的加进初始的时钟程序.这个看似很简单的过程,却整整费了 4 天的时间,期 间错误百出.我先是运用了多个 process,进行模块化的处理,通过这里面出现 的问题我才知道敏感参数列表是不能乱设置的,single 是全局变量,而 variable 只能在一个 process 中使用等等.后来慢慢理解了其中的原委,发现我的程序竟 如此之长,我决定要大量的删减,于是我又把多个 process 改成了一个,看似好 像我是又回到了出发点,但我觉得这绝对是一次质的飞跃,是我能够依照我的想 法自由变换程序的映照.当我自认为要成功的时候,我却遇到了一个相当棘手的 问题,此时 error 显示 unkown problem internal error:"widthe mismatch in relation opreator"in ebuildbinaryop an line 1347 of file,虽然只有一个问题,但这个问题却
第 14 页 共 23 页

无法定位,以至于我找了很久都没找到.那几天我心里很压抑,明明对的程序, 为什么就出现这样的问题,让我真的很头疼,差点绝望放弃.直至周二,我决定 从新回到起点,再写一次,一个模块一个模块往里加.终于在我不倦的努力下, 我找出了错误的语句,并用其他语句替换了它,然后轻松地加入比较简单的校时 模块,蜂鸣模块.终于在周四之前将程序顺利的完成,本想再将秒表加进来,但 看到程序比较繁琐,就此作罢.看到最后程序的各个模块正确的运行,心情真是 无法言语…
通过这次独立的课程设计,我学到了很多书本上学不到的东西,尤其是在改正错误的 时候,我能更加深入的了解 VHDL 语言的精妙之处.比如同一个 process 下不能使用不同信 号进行 event 跳变,single 与 variable 之间的差别等等等等.通过这一次一次的亲身体验,我 仿佛发生了一次洗礼,经过了一个质的飞跃.现在的我已经基本能看懂 VHDL 程序,改正 其中出现的错误.

参考书目:
[1] 阎石 主编, 《数字电子技术基础》 ,高等教育出版社,1998 [2] 谭会生等主编, 《EDA 技术及应用》 ,西安电子科技大学出版社,2001 [3] 廖裕评等主编, 《CPLD 数字电路设计——使用 MAX+plusⅡ入门篇》 ,清华大 学出版社,2001 [4] 冯涛等主编, 《可编程逻辑器件开发技术:MAX+plusⅡ入门与提高》 ,人民邮 电出版社,2002

附录:即为全部的程序和仿真图.打印时已经省略,望见谅.

第 15 页 共 23 页

第 16 页 共 23 页


相关推荐

最新更新

猜你喜欢