EDA数字电子钟课程设计.doc_第1页
EDA数字电子钟课程设计.doc_第2页
EDA数字电子钟课程设计.doc_第3页
EDA数字电子钟课程设计.doc_第4页
EDA数字电子钟课程设计.doc_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一 绪论1 在信息产业中EDA产生的影响随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、航天、医学、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升;电子类的高新技术项目的开发也逾益依赖于EDA技术的应用。即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。2 中国国内EDA发展情况从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。 中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员工发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。 在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(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 按一下,所设置区的数字加14、带有闹钟功能;5、键盘的设定值要求在LED上显示。一 设计的总体方案流程图:本多功能数字时钟由三个模块组成:(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-数码管1Up-+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-数码管1Up-+1;down-1;二 设计的详细原理此多功能数字时钟是由多个模块组成,各个模块实现各自不同的作用,综合起来,便是多功能数字时钟。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个功能键,便可实现多功能数字时钟,拥有计时/校时功能,设定闹钟功能,整点报时功能。四 设计的步骤和过程1 计时模块:if clk_1kevent 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 clkevent and clk = 1 thend=set;k=up;p=downif time=0 thenif ( d=0 and set=1)then stat if(k=0 and up=1)then hourH=hourH+1; elsif( p=0 and down=1)then hourH if( k=0 and up=1)then hourL= hourL+1; elsif( p=0 and down=1)then hourL if(k=0 and up=1)then minuteH= minuteH +1; elsif( p=0 and down=1)then minuteH if( k=0 and up=1)then minuteL= minuteL+1; elsif( p=0 and down=1)then minuteL if(k=0 and up=1)then secondH= secondH +1; elsif(p=0 and down=1)then secondH if( k=0 and up=1)then secondL= secondL +1; elsif( p=0 and down=1)then secondLnull;end case;end if;此模块的主要功能是进行时钟初始时间的设置。3、设定闹钟模块: if clkevent and clk = 1 thend=set;k=up;p=down;if time=1 thenif ( d=0 and set=1)then stat if(k=0 and up=1)then alarm_hourH= alarm_hourH+1; elsif( p=0 and down=1)then alarm_hourH if( k=0 and up=1)then alarm_hourL= alarm_hourL+1; elsif( p=0 and down=1)then alarm_hourL if(k=0 and up=1)then alarm_minuteH= alarm_minuteH +1; elsif( p=0 and down=1)then alarm_minuteH if( k=0 and up=1)then alarm_minuteL= alarm_minuteL+1; elsif( p=0 and down=1)then alarm_minuteL if(k=0 and up=1)then alarm_secondH= alarm_secondH +1; elsif(p=0 and down=1)then alarm_secondH if( k=0 and up=1)then alarm_secondL= alarm_secondL +1; elsif( p=0 and down=1)then alarm_secondLnull;end case;end if;此模块完成闹钟的设定。4、显示模块设计if (time=0) thenahourH=hourH;ahourL=hourL;aminuteH=minuteH;aminuteL=minuteL;asecondH=secondH;asecondL=secondL;elsif(time=1)thenahourH=alarm_hourH;ahourL= alarm_hourL;aminuteH= alarm_minuteH;aminuteL= alarm_minuteL;asecondH= alarm_secondH;asecondL L dled dled dled null; end case; when 1 = L dled dled dled dled dled dled dled dled dled dled null; end case; when 2 = L=010; - Enable the third display. dled L dled dled dled dled dled dled null; end case; when 4 = L dled dled dled dled dled dled dled dled dled dled null; end case; when 5 = L=101; - Enable the sixth display. dled L dled dled dled dled dled dled null; end case; when 7 = L dled dled dled dled dled dled dled dled dled dled null; end case; end case;此模块实现数字钟的显示及闹钟设定时的显示。五、蜂鸣器模块设计 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)thensound=0; end if;此模块实现闹钟蜂鸣以及整点蜂鸣报时。四、设计的仿真和运行结果(1)将time键置于0,输入clk信号,可以得到时钟输出波形为:此时时钟自动计时,并且将计时数据传送至显示管显示。如上图asecond=second;(2)将time键置于0,输入clk信号,并将set改为20分频信号,up与down信号交叉为1,得到时钟输出波形为:如图所示此时时间不是正常变化,因为有手动设置进行up(+1)操作和down(-1)操作,并且将时间由数码管显示。(3)将time键置于1,则显示闹钟初始调节状态:此时secondl,secondH,minuteL,minuteH,hourL,hourH不受影响,均自动计时,但是并不由数码管进行显示,此时显示的是闹钟初定时间,这时均为0。由于set变化,stat 顺序发生变化。(4)将time置于1,并可以改变set键进行数码管选择,并用up(+1)操作和down(-1)操作,进行闹钟的初步设定。 此时可以得到时钟的初步设定。(5)外部硬件的链接方法如图(6)时钟显示如下图时钟图如上闹钟初定时间如上图五 课程设计的心得体会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,虽然只有一个问题,但这个问题却无法定位,以至于我找了很久都没找到。那几天我心里很压抑,明明对的程序,为什么就出现这样的问题,让我真的很头疼,差点绝望放弃。直至周二,我决定从新回到起点,再写一次,一个模块一个模块往里加。终于在我不倦的努力下,我找出了错误的语句,并用其他语句替换了它,然后轻松地加入比较简单的校时模块、蜂鸣模块。终于在周四之前将程序顺利的完成,本想再将秒表加进来,但看到程序比较繁琐,就此作罢。看到最后程序的各个模块正确的运行,心情真是无法言语通过这次独立的课程设计,我学到了很多书本上学不到的东西,尤其是在改正错误的时候,我能更加深入的了解VHDL语言的精妙之处。比如同一个process下不能使用不同信号进行event跳变,single与variable之间的差别等等等等。通过这一次一次的亲身体验,我仿佛发生了一次洗礼,经过了一个质的飞跃。现在的我已经基本能看懂VHDL程序,改正其中出现的错误。 希望以后能多多进行这样的实习,让自己的能力越来越高。参考书目:1 阎石 主编,数字电子技术基础,高等教育出版社,19982 谭会生等主编,EDA技术及应用,西安电子科技大学出版社,20013 廖裕评等主编,CPLD数字电路设计使用MAX+plus入门篇,清华大学出版社,20014 冯涛等主编,可编程逻辑器件开发技术:MAX+plus入门与提高,人民邮电出版社,20025 杨崇志,特殊新型电子元件手册,辽宁科学技术出版社,19996 彭介华,电子技术课程设计指导高等教育出版社.2000年出版.7 Mark Zwolinski, Digital System Design with VHDL, 电子工业出版社,20028 Alan B. Marcovitz Introduction to logic Design, 电子工业出版社,2002附录1:总程序如下:library IEEE;use IEEE.std_logic_1164.all;entity timer isport(clk : in std_logic; - System clock input port(250KHz). naozhong:in std_logic; L : out std_logic_vector(2 downto 0); - 8 seven-segment displays selection ports. dled: out std_logic_vector(7 downto 0); - Digits display ports. time:in std_logic; sound: out std_logic; clk_1:in std_logic; clk_2:in std_logic; clk_3:in std_logic);end timer;architecture display of timer is signal cnt: integer range 0 to 7; - 8 seven-segment displays seletion counter. signal ct:integer range 0 to 250000 ; - 1 second generator counter. signal hourH,ahourH,alarm_hourH: integer range 0 to 2; signal minuteH,secondH,aminuteH,asecondH,alarm_minuteH,alarm_secondH: integer range 0 to 6; signal hourL,minuteL,secondL,ahourL,aminuteL,asecondL,alarm_hourL,alarm_minuteL,alarm_secondL: integer range 0 to 10;signal set : integer range 0 to 7;signal d,k,p: std_logic; begin process (clk) begin if clkevent and clk = 1 then sound=1; cnt=cnt+1; ct=ct+1; if ct=250000 then - 1 second ct=0; secondL=secondL+1; end if; if secondL=10 then - 10 seconds secondL=0; secondH=secondH+1; end if; if secondH=6 then - 60 seconds(1 minute) secondH=0; minuteL=minuteL+1; end if; if minuteL=10 then - 10 minutes minuteL=0; minuteH=minuteH+1; end if; if minuteH=6 then - 60 minutes(1 hour) minuteH=0; hourL=hourL+1; end if; if hourL=10 then - 10 hours hourL=0; hourH=hourH+1; end if; if hourH=2 and hourL =4 then - 24 hours hourH=0; hourL=0; end if; if (time=0) thenahourH=hourH;ahourL=hourL;aminuteH=minuteH;aminuteL=minuteL;asecondH=secondH;asecondL=secondL;elsif(time=1)thenahourH=alarm_hourH;ahourL= alarm_hourL;aminuteH= alarm_minuteH;aminuteL= alarm_minuteL;asecondH= alarm_secondH;asecondL L dled dled dled null; end case; when 1 = L dled dled dled dled dled dled dled dled dled dled null; end case; when 2 = L=010; - Enable the third display. dled L dled dled dled dled dled dled null; end case; when 4 = L dled dled dled dled dled dled dled dled dled dled null; end case; when 5 = L=101; - Enable the sixth display. dled L dled dled dled dled dled dled null; end case; when 7 = L dled dled dled dled dled dled dled dled dled dled null; end case; end case;d=clk_1;k=clk_2;p=clk_3;if time=1 thenif ( d=0 and clk_1=1)then set if(k=0 and clk_2=1)then alarm_hourH= alarm_hourH+1; elsif( p=0 and clk_3=1)then alarm_hourH if( k=0 and clk_2=1)then alarm_hourL= alarm_hourL+1; elsif( p=0 and clk_3=1)then alarm_hourL if(k=0 and clk_2=1)then alarm_minuteH= alarm_minuteH +1; elsif( p=0 and clk_3=1)then alarm_minuteH if( k=0 an

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论