




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计总成绩:江汉大学文理学院EDA课程设计报告课程设计题目 多功能数字钟 部 (系) 信息技术学部 专 业 姓 名 学 号 指导教师 2014年 12 月 29 日目录一、设计目的1二、设计要求1三、硬件方案13.1 设计思路13.2 设计框图23.3 数字钟主控电路状态表3四、软件方案54.1 按键消抖模块54.2 时钟计数器模块74.3 显示译码模块174.4 分频器模块194.5 主控制电路模块214.5.1 计数器控制模块214.5.2 闹钟计数器模块254.5.3 闹钟控制模块274.5.4 显示输出控制模块324.5.5 led控制模块344.5.6 主控模块374.6 电子钟系统原理图38五、实现过程中遇到的问题及措施39六、设计心得体会39七、参考文献39一、设计目的本课程设计的目的是熟练掌握相关软件的使用和操作。能对VHDL语言程序进行编译,调试,以及通过计算机仿真,得到正确的仿真波形图,并根据所得仿真波形图分析判断并改进所设计的电路。在成功掌握软件操作基础上,将所数字电路的基础课知识与VHDL语言的应用型知识结合起来并与实际设计,操作联系起来,即“理论联系实际”。深入了解VHDL语言的作用与价值,对用硬件语言设计一个电路系统开始具备一个较完整的思路与较专业的经验。对EDA技术有初步的认识,并开始对EDA技术的开发创新有初步的理解。二、设计要求设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进行手动调节以校时间,每逢整点,产生报时音报时。三、硬件方案3.1 设计思路根据设计要求进行分析,数字钟应当有计数器, 分频器,按键消抖,闹钟,显示及主控模块构成。分频器用来提供时钟,计数器用于计时,按键消抖为系统提供准确的按键控制信号输入,闹钟用于提供闹钟功能,显示模块显示时间,主控模块根据按键输入控制各个模块以实现所需求功能。在此设计中已将闹钟模块融入主控模块中。3.2 设计框图设计系统框图如图3-1所示。图3-1 数字钟系统框图分频器模块:48M时钟信号输入,可以提供多种时钟信号输出。时钟计数模块:由60进制,24进制计数器以及一些附加功能模块组成(设置时间和检测整点等功能)。按键消抖模块:消除机械按键抖动,提供更稳定的信号输入。显示译码:将要显示的数据经过译码以动态扫描的方式显示在数码管上。可以通过按键显示时间或设置闹钟的时间。蜂鸣器及LED输出口:此模块无代码,仅是连接外部蜂鸣器和LED的端口。主控模块:主控模块是整个核心,故将单独进行说明。数字钟主控模块框图如图3-2所示。图3-2 数字钟主控模块框图计数器控制模块: 1HZ时钟信号输入,按键控制计数器模块对计数器计数及设置计数器的值(即设置时间)。LED控制模块:通过按键控制,显示闹钟开启与关闭,以及设置时间和设置闹钟时用于指示当前设置为分钟还是时钟。闹钟计数器模块:此模块跟计数器模块一样。通过按键是计数器自增。来设置闹钟时间。闹钟控制模块:通过计数器输入来判断整点,计数器输入与闹钟计数器模块进行比较。以此来实现闹钟功能。显示输出模块: 显示主要有三部分,一是正常显示时间,二是显示设置时间,三是闹钟时间。具体显示那一部分是通过按键状态来判断。3.3 数字钟主控电路状态表 用两个电平信号A、B进行模式选择,AB=00为模式0,系统为计时状态;AB=01为模式1,系统为手动校时状态;AB=10为模式2,系统为闹钟设置状态。设置一个turn信号,当turn=0时,表示在手动校对时,选择调整分钟部分;当turn=1时,表示在手动校对时,选择调整小时部分。设置一个change信号,在手动校时或闹钟设置模式下,每按一次,计数器加1。设置一个reset信号,当reset=0时,整个系统复位;当reset=1时,系统进行计时或其他特殊功能操作。设置一个闹钟设置信号reset1,当reset1=0时,对闹钟进行设置,当reset1=0时,关闭闹钟信号。设置状态显示信号(连发光二极管):LD_alert指示是否设置了闹铃功能;LD_h指示当前调整的是小时信号;LD_m指示当前调整的是分钟信号。当闹钟功能设置后(LD_alert=1),系统应启动一个比较电路,当计时与预设闹铃时间相等时,启动闹铃声,直到关闭闹铃信号有效。整点报时部分由分和秒计时同时为0(或60)启动,与闹铃共用一个扬声器驱动信号out。系统计时时钟为clk=1Hz,选择另一时钟clk_lk=1024Hz作为产生闹铃声、报时音的时钟信号。主控电路状态表如表3-1所示。表3-1 数字钟主控电路状态表模式选择秒、分、时计数器秒冲输出状态备注resetreset1A BturnLD_hLD_mLD_alert0xx xxx000系统复位1x0 0xclk000系统计时1x0 10change=分计数器加1010手动校时1x0 11change=时计数器加1100111 00change=分计数器加1011设置闹钟111 01change=时计数器加110110x xxx000关闭闹钟四、软件方案4.1 按键消抖模块消除按键抖动,按键检测时钟为1kHZ,如果为其它时钟,请修改计数器计数值,默认时间为5ms。按键消抖符号图如图4-1-1所示图4-1-1按键消抖符号图端口说明:Key_in : 按键输入端。Key_out : 按键去抖后输出端。Clk_1k : 按键检测时钟信号(1kHZ)。按键消抖代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity xiaodou is port (key_in : in std_logic;key_out : out std_logic;clk_1k : in std_logic);end;architecture bhv of xiaodou issignal count : std_logic_vector (2 downto 0);begin process (clk_1k) beginif (clk_1kevent and clk_1k=1) thenif key_in=0 thenif count=5 then count = count;else count = count +1;end if;if count = 5 then key_out =0;else key_out=1;end if;else count = 000; key_out = 1;end if;end if;end process;end;功能仿真:按键消抖功能仿真图如图4-1-2所示图4-1-2 按键消抖功能仿真图按键消抖模块原理图:按键消抖模块原理图如图4-1-3所示图4-1-3按键消抖模块原理图按键消抖模块符号图如图4-1-4所示图4-1-4 按键消抖模块符号图4.2 时钟计数器模块时钟计数器模块具有计数器功能,按键按设置计数值功能,整点检测功能。此模块由60进制计数器,24进制计数器,数据选择器,比较器构成。60进制计数器用于秒和分计数,计数器自增来源有两个,一个是1HZ的时钟信号,二是按键产生的时钟信号,由数据选择器控制。比较器用于检测分计数器是否位零,当为零时,即到了整点,比较器会输出1分钟高电平。时钟计数器模块原理图如图4-2-1所示图4-2-1时钟计数器模块原理图时钟计数器模块符号图如图4-2-2图4-2-2时钟计数器模块符号图端口说明Clk_1:1HZ计数时钟信号输入端。Set_minute: 时钟分钟设置输入端。Set_hour: 时钟时设置输入端。S_minute:计数器计数时钟选择端,当S_minute=0时计数时钟为Clk_1,当S_minute=1时计数时钟为Set_minute。S_hour:计数器计数时钟选择端,当S_hour=0时计数时钟为Clk_1,当S_hour=1时计数时钟为Set_hour。(1)60进制计数器模块:60进制计数器用于秒和分计数,clr清零计数器。60进制计数器模块符号图如图4-2-3所示图4-2-3 60进制计数器模块符号图端口说明:Clk_1: 计数时钟输入端。Clr: 计数器清零端。Cout:计数器进位输出端Dout_l3.0: 计数值低四位输出端(秒或分低位)。Dout_h3.0: 计数值高四位输出端(秒或分高位)。60进制计数器代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter_60 isport (clk_1 : in std_logic;clr : in std_logic;cout : out std_logic;dout_l : out std_logic_vector (3 downto 0);dout_h : out std_logic_vector (3 downto 0);end;architecture bhv of counter_60 issignal num1 : std_logic_vector (3 downto 0);signal num2 : std_logic_vector (3 downto 0);beginprocess (clk_1, clr) beginif (clr =0 ) then num1 = 0000; num2 = 0000; cout = 0;else if (clk_1event and clk_1 = 1) thencout = 0;if num11001 then num1 = num1 + 1;else num1 = 0000;if num2 0101 then num2 = num2 +1;else num2 = 0000; cout = 1;end if;end if;end if;end if;end process;dout_l = num1;dout_h = num2;end;60进制计数器功能仿真图如图4-2-4所示图6-2-460进制计数器功能仿真图(2)24进制计数器模块构成时计数器,clr清零计数器。24进制计数器模块符号图如图4-2-5所示图4-2-5 24进制计数器模块符号图端口说明:Clk_1: 计数时钟输入端。Clr: 计数器清零端。Cout:计数器进位输出端Dout_l3.0: 计数值低四位输出端(时低位)。Dout_h3.0: 计数值高四位输出端(时高位)。24进制计数器代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter_24 isport (clk_1 : in std_logic;clr : in std_logic;cout : out std_logic;dout_l : out std_logic_vector (3 downto 0);dout_h : out std_logic_vector (3 downto 0);end;architecture bhv of counter_24 issignal num1 : std_logic_vector (3 downto 0);signal num2 : std_logic_vector (3 downto 0);beginprocess (clk_1, clr) beginif (clr =0 ) then num1 = 0000; num2 = 0000; cout = 0;else if (clk_1event and clk_1 = 1) thencout = 0;if num11001 then num1 = num1 + 1;else num1 = 0000; num2 = num2 +1;end if;if (num2=0010 and num1 = 0011) thencout = 1;num1 = 0000;num2 = 0000;end if;end if;end if;end process;dout_l = num1;dout_h = num2;end;24进制计数器功能仿真图如图4-2-6所示图4-2-6 24进制计数器功能仿真图(3)数据选择器模块数据选择器符号图如图4-2-7所示图4-2-7数据选择器符号图端口说明:A: 计数时钟输入。B: 按键置数输入端。Qout: 计数脉冲输出端。S:计数时钟输入选择端,s=0输入端为a,否则为b。数据选择器代码:library ieee;use ieee.std_logic_1164.all;entity mux21b isport (a, b : in std_logic;s : in std_logic;qout : out std_logic);end; architecture bhv of mux21b isbeginprocess (s) beginif s=0 then qout = a;else qout = b;end if;end process;end;数据选择器功能仿真图如图4-2-8所示图4-2-8据选择器功能仿真图(4)比较器模块比较器模块符号图如图4-2-9所示图4-2-9比较器模块符号图端口说明:Data7.0 : 分钟数据输入端。Com_out: 当整点是com_out会输出一分钟高电平。比较器模块代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity compar_1 isport (data : in std_logic_vector(7 downto 0);com_out : out std_logic);end;architecture bhv of compar_1 isbeginprocess (data) beginif (data = 00000000) then com_out = 1;else com_out = 0;end if;end process;end;比较器模块功能仿真图如图4-2-10所示图4-2-10比较器模块功能仿真图4.3 显示译码模块显示译码模块如图4-3-1所示图4-3-1 显示译码模块端口说明:Data_in23.0: 六位数码管数据输入端。Clk: 数码管扫描时钟。Data_out7.0: 数码管段数据输出。Select_wei2.0: 动态扫描位选择输出。显示译码模块代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;- 数码管显示译码- 六位数码管 时,分,秒高低各两位 - 24位数据输入(每位数码管对应四位数据), 动态显示六位数码管entity disp_decode isport (data_in : in std_logic_vector (23 downto 0); - 显示数据输入clk : in std_logic;- 数码管扫描时钟data_out : out std_logic_vector (7 downto 0);- 数码管八段输出select_wei : out std_logic_vector (5 downto 0)- 数码管位选);end;architecture bhv of disp_decode issignal num : std_logic_vector(2 downto 0);signal data : std_logic_vector (3 downto 0);begin- 数码管位选六进制计数器-循环显示六位数码管process (clk) beginif (clkevent and clk=1) then num = num + 1;end if;if (num = 6) then num select_wei = 111110; data select_wei = 111101; data select_wei = 111011; data select_wei = 110111; data select_wei = 101111; data select_wei = 011111; data null;end case;end process;- 显示译码process (data) begincase (data) iswhen x0 = data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out null;end case;end process;end;显示译码模块仿真图如图4-3-2所示图4-3-2显示译码模块仿真图4.4 分频器模块分频器模块提供各种频率的时钟信号源,这次设计采用的实验板晶振频率为48M,必须经过分频才能为各模块提供时钟。由于晶振频率较大,故分频所用的计数器为约翰逊计数器。此模块以48MHZ频率输入,输出1HZ和1KHZ两种频率。由六分频,八分频,十分频模块级联构成,下面将以六分频为例进行说明。分频器原理图如图4-4-1所示图4-4-1分频器原理图分频器模块图如图4-4-1所示图4-4-1分频器模块图六分频模块符号图如图4-4-2所示图4-4-2六分频模块符号图六分频模块代码:library ieee;use ieee.std_logic_1164. all;use ieee.std_logic_arith. all;use ieee.std_logic_unsigned. all;entity john_6 isport (clk : in std_logic;clk_out : buffer std_logic);end;architecture a of john_6 issignal cntQ: std_logic_vector(2 downto 0);beginprocess(clk) beginif (rising_edge(clk) thencntQ(2 downto 1) = cntQ(1 downto 0);cntQ(0) = not cntQ(2); end if; end process; process (cntQ) beginif cntQ 100 thenclk_out = 0;else clk_out clk_disp = clk_1;minute_s = 0;hour_s clk_disp = 0;minute_s = 1;hour_s clk_disp null;end case;else clk_disp = clk_1;minute_s = 0;hour_s if (turn = 0) then clkout_minute_t = change;else clkout_hour_t clkout_hour_t = 1;clkout_minute_t if (turn = 0) then clkout_minute_a = change;else clkout_hour_a clkout_hour_a = 1;clkout_minute_a = 1;end case;end process;end按键计数模块功能仿真图如图4-5-4所示图4-5-4按键计数模块功能仿真图闹钟计数器模块功能仿真图如图4-5-5所示图4-5-5 闹钟计数器模块功能仿真图4.5.3 闹钟控制模块闹钟控制模块由比较器和闹钟模块构成。比较器和一个由时钟计数器的整点信号经过一个或门产生闹钟信号;闹钟模块根据按键状态及闹钟信号决定蜂鸣器是否发声。闹钟控制模块原理图如图4-5-6所示图4-5-6 闹钟控制模块原理图闹钟控制模块符号图如图4-5-7所示图4-5-7闹钟控制模块符号图端口说明:Din_t15.0: 时钟计数器分和时数据输入端。Din_a15.0: 闹钟计数器分和时数据输入端。Cin: 整点信号输入端。Reset: 全局复位信号。Mod1.0: 模式。Clk_1k: 蜂鸣器发声频率源Reset1: 闹钟计数器复位。Beep_out: 蜂鸣器输出。比较器模块符号图如图4-5-8所示图4-5-8比较器模块符号图比较器模块代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity compar isport (out_a : in std_logic_vector(15 downto 0);out_b : in std_logic_vector(15 downto 0);com_out : out std_logic);end;architecture bhv of compar isbeginprocess (out_a, out_b) beginif (out_a = out_b) then com_out = 1;else com_out if (alarm = 1 and reset1=1) then beep_out = clk_1k;else beep_out beep_out = 0;end case;else beep_out = 0;end if;end process;end;闹钟模块功能仿真图如图4-5-11所示 图4-5-11闹钟模块功能仿真图4.5.4 显示输出控制模块显示数据有两路,时钟定时器模块和闹钟定时器模块数据,具体显示那一路,通过model1.0信号选择(按键a, b)。显示输出控制模块符号图如图4-5-12所示图4-5-12显示输出控制模块功能仿真图端口说明:Din_a23.0: 时钟定时器数据输入端。Din_b23.0:闹钟定时器数据输入端。Model1.0:数据选择端。Dout_disp23.0:待显示数据输出端。显示输出控制模块代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity control_disp isport (din_a : in std_logic_vector (23 downto 0);din_b : in std_logic_vector (23 downto 0);dout_disp : out std_logic_vector (23 downto 0);model : in std_logic_vector (1 downto 0);end;architecture bhv of control_disp issignal s : std_logic;beginprocess (model) beginif (model = 10) then s = 1;else s = 0;end if;end process;process (din_a, din_b, s) beginif (s = 0) then dout_disp = din_a;elsedout_disp ld_alert = 0;ld_h = 0;ld_m ld_alert = 0;if (turn=0) then ld_m = 1; ld_h = 0;else ld_m = 0; ld_h if reset1 = 1 then ld_alert = 1;if (turn=0) then ld_m = 1; ld_h = 0;else ld_m = 0; ld_h = 1;end if;else ld_alert = 0;ld_m = 0; ld_h n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 惠安财务基础知识培训课件
- 北京海淀2026届化学高二第一学期期末联考模拟试题含答案
- 患者院感课件
- 传统节日中秋节趣味活动方案
- 恐龙科普绘本课件
- 春学期学校教研活动方案
- 新疆直升本科考试试题及答案
- 划焊工艺考试题及答案
- 四川叉车考试试题及答案
- 松鼠初数面试题及答案
- 动物检疫员防疫员考试题库与答案(新版)
- 医药行业数字化营销方案研究
- 可穿戴设备可靠性优化技术
- 仓库人员防暑措施方案
- 小学教师嘉奖主要事迹材料简短
- 2024年江西省高考化学试卷(真题+答案)
- 血液透析诊疗指南
- 2023年河南省对口升学养殖类专业课试卷
- TSG-T7001-2023电梯监督检验和定期检验规则宣贯解读
- 社区健康服务与管理教案
- 房屋装修合同范本下载
评论
0/150
提交评论