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

上传人:小飞机 文档编号:3156182 上传时间:2023-03-11 格式:DOCX 页数:14 大小:40.96KB
返回 下载 相关 举报
EDA课程设计基于VHDL语言的数字时钟设计.docx_第1页
第1页 / 共14页
EDA课程设计基于VHDL语言的数字时钟设计.docx_第2页
第2页 / 共14页
EDA课程设计基于VHDL语言的数字时钟设计.docx_第3页
第3页 / 共14页
EDA课程设计基于VHDL语言的数字时钟设计.docx_第4页
第4页 / 共14页
EDA课程设计基于VHDL语言的数字时钟设计.docx_第5页
第5页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《EDA课程设计基于VHDL语言的数字时钟设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计基于VHDL语言的数字时钟设计.docx(14页珍藏版)》请在三一办公上搜索。

1、EDA课程设计基于VHDL语言的数字时钟设计一、设计要求 . 1 二、设计原理及框图 . 1 1、设计原理 . 1 2、结构框图 . 1 三、 设计过程 . 2 1、模块化设计 . 2 2、顶层文件生成 . 3 四、仿真调试过程 . 4 1、各模块时序仿真图 . 4 2、仿真过程中遇到的问题 . 5 五、设计体会及收获 . 5 一、设计要求 1、稳定的显示时、分、秒。 2、当电路发生走时误差时,要求电路有校时功能。 3、电路有整点报时功能。报时声响为四低一高,最后一响高音正好为整点。 二、设计原理及框图 1、设计原理 系统框图由六个模块组成,分别为:秒、分、时计数模块,整点报时模块,LED动态

2、显示扫描模块,调时控制模块组成。其工作原理是:基准脉冲输入信号同时加到秒、分、时、分隔符的脉冲输入端,采用并行计数的方式,秒的进位接到分的使能端上,秒的使能借到分隔符的使能上,分得接到时的使能端上,完成秒、分、时和分隔符的循环计数。整点报时是根据分的A、B输出同时为0时,整点报时模块输出高电平控制报时。LED显示扫描模块根据输入的扫描信号CKDSP轮流选通秒、分、时、分隔符的8位八段数码管,LED显示译码器完成计数器输出的BCD的译码。 2、结构框图 1 显示模块 秒计时模块 数字时钟 整点报时模 块 分计时模块 时计时模块 调时控制模 块 三、 设计过程 1、模块化设计 秒计时模块 秒计时模

3、块由一个60位计数器为主体构成,其输入输出端口组成为: Clk:计时时钟信号 Reset:异步清零信号 Setmin:分钟设置信号 Enmin:使能输出信号 Daout6:0:BCD码输出 分计时模块 分计时模块由一个60位计数器为主体构成,其输入输出端口组成为: Clk、clk1:计时时钟信号 Reset:异步清零信号 Sethour:小时设置信号 Enmin:使能输出信号 Daout6:0:BCD码输出 时计时模块 时计时模块由24位计数器为主体构成,其输入输出端口组成为: Clk:计时时钟信号 Reset:异步清零信号 Daout6:0:BCD码输出 显示模块 系统时间输出由六个七段数码

4、管显示。 显示的数据是各计时模块给出的 BCD码。 2 调时控制模块 该模块主要用于调节时、分显示,用于“对表”。 整点报时模块 在时钟整点的时候产生扬声器驱动信号。由时钟计时模块中分钟的进行信号进行控制。当contr_en 为高电平时,将输入信号clk 送到输出端speak 用于驱动扬声器,同时在clk 的控制下,输出端lamp2.0进行循环移位。输出控制模块有扬声器控制器子模块组成。 2、顶层文件生成 前面已经完成了电子时钟电路的各个组成部分的设计,下面把这些组成部分组装起来,形成完整的总体设计。该电子时钟的命名为clock,其外部端口如右图所示。 各个输入/ 输出端口的作用如下: clk

5、 为外部时钟信号,其频率为1Hz,reset 为异步清零信号. sethour 和setmin分别为调时调分脉冲输入信号 ,当en_set为高电平时, 每来一个sethour 脉冲或setmin脉冲,时、分输出将分别加1; second6.0为秒的个位和十位BCD 码输出,min60为分钟的个位和十位BCD 码输出,hour6.0为小时的个位和十位BCD 码输出,它们最终中用来驱动七段数码管,lamp2.0为花样显示输出信号,speak 为整点报时扬声器驱动信号 3 四、仿真调试过程 1、各模块时序仿真图 秒计数器仿真图 分计数器仿真图 时计数器仿真图 整点报时仿真图 4 调时调分仿真图 LE

6、D显示译码仿真图 2、仿真过程中遇到的问题 由于距离学习EDA技术课程的时间较长,遗忘了部分课程内容,对仿真软件不熟悉造成多次仿真失败。就此问题我认真复习了所学的EDA相关课程,按照课本上介绍的步骤重新进行了仿真,问题得以解决。 因为仿真过程中对各部分时序波形应采取什么样的激励波形不清楚,给仿真过程带来了较大的麻烦。通过查阅相关资料,阅读网上一些比较成熟的论文,确定了仿真过程中的相关参数。 五、设计体会及收获 本次课程设计我做出的数字时钟能够正确的进行整点报时,显示时间,但是对于调时调分功能不能正确显示。经过努力,简易电子时钟的设计基本上算是完成了,在整个设计中,我最大的体会就是:对学过的知识

7、遗忘太多。在本次的课程设计中,我发现了很多问题,同时做起来也很难不顺手,看着简单的电路,要动手把它设计出来实非易事,主要原因对相关应用软件的不熟悉,这就要求我们在以后的学习中,应该注意复习的重要性,对学过的知识要时常复习,加深记忆,更重要的是我们要学会把从书本上学到的知识和实际电路联系起来,这不论对我们以后的学习还是就业,都会起到很大的促进和帮助。我相信,通过这次的课程设计,在下一阶段的学习中我们会更加努力,力争把这门课学好学精。同时通过本次课程设计,巩固了我们以前学过的专业知识,通过这次的程序设计,使我们对数字系统结构也有了更进一步的了解与认识,同时对数据库软件技术,语言等系列知识都有了一定

8、的了解与认识。使用技术开发页面的能力也有了提高,也使我们把理论与实践从正真意义上结合了起来,考验了我们的动手能力和查阅相关资料的能力,还有组织材料的能力。 通过此次实践,我们从中可以找出自己知识的不足与欠缺,以便我们在日后的学习中得以改进与提高。经过本次设计使我们对大学四年期间所学习到的知识得以进一步实践,这将对我们走出校园,走向社会,走向工作岗位奠定坚实的基础。 5 附 录 1、秒计数单元代码 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY second IS PORT( c

9、lk,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(cl

10、k,reset,setmin) begin if(reset=0) then count=0000000; elsif(clkevent and clk=1)then if(count(3 downto 0)=1001)then if(count16#60#)then if(count=1011001)then enmin_1=1;count=0000000; else count=count+7; end if; else count=0000000; end if; elsif(count16#60#)then count=count+1; enmin_1=0 after 100 ns;

11、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

12、 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(clkevent and clk=1)then if(count(3 downto 0)=1001)then if(count16#60#)t

13、hen if(count=1011001)then enhour_1=1; count=0000000; ELSE count=count+7; end if; else count=0000000; end if; elsif(count16#60#)then count=count+1; enhour_1=0after 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_log

14、ic_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(clkevent and clk=1)then if (co

15、unt(3 downto 0)=1001)then if(count=16#23#)then count=count+7; else count=000000; end if; elsif(count16#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

16、_logic_vector(3 downto 0); led:OUT std_logic_vector(6 downto 0); end deled; ARCHITECTURE fun OF deled IS BEGIN led=1111110when num=0000else 0110000when num=0001else 1101101when num=0010else 1111001when num=0011else 0110011when num=0100else 1011011when num=0101else 1011111when num=0110else 1110000whe

17、n num=0111else 1111111when num=1000else 1111011when num=1001else 1110111when num=1010else 0011111when num=1011else 1001110when num=1100else 0111101when num=1101else 1001111when num=1110else 1000111when num=1111; END fun; 5、调时控制单元代码 LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsign

18、ed.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 selti

19、me IS SIGNAL count:STD_LOGIC_vector(2 downto 0); BEGIN sel=count; process(clk1,reset) begin if(reset=0)then count=101)then count=000; 7 else countdaout=sec(3 downto 0);dpdaout(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

20、(6 downto 4);dpdaout=min(3 downto 0);dpdaout(3)=0;daout(2 downto 0)=min(6 downto 4);dpdaout=hour(3 downto 0);dpdaout(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

21、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=

22、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,res

23、et,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_vecto

24、r(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

25、(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 selti

26、me 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

27、_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);greset, clk=clk, setmin=setmin, enmin=enmin_re, daout=second_daout); u2:minute por

28、t 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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号