欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    电子系统课程设计基于EDA技术的数字时钟设计.doc

    • 资源ID:4150143       资源大小:394KB        全文页数:20页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    电子系统课程设计基于EDA技术的数字时钟设计.doc

    电子系统课程设计任务书设计题目:基于EDA技术的数字时钟设计设计目的:课程设计是一种复杂的学习实践过程。设计过程采用系统设计的方法,先分析任务,得到系统设计的要求,然后进行总体设计,划分子系统模块,然后进行详细设计,编写各个功能子系统VHDL代码并进行功能仿真,最后进行整个系统总装并仿真。设计内容:设计一个采用0.5英寸LED数码管显示的数字时钟系统,工作电源5V,它采用24小时制,具有“时”、“分”、“秒”显示,并且可以校正时间显示。设计要求:1. 由石英晶体多谐振荡器20MHz和分频器产生1Hz标准秒脉冲;(说明:EDA试验箱中晶振频率20MHz,经试验箱内一系列二分频可将频率降低,但无法直接产生1Hz信号,需要大家根据实际情况编制分频器得到1Hz信号);2. 秒电路、分电路均为60进制计数,时电路为24进制计数;3. 数码管采用动态扫描方式;4. 能动手校时,校时模块功能可以自由发挥。比如可用两个按钮实现校时,A按钮控制调整项目,B按钮调整数字,B按钮还可以根据按下时间长短实现慢调、快调功能。也可以用三个按钮实现增减两个方向的手动校时。校时用按钮开关不能超过4个;5. 扩展内容:1)进入校时状态后,被调整数字以2Hz闪烁; 2)24/12小时可调,处于12小时制时,要有AM/PM显示; 3)所有开关加入防抖设计; 4)加入检测外部环境亮度功能,夜间自动降低数码管显示亮度; 5)加入整点报时电路; 6)增加秒表功能; 7)增加报闹功能。6.以上电路功能除外部环境亮度检测电路外均由VHDL代码实现层次式设计,顶层电路可以采用EDA电路图。设计成果:1. 课程设计说明书,要求内容完整,图表完备,条理清楚,字迹工整,程序完整有相应的注解,仿真波形设计合理有必要的分析,引用资料要注明出处。2. 顶层电路原理图,各层电路VHDL代码及仿真波形。设计说明书目录一、前言二、任务分析和方案设计三、外部输入输出要求四、内部各功能模块 1)分频模块2) 秒计数模块SECOND3) 分计数模块MINUTE 4)时计数模块HOUR 5)整点报时功能模块ALERT 6)扫描模块SELTIME 7)译码显示功能模块DISPLAY 8)按键防抖模块KEY五、系统顶层设计图六、各模块块程序七、心得体会参考文献基于EDA技术的数字时钟设计一前言 EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。二任务分析和方案设计根据设计内容与要求知,本系统由分频模块(20MHz变为1Hz)、秒计数模块(六十进制)、分计数模块(六十进制)、时计数模块(二十四进制)、时间数据扫描分时选择模块和8421BCD到7段码的译码模块,再加上一个整点报时模块和按键防抖模块作为发挥部分。设计框图三、外部输入输出要求1.输入接口 代表清零,调时,调分信号RESET、SETHOUR、SETMIN的引脚分别接高电平、KEY1、KEY2;代表计数时钟信号CLK和扫描时钟信号CLKDSP的引脚分别同HZ时钟源和200HZ(或更高)时钟源相连。.输出接口代表扫描显示驱动信号SEL2.0连到SEL2、SEL1、SEL0端,段码信号输出abcdefg连接到7段数码管的段码插口abcdefg端,小数点DP输出端同7段数码管的段码插口DP相连;代表扬声器驱动信号的引脚SPEAKER同扬声器驱动接口SPEAKER相连;代表花样LED灯显示的信号引脚LAMP2.0同3个LED灯相连。四、内部各功能模块:1) FREQ分频模块: 整点报时用的200Hz与时钟用的1Hz的脉冲信号,这里的输入信号是20MHz信号,所以要设计两个分频器,将20MHz变为1Hz、200Hz。程序见后面。例图为1000分频,输入为5MHz,输出为5KHz.2)秒计数模块SECOND:60进制,带有进位和清零功能的,输入为1Hz脉冲和高电平有效的清零信号RESET。程序见后面。3)分计数模块MINUTE60进制,带有进位和置数功能的,输入为1Hz脉冲和高电平有效的使能信号EN。程序见后面。4)时计数模块HOUR:24进制,输入为1Hz脉冲和高电平有效的使能信号EN。程序见后面。5)整点报时功能模块ALERT:输入为分秒信号,输出为SPEAK信号。程序见后面。6)扫描模块SELTIME:输入为秒、分、时、扫描时钟CLK1,输出为DP和显示控制信号SEL。程序见后面。7)译码显示功能模块DISPLAY:输入为NUM,输出为LED。程序见后面。 8)按键防抖模块KEY 输入为按键信号和20MHz的时钟信号,输出为CK信号。程序见后面。五、系统顶层设计图六、各模块程序1.分频器a(20MHZ分成1HZ)程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq1 isport(clk:in std_logic;freout:out std_logic);end freq1;architecture behave of freq1 issignal full:std_logic;begin p1:process(clk) variable cqi:std_logic_vector(23 downto 0); begin if clk'event and clk='1' then if cqi<9999999 then cqi:=cqi+1; else cqi:=(others=>'0'); end if; end if; if cqi=9999999 then full<='1' else full<='0' end if; end process; p2:process(full)variable cnt1:std_logic;begin if full'event and full='1' then cnt1:=not cnt1; if cnt1='1' then freout<='1' else freout<='0' end if; end if; end process;end behave;2.分频器b(20MHz分为200Hz)程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq2 isport(clk:in std_logic;freout:out std_logic);end freq2;architecture fun of freq2 isbegin p1:process(clk) variable cq:std_logic_vector(17 downto 0); begin if clk'event and clk='1' then if cq<99999 then cq:=cq+1; else cq:=(others=>'0'); end if; end if; if cq=99999 then freout<='1' else freout<='0' end if; end process;end fun;由上面程序原理可得1000分频的波形图3.秒计数器LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY second IS PORT( clk,reset,setmin:IN STD_LOGIC; enmin:OUT STD_LOGIC; daout:out std_logic_vector(6 downto 0);END entity second;ARCHITECTURE fun OF second IS SIGNAL count:STD_LOGIC_VECTOR(6 downto 0); SIGNAL enmin_1,enmin_2:STD_LOGIC; enmin-1为59秒时进位信号 BEGIN enmin-2:由clk调制后的手动调分脉冲信号串 daout<=count; enmin_2<=(setmin and clk); setmin为手动分控制信号、高电平有效 enmin<=(enmin_1 or enmin_2); enmin为向分进位信号 PROCESS(clk,reset,setmin)begin if (reset='0') then count<="0000000" 若reset为0,则异步清零(即直接复0) elsif (clk'event and clk='1') then 否则,若clk上升沿到 if (count(3 downto 0)="1001") then 若个位计数值恰好到“1001” if(count<16#60#) then 又若count小于16#60#(即X“60” ;即60H,为十六进制数写法) if (count="1011001") then 又若count已到59D enmin_1<='1'count<="0000000"则置进位为1及count复0 else 若count未到59D count<=count+7; 则加7,而+7=+1+6,即作“加6校正”,使前面16#60#的 end if; 个位转变为8421BCD的容量,即个位的最大值只能是1001了(注) else 若count不小于16#60#,(即count等于或大于16#60#) count<="0000000" 则count复0(有此句,则对无效状态电路可自启动) end if; end if(count<16#60#) elsif (count<16#60#) then 若个位计数未达到“1001”则转到此句再判:否则若count<16#60# count<=count+1; 则count加1 enmin_1<='0' after 100 ns; 没有进位发生 else 否则,若count不小于16#60#(即count等于或大于16#60#) count<="0000000" 则count复0(有此句,则对无效状态电路可自启动) end if; end if(count(3 downto 0)=”1001”) end if; end if(reset=0) end process; END fun; 仿真波形图如下:4.分计数器LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY minute IS PORT( clk,clk1,reset,sethour:IN STD_LOGIC; enhour: OUT STD_LOGIC; daout:out std_logic_vector(6 downto 0);END entity minute;ARCHITECTURE fun OF minute IS SIGNAL count:STD_LOGIC_VECTOR(6 downto 0); SIGNAL enhour_1,enhour_2:STD_LOGIC;BEGIN daout<=count; enhour_2<=(sethour and clk1); enhour<=(enhour_1 or enhour_2);process(clk,reset,sethour) begin if(reset='0')then count<="0000000" elsif(clk'event and clk='1')then if(count(3 downto 0)="1001")then if(count<16#60#)then if(count="1011001")then enhour_1<='1' count<="0000000" ELSE count<=count+7; end if; else count<="0000000" end if; elsif(count<16#60#)then count<=count+1; enhour_1<='0' after 100 ns; else count<="0000000" end if; end if; end process;END fun;仿真波形如下图;5.小时文本LIBRARY ieee;use ieee .std_logic_1164.all;use ieee .std_logic_unsigned.all;ENTITY hour IS PORT( clk,reset:IN STD_LOGIC; daout:out std_logic_vector(5 downto 0);END entity hour;ARCHITECTURE fun OF hour IS SIGNAL count:STD_LOGIC_VECTOR(5 downto 0);BEGIN daout<=count; process(clk,reset) begin if(reset='0')then count<="000000" elsif(clk'event and clk='1')then if(count(3 downto 0)="1001")then if(count<16#23#)then count<=count+7; else count<="000000" end if; elsif(count<16#23#)then count<=count+1; else count<="000000" end if; end if; end process;END fun; 仿真波形如下图: 6.报警文本LIBRARY ieee;use ieee .std_logic_1164.all;use ieee .std_logic_unsigned.all;ENTITY alert IS PORT( clk:IN STD_LOGIC; dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0); speak:OUT STD_LOGIC; lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END alert;ARCHITECTURE fun OF alert IS signal count:std_logic_vector(1 downto 0); signal count1:std_logic_vector(1 downto 0);BEGINspeaker:process(clk) begin speak<=count(1); if(clk'event and clk='1')then if(dain="0000000")then if(count1>="10")then count1<="00" -count1为三进制加法计数器 else count1<=count1+1; end if; end if; end if; end process speaker;lamper:process(clk) begin if(rising_edge(clk)then if(count<="10")then if(count="00")then lamp<="001" 循环点亮3只LED灯 elsif(count="01")then lamp<="010" elsif(count="10")then lamp<="100" end if; count<=count+1; else count<="00" end if; end if; end process lamper;END fun;7.时间数据扫描分时选择模块文本LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY seltime IS PORT( clk1,reset:IN STD_LOGIC; sec,min: IN STD_LOGIC_VECTOR(6 downto 0); hour:in std_logic_vector(5 downto 0); daout:OUT STD_LOGIC_vector(3 downto 0); dp:OUT STD_LOGIC; sel:out std_logic_vector(2 downto 0);END seltime;ARCHITECTURE fun OF seltime IS SIGNAL count:STD_LOGIC_vector(2 downto 0);BEGIN sel<=count; process(clk1,reset) begin if(reset='0')then count<="000" elsif(clk1'event and clk1='1')then if(count>="101")then count<="000" else count<=count+1; end if; end if;case count iswhen"000"=>daout<=sec(3 downto 0);dp<='0' 送出秒个位,秒个位的dp不点亮when"001"=>daout(3)<='0' daout(2 downto 0)<=sec(6 downto 4); 送出秒十位 dp<='0' 秒十位的dp不点亮when"010"=>daout<=min(3 downto 0);dp<='1' 送出分个位,分个位的dp点亮when"011"=>daout(3)<='0' daout(2 downto 0)<=min(6 downto 4); 送出分十位 dp<='0' 分十位的dp不点亮when"100"=>daout<=hour(3 downto 0);dp<='1' 送出小时个位,小时个位的dp点亮when others=>daout(3 downto 2)<="00" 送出小时十位daout(1 downto 0)<=hour(5 downto 4);dp<='0' 小时十位的dp不点亮end case;end processend fun;8.译码器文本LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY deled IS PORT(num: IN std_logic_vector(3 downto 0); led: OUT std_logic_vector(6 downto 0);END deled;ARCHITECTURE fun OF deled ISBEGIN-abcdefgled<="1111110" when num="0000" else 7段管显示0,led6.0=7EH "0110000" when num="0001" else 7段管显示1,led6.0=30H "1101101" when num="0010" else 7段管显示2,led6.0=6DH "1111001" when num="0011" else 7段管显示3,led6.0=79H "0110011" when num="0100" else 7段管显示4,led6.0=33H "1011011" when num="0101" else 7段管显示5,led6.0=5BH "1011111" when num="0110" else 7段管显示6,led6.0=5FH "1110000" when num="0111" else 7段管显示7,led6.0=70H "1111111" when num="1000" else 7段管显示8,led6.0=7FH "1111011" when num="1001" else 7段管显示9,led6.0=7BH "1110111" when num="1010" else 7段管显示A,led6.0=77H "0011111" when num="1011" else 7段管显示b,led6.0=1FH "1001110" when num="1100" else 7段管显示C,led6.0=4EH "0111101" when num="1101" else 7段管显示d,led6.0=3DH "1001111" when num="1110" else 7段管显示E,led6.0=4FH "1000111" when num="1111" ; 7段管显示F,led6.0=47HEND fun;9.按键A、B防抖程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key isport(clk1,key1: in std_logic; ck1:out std_logic);end entity key;architecture fun of key is signal tmp1:std_logic_vector(9 downto 0);beginprocess(clk1) begin if rising_edge(clk1) then tmp1(0)<=key1;tmp1(9 downto 1)<=tmp1(8 downto 0); if tmp1="1111111111" then ck1<='1'else ck1<='0' end if ; end if;end process;end fun;仿真波形为:七、心得体会论文的撰写过程是对所学的电子技术基本理论知识的综合运用,对三年专业知识的一次综合应用、扩充和深化,也是对我们理论运用于实际设计的一次锻炼。通过毕业论文的撰写过程,我不仅温习了以前在课堂上学习的专业知识,同时我也得到了老师和同学的帮助,学习和体会到了电子技术的基本技能和思想。从开始接到论文题目到电路图的设计,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战。在这段时间里,我学到了很多知识也有很多感受。当然在做的过程中也遇到过很多的麻烦,一些没有接触过的元件,它们的封装需要自己去书籍、网上搜索,在更新的时候会有一些错误,自己很难改正,只得求助老师,最后得以解决。这次毕业设计使我开始了自主的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次的成功都会让我兴奋好一段时间。此次设计过程中,各种系统的适用条件,各种程序的选用标准,各种元件的安装方式,我都是随着设计的不断深入而不断熟悉并学会应用的。和老师的沟通交流更使我对设计有了新的认识也对自己提出了新的要求。课题设计过程中我不怕失败,在失败中总结经验,为成功积累素材;学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。设计中有太多的不懂和陌生,但是我会多看、多想、多问、多学,认真的对待每一次老师交代的任务,每一个任务都是一个锻炼的机会和成长的过程,我在规定的时间尽善尽美的完成,把自己的能力发挥到最大限度。这些本是我工作后才会意识到的问题,通过这次毕业设计让我提前了解了这些知识,这是很珍贵的。这个课题设计的过程让我学习、工作的思路有了更为明朗的认识:它是站在一定高度上去工作的,眼界要放宽,思路要开阔,内容要饱满。我曾经也做过不少课程设计,但都是局限在课本中,而这次实验设计,能够让我走出来,仿佛推开门看见外面的世界是如此之大,如同井底之蛙跳上井沿过程中要有很好的团结合作意识和责任感,积极的参与到实验设计的讨论中去,学习和听取别人的意见,我也主动的发表意见,用一个积极上进、激情乐观的态度面对每一天的实验设计生活,让我的学习生活丰富多彩。非常感谢学院能给我们提供这样的一个可以自己动脑、动手进行设计的机会,同时也大大加强了同学之间的沟通,以及学生与老师之间的交流,这是一个放飞自我的平台,也是我们理想与实际结合的升华,我想学院给我们提供的这些,教会我们的这些不仅仅在现在有用,对于我们今后步入社会也是同样有用的。目前我已经在一家公司实习了,我明显感到在社会上更加需要团体合作,以及自身的严谨作风。我在工作中不怕失败,在失败中总结经验,为成功积累素材;学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。这次做论文的经历也会使我终身受益,我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。希望这次的经历能让我在以后工作中激励我继续进步。离开学校完成论文,是一个终点,又是另外一个起点!喝水不忘挖井人,我将铭记大家对我的帮助,以后更好的为人民为社会服务!在这个竞争激烈、物欲浮躁的社会,怀着一颗认真、平和的心,踏实的走好每一步,我相信我的未来就一定不是梦,也坚信这次课程设计将成为我一辈子的财富,其所折射出的光芒将照亮我的前程,成为我人生中的一道亮丽风景。参考文献1姜雪松,吴钰淳,王鹰1VHDL 设计实例与仿真M 1北京:机械工业出版社, 2007.1。2Stefan Sjohp lm,LennartL indh1VHDL设计电子线路M1边计年,薛宏熙,译1北京:清华大学出版社, 20001。3. 李国洪,沈明山.可编程器件EDA 技术与实践M.北京:机械工业出版社,20044.周红,刘光蓉,张红武. 利用MAX+ plus 进行数字逻辑课程设计J . 武汉工业学院学报,2004.4。

    注意事项

    本文(电子系统课程设计基于EDA技术的数字时钟设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开