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板设计过程中,我们注重布局和布线,力求提高电路的散热性能和抗干扰能力。
在焊接过程中,我们遵循焊接规范,确保焊接质量。
最后,我们对电路进行调试和测试,确保时钟功能正常。
四、实习成果通过本次实习,我们成功制作了一台具有时、分、秒显示和闹钟功能的数字时钟。
在实习过程中,我们不仅掌握了数字时钟的设计原理和制作方法,还提高了电子制作和调试技能。
- 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。