FPGA实训报告——简易数字钟
用fpga简易数字钟电路设计实验报告 概述及解释说明
用fpga简易数字钟电路设计实验报告概述及解释说明1. 引言1.1 概述本实验报告旨在介绍使用FPGA(可编程门阵列)设计的简易数字钟电路。
数字钟是一种可以显示时间的时钟装置,广泛应用于日常生活和工业领域。
本文将详细讲解数字钟的设计原理、硬件要求、设计步骤以及实验的实现过程。
1.2 文章结构本文共分为五个部分,即引言、FPGA简易数字钟电路设计、实验实现过程、实验结果分析和结论与总结。
下面将对每个部分进行具体说明。
1.3 目的该实验旨在通过学习和操作FPGA,深入理解数字电路设计的基本原理和方法,并通过设计一个简易的数字钟电路来巩固所学知识。
通过本实验,我们还将探索数字钟电路的性能评估和可能的改进方向,并对未来发展方向进行展望。
同时,通过参与这个项目,我们也将获得一定的实践经验和技能提升。
2. FPGA简易数字钟电路设计:2.1 设计原理:在本次实验中,我们使用FPGA(现场可编程逻辑门阵列)来设计一个简易的数字钟电路。
FPGA是一种集成电路芯片,可依据用户需要重新配置其内部互连,从而实现不同的逻辑功能。
我们将利用FPGA的可编程性和强大的计算能力来实现数字钟的功能。
该数字钟电路主要由时钟模块、倒计时模块和显示模块组成。
时钟模块负责产生稳定而精确的脉冲信号作为系统的时基;倒计时模块通过对输入时间进行倒计时操作,并发出相应信号提示时间变化;显示模块用于将倒计时结果以数码管显示出来。
2.2 硬件要求:为了完成该设计,我们需要准备以下硬件设备:- FPGA开发板:提供了外部接口和资源,用于连接其他硬件设备并加载程序。
- 数码管:用于显示时间信息。
- 时钟源:提供稳定而精确的脉冲信号作为系统的时基。
2.3 设计步骤:以下是设计步骤的详细说明:1. 确定所需功能:首先明确数字钟需要具备哪些功能,例如12小时制还是24小时制、倒计时功能等。
2. 确定FPGA型号:根据设计需求和资源限制,选择适合的FPGA型号。
数字钟实习报告总结
实习报告总结:数字钟设计与实现一、实习背景与目的随着现代电子技术的快速发展,数字钟作为一种常见的电子设备,已经被广泛应用于日常生活和工业领域。
本次实习的主要目的是学习和掌握数字钟的设计与实现方法,培养自己的实际动手能力和创新思维能力。
二、实习内容与过程1. 数字钟的设计原理在实习初期,我首先学习了数字钟的设计原理,包括数字电路的基本组成、时钟信号的产生与处理、显示电路的设计等。
通过学习,我了解了数字钟的工作原理和设计思路,为后续的实际操作奠定了基础。
2. 硬件设计在硬件设计方面,我选择了常用的微控制器AT89S52作为数字钟的控制核心。
通过编程,实现了时钟信号的产生、分秒的计数和显示等功能。
同时,我还设计了按键输入电路,以便进行时间设置和调整。
3. 软件编程在软件编程方面,我使用了C语言进行编程。
通过编写程序,实现了数字钟的计时、显示等功能。
在程序设计过程中,我充分运用了所学的算法和编程技巧,提高了自己的编程能力。
4. 系统调试与优化在系统调试阶段,我通过不断测试和调整,发现并解决了数字钟运行中出现的问题。
同时,我对程序进行了优化,提高了数字钟的运行效率和稳定性。
三、实习收获与总结通过本次实习,我收获颇丰。
首先,我掌握了数字钟的设计原理和实现方法,为自己的实际工作积累了宝贵的经验。
其次,我在硬件设计和软件编程方面提高了自己的实际动手能力,为今后的职业发展打下了基础。
最后,我在实习过程中培养了团队协作意识和创新思维能力,对自己的人生发展具有积极意义。
同时,我也认识到自己在本次实习中存在的不足。
例如,在硬件焊接和调试过程中,我对一些细节处理不够到位,导致数字钟运行不稳定。
在今后的工作中,我将更加注重细节,提高自己的动手能力。
总之,本次实习使我受益匪浅。
通过学习和实践,我掌握了数字钟的设计与实现方法,提高了自己的实际动手能力和创新思维能力。
在今后的学习和工作中,我将继续努力,不断提高自己,为实现自己的职业目标奋斗。
FPGA可调数字时钟实验报告
一、实验要求1、用vhdl编程,实现10进制计数器2、用vhdl编程,实现60进制计数器3、用vhdl编程,实现数字时钟,时、分、秒、毫秒分别显示在数码管上。
4、实现可调数字时钟的程序设计,用按键实现时、分、秒、毫秒的调整。
二、实验原理用VHDL,行为级描述语言实现实验要求。
思路如下:1、分频部分:由50MHZ分频实现1ms的技术,需要对50MHZ采取500000分频。
2、计数部分:采用低级影响高级的想法,类似进位加1的思路。
对8个寄存器进行计数,同步数码管输出。
3、数码管输出部分:用一个拨码开关控制显示,当sw0=0时,四位数码管显示秒、毫秒的计数。
当sw0=1时,四位数码管显示时、分得计数。
4、调整部分:分别用四个按键控制时、分、秒、毫秒的数值。
先由一个开关控制计数暂停,然后,当按键按下一次,对应的数码管相对之前的数值加1,,通过按键实现时间控制,最后开关控制恢复计数,完成时间调整。
5、整个实现过程由一个文件实现。
三、实验过程各个引脚说明:Clk:50MHZSW:数码管切换,SW=’0’时,数码管显示为秒,毫秒。
SW=’1’时,数码管显示为时,分。
SW1:暂停与启动。
SW1=’0’时,时钟启动,SW=’1’时,时钟暂停。
SW2:时钟调整接通按钮,当SW2=’0’时,不进行调整,当SW=’1’时,通过按键调整时间。
KEY0:毫秒调整,按一次实现+1功能KEY1:秒调整,按一次实现+1功能KEY2:分调整,按一次实现+1功能KEY3:时调整,按一次实现+1功能Q0;第一个数码管Q1; 第二个数码管Q2: 第三个数码管Q3: 第四个数码管1、源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity paobiao isport(clk,sw,key0,key1,key2,key3,sw1,sw2:in std_logic;q0:out std_logic_vector(6 downto 0);q1:out std_logic_vector(6 downto 0);q2:out std_logic_vector(6 downto 0);q3:out std_logic_vector(6 downto 0));end paobiao;architecture behave of paobiao issignal cntt1 :integer range 0 to 10;signal cntt2 :integer range 0 to 10;signal cntt3 :integer range 0 to 10;signal cntt4 :integer range 0 to 6;signal cntt5 :integer range 0 to 10;signal cntt6 :integer range 0 to 10;signal cntt7 :integer range 0 to 10;signal cntt8 :integer range 0 to 6;signal cntttt1 :integer range 0 to 10;signal cntttt2 :integer range 0 to 10;signal cntttt3 :integer range 0 to 10;signal cntttt4 :integer range 0 to 6;signal cntttt5 :integer range 0 to 10;signal cntttt6 :integer range 0 to 10;signal cntttt7 :integer range 0 to 10;signal cntttt8 :integer range 0 to 6;beginprocess (clk)--,key0,key1,key2,key3)variable cnt :integer range 0 to 500000;--variable cnt9 :integer range 0 to 3000000000;variable cnt1 :integer range 0 to 10;variable cnt2 :integer range 0 to 10;variable cnt3 :integer range 0 to 10;variable cnt4 :integer range 0 to 6;variable cnt5 :integer range 0 to 10;variable cnt6 :integer range 0 to 10;variable cnt7 :integer range 0 to 10;variable cnt8:integer range 0 to 6;beginif(clk'event and clk='1') thenif(sw1='0') thenif(cnt>=2) thencnt:=0;cnt1:=cnt1+1;if (cnt1=10) thencnt1:=0;cnt2:=cnt2+1;if(cnt2=10) thencnt1:=0;cnt2:=0;cnt3:=cnt3+1;if(cnt3=10) thencnt1:=0;cnt2:=0;cnt3:=0;cnt4:=cnt4+1;if(cnt4=6) thencnt1:=0;cnt2:=0;cnt3:=0;cnt4:=0;cnt5:=cnt5+1; if (cnt5=10) thencnt5:=0;cnt6:=cnt6+1;if(cnt6=6) thencnt5:=0;cnt6:=0;cnt7:=cnt7+1;if(cnt7=4) thencnt5:=0;cnt6:=0;cnt7:=0;cnt8:=cnt8+1;if(cnt8=3) thencnt5:=0;cnt6:=0;cnt7:=0;cnt8:=0;end if;end if;end if;end if;end if;end if;end if;end if;else cnt:=cnt+1;end if;if(sw2='0') thencntt1<=cnt1;cntt2<=cnt2;cntt3<=cnt3;cntt4<=cnt4;cntt5<=cnt5;cntt6<=cnt6;cntt7<=cnt7;cntt8<=cnt8;elsecnt1:=cntttt1;cnt2:=cntttt2;cnt3:=cntttt3;cnt4:=cntttt4;cnt5:=cntttt5;cnt6:=cntttt6;cnt7:=cntttt7;cnt8:=cntttt8;cntt1<=cnt1;cntt2<=cnt2;cntt3<=cnt3;cntt4<=cnt4;cntt5<=cnt5;cntt6<=cnt6;cntt7<=cnt7;cntt8<=cnt8;end if;end if;end if;end process;process (key0)variable cnttt1 :integer range 0 to 10; variable cnttt2 :integer range 0 to 10; beginif(key0'event and key0='0') thencnttt1:=cnttt1+1;if(cnttt1=10) thencnttt1:=0;cnttt2:=cnttt2+1;if(cnttt2=10) thencnttt2:=0;end if;end if;cntttt1<=cnttt1;cntttt2<=cnttt2;end if;end process;process (key1)variable cnttt3 :integer range 0 to 10; variable cnttt4 :integer range 0 to 10; beginif(key1'event and key1='0') thencnttt3:=cnttt3+1;if(cnttt3=10) thencnttt3:=0;cnttt4:=cnttt4+1;if(cnttt4=6) thencnttt4:=0;end if;end if;cntttt3<=cnttt3;cntttt4<=cnttt4;end if;end process;process(key2)variable cnttt5 :integer range 0 to 10; variable cnttt6 :integer range 0 to 10; beginif(key2'event and key2='0') thencnttt5:=cnttt5+1;if(cnttt5=10) thencnttt5:=0;cnttt6:=cnttt6+1;if(cnttt6=6) thencnttt6:=0;end if;end if;cntttt5<=cnttt5;cntttt6<=cnttt6;end if;end process;process(key3)variable cnttt7 :integer range 0 to 10; variable cnttt8 :integer range 0 to 10; beginif (key3'event and key3='0') thencnttt7:=cnttt7+1;if(cnttt7=4) thencnttt7:=0;cnttt8:=cnttt8+1;if(cnttt8=3) thencnttt8:=0;end if;end if;cntttt7<=cnttt7;cntttt8<=cnttt8;end if;end process;--end if;--end process;process(cntt1,cntt5)beginif(sw='0') thencase cntt1 iswhen 0=>q0<="1000000";when 1=>q0<="1111001";when 2=>q0<="0100100";when 3=>q0<="0110000";when 4=>q0<="0011001";when 5=>q0<="0010010";when 6=>q0<="0000010";when 7=>q0<="1011000";when 8=>q0<="0000000";when 9=>q0<="0010000";when others=>q0<=NULL;end case;elsecase cntt5 iswhen 0=>q0<="1000000";when 1=>q0<="1111001";when 2=>q0<="0100100";when 3=>q0<="0110000";when 4=>q0<="0011001";when 5=>q0<="0010010";when 6=>q0<="0000010";when 7=>q0<="1011000";when 8=>q0<="0000000";when 9=>q0<="0010000";when others=>q0<=NULL;end case;end if;end process;process(cntt2,cntt6)beginif(sw='0') thencase cntt2 iswhen 0=>q1<="1000000";when 1=>q1<="1111001";when 2=>q1<="0100100";when 3=>q1<="0110000";when 4=>q1<="0011001";when 5=>q1<="0010010";when 6=>q1<="0000010";when 7=>q1<="1011000";when 8=>q1<="0000000";when 9=>q1<="0010000";when others=>q1<=NULL;end case;elsecase cntt6 iswhen 0=>q1<="1000000";when 1=>q1<="1111001";when 2=>q1<="0100100";when 3=>q1<="0110000";when 4=>q1<="0011001";when 5=>q1<="0010010";when 6=>q1<="0000010";when 7=>q1<="1011000";when 8=>q1<="0000000";when 9=>q1<="0010000";when others=>q1<=NULL;end case;end if;end process;process(cntt3,cntt7)beginif(sw='0') thencase cntt3 iswhen 0=>q2<="1000000";when 1=>q2<="1111001";when 2=>q2<="0100100";when 3=>q2<="0110000";when 4=>q2<="0011001";when 5=>q2<="0010010";when 6=>q2<="0000010";when 7=>q2<="1011000";when 8=>q2<="0000000";when 9=>q2<="0010000";when others=>q2<=NULL;end case;elsecase cntt7 iswhen 0=>q2<="1000000";when 1=>q2<="1111001";when 2=>q2<="0100100";when 3=>q2<="0110000";when 4=>q2<="0011001";when 5=>q2<="0010010";when 6=>q2<="0000010";when 7=>q2<="1011000";when 8=>q2<="0000000";when 9=>q2<="0010000";when others=>q2<=NULL;end case;end if;end process;process(cntt4,cntt8)beginif(sw='0') thencase cntt4 iswhen 0=>q3<="1000000";when 1=>q3<="1111001";when 2=>q3<="0100100";when 3=>q3<="0110000";when 4=>q3<="0011001";when 5=>q3<="0010010";when others=>q3<=NULL;end case;elsecase cntt8 iswhen 0=>q3<="1000000";when 1=>q3<="1111001";when 2=>q3<="0100100";when 3=>q3<="0110000";when 4=>q3<="0011001";when 5=>q3<="0010010";when 6=>q3<="0000010";-- when 7=>q3<="1011000";-- when 8=>q3<="0000000";--when 9=>q3<="0010000";when others=>q3<=NULL;end case;end if;end process;end behave;2、原理图如下:3、功能仿真如下1、秒、毫秒计数仿真2、分、时计数仿真注释:由于仿真时间限制,小时不能显示。
FPGA数字钟报告大作业
FPGA课程设计实验报告题目:基于FPGA 的数字钟设计学院:电子信息学院专业:电子与通讯工程学号:*********姓名:***基于FPGA的数字钟设计一、功能介绍1.在七段数码管上具有时--分--秒的依次显示。
2.时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数。
3.整点报时,当计数到整点时扬声器发出响声。
4.时间设置:可以通过按键手动调节秒和分的数值。
此功能中可通过按键实现整体清零和暂停的功能。
5.LED灯循环显示:在时钟正常计数下,LED灯被依次循环点亮。
待增加功能:1.实现手动调节闹铃时间,在制定时间使扬声器发声。
2.实现微妙的快速计数功能,可实现暂停、保存当前时间、继续计数的功能。
二、设计方案本文数字钟的设计采用了自顶向下分模块的设计。
底层是实现各功能的模块,各模块由vhdl语言编程实现:顶层采用原理图形式调用。
其中底层模块包括秒、分、时三个计数器模块、按键去抖动模块、按键控制模块、时钟分频模块、数码管显示模块共7个模块。
设计框图如下:图一数字钟系统设计框图由图1可以清晰的看到数字钟系统设计中各功能模块间连接关系。
系统时钟50MHZ经过分频后产生1秒的时钟信号,1秒的时钟信号作为秒计数模块的输入信号,秒计数模块产生的进位信号作为分计数模块的输入信号,分计数模块的进位信号作为时计数模块的输入信号。
秒计数模块、分计数模块、时计数模块的计数输出分别送到显示模块。
由于设计中要使用按键进行调节时间,而按键的动作过程中存在产生得脉冲的不稳定问题,所以就牵扯到按键去抖动的问题,对此系统中设置了按键去抖动模块,按键去抖动模块产生稳定的脉冲信号送入按键控制模块,按键控制模块根据按键的动作对秒、分、时进行调节。
图二数字钟的顶层设计原理图三、设计过程由数字钟的顶层设计原理图可知:系统的外部输入即为系统的时钟信号CLK =50MHZ,系统的外部输出有蜂鸣器信号buzzer,LED显示信号LED[3..1]和shan(与按键去抖动模块的o3相连),数码管显示信号xianshi[7..0],数码管位选信号xuanze[7..0]。
基于fpga的数字钟设计心得体会
基于fpga的数字钟设计心得体会为期两周的实训就这样结束了,这两周让我收获了不少。
我的第一次PLC实训主要有两个项目:LED灯控制系统的设计方法和应用机械手控制系统的设计,同时我们还学习了PLC外部接线的安装,也实现了LED系统的调试,最后完成了机械手设备的正常运作。
当然其中还学习了电路图等一些与自己专业关联的知识。
我在实训的过程中,让我学到了许多东西,其中最主要的是PLC设计方法与应用。
设计步骤是首先是我们要弄清楚设备的顺序运作,然后结合PLC知识在图纸上画出顺序功能图,将顺序功能图转变为梯形图,之后利用PLC 软件编程。
在练习的时候,我们可以实现用编辑好的程序与led电路进行调试。
总的来说,我是较好的完成了既定任务。
还有都不时去帮助其他同学解决一些问题。
PLC教学实验使我介绍了plc顺序功能图、梯形图、指令表、外部接线图存有了更好的介绍,也使我更加介绍了关于PLC设计原理与方法。
按我的总结来看,存有很多设计理念源于实际,从中找到最适宜的设计方法。
这次教学实验瓦解没法集体的力量,碰到问题和同学互相探讨交流,同学之间无能为力的问题就去找老师探讨。
多和同学,老师探讨,你可以获得不幸的斩获。
我们在搞教学实验项目的过程中要不停的探讨问题,这样,我们可以互相交流设计方法以至达至更适宜的设计方法,同时探讨不仅就是一些思想的问题,还可以深入的讨论一些技术上的问题,这样可以使自己的处理问题要快一些,少走弯路。
多改变自己设计的方法,在设计的.过程中最好要不停的改善自己解决问题的方法,这样可以方便自己解决问题。
总之,这次PLC教学实验真的给我很多的斩获,给我填补了很多我缺乏的科学知识以及稳固了之前所学的知识点等等。
在今后的自学过程中,必须更加不懈努力的自学自己的专业知识,多多与同学和老师交流,我坚信在以后的工作里面有所作为。
在此,我要很感谢指导老师申老师和陈老师以及我们组的同学们。
在杨老师和张老师冷静的指导下,经历反反复复查询资料,查问同学,我终于顺利完成了这次课程设计。
数字时钟的设计实习报告
数字时钟的设计实习报告一、实习目的本次实习旨在通过设计一个数字时钟,使学生掌握数字电路的设计方法,熟悉集成电路的使用,提高对单片机的学习和应用能力,培养学生的软硬件开发能力。
二、实习内容1. 设计一个数字时钟,能够显示时分秒。
2. 掌握数字时钟的设计方法。
3. 熟悉集成电路的使用方法。
4. 培养学习、设计、开发软、硬的能力。
三、实习过程1. 首先,我们对数字时钟的设计进行了需求分析,明确了数字时钟的功能和要求。
数字时钟应能够显示时分秒,采用24小时标准计时制。
2. 接下来,我们进行了数字时钟的设计方案制定。
数字时钟主要由单片机、LED数码管、按键等部分构成。
单片机负责控制整个系统,LED数码管用于显示时间,按键用于调整时间。
3. 然后,我们进行了数字时钟的硬件设计。
我们选择了AT89C52单片机作为核心控制器,6个共阳极的高亮度LED数码管用于显示时间,还选择了两个按键用于调整时间。
4. 在硬件设计的基础上,我们进行了数字时钟的软件设计。
我们编写了程序,使单片机能够控制LED数码管显示时间,并能够通过按键调整时间。
5. 最后,我们对数字时钟进行了测试和调试,确保其功能的正确性和稳定性。
四、实习心得通过本次实习,我们掌握了数字时钟的设计方法,熟悉了集成电路的使用方法,提高了对单片机的学习和应用能力。
我们在设计过程中,学会了如何分析需求、制定方案、设计硬件和软件,并通过测试和调试,确保设计的正确性和稳定性。
此外,我们还学会了如何协作和沟通,提高了团队协作能力。
在设计过程中,我们遇到了很多问题,但通过互相讨论和请教老师,我们逐一解决了问题,取得了实习的成功。
五、实习成果本次实习,我们成功设计了一个数字时钟,能够显示时分秒,并具有时间调整功能。
数字时钟的硬件电路稳定运行,软件程序正确无误。
六、实习展望在今后的学习和工作中,我们将继续深入学习数字电路和单片机的相关知识,提高自己的设计能力和开发水平。
我们还将把在实习中学到的知识和技能应用到实际项目中,为我国电子行业的发展做出贡献。
FPGA实训报告——简易数字钟
桂林电子科技大学职业技术学院课题:FPGA实训专业:电子信息工程技术学号:姓名:目录关键词: (1)引言: (1)设计要求: (1)EDA技术介绍: (1)Verilog HDL简介: (1)方案实现: (2)工作原理: (2)总结: (3)结语: (3)程序设计: (4)数字钟关键词:EDA、Verilog HDL、数字钟引言:硬件描述语言HDL(Hardware Des-cription Language)是一种用形式化方法来描述数字电路和系统的语言。
目前,电子系统向集成化、大规模和高速等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计发放在业界得到迅猛发展,HDL在硬件设计领域的地位将与C和C++在软件设计领域的地位一样,在大规模数字系统的设计中它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法,而成为主要的硬件描述工具。
Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另外一种是VHDL。
现在它们都已经成为IEEE标准。
两者各有特点,但Verilog HDL拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。
此次以Verilog HDL语言为手段,设计了多功能数字钟,其代码具有良好的可读性和易理解性。
设计要求:数字钟模块、动态显示模块、调时模块、到点报时模块等;必须有键防抖动功能。
可自行设计8位共阴数码管显示;亦可用FPGA实验平台EDK-3SAISE上的4位数管,但必须有秒指导灯。
EDA技术介绍:20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。
在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。
这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。
电子综合设计多功能数字钟报告
电子综合设计多功能数字钟报告报告内容如下:一、设计目的和原理多功能数字钟是一种能够显示时间,并具有闹钟、计时、倒计时等功能的电子设备。
本设计的目的是通过FPGA实现一个多功能数字钟的功能,以实现时间的显示和闹钟的设置功能。
二、设计方案和实现1.硬件设计方案:本设计使用FPGA作为主控芯片,使用七段数码管作为显示器,通过与FPGA的IO口连接来实现时间的显示功能。
同时,使用按键作为输入进行功能的选择和设置。
2.硬件连接:将FPGA的IO口连接到七段数码管的控制端,通过IO口输出相应的数字信号来控制数码管的亮灭。
将按键连接到FPGA的IO口,通过IO口输入按键的信号。
此外,还需要连接一个晶振电路来提供时钟信号。
3.软件设计方案:本设计使用VHDL语言进行程序设计,通过状态机来实现多功能数字钟的功能。
具体实现包括时间的显示、闹钟的设置和启动、计时和倒计时功能的实现。
通过按键的输入来切换不同的状态,实现不同功能的切换和设置。
4.软件实现具体步骤:(1)定义状态机的状态,包括时间显示、闹钟设置、计时和倒计时等状态。
(2)在时间显示状态下,通过FPGA的IO口输出相应的数字信号来控制七段数码管的亮灭,实现时间的显示。
(3)在闹钟设置状态下,通过按键的输入来设置闹钟时间,并将设置好的时间保存在寄存器中。
(4)在计时和倒计时状态下,通过按键的输入来实现计时和倒计时功能,并通过七段数码管的显示来实时显示计时和倒计时的时间。
以下为本设计的完整程序代码:```vhdl--时钟频率--定义状态signal state : state_type;--定义时钟、按键和数码管信号signal clk : std_logic;signal key : std_logic_vector(1 downto 0);signal seg : std_logic_vector(6 downto 0);--闹钟时间寄存器signal alarm_hour_reg : std_logic_vector(5 downto 0);signal alarm_min_reg : std_logic_vector(5 downto 0);--计时和倒计时寄存器signal count_up_reg : std_logic_vector(23 downto 0); signal count_down_reg : std_logic_vector(23 downto 0); signal count_down_flag : std_logic := '0';beginclock : processbeginwhile true loopclk <= '0';wait for 10 ns;clk <= '1';wait for 10 ns;end loop;end process;key_scan : process(clk)beginif rising_edge(clk) thenkey <= key_scan_func; -- 按键扫描函数end if;end process;fsm : process(clk, key)beginif rising_edge(clk) thencase state isif key = "10" then -- 第一个按键按下state <= set_alarm;elsif key = "01" then -- 第二个按键按下state <= count_up;end if;when set_alarm =>seg <= set_alarm_func; -- 闹钟设置函数if key = "00" then -- 两个按键同时按下elsif key = "01" then -- 第一个按键按下state <= count_up;end if;when count_up =>seg <= count_up_func; -- 计时函数if key = "00" then -- 两个按键同时按下elsif key = "10" then -- 第二个按键按下state <= count_down;count_down_flag <= '1';end if;when count_down =>seg <= count_down_func; -- 倒计时函数if key = "00" then -- 两个按键同时按下count_down_flag <= '0';elsif key = "01" then -- 第一个按键按下state <= count_up;count_down_flag <= '0';end if;end case;end if;end process;--数码管信号和显示模块的连接display : entity work.seg_displayport mapclk => clk,seg => segend architecture;```四、总结与展望通过FPGA实现多功能数字钟的设计,在硬件和软件的配合下,实现了时间的显示和闹钟的设置功能。
《FPGA设计与应用》数字时钟实验
《FPGA设计与应用》数字时钟实验一、实验目的和要求
1.学习动态数码管的工作原理;
2.实现 FPGA 对四位动态数码管的控制;
3.熟悉模块化编程的操作流程。
二、实验内容
1.实现 FPGA 对四位动态数码管的控制,使其能够正常工作;2.基于eGo-1的数字钟设计与实现
三、实验要求
1、能够在实验板上实现数字时钟
四、操作方法与实验步骤
本实验的设计思路如下:
各模块实现方式:
分频
计数器
Hex2BCD
数码管动态显示
五、实验数据记录和处理实验代码如下:
设计文件:(部分)
仿真文件(部分):
约束文件(部分):
六、实验结果与分析
综合后生成的网表结构如下图所示:
仿真图像:
实物操作:
经过如上图代码的运行,实验要求的功能已基本实现,得出的实验结果与预期基本一致。
七、讨论和心得
这次实验用到了之前学习的动态数码管工作原理,将动态数码管与时钟相结合,对于每一位数码管来说,每隔一段时间点亮一次。
显示器的亮度通过导通电流,点亮时间和间隔时间的控制。
通过调整电流和时间参数,可以既保证亮度,又保证显示。
数字时钟时实习报告
一、实习背景随着科技的不断发展,电子技术在各个领域得到了广泛应用。
数字时钟作为一种常见的电子设备,在日常生活中具有很高的实用价值。
为了提高自身实践能力,我参加了数字时钟的实习课程,通过实际操作,了解了数字时钟的设计原理和制作方法。
二、实习目的1. 掌握数字时钟的基本原理和设计方法。
2. 提高电子制作和调试技能。
3. 培养团队合作精神,提高沟通能力。
三、实习内容1. 数字时钟的组成数字时钟主要由以下几个部分组成:(1)振荡器:产生时钟信号,为时钟电路提供稳定的时钟源。
(2)分频器:将振荡器产生的时钟信号分频,得到秒脉冲信号。
(3)计数器:对秒脉冲信号进行计数,得到时、分、秒的数值。
(4)译码器:将计数器输出的数值转换为七段数码管显示的信号。
(5)显示器:将译码器输出的信号转换为可视的数字显示。
2. 数字时钟的设计与制作(1)设计要求根据实习要求,设计的数字时钟应具备以下功能:1)显示时、分、秒;2)采用BCD码形式输出;3)具有时钟调整功能;4)具有闹钟功能。
(2)设计步骤1)选择合适的电子元件,如振荡器、分频器、计数器、译码器、显示器等。
2)绘制电路原理图,确定各元件的连接方式。
3)根据原理图,进行PCB板设计,布局和布线。
4)制作PCB板,焊接元件。
5)调试电路,确保时钟功能正常。
6)测试闹钟功能,确保其准确性。
3. 实习过程在实习过程中,我们首先了解了数字时钟的基本原理,然后根据设计要求,选择合适的电子元件。
在绘制电路原理图时,我们严格按照设计要求进行,确保电路的稳定性和可靠性。
在PCB板设计过程中,我们注重布局和布线,力求提高电路的散热性能和抗干扰能力。
在焊接过程中,我们遵循焊接规范,确保焊接质量。
最后,我们对电路进行调试和测试,确保时钟功能正常。
四、实习成果通过本次实习,我们成功制作了一台具有时、分、秒显示和闹钟功能的数字时钟。
在实习过程中,我们不仅掌握了数字时钟的设计原理和制作方法,还提高了电子制作和调试技能。
fpga数字钟实训报告具有点报时按键调时功能
桂林电子科技大学职业技术学院FPGA应用实训报告数字钟学院(系):电子信息工程系专业:电子信息工程技术学号:学生姓名:李建军指导教师:叶俊明目录摘要 (1)1 绪论 (1)2 课题背景 (2)2.1设计任务与要求 (2)2.2 设计目的 (3)2.3总体设计方案 (3)3 程序方案论证 (3)3.1分频方案论证 (3)3.1.1分频模块方案I (3)3.1.2分频模块方案II (3)3.2计时模块方案论证 (4)3.2.1计时模块方案I (4)3.2.2计时模块方案 II (5)3.3方案总结 (6)4 系统软件设计 (6)4.1程序流程图 (6)4.2计时模块 (6)4.3闹钟模块 (6)4.4显示模块 (7)5系统硬件设计 (8)5.1 FPGA的介绍 (8)5.1.1 FPGA概述 (8)5.1.2 FPGA基本结构? (8)5.2原理框图 (10)6调试 (11)6.1调时程序调试 (11)6.2闹钟程序调试 (11)总结 (12)致谢 (13)参考文献 (14)附录 (15)摘要数字钟是由振荡器、分频器、计数器、译码器、数码显示器等几部分组成。
振荡电路:主要用来产生时间标准信号,因为时钟的精度主要取决于时间标准信号的频率及稳定度,所以采用石英晶体振荡器。
分频器:因为振荡器产生的标准信号频率很高,要是要得到“秒”信号,需一定级数的分频器进行分频。
计数器:有了“秒”信号,则可以根据60秒为1分,24小时为1天的制,分别设定“时”、“分”、“秒”的计数器,分别为 60进制,60进制,24进制计数器,并输出一分,一小时,一天的进位信号。
译码显示:将“时”“分”“秒”显示出来。
将计数器输入状态,输入到译码器,产生驱动数码显示器信号,呈现出对应的进位数字字型。
由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路可以对分和时进行校时。
另外,计时过程要具有报时功能,当时间到达整点时开始响,蜂鸣器不停地响1分钟后不响。
数字时钟设计的实习报告
一、实习背景随着科技的不断发展,数字电子技术在各个领域得到了广泛应用。
数字时钟作为一种常见的电子设备,其设计和制作已成为电子技术专业学生的必备技能。
本实习报告旨在通过设计、制作和调试数字时钟,使学生掌握数字电路的基本原理和实际操作技能。
二、实习目的1. 熟悉数字电路的基本原理和组成;2. 掌握数字时钟的设计方法;3. 学会使用数字电路实验设备;4. 培养学生的动手能力和团队协作精神。
三、实习内容1. 设计要求(1)功能要求:数字时钟应能显示时、分、秒,具有计时、校时和报时功能。
(2)性能要求:计时精度高,显示清晰,操作简便。
(3)硬件要求:使用CMOS或TTL系列中小规模集成电路,如计数器、译码器、显示器等。
2. 设计方案(1)设计逻辑框图:数字时钟主要由晶体振荡器、分频器、计数器、译码器、显示器和校时电路等组成。
(2)硬件电路设计:① 晶体振荡器:采用12MHz石英晶体振荡器,输出1Hz标准信号。
② 分频器:将1Hz信号分频为1s、1min、1h信号。
③ 计数器:分别对1s、1min、1h信号进行计数,实现时、分、秒的计时。
④ 译码器:将计数器的输出信号转换为显示器所需的信号。
⑤ 显示器:采用七段数码显示器,显示时、分、秒。
⑥ 校时电路:通过按键输入校时信号,实现时、分的校准。
(3)软件设计:编写程序,实现数字时钟的功能。
3. 制作与调试(1)制作:根据设计方案,选用合适的元器件,进行电路板焊接和元器件安装。
(2)调试:对电路进行测试,确保各部分功能正常。
调试过程中,注意观察电路状态,及时发现问题并解决。
四、实习成果1. 成功制作了一台具有计时、校时和报时功能的数字时钟。
2. 掌握了数字电路的基本原理和设计方法。
3. 学会了使用数字电路实验设备,提高了动手能力。
4. 培养了团队协作精神。
五、实习心得1. 在设计过程中,要充分了解各个元器件的功能和特性,合理选择元器件。
2. 电路设计要遵循一定的规范,如电路布局、走线等。
数字钟课程设计实验报告
数字钟课程设计实验报告
实验名称:数字钟课程设计实验
实验目的:设计并制作一款数字钟,学习数字电路的基本构成及工作原理,并深入掌握Verilog 语言的设计和仿真技术。
实验原理:数字钟由时钟电路、驱动电路、显示电路三部分组成。
时钟电路以晶体振荡器为基础,产生高精度的基准时钟信号;驱动电路通过将时钟信号分频、选择和转换,来控制数字显示管的亮灭和数字显示内容;显示电路则将数字经过解码、整合,转换成人类可以识别的时间。
实验步骤:
1. 选择合适的FPGA芯片和数字显示管,根据其接口特点,确定各部分电路的 Pin Assignment。
2. 采用Verilog语言,编写时钟电路模块,实现一个基于晶体振荡器的高精度时钟信号。
3. 编写驱动电路模块,根据时钟信号,实现数字显示管LED的闪烁。
4. 编写显示电路模块,把数码管的8个数字位置写入代码中,并将显示电路模块与时钟电路模块和驱动电路模块相连接。
5. 通过FPGA仿真,进行数字钟模块的验证和测试。
6. 将程序下载到FPGA芯片中,并进行实际调试测试。
实验结果:
本实验设计的数字钟可以按照设定时间进行准确的数字显示,且易于调整时钟的显示时间。
数字钟在 FPGS 上实现良好,实验结果满意。
实验总结:
通过本实验,学习了数字电路的基本构成及工作原理,并深入掌握了Verilog语言的设计和仿真技术。
对于数字电路的实际应用,我有了更加深入的认识。
同时,对于FPGA的开发和调试过程也有了初步的了解,掌握了相关的基本操作和流程。
fpga数字钟实验总结
fpga数字钟实验总结
FPGA数字钟实验总结:
本次FPGA数字钟实验旨在设计并实现一个基于FPGA的数字时钟。
通过该实验,我掌握了以下几个方面的知识和技能。
首先,我学会了使用FPGA开发工具进行电路设计和编程。
我使用了一种特定的硬件描述语言(HDL),如Verilog或VHDL,来描述时钟电路的功能和行为。
通过学习和实践,我能够熟练地使用FPGA开发工具创建和编辑代码。
其次,我了解了数字时钟的基本原理和组成部分。
数字时钟通常由时钟芯片、计数器、显示器和控制电路组成。
我学会了如何使用FPGA来实现这些功能,并通过编程控制时钟的显示方式和计时功能。
在实验过程中,我还学会了时序设计和逻辑电路的基本概念。
由于时钟电路需要精确的时序控制,我学会了如何设计和优化时钟电路的时序路径,以确保电路的正常运行和准确计时。
此外,我还学会了如何使用开发板上的按钮和开关等外部输入
设备来控制时钟的设置和调整功能。
通过编程,我能够实现时钟的
时间调整、闹钟设置等功能,并通过显示器将相应的信息展示出来。
最后,在实验过程中,我也遇到了一些挑战和问题。
例如,时
钟的精确性和稳定性是一个重要的考虑因素,我需要注意时钟信号
的抖动和噪声问题。
此外,时钟的显示方式和格式也需要根据实际
需求进行设计和调整。
通过本次FPGA数字钟实验,我不仅巩固了对数字电路和FPGA
开发的理论知识,还提高了实际操作和问题解决能力。
这个实验为
我今后在数字电路设计和嵌入式系统开发方面的学习和工作奠定了
坚实的基础。
基于FPGA:电子钟的设计报告
电子钟的设计报告姓名:< >组别:< >专业班级:< >目录目录 (1)一、数字钟的设计要求 (2)二、顶层设计 (2)三、模块 (3)1.顶层模块 (3)2.分频器模块 (4)3.按键消抖模块 (4)4.计时模块 (5)5.显示模块 (6)6.报时和闹钟模块 (6)四、系统调试及运行结果分析 (7)1、硬件调试 (7)2、软件调试 (8)3、调试过程及结果 (8)(1)显示模块调试 (8)(2)时间系统模块调试 (9)五、总结 (9)一、数字钟的设计要求设计一个具有时、分、秒计时第二电子钟电路,按24小时制记时。
要求:1、准确计时,以数字形式显示时、分、秒的时间;2、具有分、时校正功能,校正输入脉冲频率为1Hz;3、具有仿广播电台整点报时的功能,即每逢59分51秒、53秒、55秒及57秒时,发出4声500Hz低音,在59分59秒时发出一声1kHz高音,它们的持续时间均为1秒。
最后一声高音结束的时刻恰好为正点时刻。
4、具有定时闹钟功能,且最长闹铃时间为一分钟。
要求可以任意设置闹钟的时、分;闹铃信号为500Hz和1kHz的方波信号,两种频率的信号交替输出,且均持续1S。
设置一个停止闹铃控制键,可以停止输出闹铃信号。
二、顶层设计采用自顶向下的设计方法,首先根据数字时钟的功能要求进行顶层设计和分析,用FPGA实现系统的计时、显示驱动、按键输入处理、仿广播电台整点报时的功能。
根据实训平台的硬件资源情况,输入信号包括时钟输入和按键输入,其中系统时钟由实训平台核心板50MHz晶振提供,拨码开关作为校时、闹钟时间设置和复位的信号输入,输出信号包括峰鸣器控制输出、8位动态数码管位选和段选控制输出。
数字电字时钟系统主要有分频器模块、按键消抖模块、计时模块、整点报时和闹铃模块和显示驱动模块构成。
三、模块1.顶层模块如下图所示。
2.分频器模块分频器模块的主要功能是为其他模块提供时钟信号。
FPGA实验报告
实验1:状态机实验目的:学习FPGA设计软件教学基本要求:掌握软件流程,掌握状态机编程实验内容提要:设计一个状态机1. 你觉得上面这段代码中,q 到底在怎样变化?(实验1ppt14页)答:在上述代码中,q变化如下:首先判断复位信号 rst 是否为 0,如果是 0 则q复位为0;否则当时钟信号上升沿到来时,将d的值赋给q,再判断a的值,如果a为1,则将b赋值给次态q,如果a为其他值,则将现态q赋给次态q。
2. 本页中,q 到底在怎样变化?(实验1 ppt15页)答:如果异步复位信号rst为0,则q置0;rst不为0时,当时钟上升沿到来时,判断a的值,如果a=1,则将b的值赋给q的次态,如果a是其他值,则将q的现态赋给q 的次态,结束这个判断语句后,将d赋值给q。
3. 画出你理解的这个电路的原理图(ppt16页)4.Out1 out2 out3 out4有什么区别?out1的上升沿与下降沿和50MHz时钟的上升沿始终保持一致,周期变为50MHz时钟的6倍,实现周期扩展;out2的上升沿与clkin的上升沿保持一致,下降沿与out1的上升沿保持一致,可将clkin的数据记录下来以起数据使能作用;out3的上升沿恰好是out2的下降沿,比out2慢一拍,是更适合使用的前端使能;out4的上升沿与out3的下降沿保持一致,可以减少延迟。
2. 红绿灯实验中,该状态机最少几个触发器可以实现?该逻辑情况下红绿灯状态机最少只需8个触发器即可实现。
将3个计时计数触发器合并,并将溢出、使能触发器达成的功能改由计数数值在各状态下的交替变化,使用组合逻辑代替触发器,达成减少触发器使用的设计方案。
实验2 数字钟设计实验目的:掌握FPGA语言设计方法教学基本要求:学习基本的VHDL语言结构和设计实验内容提要:使用VHDL设计一个完整的数字钟实验问题回答:1.现在的时钟是秒时钟,实际系统的时钟是50MHz.那用50MHz的时钟的情况下,仿真1小时要多少时间?如何解决该问题?仿真一小时需要计数器计数3600次,计数脉冲由50MHz的时钟驱动。
基于FPGA的数字钟设计-华中科技大学电子线路实验报告
基于FPGA的数字钟设计Your Name一、实验目的1.了解数字钟的功能要求及设计方法;2.了解CPLD/FPGA的一般结构及开发步骤;3.熟悉用FPGA器件取代传统的中规模集成器件实现数字电路与系统的方法。
二、实验要求1.以数字形式显示时、分、秒的时间;2.小时计数器为同步24进制;3.要求手动校时、校分;4.任意闹钟;5.小时为12/24进制可切换;6.报正点数(几点响几声)。
三、实验内容1.系统模块框图2.时间校准模块时间校准模块可由两位控制信号控制当前校准状态。
3.时分秒计数模块时分秒计数模块由60进制秒计数器、60进制分计数器和24进制时计数器组成。
时分秒的计数器具有复位和计数功能。
其中CR为复位信号,当CR为0时,时分秒的计数器清0,EN为使能信号,EN为1时开始计时,EN为0则暂停计时。
分秒时的进位通过外部组合逻辑实现。
4.显示模块计时模块产生的BCD码通过编写的CD4511功能模块转换为数码管的显示信号。
5.分频模块开发板的系统时钟为50MHz,产生1Hz的CP信号需要一个模为25M的计数器分频得到1Hz的CP信号。
四、具体代码1.顶层模块(clock.v)module SHOW_CTRL(MODE,SHOW_MODE,CP,Hour,Minute,Second,SHOW1,SHOW2);input CP,MODE,SHOW_MODE;input[7:0]Hour,Minute,Second;output[7:0]SHOW1,SHOW2;reg[7:0]SHOW1,SHOW2;always@(MODE,SHOW_MODE) beginif((MODE==0)&&(SHOW_MODE==0))begin SHOW2<=Minute[7:0];SHOW1<=Hour[7:0]; endelse if((MODE==0)&&(SHOW_MODE==1))begin SHOW2<=Second[7:0];SHOW1<=Minute[7:0]; endelse if((MODE==1)&&(SHOW_MODE==0))begin SHOW2<=Minute[7:0];SHOW1<=Hour[7:0]; endelse if((MODE==1)&&(SHOW_MODE==1))begin SHOW2<=Second[7:0];SHOW1<=Minute[7:0]; endendendmodule2.分频模块(clk_div.v)module clk_div(clk_50M,clk_1);input clk_50M;output reg clk_1;reg [8:0]count;always @(posedge clk_50M)beginif(count>8'd25)beginclk_1=~clk_1;count=0;endelsecount<=count+1;endendmodule3.模60计数器模块(counter60.v)module counter60(EN,CP,nCR,QoH,QoL);input EN,CP,nCR;output [3:0]QoH,QoL;reg [3:0]QoH,QoL;always@(posedge CP) beginif(~nCR) beginQoH<=4'b0000;QoL<=4'b0000; endelse if(~EN) beginQoH<=QoH;QoL<=QoL; endelseif(QoH==4'b0101&&QoL==4'b1001)beginQoH<=4'b0000;QoL<=4'b0000;endendelse if(QoH<4'b0110&&QoL<4'b1001){QoH,QoL}<={QoH,QoL+4'b0001};else if(QoH<4'b0110&&QoL==4'b1001){QoH,QoL}<={QoH+4'b0001,4'b0000};endendmodule4.模24计数器模块(counter24.v)module counter24(nCR,EN,CP,CntH,CntL);input CP,nCR,EN;output[3:0] CntH,CntL;reg [3:0]CntH,CntL;reg CO;always@(posedge CP or negedge nCR) beginif(~nCR) {CntH,CntL}<=8'h00;else if(~EN) {CntH,CntL}<={CntH,CntL};else if((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3))){CntH,CntL}<=8'h00;else if((CntH==2)&&(CntL<3))begin CntH<=CntH; CntL<=CntL+1'b1; end else if(CntL==9) begin CntH<=CntH+1'b1; CntL<=4'b0000; endelse begin CntH<=CntH; CntL<=CntL+1'b1; endendendmodule5.显示模块(HEX2LED.v)module HEX2LED(HEX,SEG);input[3:0] HEX;output[7:0] SEG;wire[3:0] HEX;reg[6:0] SEG;always@(HEX)begincase(HEX)4'h0: SEG = 7'b0000001;4'h1: SEG = 7'b1001111;4'h2: SEG = 7'b0010010;4'h3: SEG = 7'b0000110;4'h4: SEG = 7'b1001100;4'h5: SEG = 7'b0100100;4'h6: SEG = 7'b0100000;4'h7: SEG = 7'b0001111;4'h8: SEG = 7'b0000000;4'h9: SEG = 7'b0000100;default: SEG = 7'b0000001;endcaseendendmodule五、仿真截图(仿真秒时分计时及其数码管显示,仿真环境为vivado 2018.3)秒计时仿真分计时仿真时计时仿真如下图所示为分校准仿真,当Amin分校准位为1时分开始随着CP信号的频率以1秒加1的步进变动。
数字时钟实训报告功能
#### 一、引言随着科技的发展,电子产品的普及,数字时钟作为一种实用的电子设备,在人们的日常生活中扮演着越来越重要的角色。
为了提高同学们的实践能力,加深对电子技术的理解,我们进行了数字时钟的实训。
本报告将详细阐述数字时钟的功能及其实现过程。
#### 二、数字时钟的功能数字时钟具有以下主要功能:1. 时间显示:数字时钟能够准确显示当前的时间,包括时、分、秒。
小时采用24小时制,分钟和秒采用60进制。
2. 日期显示:除了显示时间,数字时钟还能够显示日期,包括年、月、日。
3. 校时功能:用户可以通过特定的按键对时钟进行校时,确保时钟显示的时间准确无误。
4. 闹钟功能:数字时钟具备闹钟功能,用户可以设定闹钟时间,当达到设定时间时,时钟会发出提示音。
5. 语音播报:部分数字时钟还具备语音播报功能,能够语音报时,为用户带来便捷。
6. 定时功能:数字时钟可以实现定时功能,如定时开关灯、定时开关空调等。
7. 时钟模式切换:数字时钟可以切换为不同模式,如12小时制、24小时制、AM/PM制等。
8. 低功耗设计:数字时钟采用低功耗设计,节能环保。
#### 三、数字时钟的实现数字时钟的实现主要涉及以下几个部分:1. 硬件电路:包括电源电路、时钟电路、显示电路、按键电路等。
- 电源电路:将220V交流电压转换为5V直流电压,为数字时钟提供稳定的电源。
- 时钟电路:采用555定时器构成多谐振荡器,产生1kHz的秒脉冲信号,驱动时钟电路运行。
- 显示电路:采用LED数码管或LCD显示屏,将时间、日期等信息以数字形式显示。
- 按键电路:包括校时按键、闹钟设定按键、定时按键等,用于控制时钟的功能。
2. 软件编程:利用C语言或汇编语言编写程序,实现时钟的计时、校时、闹钟、定时等功能。
- 计时程序:实现时钟的计时功能,包括秒、分、时的计数和进位。
- 校时程序:实现时钟的校时功能,包括时、分、秒的调整。
- 闹钟程序:实现闹钟的设定、启动和停止功能。
fpga数字钟实训报告(具有8点报时,按键调时功能).
桂林电子科技大学职业技术学院FPGA应用实训报告数字钟学院(系):电子信息工程系专业:电子信息工程技术学号: 1212220217学生姓名:李建军指导教师:叶俊明目录摘要 (2)1 绪论 (3)2 课题背景 (4)2.1设计任务与要求 (4)2.2 设计目的 (4)2.3总体设计方案 (4)3 程序方案论证 (5)3.1分频方案论证 (5)3.1.1分频模块方案I (5)3.1.2分频模块方案II (5)3.2计时模块方案论证 (6)3.2.1计时模块方案I (6)3.2.2计时模块方案 II (6)3.3方案总结 (7)4 系统软件设计 (7)4.1程序流程图 (7)4.2计时模块 (8)4.3闹钟模块 (8)4.4显示模块 (8)5系统硬件设计 (9)5.1 FPGA的介绍 (9)5.1.1 FPGA概述 (9)5.1.2 FPGA基本结构 (9)5.2原理框图 (11)6调试 (12)6.1调时程序调试 (12)6.2闹钟程序调试 (12)总结 (13)致谢 (14)参考文献 (15)附录 (16)摘要数字钟是由振荡器、分频器、计数器、译码器、数码显示器等几部分组成。
振荡电路:主要用来产生时间标准信号,因为时钟的精度主要取决于时间标准信号的频率及稳定度,所以采用石英晶体振荡器。
分频器:因为振荡器产生的标准信号频率很高,要是要得到“秒”信号,需一定级数的分频器进行分频。
计数器:有了“秒”信号,则可以根据60秒为1分,24小时为1天的制,分别设定“时”、“分”、“秒”的计数器,分别为 60进制,60进制,24进制计数器,并输出一分,一小时,一天的进位信号。
译码显示:将“时”“分”“秒”显示出来。
将计数器输入状态,输入到译码器,产生驱动数码显示器信号,呈现出对应的进位数字字型。
由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路可以对分和时进行校时。
另外,计时过程要具有报时功能,当时间到达整点时开始响,蜂鸣器不停地响1分钟后不响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
桂林电子科技大学职业技术学院课题:FPGA实训专业:电子信息工程技术学号:姓名:目录关键词: (1)引言: (1)设计要求: (1)EDA技术介绍: (1)Verilog HDL简介: (1)方案实现: (2)工作原理: (2)总结: (3)结语: (3)程序设计: (4)数字钟关键词:EDA、Verilog HDL、数字钟引言:硬件描述语言HDL(Hardware Des-cription Language)是一种用形式化方法来描述数字电路和系统的语言。
目前,电子系统向集成化、大规模和高速等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计发放在业界得到迅猛发展,HDL在硬件设计领域的地位将与C和C++在软件设计领域的地位一样,在大规模数字系统的设计中它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法,而成为主要的硬件描述工具。
Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另外一种是VHDL。
现在它们都已经成为IEEE标准。
两者各有特点,但Verilog HDL拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。
此次以Verilog HDL语言为手段,设计了多功能数字钟,其代码具有良好的可读性和易理解性。
设计要求:数字钟模块、动态显示模块、调时模块、到点报时模块等;必须有键防抖动功能。
可自行设计8位共阴数码管显示;亦可用FPGA实验平台EDK-3SAISE上的4位数管,但必须有秒指导灯。
EDA技术介绍:20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。
在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。
这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。
这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。
这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
Verilog HDL简介:硬件描述语言Verilog是Philip R.Moorby于1983年在英格兰阿克顿市的Gateway Design Automation硬件描述语言公司设计出来的,用于从开关级到算法级的多个抽象设元,并提供了丰富的结构,这些结构不仅用于硬件的并发行为建模,而且用于硬件的时序特性和结构的建模。
也可以通过编程语言接口(PLI )对该语言进行拓展。
Verilog 语言从诞生起就与生产紧密结合在一起,具有结构清晰、文法简明、功能强大、高速模拟和多库支持等优点,并获得许多工具的支持,深受用户喜爱。
Verilog 实际上是IC 行业标准,特别是在1995年12月被IEEE 接纳为正式标准后,它成为一种很有竞争力的硬件描述语言。
Verilog 的基本设计单元是模块(block )。
一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能。
Verilog 结构位于在module 和endmodule 声明语句中间,每个Verilog 程序包括4个主要组成部分:端口定义、I/O 说明、内部信号声明和功能定义。
模块主要有三种方式产生逻辑:1) 用”assign”声明语句:assign = a = b & c ; 2) 用实例元件:and #2 ul (q ,a ,b );3) 用”always”块:既可用于描述组合逻辑,也可描述时序逻辑。
在Verilog 模块中,所有过程块,连续赋值语句,实例引用都是并行的。
他们的顺序不会影响实现的功能。
是同时执行的,即并发的。
在always 模块中,逻辑是按照指定的顺序执行的。
模块内部的语句是顺序的方案实现:此次数字钟设计的基本结构框图如下:1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分进行60进制计数,即从0到59循环计数;对小时进行24进制计数,即从0到23循环计数,并且在数码管上显示数值。
2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
因为我们用的时钟信号均是1HZ 的,所以按键按下每来一个脉冲,即计数一次。
3)清零功能:reset 为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。
工作原理:Clk:系统基准时钟输入脉冲为40MHz 。
将其20000000分频后可以得到1Hz 的数字钟工作频率及按键扫描频率。
再将其100000分频后作为七段数码管显示的扫描频率。
S1:调节小时自加信号,低电频有效。
每按下一次,小时自加1。
S2:调节分钟自加信号,低电频有效。
每按下一次,分钟自加1。
S3:调节小时自减信号,低电频有效。
每按下一次,小时自减1。
S4:调节分钟自减信号,低电频有效。
每按下一次,分钟自减1。
Spk:扬声器闹钟输出。
Sel:七段数码管扫描驱动。
扫描频率为系统的100000分频,由于人眼的视觉效果呈现在眼前的便是整体的数字显示。
Display:七段数码管显示输出。
总结:①设计小结通过本次课程设计对EDA这门学科有了深如的学习,对电路也有了深入的学习,在多功能数字钟的设计过程中,在软件设计中本系统的软件部分主要是利用Verilog HDL 语言来设计的,并用来实现多功能数字钟的所用功能。
在设计中有很多的困难主要是在程序验证的时候容易出现错误,但是这些困难我们都还是一一的解决了。
②设计收获通过本次课程设计,我们在对EDA这门技术上有了更深刻的认识,也从实践中去感受到了EDA技术给我们设计带来的改变与进步。
我们不仅基本掌握了ISE Foundation软件的使用,还对电子设计的思路有了更多的认识。
通过对EDA设计中的TOP-DOWN设计方式的运用,体会到了对于一个大型系统的设计方案选取应从顶向下的设计思路,这与传统的至底向上的设计方式有很大改进,且设计效率得到大大提高。
结语通过本次实训,我们实现了从单一的理论学习转变为实际解决问题,它使我们的理论知识得到了综合运用,培养了我们综合运用所学理论的能力和解决实际问题的能力。
本次实训的过程,通过写总结报告初步训练了大家的书面表达能力、组织逻辑能力,这些将对我们以后有很大帮助。
程序设计:`timescale 1ns / 1psmodule shizhong(clk,rst,s1,s2,s3,s4,display,seg_bit,spk,led_test);input clk;input rst,s1,s2,s3,s4;output reg spk;reg clk_1hz;//秒脉冲reg clk_1khz;//动态扫描脉冲output reg led_test;output reg[6:0]display;output reg[3:0]seg_bit;//位选通reg[30:0]clk_count1;reg[20:0]counter;reg[7:0]secl,sec;reg[7:0]minl,minh;reg[7:0]disp_temp;reg[3:0]state;initialbegindisplay<=7'bz;state<=0;counter<=0;clk_count1<=0;secl<=6;sec<=3;minl<=9;minh<=5;hourl<=3;hourh<=2;endalways@(posedge clk)beginif(clk_count1>=20_000_000)beginclk_count1<=0;clk_1hz<=~clk_1hz;endelse clk_count1<=clk_count1+1; //分频得到秒脉冲if(counter>=100000)begin counter<=0;clk_1khz<=~clk_1khz;endelse counter<=counter+1;//分频得到动态扫描脉冲case(disp_temp)0:display<=7'b100_0000;1:display<=7'b111_1001;2:display<=7'b010_0100;3:display<=7'b011_0000;4:display<=7'b001_1001;5:display<=7'b001_0010;6:display<=7'b000_0010;7:display<=7'b111_1000;8:display<=7'b000_0000;9:display<=7'b001_0000;default:display<=7'bz;endcaseendalways@(posedge clk_1hz )if(!rst)beginsecl=0;sec=0;minl=0;minh=0;hourl=0;hourh=0;endelsebeginif(!s1)begin if(hourl==9)begin hourl=0;hourh=hourh+1;endelse begin if(hourh==2&&hourl==3)beginhourh=0;hourl=0;endelse hourl=hourl+1;endelseif(!s2)begin if(minl==9)begin minl=0;if(minh==5)minh=0;else minh=minh+1;endelse minl=minl+1;endelseif(!s3)begin if(hourh==0&&hourl==0)begin hourh=2;hourl=3; endelse if(hourl==0)begin hourl=9; hourh=hourh-1;endelse hourl=hourl-1;endelseif(!s4)begin if(minh==0&&minl==0)begin minh=5;minl=9; endelse if(minl==0)begin minl=9; minh=minh-1;endelse minl=minl-1;endelse begin secl=secl+1;if(secl==10)begin secl=0;sec=sec+1;endif(sec==6)begin sec=0;minl=minl+1;endif(minl==10)begin minl=0;minh=minh+1;endif(minh==6)begin minh=0;hourl=hourl+1;endif(hourl==10)begin hourl=0;hourh=hourh+1;endif(hourh==2&&hourl==4)begin hourh=0;hourl=0;endendendalways@(posedge clk)beginif(minh==0&&minl==0&&secl%2==0)spk<=!spk;else spk<=0;endalways@(posedge clk_1khz)begincase(state)0:begin seg_bit<=4'b0111;disp_temp<=minl;state<=1;led_test=1;end1:begin seg_bit<=4'b1011;disp_temp<=minh;state<=2;led_test=1;end2:begin seg_bit<=4'b1101;disp_temp<=hourl;state<=3;led_test=~clk_1hz;end 3:begin seg_bit<=4'b1110;disp_temp<=hourh;state<=0;led_test=1;enddefault:begin display<=7'bz;state<=0;endendcaseend。