基于EDA技术的数字时钟设计
- 格式:doc
- 大小:425.50 KB
- 文档页数:20
用EDA技术设计多功能数字钟摘要近年来,随着电子技术和通信技术的飞速发展,要求设计研究方面运用电子设计自动化(Electronic Design Automation,简称EDA)工具进行开发。
在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可靠性,减轻了设计者的劳动强度。
本设计为通过EDA仿真软件MAX+PLUSII设计一个多功能数字钟,并下载到硬件中实现。
本系统的设计电路由计时电路、动态显示电路、闹钟电路、控制电路、显示电路等部分组成。
本系统采用动态显示的原理在数码管上显示12小时计时的时刻,具有清零、保持、校时、报时的功能,并在此基础上增加了闹铃、秒表、12小时制计时、A/P显示等功能。
在设计过程中,将各部分均模块化,各模块间相互独立,又相互联系。
本实验吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。
本系统不仅成功的实现了要求的基本功能,发挥部分也得到完全的实现,而且有一定的创新功能。
关键词数字钟、计数器、多功能、动态显示、原理图、仿真、模块化AbstractRecently, with the rapid development of electronic and communication technology, it is required to use Electronic Design Automation (EDA) as a tool in designing systems. EDA derives from the concepts of Computer Aided Design, Computer Aided Manufacture, Computer Aided Test and Computer Aided Engineering in the 1990s. Designers use Hardware Describe Language to accomplish designing files on the platform of software. Then, computer will finish the work of logical compiling, simplification, division, synthesis, optimizing, layout, tracking and simulating automatically, and it can also accomplish the work of proper compiling, logical projecting and downloading of the target chip. As a result, it evidently improves the efficiency and reliability of the circuit design, and it also lighten designer’s workload.This experiment has designed a multifunctional digital clock via using the MAX+PLUSII, and the basic and extended performances and functions are successfully realized in the hardware. This system includes time circuit, alarm circuit, dynamic display circuit, control circuit, display circuit. In the system, the segment display can display time in the 24-hour format, it includes such functions as clear, hold, check the time and so on. We can also add alarm, stopwatch, 12-hour format display and other functions on that basic. In the designing process, many parts are modularized, they are not only independent but also related. Many functions are finished by the software. So it simples the circuit and enhances the stability of the system. Not only all the basic and extended performances and functions are successfully realized, but also accomplish some innovation functions.KeywordsDigital clock, arithmometer, multifunctional, dynamic display,schematic diagram, simulate, modularization目录摘要 1ABSTRACT 11、前言62、EDA技术的介绍及发展 73、总体方案设计 93.1 设计内容 93.2 方案比较 (9)3.3 方案论证 (10)3.4 方案选择 104、多功能数字中的设计 124.1 课题要求 124.2 课题分析 12 4.3 功能实现 134.3.1 秒计时模块 144.3.2 分计时模块 164.3.3 小时计时模块 17 4.3.4 校时校分模块 194.3.5 整点报时模块 194.3.6 时段控制模块 204.3.7 连接各模块 214.4 下载过程 234.5 总结报告 265、设计总结 285.1 设计小结 28 5.2 设计收获 285.3 设计改进 286、致谢 287、参考文献 301、前言本课题研究的背景和目的:二十一世纪是信息化高速发展的世纪,产业的信息化离不开硬件芯片的支持。
摘要数字时钟,就是以数字显示取代模拟表盘的钟表,在显示上它用数字反应此时的时间,它还能同时显示时,分,秒,且能够对时,分,秒准确进行校时。
数字时钟是一种用数字电路技术实现时、分、秒计时的装置。
与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。
数字钟从原理上讲是一种典型的数字电路,一般是由振荡器、分频器、计数器、显示器等几部分组成。
其中包括了组合逻辑电路和时序电路。
数字钟的设计方法有许多种,例如:可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。
本设计采用EDA技术,以硬件描述语言Verilog HDL为系统逻辑描述手段设计文件,在QUARTUS II工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
数字时钟以其体积小、重量轻、抗干扰能力强、对环境要求高、高精确性、容易开发等特性,在工业控制系统、智能化器仪表、办公自动化等诸多领域取得了极为广泛的应用,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等。
关键词:EDA、QuartusII、Verilog HDL、FPGA芯片、数字时钟等AbstractDigital clock is with digital display to replace analog dial watch, in the show it with digital reaction at this time, it can display at the same time, minutes and seconds, and can pair, minutes and seconds precise timing.Digital clock is a digital circuit technology to achieve time, minutes and seconds of the device. Compared with the mechanical clock has higher accuracy and intuitive, and no mechanical device, has a longer life, has been widely used. Digital clock from the principle of speaking is a typical digital circuit, generally by the oscillator, frequency divider, counter, display and other parts of the composition. The combination logic circuit and the sequential circuit are included in the circuit. Digital clock design, there are many methods. For example: available small scale integrated circuit composition electronic clock; can also use special chip electronic clock with to display circuit and its peripheral circuit composed of electronic clock; can also be used to achieve single-chip electronic clock and so on.This design using EDA technology, the Hardware Description Language Verilog HDL logic system description method of design documents, in the Quartus II software environment by top-down design method, by all the basic modules work together to build a based on FPGA digital clock.Digital clock with the volume small, light weight, strong anti-interference ability, on the environment requirements high, high precision, ease of development, and so on, in the fields of industrial control system, intelligent of instrumentation, office automation, made extremely widely used, such as timing automatic alarm, timely automatic bell, a time program automatic control, regular radio, automatic opening and closing lights, oven timer switch, on-off power equipment, and even a variety of timing electric automatically enabled.Keywords: EDA, QuartusII, Verilog HDL,FPGA chip, Digital clock, etc.摘要 (1)第一章绪论 (4)1.1选题意义与研究现状 (4)1.2国内外研究及趋势 (4)第二章EDA技术 (6)2.1 EDA技术简介 (6)2.2 EDA技术特点 (6)2.3 EDA技术的发展历程 (6)第三章 QuartusⅡ,FPGA的简介 (9)3.1 Quartus II简介 (9)3.2 FPGA简介 (9)3.3 FPGA系统设计流程 (11)3.4本设计所用黑金开发板AX301简介 (12)第四章数字时钟总体设计方案 (14)4.2 数字钟的工作原理 (14)第五章数字时钟的具体设计 (15)5.1 本设计的顶层图 (15)5.2 时钟控制模块 (15)5.2.1信号定义 (15)5.2.2分频模块 (16)5.2.3走时模块 (16)5.3显示模块 (20)第六章程序的验证与修改 (25)6.1程序导入 (25)6.2开发板演示 (25)第七章总结与展望 (27)7.1论文总结 (27)7.2后续展望 (27)致谢 ................................................................................................................... 错误!未定义书签。
(2023)EDA课程数字钟设计报告(一)EDA课程数字钟设计报告设计目的本次设计的目的是通过使用EDA software,设计一个能够正常运行的数字钟,使其能够满足一定的时间显示功能。
设计思路本设计主要使用Verilog HDL编程语言,利用EDA software提供的仿真功能,模拟数字钟的运行过程。
具体实现过程如下:1.首先,设置时钟频率,并利用counter计数器进行计数,产生时间基准信号。
2.利用BCD编码对时间进行编码,分别将时、分、秒的数据传至显示器。
3.设计逻辑电路计算秒钟、分针、时钟转动角度。
4.在EDA software上进行仿真,观察数字钟是否正常工作。
设计图样以下为数字钟方案的部分设计图样。
image textimage text实现结果通过复杂的编程训练和模拟,数字钟设计的功能已经被确认。
数字钟电路能够准确地显示当前时间。
同时,数字钟的设计也具有较高的可靠性、稳定性和精度。
并且,数字钟的主板设计紧凑、易于集成。
这些优点使得本次设计非常适合应用于智能仪器、家庭用品和其他数字显示电子设备中。
总结数字钟设计是一项有挑战性的工程,需要设计人员具有充分的编程功底和深入的EDA工具熟练度。
本设计的成功,体现了设计团队的技术实力和团队协作能力,为未来的科技产品发展提供了有力的技术支撑。
改进方案虽然本设计实现了数字钟正常工作的功能,但是我们仍然可以从以下几个方面进行改进:1.在原有电路基础上增加闹钟功能,方便用户定时提醒。
2.增加显示背光,使数字钟更方便在夜间环境下使用。
3.将数字钟设计进行微小的改动使其更小巧便携,方便携带和使用。
参考文献1.微机原理与接口技术(第四版) 教材2.EDA Software (Xilinx ISE) 许可证书致谢在本次数字钟的设计过程中,我们向来自各地的优秀工程师团队表示感谢,感谢他们在繁忙的工作中,准确地指导我们的设计工作。
同时也感谢电子设计自动化(EDA) company提供的软件支持,使得我们能够顺利完成该设计。
电子信息工程专业项目化课程《EDA技术》项目二总结报告数字电子钟的设计班级姓名指导老师完成时间2010 年10 月 4 日项目二数字电子钟的设计一、概述设计一个具有校时、校分功能的能进行正常时、分、秒计时,分别有六个数码管显示时、分、秒的数字电子钟电路。
并具有整点报时功能。
二、项目要求1.实现60 进制分、秒和24进制时的计时功能。
2.由六个数码管动态显示时、分、秒。
3.通过按键实现校时、校分功能。
4.能利用蜂鸣器实现整点报时,59分50秒开始报时,整点结束。
5.用层次化(模块化)设计方法设计总电路,用VHDL语言编写各个功能模块。
6.用EDA实训系统下载验证三、数字时钟总电路设计11223344DDCCBBAATitleNumberRevisionSize A4Date:2010-11-16Sheet of File:C:\My Documents\..\SHEET1.SCHDOC Drawn By:S1S2S3S4Speaker LS10KRes2R110K R210K R310K R42N3904Q210KR71KR8D1D2D3D4VCCVCC CLK1IN 2DEV_CLR 3DATA75DATA66DATA57DATA48DATA39DATA210DATA111DATA012DCLK 13n C E14TDI 15I/O 16I/O 17I/O 18I/O 19I/O 21I/O 22I/O 23I/O 24I /O25I /O 27I /O 28I /O 29I /O 30MSEL031MSEL132nCONFIG 34I /O 35I /O 36I /O 37I /O38I /O 39CLK 43IN 44I /O 47I /O 48I /O 49I /O 50I /O 51I /O 52I /O53I /O 54nSTATUS 55TRST 56TMS 57I /O 58I /O 59I /O 60I /O61I /O 62I /O 64I /O 65I /O 66I /O 67INIT_DONE 69RDYnBUSY 70I /O 71I /O 72CLKUSR 73TDO 74n C E O 75CONF_DONE 76TCK 77nCS 78CS 79nWS 80nRS 81DEV_OE83IN 84V C C I N T4V C C I N T 20G N D I N T26V C C I N T 33V C C I N T 40G N D I N T 41V C C I N T 45G N D I N T 46V C C I N T 63G N D I N T 68G N D I N T 82IN 42EPF10K10LC84-3U0OED1Q1D2Q2D3Q3D4Q4D5Q5D6Q6D7Q7D8Q8VCCGND 74LS244U1VCC A 1B 2C 3OE2A 4OE2B5OE16Y77GND8Y69Y510Y411Y312Y213Y114Y015VCC 16SN74LS138DU4Y0Y1Y2Y5Y3Y4VCCW0W1W2W 1W 2W 0QA QB QC QD QE QF QG VCC VCCA0A1A2A3A4A5A6A7A 0A 1A 2A 3A 4A 5A 6A 7QD 7QE 5QF 4QG 6QH 14QI 13QJ 15QL 1QM 2QN 3/CKO 10CKO9CLR12CKI11CD4060BU3V C C 1N C 2C O U N T 3G N D4U2VCC1024HZ 1024HZ 9123456781KPR1T M S T D I T D 0T CKNetLabel2y 0Y 1Q A Q B Q C Q D Q E Q F Q GY 2Y 3Y 5Y 4Q A Q C Q B Q D Q E Q GQ F A B C D E F G D P C 1C 2DS2Dpy Red-CAA B C D E F G D 1D 2D 3D 4D P DS1Dpy Red-CB12Header 2JP112Header 2JP21234567891110D Connector 9J1680R4D110KR5VCCl9nCONFIG VCCDLCK DAT nSTATUS CONF_DONE k1100pFCap C1nCONFIG nSTATUS DCLK CONF DONE四、VHDL语言编程设计4.1、60进制设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jinzhi60 isport (ctp,nreset,clk1s:in std_logic;co:out std_logic;qhh:out std_logic_vector(3 downto 0);qll:out std_logic_vector(3 downto 0));end jinzhi60;architecture behave of jinzhi60 issignal ql,qh:std_logic_vector(3 downto 0);beginco<='1' when (qh="0101" and ql="1001" and ctp='1') else'0'; process(clk1s,nreset,ctp)beginif(nreset='0')thenqh<="0000";ql<="0000";elsif(clk1s' event and clk1s='1')thenif(ctp='1')thenif (qh="0101" and ql="1001")thenqh<="0000";ql<="0000";elsif(ql<9)thenql<=ql+1;elseql<="0000";end if;end if;end if;qhh<=qh; qll<=ql;end process;end behave;4.2、24进制设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jinzhi24 isport (ctp,nreset,clk1s:in std_logic;co:out std_logic;qhh:out std_logic_vector(3 downto 0);qll:out std_logic_vector(3 downto 0));end jinzhi24;architecture behave of jinzhi24 issignal ql,qh:std_logic_vector(3 downto 0);beginco<='1' when (qh="0101" and ql="1001" and ctp='1') else'0'; process(clk1s,nreset,ctp)beginif(nreset='0')thenqh<="0000";ql<="0000";elsif(clk1s' event and clk1s='1')thenif(ctp='1')thenif (qh="0101" and ql="1001")thenql<="0000";elsif(ql<9)thenql<=ql+1;elseql<="0000";qh<=qh+1;end if;end if;end if;qhh<=qh; qll<=ql;end process;end behave;4.3、动态扫描library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity datm isport(clk:in bit;a,b,c,d,e,f:in std_logic_vector(3 downto 0);w:out std_logic_vector(2 downto 0);q:out std_logic_vector(6 downto 0));end datm;architecture wei of datm issignal qq:std_logic_vector(3 downto 0);signal cntt:std_logic_vector(2 downto 0);beginprocess(clk)variable cnt:std_logic_vector(2 downto 0);beginif clk'event and clk='1' thenif cnt<5 then cnt:=cnt+1;else cnt:="000";end if;cntt <=cnt;case cnt iswhen "000"=>qq<=a;when "001"=>qq<=b;when "010"=>qq<=c;when "011"=>qq<=d;when "100"=>qq<=e;when "101"=>qq<=f;when others=>null;end case;end if;end process;process(qq)beginw<=cntt;case qq iswhen "0000"=>q<="1111110";when "0001"=>q<="0110000";when "0010"=>q<="1101101";when "0011"=>q<="1111001";when "0100"=>q<="0110011";when "0101"=>q<="1011011";when "0110"=>q<="1011111";when "0111"=>q<="1011111";when "1000"=>q<="1110000";when "1001"=>q<="1111111";when "1010"=>q<="1111011";when "1011"=>q<="1110111";when "1100"=>q<="0011111";when "1101"=>q<="1001110";when "1110"=>q<="1001111";when "1111"=>q<="1000111";when others=>q<="0000000"; end case;end process;end wei;4.5、1000分频设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity datm1000 isport(clk:in std_logic;co:out std_logic);end datm1000;architecture behave of datm1000 is beginprocess(clk)variable cn:integer:=0;beginif (clk'event and clk='1') thenif (cn<999) thencn:=cn+1;co<='0';elsecn:=0;co<='1';End if;end if;End process;end behave;4.6、校时、校分电路library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity xuanz isport (b,n,m:in std_logic;qo:out std_logic);end xuanz;architecture beha of xuanz is beginprocess(b,n,m)beginif (m='1') thenqo<=b;elseqo<=n;end if;end process;end beha;4.7、报时电路library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity baoshi isport (m1,m0,s1,s0: in std_logic_vector(3 downto 0);clk:in std_logic;q: out std_logic);end baoshi;architecture rtl of baoshi isbeginprocess(clk)variable c0 :std_logic_vector(2 downto 0);beginif clk'event and clk='1' thenif m1="0101"and m0="1010" and s1="0101" thenc0:=c0+1;if s0="0000"or s0="0010"or s0="0100" or s0="0110" or s0="1000"then q<='0';elseq<='1';end if;elseq<='1';end if;end if;end process;end rtl;五、总电路框图5.1 引脚设置首先使用软件选择对应的实验箱芯片:Assign>>Device 选择FLEX10K>>EPF10K10LC84-3,然后OK。
EDA技术实现的数字电子钟设计摘要电子设计自动化 Electronic Design Automation (以下简称EDA)技术已经代替传统的集成电路设计方法,逐渐成为电子系统设计者的主要设计手段。
MAXplusⅡ是EDA仿真软件之一。
具有功能强大、界面友好和使用方便等特点,是目前教育与工业界流行的集成电路辅助设计软件。
MAXplusⅡ是一种在电子技术工程与电子技术教学中广泛应用的优秀计算机仿真软件,被誉为“计算机里的电子实验室”。
本文介绍了一种基于MAXplusⅡ软件设计数字电子钟的方法。
关键词EDA MAXplusⅡ软件数字电子钟目录引言 (1)第一章 EDA概论 (2)1.1EDA技术概述 (2)1.2 EDA在数字电路课程设计中的必要性 (2)1.3 MAXplusⅡ概述 (3)1.4 设计电子钟的可行性分析 (3)第二章设计依据 (4)2.1设计总体方案 (4)2.2设计原理 (4)2.3 设计目标和方法 (4)第三章 EDA电子钟系统设计 (5)3.1电子钟的功能分析、总体规划 (5)3.1.1电子钟功能分析 (5)3.1.2总体规划 (5)3.2使用MAXplusⅡ作为数字电子钟设计平台 (5)3.2.1 MAXplusⅡ软件仿真特点 (5)3.2.2 MAXplusⅡ介绍 (6)3.3 单元电路设计与分析 (6)3.3.1石英晶体振荡器 (6)3.3.2分频电路 (7)3.3.3秒、分计数电路 (8)3.3.4时计数电路 (9)3.3.5校时电路 (10)3.3.6整点报时电路 (10)3.3.7定时闹钟 (12)第四章MAXplusⅡ电子钟仿真结果 (15)4.1MAXplusⅡ电子钟基本功能仿真结果 (15)4.2 MAXplusⅡ电子钟扩展功能仿真结果 (15)4.3 MAXplusⅡ电子钟整体仿真结果 (15)结束语 (17)参考文献 (18)引言随着计算机在国内的逐渐普及,计算机已经深入到每一个行业,计算机与每个工作领域紧密地联系在了一起。
EDA数字钟毕业设计第一篇:EDA数字钟毕业设计[ 标签:数字钟, eda ]1、设计一个能显示1/10秒、秒、分、时的12小时数字钟。
2、时钟源使用频率为0.1Hz的连续脉冲。
3、设置两个按钮,一个供“开始”及“停止”用,一个供系统“复位”用。
4、时钟显示使用数码管显示。
基于VHDL的多功能数字钟的设计EDA课程设计资料类别课程(专业)EDA 适用年级大学文件格式word+DLS 文件大小1725K 上传时间2008-10-10 20:57:00 预览文件无(只能预览文件中的部分内容)下载次数0内容简介:EDA课程设计基于VHDL的多功能数字钟的设计,共11页,6086字,附源程序。
摘要:介绍了利用VHDL硬件描述语言设计的多功能数字钟的思路和技巧。
在MAX+PLUSII开发环境中编译和仿真了所设计的程序,并在可编程逻辑器件上下栽验证。
仿真和验证结果表明,该设计方法切实可行。
EDA-时钟设计-基于Altera数字钟的实现:EDA课程设计基于VHDL的多功能数字钟的设计:EDA数字钟设计报告:资料包括:论文(12页2036字)图纸说明:中文摘要:数字钟学习的目的是掌握各类计数器及它们相连的设计方法;掌握多个数码管显示的原理与方法;掌握FPGA技术的层次化设计方法;掌握用VHDL语言的设计思想以及整个数字系统的设计。
此数字钟设计具有时,分,秒计数显示功能,以24小时为计数循环;能实现清零,调节小时,分钟以及整点报时的功能。
第二篇:eda数字钟程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clock IS PORT(EN :IN STD_LOGIC;数码管使能CLK:IN STD_LOGIC;时钟信号RST:IN STD_LOGIC;复位信号SEC_1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);秒高位SEC_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);秒低位MIN_1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);分高位MIN_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);分低位HOU_1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);时高位HOU_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);时低位BEE:OUT STD_LOGIC);END clock;ARCHITECTURE behovior OF clock IS SIGNAL SEC_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SEC_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MIN_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MIN_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HOU_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HOU_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL CY_MIN:STD_LOGIC;分进位SIGNAL CY_HOU:STD_LOGIC;时进位SIGNAL LOGO_1:STD_LOGIC;标志SIGNAL LOGO_2:STD_LOGIC;SIGNAL LOGO_3:STD_LOGIC;BEGIN MIAOLOW:PROCESS(CLK,RST,EN)BEGINIF(RST = '0')THENSEC_LOW <= “1000”;附给秒低位为8ELSIF(CLK'EVENT AND CLK = '1' AND EN = '1')THEN 检测时钟上升沿及数码管使能端IF(SEC_LOW = “1001”)THENSEC_LOW <= “0000”;ELSESEC_LOW <= SEC_LOW + “0001”;加一END IF;END IF;END PROCESS MIAOLOW;LOGO_1 <= SEC_LOW(3)AND SEC_LOW(0);SEC_01<= SEC_LOW;秒个位放8MIAOHIGH:PROCESS(CLK,RST)BEGINIF(RST = '0')THENSEC_HIGH <= “0101”;ELSIF(CLK'EVENT AND CLK = '1')THEN检测时钟上升沿IF(LOGO_1 = '1')THENIF(SEC_HIGH = “0101”)THENSEC_HIGH <= “0000”;CY_MIN <= '1';ELSESEC_HIGH <= SEC_HIGH + “0001”;加一CY_MIN <= '0';END IF;END IF;END IF;END PROCESS MIAOHIGH;SEC_1 <= SEC_HIGH;秒十位放5FENLOW:PROCESS(CY_MIN,RST,EN)BEGINIF(RST = '0')THEN 若复位位为0MIN_LOW <= “1000”;则分个位为8ELSIF(CY_MIN'EVENT AND CY_MIN = '1' AND EN = '1')THEN 检测时钟上升沿及数码管使能端IF(MIN_LOW = “1001”)THENMIN_LOW <= “0000”;ELSEMIN_LO W <= MIN_LOW + “0001”;加一END IF;END IF;END PROCESS FENLOW;LOGO_2 <= MIN_LOW(3)AND MIN_LOW(0);MIN_01 <= MIN_LOW;分个位放8FENHIGH:PROCESS(CY_MIN,RST)BEGINIF(RST = '0')THENMIN_HIGH <= “0101”;ELSIF(CY_MIN'EVENT AND CY_MIN = '1')THEN检测分进位上升沿IF(LOGO_2 = '1')THENIF(MIN_HIGH = “0101”)THEN若分十位为5MIN_HIGH <= “0000”;CY_HOU <= '1';时进位为1ELSEMIN_HIGH <= MIN_HIGH + “0001”;加一CY_HOU <= '0';END IF;END IF;END IF;END PROCESS FENHIGH;MIN_1 <= MIN_HIGH;分十位放5SHILOW:PROCESS(CY_HOU,RST,EN)BEGINIF(RST = '0')THENHOU_LOW <= “1001”;ELSIF(CY_HOU'EVENT AND CY_HOU = '1'AND EN = '1')THEN检测时进位上升沿及数码管使能端IF(HOU_LOW = “1001”)THEN若时低位为9HOU_LOW <= “0000”;ELSIF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THEN若时十位为2,个位为3HOU_LOW <= “0000”;ELSEHOU_LOW <= HOU_LOW + “0001”;加一END IF;END IF;END PROCESS SHILOW;LOGO_3 <= HOU_LOW(3)AND HOU_LOW(0);HOU_01 <= HOU_LOW;时个位放3SHIHIGH:PROCESS(CY_HOU,RST)BEGINIF(RST = '0')THENHOU_HIGH <= “0001”;ELSIF(CY_HOU'EVENT AND CY_HOU = '1')THEN检测时进位上升沿IF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THEN 若时十位为2,时个位为3HOU_HIGH <= “0000”;ELSIF(LOGO_3 = '1')THENHOU_HIGH <= HOU_HIGH + “0001”;加一END IF;END IF;END PROCESS SHIHIGH;BEE_CLOCK:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK = '1')THEN检测时钟上升沿IF(SEC_HIGH = “0101” AND SEC_LOW = “1001”AND MIN_HIGH = “0101” AND MIN_LOW = “1001”)THENBEE <= '1';ELSEBEE <= '0';END IF;END IF;END PROCESS BEE_CLOCK;HOU_1 <= HOU_HIGH;时十位放2END behovior;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clock1 IS PORT(EN :IN STD_LOGIC;CLK:IN STD_LOGIC;RST:IN STD_LOGIC;SEC_1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);SEC_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);MIN_1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);MIN_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HOU_1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HOU_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BEE:OUT STD_LOGIC);END clock1;ARCHITECTURE behovior OF clock1 IS SIGNAL SEC_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SEC_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MIN_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MIN_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HOU_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HOU_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL CY_MIN:STD_LOGIC;SIGNAL CY_HOU:STD_LOGIC;SIGNAL LOGO_1:STD_LOGIC;SIGNAL LOGO_2:STD_LOGIC;SIGNAL LOGO_3:STD_LOGIC;BEGIN MIAOLOW:PROCESS(CLK,RST,EN)BEGINIF(RST = '0')THENSEC_LOW <= “1000”;ELSIF(CLK'EVENT AND CLK = '1' AND EN = '1')THEN IF(SEC_LOW = “1001”)THENSEC_LOW <= “0000”;ELSESEC_LOW <= SEC_LOW + “0001”;END IF;END IF;END PROCESS MIAOLOW;LOGO_1 <= SEC_LOW(3)AND SEC_LOW(0);SEC_01<= SEC_LOW;MIAOHIGH:PROCESS(CLK,RST)BEGINIF(RST = '0')THENSEC_HIGH <= “0101”;ELSIF(CLK'EVENT AND CLK = '1')THENIF(LOGO_1 = '1')THENIF(SEC_HIGH = “0101”)THENSEC_HIGH <= “0000”;CY_MIN <= '1';ELSESEC_HIGH <= SEC_HIGH + “0001”;CY_MIN <= '0';END IF;END IF;END IF;END PROCESS MIAOHIGH;SEC_1 <= SEC_HIGH;FENLOW:PROCESS(CY_MIN,RST,EN) BEGINIF(RST = '0')THENMIN_LOW <= “1000”;ELSIF(CY_MIN'EVENT AND CY_MIN = '1' AND EN = '1')THEN IF(MIN_LOW = “1001”)THENMIN_LOW <= “0000”;ELSEMIN_LOW <= MIN_LOW + “0001”;END IF;END IF;END PROCESS FENLOW;LOGO_2 <= MIN_LOW(3)AND MIN_LOW(0);MIN_01 <= MIN_LOW;FENHIGH:PROCESS(CY_MIN,RST)BEGINIF(RST = '0')THENMIN_HIGH <= “0101”;ELSIF(Cy_MIN'EVENT AND CY_MIN = '1')THENIF(LOGO_2 = '1')THENIF(MIN_HIGH = “0101”)THENMIN_HIGH <= “0000”;CY_HOU <= '1';ELSEMIN_HIGH <= MIN_HIGH + “0001”;CY_HOU <= '0';END IF;END IF;END IF;END PROCESS FENHIGH;MIN_1 <= MIN_HIGH;SHILOW:PROCESS(CY_HOU,RST,EN)BEGINIF(RST = '0')THENHOU_LOW <= “1001”;ELSIF(CY_HOU'EVENT AND CY_HOU = '1' AND EN = '1')THEN IF(HOU_LOW = “1001”)THENHOU_LOW <= “0000”;ELSIF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THENHOU_LOW <= “0000”;ELSEHOU_LOW <= HOU_LOW + “0001”;END IF;END IF;END PROCESS SHILOW;LOGO_3 <= HOU_LOW(3)AND HOU_LOW(0);HOU_01 <= HOU_LOW;SHIHIGH:PROCESS(Cy_HOU,RST)BEGINIF(RST = '0')THENHOU_HIGH <= “0001”;ELSIF(CY_HOU'EVENT AND CY_HOU = '1')THENIF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THEN HOU_HIGH <= “0000”;ELSIF(LOGO_3 = '1')THENHOU_HIGH <= HOU_HIGH + “0001”;END IF;END IF;END PROCESS SHIHIGH;BEE_CLOCK:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK = '1')THENIF(SEC_HIGH = “0101” AND SEC_LOW = “1001”AND MIN_HIGH = “0101” AND MIN_LOW = “1001”)THENBEE <= '1';ELSEBEE <= '0';END IF;END IF;END PROCESS BEE_CLOCK;HOU_1 <= HOU_HIGH;END behovior;第三篇:EDA数字钟课程设计课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:电子1002班学号:20102625 姓名:于晓指导教师:李世平、李宁设计时间:2012年12月摘要数字钟是一种用数字电路技术实现时、分、秒计时的钟表。
基于e d a的数字钟程序设计文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)一、课题要求:(1)技术要求:1、掌握多功能数字钟的工作原理。
2、应用EDA技术,VHDL语言编写程序。
3、层次化设计,设计原理框图。
4,、硬件设计及排版。
(2)功能要求:1、基本功能:能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟、60秒的计数器显示。
2、扩展功能:(1)能够利用按键实现“校时”“校分”“清零”功能。
(2)能利用扬声器做整点报时,整点前五秒短声,整点长声。
(3)本人工作:负责软件部分,,编写各部分模块的VHDL程序,并且锁定引脚,将程序下载到芯片中。
二、设计方案:原理框图:数字钟原理框图一共有11个小模块:分频,片选,按键,小时,分,秒,显示模块,七段显示译码器,报时,扬声,36译码器。
左边第一个是时钟信号输入端,50Mhz到分频模块。
第二个为清零按键,第三个为校分按键,第四个为校时按键。
右边第一个为七段显示译码器输出端,第二个为扬声器输出端,第三个为6个数码管输出端。
中间模块为数字钟的核心,有计时,报时,校时功能。
三、单元模块设计1、分频模块2、秒模块仿真图为秒的数值,在计时到59时进位1到co端。
当按下s3时,秒清零。
3.、分模块仿真图该模块也为60进制计数器,计时输出为分的数值。
在EN信号有效且时钟来时,计数器加1、在s2按下时,EN使能端有效,实现校分功能。
4、时模块仿真图该模块为24进制计数器,计时输出为小时的数值,在EN信号到来时,计数器加1,在S1按下时,EN信号有效,实现校时功能。
5、片选模块仿真图该模块提供数码管片选信号。
6、按键模块仿真图该模块是有几个门电路组成,把它编写成一个模块,到时写程序方便。
该模块连接几个按键,由按键控制。
7、报时模块仿真图该模块为整点报时提供控制信号,当59分时,秒为50,52,54,56,58时,Q500输出“1”;秒为00时,Q1000输出“1”。
EDA课程设计报告设计题目:数字时钟班级:姓名:学号:日期:一、系统设计要求设计一个具有整点报时功能的数字时钟,要求;1.具有时、分、秒的计数显示功能,24小时循环显示。
2.具有清零、预置初值功能,实现LED动态显示,整点报时采用声音报时。
3.采用元件例化方式实现各模块间的连接。
二、系统设计方案要设计的数字时钟具有基本的计时功能,采用二十四小时计时,显示时分秒,其中分钟和秒模块采用60进制计数器实现,小时模块则需要一24进制计数器实现。
要实现时钟预置初值功能分别设计一个分钟允许置数端和小时允许置数端。
要实现LED动态显示,单独设计一个显示模块。
整点报时采用隔秒响一声实六十进制计数器模块二十四进制计数器模块显示模块元器件例化模块三、主要VHDL源程序六十进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY liushijinzhi ISPORT(clk,clr,en,a: IN STD_LOGIC;load_1,load_10: IN STD_LOGIC_VECTOR(3 DOWNTO 0); co: OUT STD_LOGIC;q_10,q_1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END liushijinzhi;ARCHITECTURE behav OF liushijinzhi ISSIGNAL q1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q10:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c:STD_LOGIC;BEGINPROCESS(clk,clr,a,en,load_1)BEGINIF(clr='1') THENq1<="0000";ELSIF(a='1') THENq1<=load_1;ELSIF(clk'event AND clk='1') THENIF(en='1')thenIF(q1="1001") THENq1<="0000";c<='0';ELSIF(q1="1000") THENq1<=q1+'1';c<='1';ELSEq1<=q1+'1';c<='0';END IF;END IF;END IF;END PROCESS;PROCESS(c,clk,clr,a,load_10)BEGINIF(clr='1') THENq10<="0000";ELSIF(a='1') THENq10<=load_10;ELSIF (clk'event AND clk='1') THENIF(c='1') THENIF(q10="0101") THENq10<="0000";co<='1';ELSEq10<=q10+'1';co<='0';END IF;END IF;END IF;END PROCESS;PROCESS(q1)BEGINCASE q1 ISWHEN"0000"=>q_1<="1111110";WHEN"0001"=>q_1<="0110000";WHEN"0010"=>q_1<="1101101";WHEN"0011"=>q_1<="1111001";WHEN"0100"=>q_1<="0110011";WHEN"0101"=>q_1<="1011011";WHEN"0110"=>q_1<="0011111";WHEN"0111"=>q_1<="1110000";WHEN"1000"=>q_1<="1111111";WHEN"1001"=>q_1<="1110011";WHEN OTHERS=>q_1<="ZZZZZZZ";END CASE;END PROCESS;PROCESS(q10)BEGINCASE q10 ISWHEN"0000"=>q_10<="1111110";WHEN"0001"=>q_10<="0110000";WHEN"0010"=>q_10<="1101101";WHEN"0011"=>q_10<="1111001";WHEN"0100"=>q_10<="0110011";WHEN"0101"=>q_10<="1011011";WHEN OTHERS=>q_10<="ZZZZZZZ";END CASE;END PROCESS;END behav;二十四进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ershisijinzhi ISPORT(clk,clr,en,a:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0); q_1,q_10:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ershisijinzhi;ARCHITECTURE behav OF ershisijinzhi ISSIGNAL c:STD_LOGIC;SIGNAL q1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q10:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,clr,en,a,load_1)BEGINIF(clr='1') THENq1<="0000";ELSIF (a='1') THENq1<=load_1;ELSIF(clk'event AND clk='1') THENIF(q1="0011" AND q10="0010") THENq1<="0000";ELSIF (en='1') THENIF(q1="1001") THENq1<="0000";c<='0';ELSIF(q1="1000") THENq1<=q1+'1';c<='1';ELSEq1<=q1+'1';c<='0';END IF;END IF;END IF;END PROCESS;PROCESS(clk,clr,c,a,q1,load_10)BEGINIF(clr='1') THENq10<="0000";ELSIF (a='1') THENq10<=load_10;ELSIF(clk'event AND clk='1') THENIF(q1="0011" AND q10="0010") THEN q10<="0000";ELSIF (c='1') THENIF(q10="0010") THENq10<="0000";ELSEq10<=q10+'1';END IF;END IF;END IF;END PROCESS;PROCESS(q1)BEGINCASE q1 ISWHEN"0000"=>q_1<="1111110"; WHEN"0001"=>q_1<="0110000"; WHEN"0010"=>q_1<="1101101"; WHEN"0011"=>q_1<="1111001";WHEN"0100"=>q_1<="0110011";WHEN"0101"=>q_1<="1011011";WHEN"0110"=>q_1<="0011111";WHEN"0111"=>q_1<="1110000";WHEN"1000"=>q_1<="1111111";WHEN"1001"=>q_1<="1110011";WHEN OTHERS=>q_1<="ZZZZZZZ";END CASE;END PROCESS;PROCESS(q10)BEGINCASE q10 ISWHEN"0000"=>q_10<="1111110";WHEN"0001"=>q_10<="0110000";WHEN"0010"=>q_10<="1101101";WHEN OTHERS=>q_10<="ZZZZZZZ";END CASE;END PROCESS;END behav;显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY qdmkz ISPORT(clk,clr:IN STD_LOGIC;din1,din2,din3,din4,din5,din6:IN STD_LOGIC_VECTOR(6 DOWNTO 0); sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END qdmkz;ARCHITECTURE behav OF qdmkz ISSIGNAL q :STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINsel<=q;PROCESS(clk,clr)BEGINIF(clr='1') THENq<="101";ELSIF(clk'event AND clk='1') THENIF(q="000") THENq<="101";ELSEq<=q-'1';END IF;END IF;END PROCESS;PROCESS(q,din1,din2,din3,din4,din5,din6)BEGINCASE q ISWHEN "101"=>num<=din1;WHEN "100"=>num<=din2;WHEN "011"=>num<=din3;WHEN "010"=>num<=din4;WHEN "001"=>num<=din5;WHEN "000"=>num<=din6;WHEN OTHERS=>num<="ZZZZZZZ";END CASE;END PROCESS;END behav;元器件例化模块含报时LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shuzishizhong ISPORT(clk1,clk2,clrh,clrm,clrs,clr,ah,am,as,en:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);alm:OUT STD_LOGIC);END shuzishizhong;ARCHITECTURE one OF shuzishizhong ISCOMPONENT liushijinzhi ISPORT(clk,clr,en,a: IN STD_LOGIC;load_1,load_10: IN STD_LOGIC_VECTOR(3 DOWNTO 0);co: OUT STD_LOGIC;q_10,q_1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT ershisijinzhi ISPORT(clk,clr,en,a:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q_1,q_10:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT qdmkz ISPORT(clk,clr:IN STD_LOGIC;din1,din2,din3,din4,din5,din6:IN STD_LOGIC_VECTOR(6 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;SIGNAL co1,co2:STD_LOGIC;SIGNAL sq_1,sq_10,mq_1,mq_10,hq_1,hq_10:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINu1:liushijinzhi PORT MAP (clk1,clrs,en,as,load_1,load_10,co1,sq_10,sq_1);u2:liushijinzhi PORT MAP (co1,clrm,en,am,load_1,load_10,co2,mq_10,mq_1);u3:ershisijinzhi PORT MAP (co2,clrh,en,ah,load_1,load_10,hq_1,hq_10);u4:qdmkz PORT MAP(clk2,clr,hq_10,hq_1,mq_10,mq_1,sq_10,sq_1,sel,num);PROCESS(sq_10,sq_1,mq_10,mq_1,hq_10,hq_1)BEGINIF(((hq_10="1111110" AND hq_1="1111110")OR(hq_10="0110000" AND hq_1="1101101")) AND mq_1="1111110"AND mq_10="1111110" AND ((sq_10="1111110"AND(sq_1="1111110"OR sq_1="1101101"OR sq_1="0110011"OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND(sq_1="1111110"OR sq_1="1101101"OR sq_1="0110011"OR sq_1="0011111"OR sq_1="1111111")) OR(sq_10="1101101"AND(sq_1="1111110"OR sq_1="1101101")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0110000") OR (hq_10="0110000" AND hq_1="1111001")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND sq_1="1111110") THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1101101") OR (hq_10="0110000" AND hq_1="0110011")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1111001") OR (hq_10="0110000" AND hq_1="1011011")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0110011") OR (hq_10="0110000" AND hq_1="0011111")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1011011") OR (hq_10="0110000" AND hq_1="1110000")) AND mq_1="1111110"AND mq_10="1111110"AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0011111") OR (hq_10="0110000" AND hq_1="1111111")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND sq_1="1111110"))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1110000") OR (hq_10="0110000" AND hq_1="1110011")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1111111") OR (hq_10="1101101" AND hq_1="1111110")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1110011") OR (hq_10="1101101" AND hq_1="0110000")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111")))) THENalm<='1';ELSIF(((hq_10="0110000" AND hq_1="1111110") OR (hq_10="1101101" AND hq_1="1101101")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111" OR sq_1="1111111")))) THENalm<='1';ELSIF(((hq_10="0110000" AND hq_1="0110000") OR (hq_10="1101101" AND hq_1="1111001")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111" OR sq_1="1111111"))OR(sq_10="1101101"AND sq_1="1111110"))) THENalm<='1';ELSEalm<='0';END IF;END PROCESS;END;四、系统仿真/硬件验证五、设计中遇到的问题与体会在置数方面,第一次写时,在时钟沿内,同步置数,下载在试验箱上很难实现,于是把置数改成异步置数。
摘要本设计为一个数字时钟万年历,具有年、月、日、时、分、秒计数显示功能,以24小时循环计数,具有校对功能。
本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在Quartu sⅡ工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的万年历。
EDA是电子设计自动化(Electronic Design Automation)的缩写,EDA技术是现代电子工程领域的一门新技术,它提供了基于计数机和信息技术的电路系统设计方法。
随着EDA技术的发展,硬件电子电路的设计几乎全部可以依靠计算机来完成,这样就大大缩短了硬件电子电路设计的周期,从而使制造商可以快速开发出品种多,批量小的产品,以满足市场的众多需求。
系统主芯片采用EP2C35F484C8,由时钟模块、控制模块、计时模块、数据译码模块、显示模块组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成年、月、日和时、分、秒的分别显示,由按键输入进行数字钟的校时、清零、启停功能。
关键词数字时钟万年历;VHDL;FPGAAbstractThe design for a multi-functional digital clock calendar, with a year, month, day, hours, minutes and seconds count display to a 24-hour cycle count; have proof functions.The use of EDA design technology, hardware-description language VHDL description logic means for the system design documents, in Quartu s Ⅱtools environment, a top-down design, by the various modules together build a FPGA-based digital clock.Electronic design automation EDA (Electronic Design Automation) acronym, EDA technology of modern electrical engineering is a field of new technology, which provides information technology based on counting machine and the circuit design. With the development of EDA technology, hardware design of electronic circuits can rely on almost all computers to be completed, thus greatly reducing the hardware electronic circuit design cycle, enabling manufacturers to quickly develop varieties, small batch of products to meet the the many needs of the market.The main system chips used EP2C35F484C8,make up of the clock module, control module, time module, data decoding module, display and broadcast module. After compiling the design and simulation procedures, the programmable logic device to download verification, the system can complete the year, month, day and the hours, minutes and seconds respectively, using keys to modify, cleared , start and stop the digital clock.Keywords digital clock calendar; VHDL; FPGA目录摘要 (I)1 绪论 (1)1.1 选题背景 (1)1.1.1 课题相关技术的发展 (2)1.1.2 课题研究的必要性 (2)1.2 课题研究的内容 (3)2 FPGA简介 (4)2.1 FPGA概述 (4)2.2 FPGA基本结构 (4)2.3 FPGA系统设计流程 (7)2.4 FPGA开发编程原理 (9)3数字钟总体设计方案 (10)3.1 数字钟的构成 (10)3.2 数字钟的工作原理 (11)4 单元电路设计 (13)4.1 分频模块电路设计与实现 (13)4.2 校时控制模块电路设计与实现 (14)4.2.1 键盘接口电路原理 (14)4.2.2 键盘接口的VHDL描述 (15)4.3 计数模块设计与实现 (23)4.3.1 秒计数模块 (23)4.3.2 日计数模块 (26)4.3.3 月计数和年计数模块 (29)4.4 动态扫描及显示电路设计与实现 (31)4.4.1 动态扫描模块 (31)4.4.2 显示模块 (32)5 实验结论 (33)致谢 (34)参考文献 (36)附录1程序 (36)附录2英文资料及中文翻译 (35)附录3万年历整体框图 (35)1绪论现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
电子系统课程设计任务书设计题目:基于EDA技术的数字时钟设计设计目的:课程设计是一种复杂的学习实践过程。
设计过程采用系统设计的方法,先分析任务,得到系统设计的要求,然后进行总体设计,划分子系统模块,然后进行详细设计,编写各个功能子系统VHDL代码并进行功能仿真,最后进行整个系统总装并仿真。
设计内容:设计一个采用0.5英寸LED数码管显示的数字时钟系统,工作电源5V,它采用24小时制,具有“时”、“分”、“秒”显示,并且可以校正时间显示。
设计要求:1.由石英晶体多谐振荡器20MHz和分频器产生1Hz标准秒脉冲;(说明:EDA试验箱中晶振频率20MHz,经试验箱内一系列二分频可将频率降低,但无法直接产生1Hz信号,需要大家根据实际情况编制分频器得到1Hz信号);2.秒电路、分电路均为60进制计数,时电路为24进制计数;3.数码管采用动态扫描方式;4.能动手校时,校时模块功能可以自由发挥。
比如可用两个按钮实现校时,A按钮控制调整项目,B按钮调整数字,B按钮还可以根据按下时间长短实现慢调、快调功能。
也可以用三个按钮实现增减两个方向的手动校时。
校时用按钮开关不能超过4个;5.扩展内容:1)进入校时状态后,被调整数字以2Hz闪烁;2)24/12小时可调,处于12小时制时,要有AM/PM显示;3)所有开关加入防抖设计;4)加入检测外部环境亮度功能,夜间自动降低数码管显示亮度;5)加入整点报时电路;6)增加秒表功能;7)增加报闹功能。
6.以上电路功能除外部环境亮度检测电路外均由VHDL代码实现层次式设计,顶层电路可以采用EDA电路图。
设计成果:1.课程设计说明书,要求内容完整,图表完备,条理清楚,字迹工整,程序完整有相应的注解,仿真波形设计合理有必要的分析,引用资料要注明出处。
2.顶层电路原理图,各层电路VHDL代码及仿真波形。
设计说明书目录一、前言二、任务分析和方案设计三、外部输入输出要求四、内部各功能模块1)分频模块2) 秒计数模块SECOND3) 分计数模块MINUTE4)时计数模块HOUR5)整点报时功能模块ALERT6)扫描模块SELTIME7)译码显示功能模块DISPLAY8)按键防抖模块KEY五、系统顶层设计图六、各模块块程序七、心得体会参考文献基于EDA技术的数字时钟设计一.前言EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA 软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
二.任务分析和方案设计根据设计内容与要求知,本系统由分频模块(20MHz变为1Hz)、秒计数模块(六十进制)、分计数模块(六十进制)、时计数模块(二十四进制)、时间数据扫描分时选择模块和8421BCD 到7段码的译码模块,再加上一个整点报时模块和按键防抖模块作为发挥部分。
设计框图三、外部输入输出要求1.输入接口代表清零,调时,调分信号RESET、SETHOUR、SETMIN 的引脚分别接高电平、KEY1、KEY2;代表计数时钟信号CLK和扫描时钟信号CLKDSP的引脚分别同1HZ时钟源和200HZ(或更高)时钟源相连。
2.输出接口代表扫描显示驱动信号SEL[2..0]连到SEL2、SEL1、SEL0端,段码信号输出abcdefg连接到7段数码管的段码插口abcdefg端,小数点DP输出端同7段数码管的段码插口DP 相连;代表扬声器驱动信号的引脚SPEAKER同扬声器驱动接口SPEAKER相连;代表花样LED灯显示的信号引脚LAMP[2..0]同3个LED灯相连。
四、内部各功能模块:1)FREQ分频模块:整点报时用的200Hz与时钟用的1Hz的脉冲信号,这里的输入信号是20MHz信号,所以要设计两个分频器,将20MHz变为1Hz、200Hz。
程序见后面。
例图为1000分频,输入为5MHz,输出为5KHz.2)秒计数模块SECOND:60进制,带有进位和清零功能的,输入为1Hz脉冲和高电平有效的清零信号RESET。
程序见后面。
3)分计数模块MINUTE60进制,带有进位和置数功能的,输入为1Hz脉冲和高电平有效的使能信号EN。
程序见后面。
4)时计数模块HOUR:24进制,输入为1Hz脉冲和高电平有效的使能信号EN。
程序见后面。
5)整点报时功能模块ALERT:输入为分/秒信号,输出为SPEAK信号。
程序见后面。
6)扫描模块SELTIME:输入为秒、分、时、扫描时钟CLK1,输出为DP和显示控制信号SEL。
程序见后面。
7)译码显示功能模块DISPLAY:输入为NUM,输出为LED。
程序见后面。
8)按键防抖模块KEY输入为按键信号和20MHz的时钟信号,输出为CK信号。
程序见后面。
五、系统顶层设计图六、各模块程序1.分频器a(20MHZ分成1HZ)程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq1 isport(clk:in std_logic;freout:out std_logic);end freq1;architecture behave of freq1 issignal full:std_logic;beginp1:process(clk)variable cqi:std_logic_vector(23 downto 0);beginif clk'event and clk='1' thenif cqi<9999999 thencqi:=cqi+1;else cqi:=(others=>'0');end if;end if;if cqi=9999999 then full<='1';else full<='0';end if;end process;p2:process(full)variable cnt1:std_logic;beginif full'event and full='1' thencnt1:=not cnt1;if cnt1='1' thenfreout<='1';elsefreout<='0';end if;end if;end process;end behave;2.分频器b(20MHz分为200Hz)程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq2 isport(clk:in std_logic;freout:out std_logic);end freq2;architecture fun of freq2 isbeginp1:process(clk)variable cq:std_logic_vector(17 downto 0);beginif clk'event and clk='1' thenif cq<99999 thencq:=cq+1;else cq:=(others=>'0');end if;end if;if cq=99999 then freout<='1';else freout<='0';end if;end process;end fun;由上面程序原理可得1000分频的波形图3.秒计数器LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY second ISPORT(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 ISSIGNAL count:STD_LOGIC_VECTOR(6 downto 0);SIGNAL enmin_1,enmin_2:STD_LOGIC; \\enmin-1为59秒时进位信号BEGIN \\enmin-2:由clk调制后的手动调分脉冲信号串daout<=count;enmin_2<=(setmin and clk); \\setmin为手动分控制信号、高电平有效enmin<=(enmin_1 or enmin_2); \\enmin为向分进位信号PROCESS(clk,reset,setmin)beginif (reset='0') then count<="0000000"; \\若reset为0,则异步清零(即直接复0)elsif (clk'event and clk='1') then \\否则,若clk上升沿到if (count(3 downto 0)="1001") then \\若个位计数值恰好到“1001”if(count<16#60#) then \\ 又若count小于16#60#(即X“60” ;即60H,为十六进制数写法)if (count="1011001") then \\又若count已到59Denmin_1<='1';count<="0000000";\\则置进位为1及count复0else \\若count未到59Dcount<=count+7; \\则加7,而+7=+1+6,即作“加6校正”,使前面16#60#的end if; \\个位转变为8421BCD的容量,即个位的最大值只能是1001了(注)else \\若count不小于16#60#,(即count等于或大于16#60#)count<="0000000"; \\则count复0(有此句,则对无效状态电路可自启动)end if; \\ end if(count<16#60#)elsif (count<16#60#) then \\若个位计数未达到“1001”则转到此句再判:否则若count<16#60#count<=count+1; \\则count加1enmin_1<='0' after 100 ns; \\没有进位发生else \\否则,若count不小于16#60#(即count等于或大于16#60#)count<="0000000"; \\则count复0(有此句,则对无效状态电路可自启动)end if; \\end if(count(3 downto 0)=”1001”)end if; \\end if(reset=’0’)end process;END fun;仿真波形图如下:4.分计数器LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY minute ISPORT(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 ISSIGNAL count:STD_LOGIC_VECTOR(6 downto 0);SIGNAL enhour_1,enhour_2:STD_LOGIC;BEGINdaout<=count;enhour_2<=(sethour and clk1);enhour<=(enhour_1 or enhour_2);process(clk,reset,sethour)beginif(reset='0')thencount<="0000000";elsif(clk'event and clk='1')thenif(count(3 downto 0)="1001")thenif(count<16#60#)thenif(count="1011001")thenenhour_1<='1';count<="0000000";ELSEcount<=count+7;end if;elsecount<="0000000";end if;elsif(count<16#60#)thencount<=count+1;enhour_1<='0' after 100 ns;elsecount<="0000000";end if;end if;end process;END fun;仿真波形如下图;5.小时文本LIBRARY ieee;use ieee .std_logic_1164.all;use ieee .std_logic_unsigned.all;ENTITY hour ISPORT(clk,reset:IN STD_LOGIC;daout:out std_logic_vector(5 downto 0));END entity hour;ARCHITECTURE fun OF hour ISSIGNAL count:STD_LOGIC_VECTOR(5 downto 0); BEGINdaout<=count;process(clk,reset)beginif(reset='0')thencount<="000000";elsif(clk'event and clk='1')thenif(count(3 downto 0)="1001")thenif(count<16#23#)thencount<=count+7;elsecount<="000000";end if;elsif(count<16#23#)thencount<=count+1;elsecount<="000000";end if;end if;end process;END fun;仿真波形如下图:6.报警文本LIBRARY ieee;use ieee .std_logic_1164.all;use ieee .std_logic_unsigned.all;ENTITY alert ISPORT(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 ISsignal count:std_logic_vector(1 downto 0);signal count1:std_logic_vector(1 downto 0);BEGINspeaker:process(clk)beginspeak<=count(1);if(clk'event and clk='1')thenif(dain="0000000")thenif(count1>="10")thencount1<="00"; \\-count1为三进制加法计数器elsecount1<=count1+1;end if;end if;end if;end process speaker;lamper:process(clk)beginif(rising_edge(clk))thenif(count<="10")thenif(count="00")thenlamp<="001"; \\循环点亮3只LED灯elsif(count="01")thenlamp<="010";elsif(count="10")thenlamp<="100";end if;count<=count+1;elsecount<="00";end if;end if;end process lamper;END fun;7.时间数据扫描分时选择模块文本LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY seltime ISPORT(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 ISSIGNAL count:STD_LOGIC_vector(2 downto 0);BEGINsel<=count;process(clk1,reset)beginif(reset='0')thencount<="000";elsif(clk1'event and clk1='1')thenif(count>="101")thencount<="000";elsecount<=count+1;end if;end if;case count iswhen"000"=>daout<=sec(3 downto 0);dp<='0'; \\送出秒个位,秒个位的dp 不点亮when"001"=>daout(3)<='0';daout(2 downto 0)<=sec(6 downto 4); \\送出秒十位dp<='0'; \\秒十位的dp不点亮when"010"=>daout<=min(3 downto 0);dp<='1'; \\送出分个位,分个位的dp 点亮when"011"=>daout(3)<='0';daout(2 downto 0)<=min(6 downto 4); \\送出分十位dp<='0'; \\分十位的dp不点亮when"100"=>daout<=hour(3 downto 0);dp<='1'; \\送出小时个位,小时个位的dp点亮when others=>daout(3 downto 2)<="00"; \\送出小时十位daout(1 downto 0)<=hour(5 downto 4);dp<='0'; \\小时十位的dp不点亮end case;end processend fun;8.译码器文本LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY deled ISPORT(num: IN std_logic_vector(3 downto 0);led: OUT std_logic_vector(6 downto 0));END deled;ARCHITECTURE fun OF deled ISBEGIN--abcdefgled<="1111110" when num="0000" else \\7段管显示0,led[6..0]=7EH "0110000" when num="0001" else \\7段管显示1,led[6..0]=30H"1101101" when num="0010" else \\7段管显示2,led[6..0]=6DH"1111001" when num="0011" else \\ 7段管显示3,led[6..0]=79H"0110011" when num="0100" else \\7段管显示4,led[6..0]=33H"1011011" when num="0101" else \\ 7段管显示5,led[6..0]=5BH "1011111" when num="0110" else \\7段管显示6,led[6..0]=5FH"1110000" when num="0111" else \\ 7段管显示7,led[6..0]=70H"1111111" when num="1000" else \\ 7段管显示8,led[6..0]=7FH"1111011" when num="1001" else \\7段管显示9,led[6..0]=7BH"1110111" when num="1010" else \\ 7段管显示A,led[6..0]=77H "0011111" when num="1011" else \\ 7段管显示b,led[6..0]=1FH"1001110" when num="1100" else \\ 7段管显示C,led[6..0]=4EH "0111101" when num="1101" else \\ 7段管显示d,led[6..0]=3DH "1001111" when num="1110" else \\ 7段管显示E,led[6..0]=4FH "1000111" when num="1111" ; \\ 7段管显示F,led[6..0]=47H END fun;9.按键A、B防抖程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key isport(clk1,key1: in std_logic;ck1:out std_logic);end entity key;architecture fun of key issignal tmp1:std_logic_vector(9 downto 0);beginprocess(clk1)beginif rising_edge(clk1) thentmp1(0)<=key1;tmp1(9 downto 1)<=tmp1(8 downto 0);if tmp1="1111111111" then ck1<='1';else ck1<='0';end if ;end if;end process;end fun;仿真波形为:七、心得体会论文的撰写过程是对所学的电子技术基本理论知识的综合运用,对三年专业知识的一次综合应用、扩充和深化,也是对我们理论运用于实际设计的一次锻炼。