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型号。
基于FPGA的电子钟设计报告
基于FPGA的电子钟设计报告一、FPGA的基本知识1、可编程逻辑器件的概况可编程逻辑器件主要分为FPGA和CPLD 两种,两者的功能基本相同。
FPGA--现场可编程门阵列的简称CPLD--复杂可编程逻辑器件的简称2、FPGA芯片及其最小系统(1)FPGA芯片它的外形与普通嵌入式处理器芯片相同采用PGA(Organic pin grid Array,有机管脚阵列)的封装形式,但可以通过烧写特殊程序改变其内部结构,实现专门的电路功能。
基于FPGA的数字时钟2019-11-23 21:36·电力源动一、FPGA的基本知识1、可编程逻辑器件的概况可编程逻辑器件主要分为FPGA和CPLD 两种,两者的功能基本相同。
FPGA--现场可编程门阵列的简称CPLD--复杂可编程逻辑器件的简称它的外形与普通嵌入式处理器芯片相同采用PGA(Organic pin grid Array,有机管脚阵列)的封装形式,但可以通过烧写特殊程序改变其内部结构,实现专门的电路功能。
二、FPGA的设计方法1、编程语言FPGA的主流程序设计语言主要有VHDL语言与Verilog语言两种。
本课题采用VHDL语言进行编写。
VHDL--用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
Verilog--一种基本语法与C语言相近,相比较于C语言更容易理解,2、图形化程序设计(设计效率低)三、软件开发环境QuartusII是Altera提供的FPGA开发集成环境,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。
它完全支持VHDL设计流程,其内部嵌有VHDL逻辑综合器。
四、数字钟功能模块认识数字时钟的设计采用了自顶向下分模块的设计。
底层是实现各功能的模块,各模块由VHDL语言编程实现顶层采用原理图形式调用。
具体的设计框图:各模块原理剖析:(1)在七段数码管上具有时--分--秒的依次显示;(2)时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数;(3)整点报时,当计数到整点时扬声器发出响声;(4)时间设置:可以通过按键手动调节秒和分的数值。
fpga数字时钟课程设计
fpga数字时钟课程设计FPGA数字时钟课程设计随着科技的不断发展,数字时钟已经成为现代人生活中必不可少的物品。
数字时钟的准确性和便捷性吸引了越来越多的人使用。
而现在,我们可以通过FPGA数字时钟课程设计来实现一个高精度的数字时钟。
FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,可以通过编程实现各种不同的功能。
数字时钟的实现也可以通过FPGA来完成。
在FPGA数字时钟课程设计中,我们需要先确定时钟的基础部分。
时钟的基础部分由时钟信号产生器、时钟分频器、时钟计数器和时钟显示器组成。
时钟信号产生器需要产生一个稳定的时钟信号,以供后续的计数器和分频器使用。
我们可以通过FPGA中的时钟模块来产生一个稳定的时钟信号。
接下来,时钟分频器需要将时钟信号分频,使得计数器可以进行精确的计数。
分频器的分频系数可以通过FPGA中的数码开关进行设置。
然后,时钟计数器需要根据分频器的设定进行精确的计数。
计数器的计数值可以通过FPGA中的计数器模块进行设置。
时钟显示器需要将计数器的计数值进行显示。
我们可以通过FPGA 中的数码管模块来实现时钟的显示功能。
除了基础部分,我们还可以通过添加更多的功能来完善数字时钟。
例如,我们可以添加闹钟功能、日期显示功能等,以增加数字时钟的实用性。
在FPGA数字时钟课程设计中,我们可以使用VHDL(VHSIC Hardware Description Language)语言进行编程。
VHDL是一种硬件描述语言,可以用于FPGA和ASIC的设计。
通过编写VHDL 程序,我们可以实现数字时钟的各种功能。
FPGA数字时钟课程设计是一个非常有趣和实用的课程项目。
通过这个项目,我们可以深入了解数字时钟的工作原理,熟悉FPGA的编程方法,同时也可以锻炼自己的编程能力。
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的多功能数字钟设计报告
***大学电工电子实验报告EDA技术基础设计报告多功能数字钟设计电子信息科学与技术年 月 日多功能数字钟设计一.任务解析用Verilog硬件描述语言设计数字钟,实现:1、具有时、分、秒计数显示功能,以二十四小时循环计时。
2、具有调节小时,分钟的功能。
3、具有整点报时同时LED灯花样显示的功能。
4、【发挥】三键(模式选择,加,减)调整,数码管闪烁指示功能。
5、【发挥】增加闹钟任意设定功能,时间精确到分。
二.方案论证第2页,共19页三.重难点解析1、模式选择键的设计//模式选择键。
有5个模式,m0为正常走钟;m1为调分;m2为调时;m3为闹钟调分;m4为闹钟调时。
module mode_key(key,clr,m);input key,clr;output [2:0]m;reg [2:0]m;always @(posedge key or negedge clr) beginif(!clr) m=0;else if(m==4) m=0;else m=m+1;endendmodule2、数字钟秒钟计数设计module cnt60_sec(clk,clr,q,c);input clk,clr;output [6:0]q;output c;reg [6:0]q;reg c;always @(posedge clk or negedge clr) beginif(!clr) begin q=0;c=0;endelse if(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) begin q[6:4]=0; c=1;endelse q[6:4]=q[6:4]+1;end第3页,共19页else begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;endendendmodule、秒钟计数模块就是一个60的计数器,计数到59的时候清零,进位加1。
调时不需要控制秒钟,所以没有加模式选择按键。
数字钟课程设计fpga
数字钟课程设计 fpga一、课程目标知识目标:1. 学生能理解数字钟的基本原理和组成,掌握数字钟的计时方法。
2. 学生能了解FPGA的基本概念,掌握FPGA在数字钟设计中的应用。
3. 学生能掌握数字钟设计中涉及的二进制、十进制转换方法。
技能目标:1. 学生能够运用所学知识,设计并实现一个简单的数字钟电路。
2. 学生能够使用FPGA编程,实现数字钟的功能。
3. 学生能够通过实验操作,培养动手能力和团队协作能力。
情感态度价值观目标:1. 学生对数字电路产生兴趣,树立学习信心,形成积极的学习态度。
2. 学生在学习过程中,培养创新精神和实践能力,增强对科技发展的关注。
3. 学生通过合作学习,培养团队意识,学会尊重他人,分享成果。
课程性质:本课程为电子技术实践课程,结合理论教学,注重培养学生的实际操作能力和创新思维。
学生特点:学生为高中生,具备一定的电子技术基础,对新鲜事物充满好奇,喜欢动手实践。
教学要求:教师需引导学生运用所学知识,通过实验操作,掌握数字钟设计方法,提高学生的实践能力和创新精神。
同时,关注学生的情感态度价值观培养,使学生在学习过程中形成良好的学习习惯和团队合作意识。
将课程目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. 数字钟原理及组成- 数字钟工作原理- 数字钟各部分功能及相互关系2. FPGA基础知识- FPGA基本概念- FPGA在数字电路设计中的应用3. 数字钟设计与实现- 数字钟计时方法- 二进制与十进制转换方法- 数字钟电路设计流程4. FPGA编程与实验操作- FPGA编程基础- 数字钟功能模块编程- 实验操作步骤与注意事项5. 数字钟综合设计与调试- 设计要求与评价指标- 设计方案撰写与展示- 团队合作与交流教学内容安排与进度:第一周:数字钟原理及组成、FPGA基础知识学习第二周:数字钟设计与实现、FPGA编程基础学习第三周:数字钟功能模块编程、实验操作第四周:数字钟综合设计与调试、成果展示与评价教材章节:第一章:数字钟原理及组成第二章:FPGA基础知识第三章:数字钟设计与实现第四章:FPGA编程与实验操作第五章:数字钟综合设计与调试教学内容遵循科学性和系统性原则,结合课程目标,确保学生能够掌握数字钟设计与FPGA编程相关知识,培养实践能力和创新精神。
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实训专业:电子信息工程技术学号:姓名:目录关键词: (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
数码管动态显示
五、实验数据记录和处理实验代码如下:
设计文件:(部分)
仿真文件(部分):
约束文件(部分):
六、实验结果与分析
综合后生成的网表结构如下图所示:
仿真图像:
实物操作:
经过如上图代码的运行,实验要求的功能已基本实现,得出的实验结果与预期基本一致。
七、讨论和心得
这次实验用到了之前学习的动态数码管工作原理,将动态数码管与时钟相结合,对于每一位数码管来说,每隔一段时间点亮一次。
显示器的亮度通过导通电流,点亮时间和间隔时间的控制。
通过调整电流和时间参数,可以既保证亮度,又保证显示。
数字钟课程设计实验报告
数字钟课程设计实验报告
实验名称:数字钟课程设计实验
实验目的:设计并制作一款数字钟,学习数字电路的基本构成及工作原理,并深入掌握Verilog 语言的设计和仿真技术。
实验原理:数字钟由时钟电路、驱动电路、显示电路三部分组成。
时钟电路以晶体振荡器为基础,产生高精度的基准时钟信号;驱动电路通过将时钟信号分频、选择和转换,来控制数字显示管的亮灭和数字显示内容;显示电路则将数字经过解码、整合,转换成人类可以识别的时间。
实验步骤:
1. 选择合适的FPGA芯片和数字显示管,根据其接口特点,确定各部分电路的 Pin Assignment。
2. 采用Verilog语言,编写时钟电路模块,实现一个基于晶体振荡器的高精度时钟信号。
3. 编写驱动电路模块,根据时钟信号,实现数字显示管LED的闪烁。
4. 编写显示电路模块,把数码管的8个数字位置写入代码中,并将显示电路模块与时钟电路模块和驱动电路模块相连接。
5. 通过FPGA仿真,进行数字钟模块的验证和测试。
6. 将程序下载到FPGA芯片中,并进行实际调试测试。
实验结果:
本实验设计的数字钟可以按照设定时间进行准确的数字显示,且易于调整时钟的显示时间。
数字钟在 FPGS 上实现良好,实验结果满意。
实验总结:
通过本实验,学习了数字电路的基本构成及工作原理,并深入掌握了Verilog语言的设计和仿真技术。
对于数字电路的实际应用,我有了更加深入的认识。
同时,对于FPGA的开发和调试过程也有了初步的了解,掌握了相关的基本操作和流程。
fpga数字钟课程设计报告
课程设计报告设计题目:基于FPGA的数字钟设计班级:电子信息工程1301姓名:王一丁指导教师:李世平设计时间:2016年1月摘要EDA(ElectronicDesignAutomation)电子设计自动化,是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成软件方式设计得电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。
本次课程设计利用QuartusII为设计软件,VHDL为硬件描述语言,结合所学知识设计一个多功能时钟,具有显示年、月、日、时、分、秒显示,计时,整点报时,设定时间等功能。
利用硬件描述语言VHDL对设计系统的各个子模块进行逻辑描述,采用模块化的思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑综合优化、逻辑仿真、最终完成本次课程设计的任务。
关键词:EDAVHDL语言数字钟目录摘要1课程设计目的2课程设计内容及要求设计任务设计要求3VHDL程序设计方案论证系统结构框图设计思路与方法状态控制模块时分秒模块年月日模块显示模块扬声器与闹钟模块整体电路4系统仿真与分析5课程设计总结,包括.收获、体会和建议6参考文献1课程设计目的(1)通过设计数字钟熟练掌握EDA软件(QUARTUSII)的使用方法,熟练进行设计、编译,为以后实际工程问题打下设计基础。
(2)熟悉VHDL硬件描述语言,提升分析、寻找和排除电子设计中常见故障的能力。
(3)通过课程设计,锻炼书写有理论根据的、实事求是的、文理通顺的课程设计报告。
2课程设计内容及要求设计任务(1)6个数字显示器显示时分秒,setpin按键产生一个脉冲,显示切换为年月日。
(2)第二个脉冲可预置年份,第三个脉冲可以预置月份,依次第四、五、六、七个脉冲到来时分别可以预置时期、时、分、秒,第八个脉冲到来后预置结束正常从左显示时分秒。
(3)up为高时,upclk有脉冲到达时,预置位加一,否则减一。
设计要求(1)在基本功能的基础上,闹钟在整点进行报时,产生一定时长的高电平。
基于fpga定时闹钟课程设计
课程设计任务书学生姓名:专业班级:通信1002指导教师:工作单位:信息学院题目: 基于FPGA定时闹钟实验报告初始条件:quartus II 软件要求完成的主要任务:设计一个具有系统时间设置和带闹钟功能的24小时计时器中的应用。
电子钟要求如下:(1)计时功能:4位LED数字时钟对当前时间的小时和分钟进行显示,显示的最长时间为23小时59分。
(2)设置并显示新的闹钟时间:用户先按“set”键,再用数字键“0”~“9”输入时间,然后按“alarm”键确认。
在正常计时显示状态下,用户直接按下“alarm”键,则已设置的闹钟时间显示在显示屏上。
(3)设置新的计时器时间:用户先按“set”键,再用数字键“0”-“9”输入新的时间,然后按“time”键确认。
(4)闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。
时间安排指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 .............................................................................................................................................. I II Abstract.......................................................................................................................................... I V1 FPGA概述 (1)1.1 FPGA基本结构 (1)1.2 FPGA编程原理 (1)1.3 FPGA设计流程 (2)2总体方案 (4)2.1顶层设计 (4)3各模块设计与实现 (5)3.1计时模块 (5)3.2分频器模块 (8)3.3显示模块 (10)3.4校对模块 (12)3.5闹铃设置模块 (14)3.6闹铃发声模块 (17)4 心得体会 (21)5参考文献 (22)摘要FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/PGFA。
fpga数字钟实验总结
fpga数字钟实验总结
FPGA数字钟实验总结:
本次FPGA数字钟实验旨在设计并实现一个基于FPGA的数字时钟。
通过该实验,我掌握了以下几个方面的知识和技能。
首先,我学会了使用FPGA开发工具进行电路设计和编程。
我使用了一种特定的硬件描述语言(HDL),如Verilog或VHDL,来描述时钟电路的功能和行为。
通过学习和实践,我能够熟练地使用FPGA开发工具创建和编辑代码。
其次,我了解了数字时钟的基本原理和组成部分。
数字时钟通常由时钟芯片、计数器、显示器和控制电路组成。
我学会了如何使用FPGA来实现这些功能,并通过编程控制时钟的显示方式和计时功能。
在实验过程中,我还学会了时序设计和逻辑电路的基本概念。
由于时钟电路需要精确的时序控制,我学会了如何设计和优化时钟电路的时序路径,以确保电路的正常运行和准确计时。
此外,我还学会了如何使用开发板上的按钮和开关等外部输入
设备来控制时钟的设置和调整功能。
通过编程,我能够实现时钟的
时间调整、闹钟设置等功能,并通过显示器将相应的信息展示出来。
最后,在实验过程中,我也遇到了一些挑战和问题。
例如,时
钟的精确性和稳定性是一个重要的考虑因素,我需要注意时钟信号
的抖动和噪声问题。
此外,时钟的显示方式和格式也需要根据实际
需求进行设计和调整。
通过本次FPGA数字钟实验,我不仅巩固了对数字电路和FPGA
开发的理论知识,还提高了实际操作和问题解决能力。
这个实验为
我今后在数字电路设计和嵌入式系统开发方面的学习和工作奠定了
坚实的基础。
基于FPGA的数字时钟课程设计
基于FPGA的数字时钟成员:技术规范一、功能定义1、分频:在电子钟的设计中,涉及到的频率有三个:(1):1Hz的秒计时频率,用来进行秒计时;(2):4Hz的按键防抖频率;(3):1000Hz的循环扫描频率;因此在分频模块应实现将芯片中的高频率时钟分频得到上面的三个所需频2、控制:进行正常计时,时间调整,时间复位模式的选择:(1)时间初始复位;(2)选择秒时间调整的模式;(3)选择分时间调整的模式;3、计时:进行调整时间,正常计时;(1)正常计时;(2)调整秒计时;(3)调整分计时;4、选择输出:进行时间高低位的变换及循环扫描输出:(1)进行时间高低位的变换;设计思路:一、总体设计思路图:二、功能引脚定义1、总体引脚(1)K[1]:输入,控制是否进入调整模式,调时模式或调分模式。
(2)K[2]:输入,根据K1的选择进行加1调时。
(3)CLK:输入,1赫兹,控制秒钟的频率。
(4)CLK1K:输入,1K赫兹,控制时间的连续扫描输出。
(5)[7:0]LED:输出,七段显示译码管的输入。
(6)[5:0]SEG:输出,控制六个数码管的是否接通。
(7) SC:输入,时间复位。
2、(1)控制模块:输出控制信号和时分秒计时。
控制信号控制时分秒是否正常计时。
K[1]:输入,控制是否进入调整模式,调时模式或调分模式。
K[2]:输入,根据K1的选择进行加1调时。
SC:输入,时间复位。
[5:0]SEC:复位秒计时。
[5:0]MIN:复位、调时分计时。
[5:0]HOUR:复位、调时时计时。
KEN:控制是否进行正常及时、进入调时复位状态。
(2)计时模块秒计时:输出正常的秒计时或复位计时。
分计时:输出正常的分计时或复位计时或调时计时。
时计时:输出正常的时计时或复位计时或调时计时。
(3)时间扫描模块:利用高频率的时钟不断地循环扫描是分秒计时,以便循环译码;输出控制信号,控制数码管是否有效;此模块同时进行时间的高地位的计算与输出。
基于FPGA定时闹钟实验报告
西南科技大学电工学,电子技术学生实验报告课程名称FPGA技术课程设计实验课题定时闹钟班级电子0902指导老师龙惠民评分实验小组2012年4月25日实验课题:定时闹钟实验时间:2012年4月16日—4月30日实验小组成员:一.设计要求设计一个具有系统时间设置和带闹钟功能的24小时计时器中的应用。
电子钟要求如下:(1)计时功能:4位LED数字时钟对当前时间的小时和分钟进行显示,显示的最长时间为23小时59分。
(2)设置并显示新的闹钟时间:用户先按“set”键,再用数字键“0”~“9”输入时间,然后按“alarm”键确认。
在正常计时显示状态下,用户直接按下“alarm”键,则已设置的闹钟时间显示在显示屏上。
(3)设置新的计时器时间:用户先按“set”键,再用数字键“0”-“9”输入新的时间,然后按“time”键确认。
在输入过程中;输入的数字在显示屏上从右到左依次显示。
例如,用户要设置新的时间12:00,则按顺序输入“l”,“2”,“0”,“0”键,与之对应,显示屏上依次显示的信息为:“1”,“12”;“120”,“1200”。
如果用户在输入任意几个数字后较长时间内,例如5秒,没有按任何键,则计时器恢复到正常的计时显示状态。
(4)闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声;二.设计流程1.顶层设计顶层设计结构2.各模块原理根据顶层设计结构,初步将定时闹钟分为分频器,计时模块,显示模块,闹钟模块。
(1).计时模块包括秒计时子模块(sec),分计时子模块(min),时计时模块(hour),以及主控子模块(control)。
其工作原理:为妙计时子模块送1HZ脉冲,但秒计数达60时,秒计数器清零,秒进位信号为‘1’,并作为分计数器的时钟信号。
每产生一个秒进位信号,分计数器加‘1’。
同样,分计数达60时,计数器清零,并产生一个分进位信号,作为时的时钟信号,每产生一个分进位信号,时计数器加1,当计数器达24时,计数器清零。
基于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.分频模块(fenpin):功能是产生用于计时,扫描输入,扫描显示,以及播放音乐所需的各个频率的信号。
2.输入模块(input):功能是识别键盘的输入,具体来说,主要是判断是否有键按下,并且确定按下的是哪个键,并给出相应的操作信号。
3.计时模块(minute,hour):分为分计时(minute)和小时计时(hour)两个小模块,分别完成分位与小时为的计时与时间设置功能,正常计时是每次清零后从00:00开始计时,若预置时间,则从预置数开始计。
4.闹钟模块(alart):功能是设置闹钟和整点报时,当切换至闹钟设置时,可以输入时间,并将其记录下来,当时钟时间与闹钟预设时间相同时,给出一个脉冲信号,另一功能是当时钟为整点时给出一个脉冲信号。
5.数据选择(sel):功能是设置时间时将键盘输入的数据传给计时和显示模块,当设置闹钟时将键盘输入的数据传给闹钟和显示模块。
6.音乐(music):功能是当闹钟部分给出给出响铃信号(闹钟和整点)时响起两端不同的音乐。
7.扫描显示(display):功能是在数码管上分别显示时间的四位数值,并且当时间设置至某一位时点亮相应的小数点。
三.问题及解决方法1.语法错误因为第一个项目是数字钟,刚接触时对VHDL语言还不是非常熟悉,因此常常会犯忘掉分号或是END IF 之类的错误,这类问题根据编译时的提示都能解决。
2.键盘的稳定性问题最初设计的键盘扫描方式是一直扫描,当有按键按下时也不断给出该键的位置并执行相应的操作,但是在上板后发现键盘不稳定,具体表现是当按下某个键时两次扫描给出的位置可能有偏差,例如按着2键,可能在中间某一次会显示成3,最后解决的方法是当检测到如果有按键按下时边将扫描列的高电平锁定在该列,例如检测到有按键1时,便将列输出锁定为“1000”,直到按键松开时再从下一列重新开始扫描,这样键盘就稳定了很多。
基于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的步进变动。
基于FPGA的多功能电子时钟设计报告书
基于FPGA的多功能时钟的设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:第一章绪论现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。
前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronic design automatic, EDA)技术。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特殊的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所对应的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
f pg a数字钟课程设计报告 Prepared on 24 November 2020课程设计报告设计题目:基于FPGA的数字钟设计班级:电子信息工程1301姓名:王一丁指导教师:李世平设计时间:2016年1月摘要EDA(Electronic Design Automation)电子设计自动化,是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成软件方式设计得电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。
本次课程设计利用Quartus II 为设计软件,VHDL为硬件描述语言,结合所学知识设计一个多功能时钟,具有显示年、月、日、时、分、秒显示,计时,整点报时,设定时间等功能。
利用硬件描述语言VHDL 对设计系统的各个子模块进行逻辑描述,采用模块化的思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑综合优化、逻辑仿真、最终完成本次课程设计的任务。
关键词:EDA VHDL语言数字钟目录摘要1 课程设计目的2 课程设计内容及要求设计任务设计要求3 VHDL程序设计方案论证系统结构框图设计思路与方法状态控制模块时分秒模块年月日模块显示模块扬声器与闹钟模块RTL整体电路4 系统仿真与分析5 课程设计总结,包括.收获、体会和建议6 参考文献1 课程设计目的(1)通过设计数字钟熟练掌握EDA软件(QUARTUS II)的使用方法,熟练进行设计、编译,为以后实际工程问题打下设计基础。
(2)熟悉VHDL 硬件描述语言,提升分析、寻找和排除电子设计中常见故障的能力。
(3)通过课程设计,锻炼书写有理论根据的、实事求是的、文理通顺的课程设计报告。
2 课程设计内容及要求设计任务(1)6个数字显示器显示时分秒,setpin按键产生一个脉冲,显示切换为年月日。
(2)第二个脉冲可预置年份,第三个脉冲可以预置月份,依次第四、五、六、七个脉冲到来时分别可以预置时期、时、分、秒,第八个脉冲到来后预置结束正常从左显示时分秒。
(3)up为高时,upclk有脉冲到达时,预置位加一,否则减一。
设计要求(1)在基本功能的基础上,闹钟在整点进行报时,产生一定时长的高电平。
(2)实现闹钟功能,可对闹钟时间进行预置,当达到预置时间时进行报时。
3 VHDL程序设计方案论证该数字钟可以实现:计时功能、整点报时、闹钟和预置时间功能,因此时钟系统可分为5个模块:功能选择模块、时分秒计数模块、年月日计数模块、显示模块、扬声器模块、脉冲产生模块。
(1)功能选择模块是有状态机构成的,功能为依次进行、设置时间、设置闹钟时间。
调整工作状态:数字钟的初始状态显示时分秒,在setpin按键产生一个脉冲,显示切换为年月日。
设置时间:第二个脉冲可预置年份,第三个脉冲可以预置月份,依次第四、五、六、七个脉冲到来时分别可以预置时期、时、分、秒。
第八个脉冲到来后,预置结束恢复初始状态,正常显示时分秒。
设置闹钟时间:闹钟在setpin1按键产生第一个脉冲时设定闹钟的时,第二个脉冲设定分,第三个脉冲设定秒,第四个脉冲恢复显示时分秒。
(2)时分秒计数模块包括正常计时、闹钟、整点报时三个功能。
正常计时功能通过软件编写,60进制的秒计数器,60进制的分计数器,24进制的时计数器。
时分秒的计数器具有清0、置数、进位和计数功能。
其中reset为清0信号,当reset为0时,时分秒的计数器清0。
当set产生第四个脉冲后,连续产生的set信号使分秒计数器依次进行置数。
以upclk为时钟,通过up对预置位进行控制,当up为高时且upclk有脉冲到来时,预置位加一,否则减一。
当set产生第八个脉冲时,数字钟恢复时分秒的显示。
闹钟功能是在正常计数功能上拓展,分为闹钟时间预置和闹钟响应两个部分。
闹钟时间预置功能:当set1连续产生脉冲时,依次对闹钟的时分秒位进行预置。
以upclk为时钟,通过up对预置位进行控制,当up为高时且upclk有脉冲到来时,预置位加一,否则减一。
当set1产生第四个脉冲时,数字钟恢复时分秒的显示。
与此同时在程序中增添变量时计时功能可以持续运行。
闹钟响应功能:通过预置后,储存的变量与计时器模块的时、分、秒进行比对,当时、分、秒相同时,模块产生一个一段时间的高电平,传输给闹钟响应模块。
整点报时功能:当计数器中的分位等于59,秒位等于59时,模块产生一段高电平,输出给扬声器模块进行报时。
(3)年月日计数模块分为年月日计数功能,年月日预置数功能。
年月日计数功能:以时位的进位脉冲为计时脉冲,闰年二月份为29天,普通年二月份为28天。
一月、三月、五月、七月、八月、十月、十二月为31天,四月、六月、九月、十一月为30天。
年月日预置数功能:当set产生第一个脉冲后,依次进行年月日数器置数。
以upclk为时钟,通过up对预置位进行控制,当up为高时且upclk有脉冲到来时,预置位加一,否则减一。
(4) 显示模块:以时分秒,年月日模块的输出、状态标志为输入信号,通过状态控制模块产生的状态标志对显示模块进行控制,显示计时、预置时的不同状态。
(5)扬声器模块:输入信号为分位、秒位和状态信号,当计时时钟到达整点是输出高电平,其他时刻输出低电平。
(6)脉冲产生模块:对输入的信号进行1000分频,产生周期为一秒的时钟信号,用于数字钟的时钟输入。
系统结构框图设计思路与方法状态控制模块状态控制模块实现对各个功能模块的整体设计,包括对时间与日期的显示与调整,闹钟的显示与调整等控制操作。
状态机的输入为setpin,setpin1,upclk。
状态机的状态有11种状态。
g:闹钟设置时位;g:闹钟设置分位;2g:闹钟设置秒位;1s:时钟显示时分秒;1s:时钟显示年月日;2s:钟设置年;s:时钟设置月;4s:时钟设置日;5s:时钟设置时;3s:时钟设置分;7s:设置秒6在产生如上状态的同时产生Tlock,flag状态标志,此标志用来进行时钟设置、闹钟设置与显示控制。
RTL 电路图实现代码如下:process(upclk)beginif (upclk='1' and upclk'LAST_VALUE='0')thenstate<=next_state; -- 实现状态变换end if;end process;process(state,setpin,setpin1)beginnext_state<=state;case(state) iswhen s0 =>Tlock<="0000";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0; end if;if(setpin='1' and setpin'LAST_VALUE='0') thennext_state<=s1; end if;when s1=>Tlock<="0001";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s2;end if;when s2=>Tlock<="0010";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s3;end if;when s3=>Tlock<="0011";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s4;end if;when s4=>Tlock<="0100";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0;end if;if(setpin='1' and setpin'LAST_VALUE='0') thennext_state<=s5;end if;when s5=>Tlock<="0101";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0;end if;if(setpin='1' and setpin'LAST_VALUE='0') thennext_state<=s6; end if;when s6=>Tlock<="0110";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s7;end if;when s7=>Tlock<="0111";flag<='1';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g0;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s0; end if;when g0=>Tlock<="1000";flag<='0';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g1;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s0;end if;when g1=>Tlock<="1001";flag<='0';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=g2;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s0; end if;when g2=>Tlock<="1010";flag<='0';if(setpin1='1' and setpin1'LAST_VALUE='0')then next_state<=s0;end if;if(setpin='1' and setpin'LAST_VALUE='0') then next_state<=s0;end if;when others=>next_state<=s0;end case;end process;时分秒模块时分秒模块的输入为ce(使能端),clk0(系统输入时钟),clk1(upclk时钟),flag(标志位),lock(状态位),up(预置位增减控制),ov(进位位),op(闹钟与扬声器响应)。