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

    EDA课程设计基于VHDL语言的数字时钟设计.docx

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

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

    EDA课程设计基于VHDL语言的数字时钟设计.docx

    EDA课程设计基于VHDL语言的数字时钟设计一、设计要求 . 1 二、设计原理及框图 . 1 1、设计原理 . 1 2、结构框图 . 1 三、 设计过程 . 2 1、模块化设计 . 2 2、顶层文件生成 . 3 四、仿真调试过程 . 4 1、各模块时序仿真图 . 4 2、仿真过程中遇到的问题 . 5 五、设计体会及收获 . 5 一、设计要求 1、稳定的显示时、分、秒。 2、当电路发生走时误差时,要求电路有校时功能。 3、电路有整点报时功能。报时声响为四低一高,最后一响高音正好为整点。 二、设计原理及框图 1、设计原理 系统框图由六个模块组成,分别为:秒、分、时计数模块,整点报时模块,LED动态显示扫描模块,调时控制模块组成。其工作原理是:基准脉冲输入信号同时加到秒、分、时、分隔符的脉冲输入端,采用并行计数的方式,秒的进位接到分的使能端上,秒的使能借到分隔符的使能上,分得接到时的使能端上,完成秒、分、时和分隔符的循环计数。整点报时是根据分的A、B输出同时为0时,整点报时模块输出高电平控制报时。LED显示扫描模块根据输入的扫描信号CKDSP轮流选通秒、分、时、分隔符的8位八段数码管,LED显示译码器完成计数器输出的BCD的译码。 2、结构框图 1 显示模块 秒计时模块 数字时钟 整点报时模 块 分计时模块 时计时模块 调时控制模 块 三、 设计过程 1、模块化设计 秒计时模块 秒计时模块由一个60位计数器为主体构成,其输入输出端口组成为: Clk:计时时钟信号 Reset:异步清零信号 Setmin:分钟设置信号 Enmin:使能输出信号 Daout6:0:BCD码输出 分计时模块 分计时模块由一个60位计数器为主体构成,其输入输出端口组成为: Clk、clk1:计时时钟信号 Reset:异步清零信号 Sethour:小时设置信号 Enmin:使能输出信号 Daout6:0:BCD码输出 时计时模块 时计时模块由24位计数器为主体构成,其输入输出端口组成为: Clk:计时时钟信号 Reset:异步清零信号 Daout6:0:BCD码输出 显示模块 系统时间输出由六个七段数码管显示。 显示的数据是各计时模块给出的 BCD码。 2 调时控制模块 该模块主要用于调节时、分显示,用于“对表”。 整点报时模块 在时钟整点的时候产生扬声器驱动信号。由时钟计时模块中分钟的进行信号进行控制。当contr_en 为高电平时,将输入信号clk 送到输出端speak 用于驱动扬声器,同时在clk 的控制下,输出端lamp2.0进行循环移位。输出控制模块有扬声器控制器子模块组成。 2、顶层文件生成 前面已经完成了电子时钟电路的各个组成部分的设计,下面把这些组成部分组装起来,形成完整的总体设计。该电子时钟的命名为clock,其外部端口如右图所示。 各个输入/ 输出端口的作用如下: clk 为外部时钟信号,其频率为1Hz,reset 为异步清零信号. sethour 和setmin分别为调时调分脉冲输入信号 ,当en_set为高电平时, 每来一个sethour 脉冲或setmin脉冲,时、分输出将分别加1; second6.0为秒的个位和十位BCD 码输出,min60为分钟的个位和十位BCD 码输出,hour6.0为小时的个位和十位BCD 码输出,它们最终中用来驱动七段数码管,lamp2.0为花样显示输出信号,speak 为整点报时扬声器驱动信号 3 四、仿真调试过程 1、各模块时序仿真图 秒计数器仿真图 分计数器仿真图 时计数器仿真图 整点报时仿真图 4 调时调分仿真图 LED显示译码仿真图 2、仿真过程中遇到的问题 由于距离学习EDA技术课程的时间较长,遗忘了部分课程内容,对仿真软件不熟悉造成多次仿真失败。就此问题我认真复习了所学的EDA相关课程,按照课本上介绍的步骤重新进行了仿真,问题得以解决。 因为仿真过程中对各部分时序波形应采取什么样的激励波形不清楚,给仿真过程带来了较大的麻烦。通过查阅相关资料,阅读网上一些比较成熟的论文,确定了仿真过程中的相关参数。 五、设计体会及收获 本次课程设计我做出的数字时钟能够正确的进行整点报时,显示时间,但是对于调时调分功能不能正确显示。经过努力,简易电子时钟的设计基本上算是完成了,在整个设计中,我最大的体会就是:对学过的知识遗忘太多。在本次的课程设计中,我发现了很多问题,同时做起来也很难不顺手,看着简单的电路,要动手把它设计出来实非易事,主要原因对相关应用软件的不熟悉,这就要求我们在以后的学习中,应该注意复习的重要性,对学过的知识要时常复习,加深记忆,更重要的是我们要学会把从书本上学到的知识和实际电路联系起来,这不论对我们以后的学习还是就业,都会起到很大的促进和帮助。我相信,通过这次的课程设计,在下一阶段的学习中我们会更加努力,力争把这门课学好学精。同时通过本次课程设计,巩固了我们以前学过的专业知识,通过这次的程序设计,使我们对数字系统结构也有了更进一步的了解与认识,同时对数据库软件技术,语言等系列知识都有了一定的了解与认识。使用技术开发页面的能力也有了提高,也使我们把理论与实践从正真意义上结合了起来,考验了我们的动手能力和查阅相关资料的能力,还有组织材料的能力。 通过此次实践,我们从中可以找出自己知识的不足与欠缺,以便我们在日后的学习中得以改进与提高。经过本次设计使我们对大学四年期间所学习到的知识得以进一步实践,这将对我们走出校园,走向社会,走向工作岗位奠定坚实的基础。 5 附 录 1、秒计数单元代码 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; BEGIN daout<=count; enmin_2<=(setmin and clk); enmin<=(enmin_1 or enmin_2); process(clk,reset,setmin) 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 enmin_1<='1'count<="0000000" else count<=count+7; end if; else count<="0000000" end if; elsif(count<16#60#)then count<=count+1; enmin_1<='0' after 100 ns; else end if; end if; end process; end fun ; 2、分计数单元代码 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; 6 END fun; 3、时计数单元代码 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; 4、显示单元代码 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 IS BEGIN led<="1111110"when num="0000"else "0110000"when num="0001"else "1101101"when num="0010"else "1111001"when num="0011"else "0110011"when num="0100"else "1011011"when num="0101"else "1011111"when num="0110"else "1110000"when num="0111"else "1111111"when num="1000"else "1111011"when num="1001"else "1110111"when num="1010"else "0011111"when num="1011"else "1001110"when num="1100"else "0111101"when num="1101"else "1001111"when num="1110"else "1000111"when num="1111" END fun; 5、调时控制单元代码 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" 7 else count<=count+1; end if; end if; case count is when"000"=>daout<=sec(3 downto 0);dp<='0' when"001"=>daout(3)<='0'daout(2 downto count1<="00" else count1<=count1+1; end if; end if; end if; end process speaker; lamper:process(clk) 0)<=sec(6 downto 4);dp<='0' when"010"=>daout<=min(3 downto 0);dp<='1' when"011"=>daout(3)<='0'daout(2 downto 0)<=min(6 downto 4);dp<='0' when"100"=>daout<=hour(3 downto 0);dp<='1' when others=>daout(3 downto 2)<="00" daout(1 downto 0)<=hour(5 downto 4);dp<='0' end case; 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 coun:std_logic_vector (1 downto 0); signal count1:std_logic_vector (1 downto 0); BEGIN speaker:process(clk) begin speak<=count1(1); if(clk'event and clk='1')then if(dain="0000000")then if(count1>="10")then begin if(rising_edge(clk)then if(coun<="10")then if(coun="00")then lamp<="001" elsif(coun="01")then lamp<="010" elsif(coun="10")then lamp<="100" end if; coun<=coun+1; else coun<="00" end if; end if; end process lamper; END fun; 7、顶层代码 library ieee; use ieee.std_logic_1164.all; entity clock_top is port(clk,reset,setmin,sethour,clkdsp:in std_logic; speaker:out std_logic; lamp:out std_logic_vector(2 downto 0); sel:out std_logic_vector(2 downto 0); a,b,c,d,e,f,g,dpout:out std_logic); end clock_top; architecture a of clock_top is COMPONENT second PORT( clk,reset,setmin:IN STD_LOGIC; daout:out std_logic_vector(6 downto 0); enmin:OUT STD_LOGIC); END COMPONENT; COMPONENT minute 8 PORT( clk,clk1,reset,sethour:IN STD_LOGIC; enhour:OUT STD_LOGIC; daout:out std_logic_vector(6 downto 0); END COMPONENT; signal seltime_daout:std_logic_vector(3 downto 0); signal ledout:std_logic_vector(6 downto 0); begin a<=ledout(6);b<=ledout(5);c<=ledout(4);d<=lCOMPONENT hour PORT( clk,reset:IN STD_LOGIC; daout:out std_logic_vector(5 downto 0); END COMPONENT; COMPONENT alert PORT( clk:IN STD_LOGIC; dain:in std_logic_vector(6 downto 0); lamp:out std_logic_vector(2 downto 0); speak:OUT STD_LOGIC); END COMPONENT; COMPONENT seltime PORT( clk1,reset:IN STD_LOGIC; sec,min:in std_logic_vector(6 downto 0); hour:in std_logic_vector(5 downto 0); dp:out std_logic; daout:out std_logic_vector(3 downto 0); sel:OUT STD_LOGIC_vector(2 downto 0); END COMPONENT; COMPONENT deled PORT( num:IN STD_LOGIC_vector(3 downto 0); led:out std_logic_vector(6 downto 0); END COMPONENT; signal enmin_re,enhour_re:std_logic; signal second_daout,minute_daout:std_logic_vector(6 downto 0); signal hour_daout:std_logic_vector(5 downto 0); edout(3); e<=ledout(2);f<=ledout(1);g<=ledout(0); u1: second port map(reset=>reset, clk=>clk, setmin=>setmin, enmin=>enmin_re, daout=>second_daout); u2:minute port map(clk=>enmin_re, clk1=>clk, reset=>reset, sethour=>sethour, enhour=>enhour_re, daout=>minute_daout); u3:hour port map(clk=>enhour_re, reset=>reset, daout=>hour_daout); u4:alert port map(clk=>clk, dain=>minute_daout, speak=>speaker, lamp=>lamp); u5:seltime port map(clk1=>clkdsp, reset=>reset, sec=>second_daout, min=>minute_daout, hour=>hour_daout, daout=>seltime_daout, dp=>dpout, sel=>sel); u6:deled port map(num =>seltime_daout, led=>ledout); end a; 9

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开