版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Civil Aviation University of China电子技术应用设计报告基于FPGA的电子时钟设计专 业: 通信工程 学 号: xxxxxxx 学生姓名: xxx 所属学院: 电信学院 任课教师: xxx 摘要本设计采用EDA技术,采用原理图和硬件描述语言VHDL混合编程设计时钟逻辑系统,在QuartusII5.0工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的电子时钟。本时钟系统主芯片采用EP1C6Q240C8N,具有显示时间、日期、时间及日期校准、整点报时、定时闹钟等功能。其中时间采用24小时循环计数,日期计数器具有闰年、月大、月小的判断并
2、准确计数功能。通过按键控制可以实现:日期和时间的切换显示、日期和时间的校准、闹钟的开关控制。关键词 :FPGA;电子时钟;原理图;VHDL语言;AbstractIn my design EDA technology is used, and I designed the clock logic system by means of schematic and VHDL hardware description language. Under QuartusII5.0 Tools software environment, I used the top-down design methodolo
3、gy, where various basic modules work together to build a FPGA-based electronic clock.The main chip of the clock system is EP1C6Q240C8N, which has the function of time display, date display, time and date calibration, the whole point of time, and regular alarm clock. Furthermore, 24-hour cycle, date
4、counter which time has leap-year, month, a small month's judgment and accurate counting function are designed. What we can achieve through the control buttons are as follows: switching the display of date and time, calibration of date and time, and the alarm switch control.Keywords: FPGA; electr
5、onic clock; schematic; VHDL language;目录电子技术应用设计报告0基于FPGA的电子时钟设计0摘要1Abstract1基于FPGA的电子时钟设计31.FPGA介绍32电子时钟的设计方案32.1时钟系统整体介绍32.2分频器42.3时间计数模块52.4日期计数模块62.5译码器模块72.6显示模块72.7校时模块82.8闹钟模块103实习总结113.1本系统的优点113.2本系统的不足113.3想实现却又没实现的功能12附录1:分频器13附录2:时间计数器14附录3:日期计数器16附录4:译码器程序20基于FPGA的电子时钟设计1.FPGA介绍FPGA(Fiel
6、dProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件。与传统逻辑电路和
7、门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。2电子时钟的设计方案2.1时钟系统整体介绍本时钟系统主要
8、由分频器模块、计数模块、译码模块、显示模块、校时模块以及闹钟模块构成。由分频器从48MHZ晶振中得到1HZ信号给计数器提供标准时钟,译码器将计数器数据译码数码管能显示的信号,显示模块扫描译码器数据并显示。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。系统框图如下:按键分频器按键晶振期计数器时间计数器闹钟译码器显示模块图2-1时钟系统框图2.2分频器本分频器采用偶数分频,使占空比达到50%很简单,只要使用一个计数器,在计数器的前一半时间里,使输出电平低电平,在计数器的后一半时间里,使输出电平为低电平,这样输出的时钟信
9、号就是占空比为50%的偶数分频时钟信号。图2-2-1分频器电路设计本分频器有48分频、100分频、10分频三个程序模块构成,输入48MHz,输出1KHz、100Hz、1Hz时钟信号。由于本分频器的判断条件为if count<(integer(N/2) then,所以当N为奇数时,得到脉冲占空比不为50%。(VHDL程序见附录1)图2-2-2分频器电路模块2.3时间计数模块时间计数模块由60进制计数器和24进制计数器构成。当秒计数器到59后,进位并归零,分计数器得到秒计数器的进位信号后计数加1,时计数器同理。(VHDL程序见附录2) 图2-3-1六十进制计数器 图2-3-2二十四进制计数器
10、Ø 1khz为蜂鸣器信号输入端;Ø clk为1HZ时钟信号输入端;Ø reset为异步清零信号输入端;Ø sadd、sdec、madd、mdec、hadd、hdec均为同步校时控制信号输入端,其中sadd为秒加,sdec为秒减,madd为分加,mdec为分减,hadd为时加,hdec为时减。图2-3-3计数器模块2.4日期计数模块本日期计数模块具有闰年、闰月、月大、月小判断并计数功能。日期控制信号为sel2.0输入端,当sel0= 0时,表示闰年,当sel1=1表示4,6,9,11四个月就,sel1=0则表示1、2、3、5、7、8、10、12八个月,当s
11、el2=1则表示2月。(VHDL程序见附录3) 图2-4-1年月日计数模块2.5译码器模块本译码器模块采用VHDL语言编写,译码具有灵活性,方便更改译码结果。输入数据为4位,输出数据为8位。输入0000到1001译码为0到9,输入1010到1110译码为A、b、C、D、E,输入1111译码为横线。(VHDL程序见附录4)图2-5译码器模块2.6显示模块本显示模块由一个74161计数器构成8进制计数模块,输入1KHz信号,计数器通过74138使数码管轮流工作,同时通过宏模块选通时间数据在数码管上显示。由于数码管只有8个,要想在8个数码管上显示时分秒年月日这么多数据,必须要有切换显示模块。本系统利
12、用按键控制宏模块选通时间和日期两路数据分别在数码管上显示。图2-6-1显示模块电路图图2-6-2显示模块2.7校时模块校时模块由8个按键组成。当按键按下输出低电平,未按下时输出高电平。图2-7-1按键消抖模块按键消抖模块由1KHz时钟信号控制,经过D触发器和与非门处理后,使得按键按下后输出高电平。未按下时输出低电平。图2-7-2八路按键模块图2-7-3按键选通模块由于时分秒信息和年月日信息分开显示,所以调整时间时必须分别对时分秒、年月日进行校准。然而控制信号只有八路,这样就必须使按键信号能分别送进时间计数模块和日期计数模块。于是编写下面这部分程序:LIBRARY IEEE;USE IEEE.S
13、TD_LOGIC_1164.ALL;ENTITY channel ISPORT(s:IN STD_LOGIC; data_in:IN STD_LOGIC_VECTOR(6 DOWNTO 0); cal_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); time_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY;ARCHITECTURE one OF channel ISBEGINPROCESS(s)BEGINCASE s ISWHEN '0'=> cal_out <=data_in; time_
14、out<="0000000"WHEN OTHERS=> time_out <=data_in; cal_out<="0000000"END CASE;END PROCESS;END ARCHITECTURE;这样就使得当控制按钮按下时,通过显示模块切换显示画面,同时按键分别控制时间计数模块和日期计数模块。2.8闹钟模块闹钟模块由整点报时和定时闹钟两部分组成。图2-8-1整点报时模块当时计数器进位时,进位信号被取出送到蜂鸣器控制端,控制端使能输入1KHz信号到蜂鸣器,这样就到达整点报时功能。图2-8-2定时闹钟模块为了便于演示本闹钟
15、模块定时时间为10秒,具有开启和关闭功能。当按键按下时T触发器翻转,使能计数器,当计数器计满10秒时进位使能蜂鸣器实现闹钟效果。当再次按下按键,T触发器再次翻转,计数器关闭,闹钟关闭。3实习总结3.1本系统的优点1. 分频器实现容易,可以任意分频,连线少。2. 时间计数器和日期计数器具有校准信号输入端,能实现校时和重启功能3. 日期计数器能准确的实现闰年、闰月、月大、月小的计数4. 译码器具有灵活性,不受器件限制,可以任意译码,实现自己想要的效果。3.2本系统的不足1. 分频器具有局限性,不能很好的对奇数个脉冲进行分频。2. 进位信号与归零信号不能同步。计数器计满归零时,进位信号不能立即进位,
16、要晚一个时钟信号。3. 校时操作比较繁琐。首先是控制按键比较多,然后是校准时间时,需要等到秒时钟信号到来时计数器才会加一或减一,使得校准时间比较慢。4. 闹钟不能设定,为了便于演示,只做了一个10秒计数器。3.3想实现却又没实现的功能1. 对时间进行校准时,由于受秒时钟限制,校准操作比较慢。因此尝试过以下两种方案:i. 输入1Hz、2Hz两个时钟信号,1Hz信号用于计数器计数,2Hz信号用于校准时间,但是程序老是报错,实验失败。ii. 校准信号不受时钟信号控制,当按键按下时,就使计数器加一或减一。由于按键消抖不是很好,每按下一次按键,计数器增加几十位,不是预期效果,实验失败。2. 闹钟模块有两
17、个预想功能没有实现:i. 定时时间可以设定。ii. 闹钟工作时播放一首歌曲。失败原因:1.时间不足;2.对电子琴不了解,要完成电子琴模块,需要大量时间。附录1:分频器以下是100分频程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity divider100 isGENERIC (N:integer:=100);port (clk:in std_logic;outclk:out std_logic);end divider100
18、;architecture one of divider100 issignal count:integer;beginprocess(clk)beginif(clk'event and clk='1') thenif(count=N-1)thencount<=0;elsecount<=count+1;if count<(integer(N/2) thenoutclk<='0'elseoutclk<='1'end if;end if;end if;end process;end one;附录2:时间计数器附录
19、2.1:六十进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport(enl,res,clk,sadd,sdec:in std_logic; a,b:out std_logic_vector(3 downto 0); ca:out std_logic);end second;-enl使能 -res清零-clk时钟-sadd加-sdec减-a低位-b高位-ca进位architecture SEC of second isbeginprocess(enl,cl
20、k,res)variable m0,m1:std_logic_vector(3 downto 0);beginif res='1' then m0:="0000" m1:="0000" ca<='0' elsif clk'event and clk='1' then ca<='0' if sadd='1' or enl='1' then if m0="1000" and m1="0101" then
21、ca<='1' -实际是第59个-脉冲 end if; if m0<"1001" then m0:=m0+1; else m0:="0000" m1:=m1+1; if m1>"0101" then m0:="0000" m1:="0000" ca<='0' end if; end if; elsif sdec='1' then if m0="0000" and m1="0000" t
22、hen m0:="1001" m1:="0101" elsif m0>"0000" then m0:=m0-1; else m0:="1001" m1:=m1-1; end if; end if; end if; a<=m0;b<=m1;end process;end SEC;附录2.1:二十四进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(enl,re
23、s,clk,hadd,hdec:in std_logic; a,b:out std_logic_vector(3 downto 0); ca:out std_logic);end hour;-enl使能 -res清零-clk时钟-hadd加-hdec减-a低位-b高位-ca进位architecture SEC of hour isbeginprocess(enl,clk,res)variable m0,m1:std_logic_vector(3 downto 0);beginif res='1' then m0:="0000" m1:="0000&
24、quot; ca<='0' elsif clk'event and clk='1' then ca<='0' if hadd='1' or enl='1' thenif m0="0011" and m1="0010" then ca<='1' m0:="0000" m1:="0000" end if; if m0<"1001" then m0:=m0+1; else m
25、0:="0000" m1:=m1+1; end if; elsif hdec='1' then if m0="0000" and m1="0000" then m0:="0011" m1:="0010"elsif m0>"0000" then m0:=m0-1; else m0:="1001" m1:=m1-1;end if; end if; end if; a<=m0;b<=m1;end process;end SEC;
26、附录3:日期计数器附录3.1:天计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity day isport(enl,res,clk,dadd,ddec:in std_logic; sel:in std_logic_vector(2 downto 0); a,b:out std_logic_vector(3 downto 0); ca:out std_logic);end day;-sel0-year-0表示闰年-sel1-month,1表示4,6,9,11-0表示1、2、3、5、7、
27、8、10、12-sel2-Feb,1表示2月architecture SEC of day issignal sr0,sr1:std_logic_vector(3 downto 0);beginprocess(sel)beginif sel="001" or sel="000" then sr0<="0001" sr1<="0011"-31elsif sel="100" then sr0<="1001" sr1<="0010"-29
28、elsif sel="101" then sr0<="1000" sr1<="0010"-28else sr0<="0000" sr1<="0011"-30end if;end process;process(enl,clk,res)variable r0,r1:std_logic_vector(3 downto 0);beginif res='1' then r0:="0001" r1:="0000" ca<
29、='0' elsif clk'event and clk='1' then ca<='0' if dadd='1' or enl='1' then if r0=sr0 and r1=sr1 then r0:="0001" r1:="0000" ca<='1' elsif r0<"1001" then r0:=r0+1; ca<='0' else r0:="0000" r1:
30、=r1+1; end if; elsif ddec='1' then if r0="0001" and r1="0000" then r0:=sr0; r1:=sr1; elsif r0>"0000" then r0:=r0-1; else r0:="1001" r1:=r1-1; end if; end if; end if; a<=r0;b<=r1;end process;end SEC;附录3.2:月计数器library ieee;use ieee.std_logic_116
31、4.all;use ieee.std_logic_unsigned.all;entity month isport(enl,res,clk,madd,mdec:in std_logic; a,b:out std_logic_vector(3 downto 0); ermonth,msel,ca:out std_logic);end month;-ermonth connect to sel2-msel connect to sel1architecture SEC of month isbeginprocess(enl,clk,res)variable y0,y1:std_logic_vect
32、or(3 downto 0);beginif res='1' then y0:="0001" y1:="0000" ca<='0' elsif clk'event and clk='1' then ca<='0' if madd='1' or enl='1' then if y0="0010" and y1="0001" then y0:="0001" y1:="0000
33、" ca<='1' elsif y0<"1001" then y0:=y0+1; ca<='0' else y0:="0000" y1:=y1+1; end if; elsif mdec='1' then if y0="0001" and y1="0000" then y0:="0010" y1:="0001" elsif y0>"0000" then y0:=y0-1; e
34、lse y0:="1001" y1:=y1-1; end if; end if; end if;if (y0="0100" or y0="0110" or y0="1001" ) and y1="0000")or (y0="0001" and y1="0001") then msel<='1' else msel<='0'end if;if y0="0010" and y1="000
35、0" then ermonth<='1' else ermonth<='0'end if; a<=y0;b<=y1;end process;end SEC;附录3.3:年计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity year isport(enl,res,clk,yadd,ydec:in std_logic; a,b,c,d:out std_logic_
36、vector(3 downto 0); ysel:out std_logic);end year;-ysel connect to sel0architecture nd of year isbegin process(res,enl,clk)variable n0,n1,n2,n3:std_logic_vector(3 downto 0);begin if res='1' then n0:="0010"n1:="0001"n2:="0000"n3:="0010" elsif clk'eve
37、nt and clk='1' then if yadd='1' or enl='1' then if n0<"1001" then n0:=n0+1; elsif n0="1001" then n0:="0000" n1:=n1+1; if n1="1010" then n1:="0000" n2:=n2+1; end if; if n2="1010" then n2:="0000" n3:=n3+1;
38、 end if; if n3="1010" then n3:="0000" end if; end if; elsif ydec='1' then if n0>"0000" then n0:=n0-1 ; elsif n0="0000" and n1="0000" and n2="0000" and n3="0000" then n0:="1001" n1:="1001" n2:="1
39、001" n3:="1001" elsif n0="0000" and n1="0000" and n2="0000" then n0:="1001" n1:="1001" n2:="1001" n3:=n3-1; elsif n0="0000" and n1="0000" then n0:="1001" n1:="1001" n2:=n2-1; elsif n0=&
40、quot;0000" then n0:="1001" n1:=n1-1; end if; else n3:="0010" end if; if (n0(0)='0' and n0(1)='0' and n1(0)='0')or(n0(0)='0' and n0(1)='1' and n1(0)='1') then ysel<='0' else ysel<='1'end if;end if;a<=n0;b<=n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年热线客服招聘面试题库及参考答案
- 2025年建筑项目协调员招聘面试参考题库及答案
- 2025年信息资源专员招聘面试题库及参考答案
- 2025年薪酬绩效专员招聘面试题库及参考答案
- 2025年教程作者招聘面试题库及参考答案
- 2025年公司治理专员招聘面试题库及参考答案
- 2025年儿童心理学家招聘面试题库及参考答案
- 2025年保健食品研发专员招聘面试题库及参考答案
- 2025年产品测试员招聘面试题库及参考答案
- 2025年现场活动策划专员招聘面试参考题库及答案
- 家长会:如何培养孩子的好习惯课件
- 空调水系统完整版本
- 胃癌(英文版)课件
- 混凝土抗渗检测报告
- 品管圈QCC成果汇报提高药物指导知晓率
- 村庄基本情况调查表
- 港口幼儿园观察记录表
- (9.5.1)-10.5失血性休克病理生理学
- 新制度经济学课件-第4讲-契约理论
- GB/T 18369-2008玻璃纤维无捻粗纱
- 迈克尔逊干涉仪课件
评论
0/150
提交评论