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

    EDA课程设计多功能数字时钟.doc

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

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

    EDA课程设计多功能数字时钟.doc

    苏州科技学院天平学院EDA电子综合设计院 系: 天平学院 专 业: 物联网 班 级: 学 号: 姓 名: 第一部分:设计说明1.1设计任务设计一款数字电子时钟,具体要求如下:1:输入条件:50MHz时钟,2个输入按键;2:功能实现:具有显示时、分、秒功能;采用LED数码管显示;具有闹钟与对时功能,对时精确到分,闹钟设置与对时采用按键作为输入信号。3:采用altera公司的quartusII软件进行编程与仿真,设计语言可以选择VerilogHDL或VHDL。1.2目的与意义随着半导体技巧、集成技巧和盘算机技巧的迅猛发展,电子系统的设计方法和设计手段都产生了很大的变更。可以说电子EDA技巧是电子设计领域的一场革命。传统的“固定功效集成块十连线”的设计方法正逐步地退出历史舞台,而基于芯片的设计方法正成为现代电子系统设计的主流。作为高级院校有关专业的学生和宽大的电子工程师懂得和攀握这一先进技巧是势在必行,这不仅是进步设计效率的需要,更是时代发展的需求,只有攀握了EDA技巧才有能力参和世界电子工业市场的竞争,才干生存和发展。随着科技的进步,电子产品的更新日新月异,EDA技巧作为电子产品开发研制的源动力,已成为现代电子设计的核心。所以发展EDA技巧将是电子设计领域和电子产业界的一场重大的技巧革命,同时也对电课程的教学和科研提出了更深更高的请求。非凡是EDA技巧在我国尚未普及,把握和普及这一全新的技巧,将对我国电子技巧的发展具有深远的意义。 通过综合设计,力争掌握使用EDA工具设计数字系统电路的基本方法,包括原理方案的确定、详细设计中的编程与仿真等一系列过程,为以后进行工程实践问题的研究打下设计基础。第二部分 原理方案设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示。能够利用按键实现“较时”、“较分”功能,随时对数码管的显示进行校正和校对。数字中系统主要由系统时钟,三个功能按键(mode,turn,change),FPGA,数码管和蜂鸣器部分组成。分频模块计时模块闹钟模块显示模块控制模块蜂鸣器图1多功能数字时钟整体模块图2.1分频模块方案设计分频模块用于为系统的实现提供稳定的工作频率和计时信号源,产生分频为1HZ频率的信号作为计时模块的信号源。分频算法设计:定义变量并根据需要得到的分频信号设定计数值,对该变量进行加或减计数,每到达一次计数值点,将该变量清零或重置,并且对输出信号取一次反,即可以得到所需的分频信号。在这里使用任意分频计数器。定义变量并且设定一个上限值,每次加计数到该上限值时,输出该计数值的最高位。2.2显示模块计时模块是对1s的信号源进行秒计时,计时满后向上进位的设计思想。译码显示模块采用的是数码管的动态扫描方式。2.3控制模块设置三个按键,一个作为功能控制信号,按键每次加一,加到三在归零。为0:计时功能; 为1:闹铃功能; 为2:手动校对功能。 一个按键选择是调整时间,还是分钟,若长时间按住该键,可使秒信号清零,用于精确调时。 一个按键用于手动调整,每按一次,计数器加1,如果长按,则连续快速加1;用于快速调时和定时。第三部分 详细设计过程图2 顶层模块3.1分频模块3.1.1模块功能描述该模块为任意分频计数器,在这里使用了两个分频模块,分别输出1Hz和500hz的时钟信号。功能:对输入时钟clock进行F_DIV倍分频后输出clk_out。其中F_DIV为分频系数,分频系数范围为12n (n=F_DIV_WIDTH)若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。若分频系数为偶数,则输出时钟占空比为50%;若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分频系数(当输入为50%时,输出也是50%)。3.1.2模块设计思想定义变量为分频系数,若位偶数,则产生分频系数的一半个时钟周期为高电平,分频系数的一半个时钟周期为低电平;若为奇数,则相应地偏移一个。3.1.3设计关键知识点若分频系数为偶数,则输出时钟占空比为50%;若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分频系数(当输入为50%时,输出也是50%)。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;entity fenpin is port(clk50MHz:in std_logic; clk1Hz,clk500Hz:out std_logic );end fenpin ; architecture cml of fenpin is begin process (clk50MHz) variable count1: integer range 0 to 25000000; variable q1: std_logic; begin if clk50MHz' event and clk50MHz='1' then if count1=25000000 thenq1:=not q1; count1:=0; else count1:=count1+1; end if; end if; clk1Hz<=q1; end process; process(clk50MHz) variable count500: integer range 0 to 50000; variable q500: std_logic; begin if clk50MHz' event and clk50MHz='1' then if count512=50000 then q500:=not q500; count500:=0; else count500:=count500+1; end if; end if; clk500Hz<=q500; end process;end cml;3.2显示模块3.2.1模块功能描述该模块设计为时钟显示模块,一共8个共阳极数码管,显示格式为XX.XX.XX。3.2.2模块设计思想整个时钟的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为023时。由于分钟和秒钟显示的范围都是从059,可以用一个4位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位;对于小时因为他的范围是从023,同样可以用一个4位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。3.2.3设计关键知识点由于动态扫描,需要一个频率较高的时钟信号用于刷新显示。送入显示的数高低4位分离开来,分别用于显示十位和个位。图5 显示模块xianshi library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xianshi isport(clk:in std_logic; h0,h1,min0,min1,sec0,sec1:in std_logic_vector(3 downto 0 ); daout:out std_logic_vector(6 downto 0 ); sel:out std_logic_vector(5 downto 0 ) );end xianshi;architecture cml of xianshi is signal data:std_logic_vector(3 downto 0 ); signal order:std_logic_vector(2 downto 0 ):="000" begin process(clk) begin if clk' event and clk='1' then case order is when "000"=>data<=h1;sel<="011111" when "001"=>data<=h0;sel<="101111" when "010"=>data<=min1;sel<="110111" when "011"=>data<=min0;sel<="111011" when "100"=>data<=sec1;sel<="111101" when "101"=>data<=sec0;sel<="111110" when others=>data<="1000"sel<="111111" end case;if order="101" then order<="000"else order<=order+1;end if; end if; end process ; process(data) begincase data is when "0000" =>daout <= "0000001" when "0001" =>daout <= "1001111" when "0010" =>daout <= "0010010" when "0011" =>daout <= "0000110" when "0100" =>daout <= "1001100" when "0101" =>daout <= "0100100" when "0110" =>daout <= "0100000" when "0111" =>daout <= "0001111" when "1000" =>daout <= "0000000" when "1001" =>daout <= "0000100"when others =>daout <= "1111111"end case; end process ; end cml;3.3时钟控制模块3.3.1模块设计功能该模块设计为多功能数字钟的控制模块。 各信号引脚功能定义为:mode:功能控制信号;为0:计时功能; 为1:闹铃功能; 为2:手动校对功能; turn:在手动校对时,选择是调整时间,还是分钟,若长时间按住该键,可使秒信号清零,用于精确调时; change:手动调整时,每按一次,计数器加1,如果长按,则连续快速加1;用于快速调时和定时;hour,min,sec:时,分,秒显示信号; alert:扬声器驱动信号;用于产生闹铃音和报时音;闹铃音为持续20秒的急促的“嘀嘀嘀”音 ,若按住“change”键,可屏蔽该闹铃音;整点报时音为“嘀嘀嘀嘀嘟”四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能; LD_hour:接发光二极管,指示当前调整的是小时信号; LD_min: 接发光二极管,指示当前调整的是分钟信号。3.3.2模块设计思想mode按键每触发一次,定义一个变量m自加,从0加到2;加满2,重新置为0。用case语句产生3种模式。图6 时钟模块 ALERTlibrary ieee;use ieee.std_logic_1164.all;entity ALERT isport(h1,h0,m1,m0,s1,s0:in std_logic_vector(3 downto 0); clk:in std_logic; q500:out std_logic);end ALERT;architecture sss_arc of ALERT is begin process(clk) begin if clk'event and clk='1' then if h1="0001" and h0="0110" and m1="0101" and m0="1001" and s1="0101" then if s0="0001" or s0="0011" or s0="0101" or s0="0111" then q500<='1' else q500<='0' end if; end if;end if;end process;end sss_arc;3.4校时闪烁电路3.4.1模块设计功能如果正在进行校时,flashjiaoshi将实现使当前正在校时项(小时或分钟)以1Hz的频率闪烁,以便于操知道正在被校正.3.4.2模块设计思想3.5时计数器 分计数器 秒计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(en,clk:in std_logic; h0,h1:buffer std_logic_vector(3 downto 0 ) );end hour;architecture cml of hour is beginprocess(en,clk,h0,h1) begin if en='0' then h0<="0000" h1<="0000" elsif clk'event and clk='1' then if h0="0011" and h1="0010" then h0<="0000" h1<="0000" elsif h0="1001" then h0<="0000" h1<=h1+1; else h0<=h0+1; end if; end if; end process ; end cml;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mine isport(en,clk:in std_logic; co:out std_logic; min0,min1:buffer std_logic_vector(3 downto 0 ) );end mine;architecture cml of mine issignal min0_t,min1_t:std_logic_vector(3 downto 0 ); beginprocess(en,clk,min0,min1) begin if en='0' then min0<="0000" min1<="0000" elsif clk'event and clk='1' then if min0="1001" and min1="0101" then min0<="0000" min1<="0000" co<='1' elsif min0="1001" then min1<=min1+1; min0<="0000" else min0<=min0+1; co<='0' end if; end if; end process ; end cml; library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport(clr,clk:in std_logic; co:out std_logic; sec0,sec1:buffer std_logic_vector(3 downto 0 ) );end second;architecture cml of second issignal sec0_t,sec1_t:std_logic_vector(3 downto 0 ); beginprocess(clr,clk,sec0,sec1) begin if clr='0' then sec0<="0000" sec1<="0000" co<='0' elsif clk'event and clk='1' then if sec0="1001" and sec1="0101" then sec0<="0000" sec1<="0000" co<='1' elsif sec0="1001" then sec1<=sec1+1; sec0<="0000" else sec0<=sec0+1; co<='0' end if; end if; end process ; end cml;第四部分 功能仿真4.1分频仿真波形由于50MHz分频为4Hz分频系数太大,这里以50分频为例。图7 50分频示例在clk_out的半个周期内,clk出现了25个周期,50分频是正确的。4.2计时仿真 时计数 分计数 秒计数 图8 时间 计数4.3闹钟仿真图9 闹钟仿真波形设定闹铃时间为22:22,当时间到点时q500输出高电平,时间没到时q500输出低电平。显示模块仿真Sel循环选择数码管,daout输出相应的数据。 第五部分 总结 在学习的过程中,我深深体会到,学习不单单要将理论知识学扎实了,更重要的是实际动手操作能力,学完了课本知识,我并没有觉得自己有多大的提高,感觉学到的很没用,我们现在学到的还很少,只是编写一些简单的程序。相反的,每次做完实验之后,都会感觉自己收获不少,每次都会有问题。 或许在今后的工作中会用到这些编程,在这几次反复的操练中,铭记于心。多学一点,多认真一些,或许未来有所改变。

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开