EDA技术课程设计-闹钟系统设计.doc_第1页
EDA技术课程设计-闹钟系统设计.doc_第2页
EDA技术课程设计-闹钟系统设计.doc_第3页
EDA技术课程设计-闹钟系统设计.doc_第4页
EDA技术课程设计-闹钟系统设计.doc_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东 北 石 油 大 学课 程 设 计课 程 eda技术课程设计 题 目 闹钟系统设计 院 系 电子科学学院 专业班级 电子信息工程 学生姓名 学生学号 0 指导教师 2011年 3 月11日东北石油大学课程设计任务书课程 eda技术课程设计题目 闹钟系统的设计专业 电子信息工程 姓名 学号 070901140504主要内容、基本要求、主要参考资料等主要内容:设计并制作一个带闹钟功能的24小时计时器。它包括以下几个组成部分:1、显示屏,由4 个七段数码管组成,用于显示当前时间(时:分)或设置的闹钟时间;2、数字键,实现09的输入,用于输入新的时间或新的闹钟时间;3、time(时间)键,用于确定新的时间设置;4、alarm(闹钟)键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;5、扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声基本要求:1、计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。2、闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。3、设置新的计时器时间:用户用数字键输入新的时间,然后按time键确认。在输入过程中,输入数字在显示屏上从右到左依次显示。例如,用户要设置新的时间12:34,则按顺序输入“1”,“2”,“3”,“4”,与之对应,显示屏上依次显示的信息为:“1”,“12”,“123”,“1234。如果用户在输入任意几个数字后较长时间内,例如5 s,没有按任何键,则计时器恢复到正常的计时显示状态。主要参考资料:1 潘松著.eda技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限 2011.3.11 指导教师 专业负责人 2011年 3月7日一、总体设计思想1.基本原理数字闹钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的计数时钟clk为1hz的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过6个数码管来动态显示。因此,通过模式选择信号key1、key2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为clk,秒的进位, 分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,驱动扬声器,持续1分钟。2.设计框图设定按键时钟1hz按键updn时钟10hz功能切换寄存器闹钟设定寄存器闹铃控制电路模式切换数据选择扫描技术字符译码扫描时钟320hz数码显示蜂鸣器时钟计数寄存器 二、设计步骤和调试过程1、总体设计电路(1) clk为外部时钟信号,reset为复位信号. (2) 当key为高电平(key= 1)时,表示用户按下数字键(09). (3) 当alarm_button为高电平时,表示用户按下alarm键. (4) 当time_button为高电平时,表示用户按下time键. (5) 当load_new_a为高电平时,控制(闹钟时间寄存器)加载新的闹钟时间值. (6) 当load_new_c为高电平时,控制(时钟计数器)设置新的时间值. (7) 当show_new_time为高电平时,控制(七段数码显示电路)显示新的时间值,即用户通过数字键输入的时间;否则,当show_new_time为低电平时,根据show_a信号的值控制显示当前时间或闹钟时间. 根据设计要求及端口设置,需要五个状态来实现: s0:表示电路初态即正常时钟计数状态,完成前面设计功能 (1) 的工作. s1:接收键盘输入状态.在状态s0时用户按下数字键后进入此状态.在此状态下,显示屏上显示的是用户键入的数字. s2:设置新的闹钟时间.在状态s1时用户按下alarm键后进入此状态. s3:设置新的计时器时间.在状态s1时用户按下time键后进入此状态. s4:显示闹钟时间.在状态s0时用户直接按下alarm键后进入此状态.在此状态下,显示屏上显示的是所设置的闹钟时间.注意:在此状态下,用户按下alarm键后,显示屏上保持显示闹钟时间,经过一段时间以后,再返回状态s0。2、 模块设计和相应模块程序1、译码器的设计设计思路:本模块的功能是将每次按下闹钟系统的数字键盘后产生的一个数字所对应的10位2进制数据转换为1位十进制整数信号,以作为小时、分钟计数的4个数字之一。输入数据与输出数据的译码关系如下表所示。2、移位寄存器的设计设计思路:本模块的功能是在clk端口上升沿同步下,将key端口的输入信号移入new_time端口的输出信号最低位,原有信息依次向左移;reset端口的输入信号对new_time端口的输出信号进行异步清零复位。3、闹钟寄存器和时间计数器的设计闹钟寄存器模块的功能是在时钟上升沿同步下,根据load_new_a端口的输入信号控制alarm_time端口的输出;当控制信号有效时,把new_alarm_time端口的输入信号值输出;reset端口输入信号对alarm_time端口的输出进行异步的清零复位。时间计数器模块的功能是当reset端口输入信号为高电平时,对current_time端口输出信号清零复位;当load_new_c端口输入信号为高电平时,将new_current_time端口的输入信号给current_time端口。reset端口的控制优先于load_new_c端口输出信号累加1,并根据小时、分钟的规律处理进位。4、闹钟系统显示驱动器的设计模块的功能是:当show_new_time端口输入信号有效时,根据new_time端口输入信号产生相应的4段数码显示器驱动数据,并在display端口输出该信号。当show_new_time端口输入信号无效时,判断show_a端口的输入信号为高电平时,根据alarm_time端口的输入信号产生相应的4个7段数码显示驱动数据,并在display端口输出该信号;当alarm_time端口的输入信号值与current_time端口的输入信号值相同时,sound_alarm端口的输出信号有效,反之无效。5、分频器的设计本模块的功能是将clk_in端口输入的时钟信号分频后送给clk_out端口当reset端口输入信号有效时,clk_out端口输出信号清零。 (1)顶层文件:library ieee; use ieee.std_logic_1164.all;entity clock is port ( clk12mhz : in std_logic; clk8hz : in std_logic; spkout : out std_logic; clk : in std_logic; key1 : in std_logic; key2 : in std_logic_vector(1 downto 0); h1,h2,m1,m2,s1,s2: out std_logic_vector(3 downto 0); end;architecture one of clock is component shizhong port (clk : in std_logic; md1 : in std_logic; md2 : in std_logic_vector(1 downto 0); clken : out std_logic; h1,h2,m1,m2,s1,s2: out std_logic_vector(3 downto 0); end component; component notetabs port ( clk : in std_logic; toneindex : out std_logic_vector (3 downto 0) ); end component; component tonetaba port ( index : in std_logic_vector (3 downto 0) ; tone : out std_logic_vector (10 downto 0); en : in std_logic); end component; component speakera port ( clk : in std_logic; tone : in std_logic_vector (10 downto 0); spks : out std_logic ); end component; signal tone :std_logic_vector (10 downto 0); signal toneindex :std_logic_vector (3 downto 0); signal clken :std_logic; signal en :std_logic; beginu1 : shizhong port map (clk=clk,md1=key1,md2=key2,clken=en, h1=h1,h2=h2,m1=m1,m2=m2,s1=s1,s2=s2);u2 : notetabs port map (clk=clk8hz, toneindex=toneindex);u3 : tonetaba port map (index=toneindex,tone=tone,en=en);u4 : speakera port map (clk=clk12mhz,tone=tone, spks=spkout );end;(2)时钟控制模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shizhong isport( clk: in std_logic; md1:in std_logic; md2:in std_logic_vector(1 downto 0); clken:out std_logic; h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0);end shizhong;architecture one of shizhong issignal hou1:std_logic_vector(3 downto 0);signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);begin-小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou1=0000;elsif hou1=0010and hou2=0011and md1=0 and md2=01 then-当时间为23点且处于校时状态时hou1=0000;elsif (hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (hou2=1001and md1=0 and md2=01) thenhou1=hou1+1;end if;end if;end process h110;-小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif (hou2=1001and md1=0 and md2=01)or (hou1=0010and hou2=0011) thenhou2=0000;-md=1;-elsif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (md1=0 and md2=01) thenhou2=hou2+1;-speak=clk;-end if;end if;end process h220;-分钟十位 m110:process(clk,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then min1=0000;elsif min1=0101and min2=1001and (md1=0 and md2=00)thenmin1=0000;elsif (min2=1001and (sec1=0101 and sec2=1001) or (min2=1001and md1=0 and md2=00)thenmin1=min1+1;end if;end if;-end if;end process m110;-分钟个位 m220:process(clk,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif min2=1001and (sec1=0101 and sec2=1001)thenmin2=0000;elsif min2=1001and (md1=0 and md2=00)thenmin2=0000;else if (sec1=0101 and sec2=1001) or(md1=0 and md2=00)thenmin2=min2+1;end if;end if;end if;end process m220;-秒十位 s110:process(clk)beginif clkevent and clk=1 thenif (sec1=0101 and sec2=1001)thensec1=0000;else if sec2=1001thensec1=sec1+1;end if;end if;end if;end process s110;-秒个位 s220:process(clk)beginif clkevent and clk=1 thenif sec2=1001 thensec2=0000;else sec2=sec2+1;end if;end if;end process s220;-时间设置小时部分 sethour1:process(clk,seth2)beginif clkevent and clk=1 thenif seth1=0010and seth2=0011 thenseth1=0000;elsif seth2=1001 thenseth1=seth1+1;end if;end if;end process sethour1;sethour2:process(clk,md1,md2,seth1)beginif clkevent and clk=1 thenif (seth1=0010and seth2=0011)or seth2=1001thenseth2=0000;elsif md1=1 and md2=00 thenseth2=seth2+1;end if;end if;end process sethour2;-时间设置分钟部分 setmin1:process(clk,setm2)beginif clkevent and clk=1 thenif setm1=0101and setm2=1001thensetm1=0000;elsif setm2=1001thensetm1=setm1+1;end if;end if;end process setmin1;setmin2:process(clk,md1,md2)beginif clkevent and clk=1thenif setm2=1001thensetm2=0000;elsif md1=1 and md2=01thensetm2=setm2+1;end if;end if;end process setmin2;-闹铃speaker:process(clk,hou1,hou2,min1,min2)beginif clkevent and clk=1thenif seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 thenclken=1;else clken=0;end if;end if;end process speaker;disp:process(md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)beginif md1=0 then-计时时间显示和设置模式h1=hou1;h2=hou2;m1=min1;m2=min2;s1=sec1;s2=sec2;else -闹铃时间现实和设置模式h1=seth1;h2=seth2;m1=setm1;m2=setm2;s1=1111;s2=1111;end if;end process disp;end one; (3)乐曲演奏模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speakera is port ( clk : in std_logic; tone : in std_logic_vector (10 downto 0); spks : out std_logic );end;architecture one of speakera is signal preclk, fullspks : std_logic;begin divideclk : process(clk) variable count4 : std_logic_vector (3 downto 0) ; begin preclk 11 then preclk = 1; count4 := 0000; elsif clkevent and clk = 1 then count4 := count4 + 1; end if; end process; genspks : process(preclk, tone)- 11位可预置计数器 variable count11 : std_logic_vector (10 downto 0);begin if preclkevent and preclk = 1 then if count11 = 16#7ff# then count11 := tone ; fullspks = 1; else count11 := count11 + 1; fullspks = 0; end if; end if; end process; delayspks : process(fullspks)-将输出再2分频,展宽脉冲,使扬声器有足够功率发音 variable count2 : std_logic;begin if fullspksevent and fullspks = 1 then count2 := not count2; if count2 = 1 then spks = 1; else spks = 0; end if; end if; end process;end;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity notetabs is port (clk : in std_logic; toneindex : out std_logic_vector (3 downto 0) );end;architecture one of notetabs iscomponent music -音符数据rom port(address : in std_logic_vector (7 downto 0); inclock : in std_logic ; q : out std_logic_vector (3 downto 0);end component; signal counter : std_logic_vector (7 downto 0);begin cnt8 : process(clk,counter) begin if counter=138 then counter = 00000000; elsif (clkevent and clk = 1) then counter counter , q=toneindex, inclock=clk); end;library ieee;use ieee.std_logic_1164.all;entity tonetaba is port ( index : in std_logic_vector (3 downto 0) ; tone : out std_logic_vector (10 downto 0); en : in std_logic);end;architecture one of tonetaba isbeginprocess(index,en) beginif en=0 then tone tone tone tone tone tone tone tone tone tone tone tone tone tone null; end case;end if; end process;end;library ieee;use ieee.std_logic_1164.all;library altera_mf;use altera_mf.altera_mf_components.all;entity music isport( address: in std_logic_vector (7 downto 0);inclock: in std_logic ;q: out std_logic_vector (3 downto 0);end music;architecture syn of music issignal sub_wire0: std_logic_vector (3 downto 0);component altsyncramgeneric (intended_device_family: string;width_a: natural;widthad_a: natural;numwords_a: natural;operation_mode: string;outdata_reg_a: string;address_aclr_a: string;outdata_aclr_a: string;width_byteena_a: natural;init_file: string;lpm_hint: string;lpm_type: string);port ( clock0: in std_logic ;address_a: in std_logic_vector (7 downto 0);q_a: out std_logic_vector (3 downto 0);end component;beginq cyclone,width_a = 4,widthad_a = 8,numwords_a = 256,operation_mode = rom,outdata_reg_a = unregistered,address_aclr_a = none,outdata_aclr_a = none,width_byteena_a = 1,init_file = data1.mif,lpm_hint = enable_runtime_mod=yes, instance_name=rom2,lpm_type = altsyncram)port map ( clock0 = inclock, address_a = address, q_a = sub_wire0);end syn;3、仿真及仿真结果分析本实验是以key2、key1为控制整个闹钟的校时,校分,校闹钟时、分,分别将key21,key20,key1,送到实验上的三个键,由这三个键来控制整个校时,校分,校闹钟时,校闹钟分的过程,加上分别连接的键叫a,b,c键,则当a=0,b=1,c=0时是对时钟进行校时,时个位和时十位会以二十四进制循环自动增加。仿真波形:仿真图1当a=0,b=0,c=0时是对时钟进行校分,分个位和分十位会以六十进制循环增加,并且不对时进位。仿真波形:仿真图2当a=0,b=1,c=1时是对闹钟进行校分,闹钟时个位和时十位会以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论