基于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的电子钟设计报告一、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技术的数字时钟电路,以满足工业系统时间测量和管理的需求。
数字时钟电路的设计主要分为三个方面:晶振、时钟频率调整以及I/O管脚分配。
首先,选用封装形式为HC49-S的晶振器,其主要特征包括频率精度低至±50ppm、温度范围
宽至−10℃至+70℃、工作温度可升至105℃以及动态特性良好等。
其次,进行时钟频率
调节用FPGA。
FPGA的时钟频率调节模块采用MMC和VCO技术实现时钟频率抢断,可对晶
振的稳定频率进行调节,从而获得高精度的时钟信号。
最后,通过FPGA的I/O管脚分配
完成时钟信号输出,从而将数字信号变换为时间信号,实现时间数据的采集和处理。
基于FPGA技术的数字时钟电路可以有效地满足工业系统实时时间测量和管理的需求,实现工业系统时间计量技术的发展。
该电路具有稳定高效、体积小、功耗低以及现场可实
现调整参数等优缺点,在工业领域具有很高的应用前景。
基于FPGA的数字钟设计
基于FPGA的数字钟设计摘要:现实生活中经常会出现需要用时间测定参数数值的情况,服务日常生活和生产。
基于FPGA设计数字电路产品已经成为当前的重要设计方法。
本文设计选用了Quartus软件环境,运用描述逻辑Verilog HDL,由上至下的模式,基于FPGA完成了数字时钟的设计方案。
本次设计成果采用按键对闹钟的起止点进行控制,能够显示时,分,秒等并且能够实现整点报时。
其中的FPGA技术就是本次试验的亮点之一,其设计易于学习,各个模块分工清晰,在模拟软件上很容易运行,还能够适配于许多种环境,因此总体的系统性能指标还是相当有保证的。
关键词:数字钟;FPGA;Verilog HDL;Quartus1.1 课题研究背景在现代社会,数据集成电路已广泛运用于日常日常生活的各行各业。
数据集成电路也在不停拆换。
从起初的整流管、电子管、大中小型集成电路发展趋势为具备特大型集成电路和独特作用的各类专用型集成电路。
可是,因为微电子技术科技进步的迅猛发展,集成电路设计方案和生产制造工作中再也不会由半导体生产商独立担负。
系统软件室内设计师更喜欢立即设计方案专用型集成电路(ASIC)处理芯片,并马上资金投入具体运用,因而发生了当场可编程逻辑机器设备(FPLD),在其中应用最普遍的是当场可编门阵列(FPGA)。
数字钟是一种选用数字电路设计技术性完成时、分、秒计时的装置,在完成数据与此同时表明时、分、秒的准确时间和精确校正时,体积小、重量轻、抗干扰能力强、对自然环境需要高、高精密、易于开发设计等与在办公系统系统软件等众多行业运用非常普遍的传统式表壳式机械手表对比,数字表更精确、形象化,因为沒有机械设备装置,使用期限长。
1.2 国内外研究现状近些年来已经有许多技术人员针对电子器件以及时钟等技术进行了研究,但真正意义上的数字钟表起源于50年代或60年代。
伴随着在我国数字钟表电源电路销售市场的迅速发展趋势,尤其是十二五阶段经济发展方法这一领土主权主旋律早已明确,与之有关的关键生产制造技术运用和产品研发将变成领域公司关心的焦点。
基于FPGA数字时钟
基于FPGA的数字时钟设计一、课程设计目的1、进一步熟悉QuartusⅡ的软件使用方法;2、熟悉可编程逻辑器件的开发流程及硬件测试方法;3、熟悉基于FPGA的综合数字系统设计方法;二、设计任务设计一台可以显示时、分、秒的数字钟。
如图1所示为基于FPGA的数字钟设计的系统框图。
图1 数字钟系统三、设计要求1、能直接显示小时、分、秒,其中小时为以二十四为计数周期;2、能够显示日期(即年、月、日),且要求在显示时钟的数码管上显示日期,即时钟数码管与日期数码管复用;3、年、月、日要严格按照实际日期,例如1月31天,4月30天,2月闰年29天等;4、当数字钟发生走时错误时,要求电路有校时功能,可以对时、分单独校正,且校正时间时系统时钟不工作;5、当日期发生错误时,要求有校正日期功能,可以对年、月、日单独校正,且矫正日期时时钟系统仍然工作;6、具有闹钟功能,即输入想要定时的时间,当时钟到达该时间时报警,系统可由灯亮代表报警信号。
四、设计内容1、时间计数模块本次是将秒分时各个模块分开进行设计,用秒的进位作为分模块的脉冲,用分的进位作为是模块的脉冲。
秒进位的仿真波形程序:秒的程序module miao(clk,gdata,ddata,en,cl,clr);input clk;input en;input clr;output [3:0] ddata;output [3:0] gdata;output cl;reg [7:0] q;reg cl;assign ddata=q%10;assign gdata=q/10;always @(negedge clk or posedge clr)beginif(clr==1)q=0;elsebeginif(en==1)beginif(q<59)beginq=q+1;cl=0;endelsebeginq=0;cl=1;endendendendendmodule分模块和时模块的程序一秒程序类似,只是进位计数不一样。
基于FPGA的数字钟设计
摘要伴随着集成电路技术的发展, 电子设计自动化(EDA)技术逐渐成为数字电路设计的重要手段。
基于FPGA的EDA技术的发展和应用领域的扩大与深入,使得EDA技术在电子信息,通信,自动控制,计算机等领域的重要性日益突出。
本设计给出了一种基于FPGA的多功能数字钟方法,采用EDA作为开发工具,VHDL语言和图形输入为硬件描述语言,QuartusII作为运行程序的平台,编写的程序经过调试运行,波形仿真验证,下载到EDA实验箱的FPGA芯片,实现了设计目标。
系统主芯片采用CycloneII系列EP2C35F672C8。
采用自顶向下的设计思想,将系统分为五个模块:分频模块、计时模块、报时模块、显示模块、顶层模块。
用VHDL语言实现各个功能模块, 图形输入法生成顶层模块. 最后用Q uartusII软件进行功能仿真,验证数字钟设计的正确性。
测试结果表明本设计实现了一个多功能的数字钟功能,具有时、分、秒计时显示功能,以24小时循环计时;具有校正小时和分钟的功能;以及清零,整点报时功能。
关键词:EDA技术;FPGA;数字钟;VHDL语言;自顶向下AbstractAccompanied by the developmentof integrated circuit tec hnology, electronic designautomation (EDA) technology is becoming an important meansof digitalcircuitdesign. FPGA EDA technology development and expansion ofapplic ationfields and in-depth,the importance of EDA technologyin the fieldofelectronic information,communication, automatic control, computer, etc.havebecome increasingl yprominent.This design gives aFPGA-basedmultifunctional digi talclock using EDA as a development tool,VHDLlanguage andgraphicalinput hardwaredescriptionlanguage, the QuartusIIasaplatform for runningthe program, written procedures debugging andrunning, thewaveform simulation do wnloaded tothe FPGA chip to achievethe design goals.Themainsystemchip CycloneIIseries EP2C35F672C8. Ado pted a topdwn designideas,thesystem is divided into five modules: frequencymodule,timing module, timermodule, di splay module,the top-levelmodule. WithVHDL various fun ctionalmodules,graphical input method to generate the top-levelmodule. LastQuartusII undersimulation, tover ify the correctness ofthedigitalclockdesign.Thetest results show that thedesign of amultifunctional digitalclock,with seconds time display, 24-hour cyclet iming; has a school,cleared, and the whole pointtimekeeping functions.Key words: EDA technology; FPGA; VHDL language; top-down;di gital clock目录1 绪论............................................................................................. 错误!未定义书签。
基于XilinxFPGA的数字钟设计
基于FPGA的多功能数字钟一、设计题目基于Xilinx FPGA的多功能数字钟设计二、设计目的1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2.熟悉一种EDA软件使用;3.掌握Verilog设计方法;4.掌握分模块分层次的设计方法;5.用Verilog完成一个多功能数字钟设计;6.学会FPGA的仿真。
三、设计内容设计实验项目九多功能电子钟✧功能要求:利用实验板设计实现一个能显示时分秒的多功能电子钟,具体要求为:基本功能:1)准确计时,以数字形式显示时、分、秒,可通过按键选择指示当前显示时间范围模式;2)计时时间范围 00:00:00-23:59:593)可实现校正时间功能;4)可通过实现时钟复位功能:00:00:00扩展功能:1)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用实验板LED或外接电路实现。
2)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---利用实验板LED或外接电路实现。
3)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---利用实验板LED或外接电路实现。
4)手动输入校时;5)手动输入定时闹钟;6)万年历;7)其他扩展功能;✧设计步骤与要求:1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。
2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。
3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。
4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文件。
5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。
四、总体设计思路主体分为分频模块,正常时间模块(包含两个模60计数器和一个模24计数器子模块),闹钟模块(分为一个模60计数器模块,一个模24计数器模块,四个比较器模块),电台报时模块,数码管显示模块(分为模式选择模块,片选信号及扫描程序模块,和译码模块)。
基于FPGA的数字时钟设计
基于FPGA的数字时钟设计一、实验设计目的:1、进一步熟悉QuartusⅡ的软件使用方法;2、熟悉可编程逻辑器件的开发流程及硬件测试方法;3、熟悉基于FPGA的综合数字系统设计方法;二、设计任务及要求:设计一台可以显示时、分、秒的数字钟。
如图:图1 数字钟系统要求:1、能直接显示小时、分、秒,其中小时为以二十四为计数周期;2、当电路发生走时错误时,要求电路有校时功能,可以对时、分单独校正;3、具有闹钟功能,即输入想要定时的时间,当时钟到达该时间时报警,系统可由灯亮代表报警信号。
4、能显示年月日,使其具有日历功能,并能完成对三种日期状态的校正。
三、设计思路:在24进制程序的基础上设计时钟功能,并加入校正模块以实现对时钟的校正。
在实现时钟功能后添加闹钟模块,并用高位信号表示报时信号。
根据时钟设计方法设计日历功能,同样也加入校正模块。
并且根据日期的进位特点(3月31日,4月30日)完善对日历功能的设计。
四、设计原理:1、根据24进制与60进制的进位信号,完成分钟位,小时位的显示,使其构成基本时钟功能。
2、根据24小时的进位信号count,进行年月日功能的实现。
设置K2与K1为日历与时钟的切换键。
3、在时钟电平作用下,设计两个高低电位JZ1与JZ2电平与K2与K1信号同时控制小时位、分钟的校正。
4、用时钟电平clk2作为闹钟的进位信号,设置K2与K1为闹钟和时钟的切换键。
设置MZ1与MZ2控制闹钟的分钟位与小时位,进行闹钟的设定。
5、在K2、K1与使能信号控制下,设置JZ1与JZ2进行对日历的日与月的校正;JZ1与JZ2进行对年份的个位与十位的校正。
6、最终用K1、K2的四种模式控制显示闹钟、时钟与日历的切换显示模块。
五、设计过程:当时间为23:59:59则进位端count为1,此时判别月份与日期,进行相应的日进位与月进位。
模块2:校准与闹钟设置该程序段为分与时校正,当K1=K2=0时,JZ1为1时,进行分校准;JZ2为1时,进行时校准。
基于FPGA的数字时钟设计
第28卷 第5期核电子学与探测技术V ol .28 N o .5 2008年 9月Nuclear Electronics &Detection Technolo gySep . 2008 基于FPGA 的数字时钟设计宋克柱(中国科学技术大学近代物理系快电子学实验室,合肥 230026) 摘要:本文介绍一种基于F PG A 的数字时钟设计方法:DCM (数字时钟管理器)。
DCM 使用完全数字反馈系统确保多个时钟同步,使用完全数字延迟线技术可以精确控制时钟的频率和相位。
用户可以编程控制时钟任意倍频和分频及任意相位移动,使用非常方便可靠。
文章还给出应用设计原理图及逻辑仿真波形图。
关键词:时钟、锁相环、频率合成、相位移动、DCM中图分类号: T N786 文献标识码: A 文章编号: 0258-0934(2008)05-0982-05收稿日期:2006-12-27作者简介:宋克柱,男,1966年9月生,籍贯安徽和县,副教授,博士。
主要从事高速数据采集和信号处理、高速通讯等领域的研究工作。
已发表论文20多篇。
在较复杂应用电子系统中,经常会在一个系统或一块电路板中用到多种频率、不同相位或固定相位差的高速多相时钟,例如,高精度TDC (时间数字转换)系统。
传统的设计方法是采用锁相环分立器件来产生高速时钟,采用延迟线或分立器件产生时钟延时。
这些方法的缺点是精度不高、使用不方便,尤其高速时钟在PCB 板布线会产生较大的畸变。
随着大规模可编程逻辑器件FPGA 或CPLD 技术的发展,世界上几大可编程逻辑器件厂家都推出了新型的可编程逻辑器件,可以将锁相环或其它数字时钟逻辑核(logic core )集成在FPGA 里。
例如,Xilinx 公司的VirtexII 系列FPGA 的DCM (Digital Clo ck M anage r ),Altera 公司的A -pex20KE 系列的PLL (Phase Locked Loo p )。
基于FPGA的数字电子钟的设计与实现
基于FPGA的数字电⼦钟的设计与实现背景:本实验所有结果基于Quartus II 13.1 (64-bit)实现,实验过程采⽤⾃下⽽上⽬录⼀、基本功能设计与思路基本功能:能实现秒、分钟、⼩时的计数,计数结果清晰稳定的显⽰在 6 位数码管上。
1、动态显⽰模块该模块主要功能是通过数码管的动态扫描实现 6 位数码管显⽰计数结果,本模块由扫描模块scan_cnt6,位选控制模块 dig_select,数据选择控制模块 seg_select 以及译码模块 decoder 构成扫描模块 scan_cnt6模块功能:产⽣ 位选控制端dig_select 和数据选择端 code_select 模块所需要的地址信息,扫描时钟决定位选信号和数据切换的速度。
设计思路:利⽤74390芯⽚(P160 TTL 双⼗进制异步计数器)构建⼀个模六计数器,就是6进制计数器,利⽤计数到6(110)时,“q2”和“q1”为⾼电平,产⽣ ⼀个复位信号,加到74390的⾼电平有效的异步清0端“1CLR”上,使计数器回0,从⽽实现模六计数。
设计结果:cnt6模块设计图波形仿真:(默认为时序仿真)cnt6模块波形仿真图位选模块 dig_select模块功能:在地址端的控制下,产⽣位选信号。
设计思路:利⽤74138芯⽚(3线-8线译码器),当选通端输⼊端G1为⾼电平,选通端输⼊端G2AN和G2BN为低电平时,将扫描信号cnt6的输出作为输⼊信号,dig[5..0]是译码输出,输出低电平有效。
设计结果:dig_select模块设计图波形仿真:dig_select模块波形仿真图数据选择模块 seg_select模块功能:输⼊ 6 组数据,每组数据 4bit,本模块完成在地址端的控制下从6 组数据当中选择 1 组输出。
设计思路:利⽤74151芯⽚(P91 8选1数据选择器),在控制输⼊端GN为低电平时,将扫描信号的选择下,分别选中D[5..0]对应的输⼊信号输出为Y。
基于FPGA多功能数字钟的设计
实验名称:基于FPGA的数字时钟设计一、实验目的:通过实验熟练运用Verilog HDL语言和 FPGA开发软件,使用BASYS2开发板设计一个可调式并且较复杂的数字时钟。
二、实验硬件要求:计算机、BASYS2开发板、蜂鸣器三、实验内容:1、电路功能:在ISE Design Suite 14.7软件开发环境下,使用Verilog描述语言、结合FPGA开发板编译和仿真数字时钟;要求时钟能进行基本的计时功能,按照:“时:分”来显示时间,秒的功能由流水灯表示;能引入秒脉冲进行校时、校分,并可用rst信号给清零;具有整点报时功能,当计时到整点的时候蜂鸣器开始鸣响,响声为乐曲“铃儿响叮当”。
2、电路图:3、Veilog 程序:1)分频模块div_clk:module divclk(sys_clk,rst,sec_clk);input sys_clk,rst;//系统时钟,复位output reg sec_clk;//秒时钟输出reg[27:0] cnt;//分频计数器,在人眼可识别范围之内always @(negedge sys_clk)beginif(rst)//对计数器进行复位begincnt <= 28'h0000000;sec_clk <= 1'b0;endelseif(cnt >= 28'h17d783f)begincnt <= 28'h0000000;sec_clk <= ~sec_clk;endelse cnt <= cnt+1'b1;endendmodule2)时钟计时模块clockmoduleclock(clk,rst,key,hor_h,hor_l,min_h,min_l,sec_h,sec_l,speak,sys_clk); input clk,rst,sys_clk;input [3:0]key;output [3:0]hor_h,hor_l,min_h,min_l,sec_h,sec_l;output speak;reg [3:0]hor_h,hor_l,min_h,min_l,sec_h,sec_l;reg speak;always@(posedge clk or posedge rst)beginif(rst)beginsec_h <=4'h0;sec_l <=4'h0;min_h <=4'h0;min_l <=4'h0;hor_h <=4'h0;hor_l <=4'h0;endelsecase(key)4'b1000:beginif(hor_h >= 4'h2)hor_h <= 4'h0;elsehor_h <= hor_h + 1'b1;end4'b0100:beginif(hor_l >= 4'h9||(hor_h >= 4'h2 && hor_l >= 4'h3)) hor_l <= 4'h0;elsehor_l <= hor_l + 1'b1;end4'b0010:beginif(min_h >= 4'h5)min_h <= 4'h0;elsemin_h <= min_h + 1'b1;end4'b0001:beginif(min_l >= 4'h9)min_l <= 4'h0;elsemin_l <= min_l + 1'b1;enddefault :beginif(sec_l >= 4'h9)beginsec_l <= 4'h0;if(sec_h >= 4'h5)beginsec_h <= 4'h0;if(min_l >= 4'h9)beginmin_l <= 4'h0;if(min_h >= 4'h5)beginmin_h <= 4'h0;if(hor_l >= 4'h9||(hor_h >= 4'h2 && hor_l >= 4'h3))beginhor_l <= 4'h0;if(hor_h >= 4'h2)hor_h <= 4'h0;elsehor_h <= hor_h + 1'b1;endelsehor_l <= hor_l + 1'b1;endelsemin_h <= min_h + 1'b1;endelsemin_l <= min_l + 1'b1;endelsesec_h <= sec_h + 1'b1;endelsesec_l <= sec_l + 1'b1;endendcaseendalways @(posedge clk)beginif(rst)speak <= 1'b0;else if(min_h == 4'h0 && min_l <=4'h0 && sec_h <= 4'h0)speak <= 1'b1;elsespeak <= 1'b0;endendmodule3)发声模块speaker:module speaker(clk,rst,en,f);input clk,rst,en;output reg f;reg [6:0] tonestep;reg [3:0] tonecode;reg [19:0] divcnt;reg [19:0] cntnum;reg sub_clk;reg[24:0] sub_cnt;always@(posedge clk)beginif(rst) beginsub_cnt <= 0;cntnum <= 0;divcnt <= 0;f <= 0;sub_clk <=0;endelse beginif(sub_cnt >=1500000)beginsub_clk <= ~sub_clk;sub_cnt <=0;endelse sub_cnt <= sub_cnt + 1'b1;if(en == 1'b1)begincase(tonecode)1:cntnum <= 95444;2:cntnum <= 85052;3:cntnum <= 75750;4:cntnum <= 71625;5:cntnum <= 63775;6:cntnum <= 56825;7:cntnum <= 50600;default : cntnum <= 0;endcaseif(cntnum == 0)f <= 1'b0;elseif(divcnt >= cntnum)begindivcnt <= 0;f <= ~f;endelse divcnt <= divcnt + 1'b1;endendendalways@(posedge sub_clk)beginif(rst)begintonestep <= 0;tonecode <= 0;endelseif(tonestep <=80)tonestep <= tonestep + 1'b1;else tonestep <= 0;case(tonestep)7'b0000000:tonecode <= 3;7'b0000001:tonecode <= 3;7'b0000010:tonecode <= 8;7'b0000011:tonecode <= 3;7'b0000100:tonecode <= 3;7'b0000101:tonecode <= 8;7'b0000110:tonecode <= 8;7'b0000111:tonecode <= 3;7'b0001000:tonecode <= 3;7'b0001001:tonecode <= 3;7'b0001010:tonecode <= 3;7'b0001011:tonecode <= 8;7'b0001100:tonecode <= 8;7'b0001101:tonecode <= 3;7'b0001110:tonecode <= 3;7'b0001111:tonecode <= 8;7'b0010000:tonecode <= 3;7'b0010001:tonecode <= 3;7'b0010010:tonecode <= 8;7'b0010011:tonecode <= 8;7'b0010101:tonecode <= 3; 7'b0010110:tonecode <= 3; 7'b0010111:tonecode <= 3; 7'b0011000:tonecode <= 8; 7'b0011001:tonecode <= 8; 7'b0011010:tonecode <= 3; 7'b0011011:tonecode <= 3; 7'b0011100:tonecode <= 8; 7'b0011101:tonecode <= 5; 7'b0011110:tonecode <= 5; 7'b0011111:tonecode <= 8; 7'b0100000:tonecode <= 8; 7'b0100001:tonecode <= 1; 7'b0100010:tonecode <= 1; 7'b0100011:tonecode <= 8; 7'b0100100:tonecode <= 2; 7'b0100101:tonecode <= 2; 7'b0100110:tonecode <= 8; 7'b0100111:tonecode <= 8; 7'b0101000:tonecode <= 3; 7'b0101001:tonecode <= 3; 7'b0101010:tonecode <= 3; 7'b0101011:tonecode <= 3; 7'b0101100:tonecode <= 8; 7'b0101101:tonecode <= 8; 7'b0101110:tonecode <= 4; 7'b0101111:tonecode <= 4; 7'b0110000:tonecode <= 8; 7'b0110001:tonecode <= 4; 7'b0110010:tonecode <= 4;7'b0110100:tonecode <= 8; 7'b0110101:tonecode <= 4; 7'b0110110:tonecode <= 4; 7'b0110111:tonecode <= 4; 7'b0111000:tonecode <= 8; 7'b0111001:tonecode <= 4; 7'b0111010:tonecode <= 8; 7'b0111011:tonecode <= 8; 7'b0111100:tonecode <= 4; 7'b0111101:tonecode <= 4; 7'b0111110:tonecode <= 8; 7'b0111111:tonecode <= 3; 7'b1000000:tonecode <= 3; 7'b1000001:tonecode <= 8; 7'b1000010:tonecode <= 8; 7'b1000011:tonecode <= 3; 7'b1000100:tonecode <= 3; 7'b1000101:tonecode <= 3; 7'b1000110:tonecode <= 8; 7'b1000111:tonecode <= 3; 7'b1001000:tonecode <= 8; 7'b1001001:tonecode <= 3; 7'b1001010:tonecode <= 8; 7'b1001011:tonecode <= 5; 7'b1001100:tonecode <= 5; 7'b1001101:tonecode <= 8; 7'b1001110:tonecode <= 5; 7'b1001111:tonecode <= 5; 7'b1010000:tonecode <= 8; 7'b1000001:tonecode <= 8;7'b1000010:tonecode <= 4;7'b1000011:tonecode <= 4;7'b1000100:tonecode <= 8;7'b1000101:tonecode <= 2;7'b1000110:tonecode <= 2;7'b1000111:tonecode <= 8;7'b1001000:tonecode <= 8;7'b1001001:tonecode <= 1;7'b1001010:tonecode <= 1;7'b1001011:tonecode <= 1;7'b1001100:tonecode <= 1;7'b1001101:tonecode <= 8;7'b1001110:tonecode <= 8;7'b1001111:tonecode <= 5;7'b1010000:tonecode <= 5;7'b1010001:tonecode <= 8;7'b1010010:tonecode <= 3;7'b1010011:tonecode <= 3;7'b1010100:tonecode <= 8;7'b1010101:tonecode <= 8;7'b1010110:tonecode <= 2;7'b1010111:tonecode <= 2;7'b1011000:tonecode <= 8;7'b1011001:tonecode <= 1;7'b1011010:tonecode <= 1;7'b1011011:tonecode <= 8;7'b1011100:tonecode <= 8;endcaseendendmodule4)数码管显示模块seg:module seg(q,ctr,h_h,h_l,m_h,m_l,clk,rst);output[6:0]q;output[3:0] ctr;input[3:0] h_h,h_l,m_h,m_l;input clk,rst;reg[6:0] q;reg[25:0] count;reg[3:0] temp;reg[3:0] scan;always @ (posedge clk)beginif (rst)begincount = 0;endelsebegincount = count +1;endendalways @ (posedge clk ) //Seg Scanbeginif(rst)beginscan<=4'b0000;endelsecase(count[11:10]) // 执行设计时将扫描频率改回 2'b00: scan<=4'b0111;2'b01: scan<=4'b1011;2'b10: scan<=4'b1101;2'b11: scan<=4'b1110;endcaseendassign ctr = scan;always @ (posedge clk) //Seg Scanbeginif(rst)begintemp<=4'b0000;endelsecase(count[11:10]) // 执行设计时将扫描频率改回 2'b00: temp<=h_h;2'b01: temp<=h_l;2'b10: temp<=m_h;2'b11: temp<=m_l;endcaseendalways @(posedge clk) //数码管译码beginif(rst)beginq<=7'b0000000;endelsecase(temp)4'd0:q<=7'b0000001; //04'd1:q<=7'b1001111; //14'd2:q<=7'b0010010; //24'd3:q<=7'b0000110; //34'd4:q<=7'b1001100; //44'd5:q<=7'b0100100; //54'd6:q<=7'b0100000; //64'd7:q<=7'b0001111; //74'd8:q<=7'b0000000; //84'd9:q<=7'b0000100; //9default:q<=7'b0000001;endcaseendendmodule5)秒计时流水灯模块sec_ledmodule sec_led(input sys_clk,input rst,output [7:0] led);reg[24:0] cnt;reg[7:0] led_reg;always@(posedge sys_clk)beginif(rst)cnt <= 0;else cnt <= cnt+1;endalways@(posedge sys_clk)beginif(rst)led_reg <= 8'b0000_0001;else if (cnt == 25'd4*******)beginled_reg <= led_reg << 1;if(led_reg==8'b1000_0000)led_reg<=8'b0000_0001;endassign led=led_reg;Endmodule6键盘修改模块:module keyboard(input sys_clk,// input rst_n,input ps2_clk,input ps2_data,output reg[3:0] key_val);wire [15:0]xkey;reg ps2cf,ps2df;reg clk25=0;reg [7:0]ps2c_filter,ps2d_filter;reg [10:0]shift1,shift2;assign xkey={shift2[8:1],shift1[8:1]};assign rst_n=1;always@(posedge sys_clk)clk25=~clk25;always@(posedge clk25 or negedge rst_n) beginif(!rst_n)beginps2c_filter<=0;ps2d_filter<=0;ps2cf<=1;ps2df<=1;endelsebeginps2c_filter[7]<=ps2_clk;ps2c_filter[6:0]<=ps2c_filter[7:1];ps2d_filter[7]<=ps2_data;ps2d_filter[6:0]<=ps2c_filter[7:1];if(ps2c_filter==8'b1111_1111)ps2cf<=1;elseif(ps2c_filter==8'b0000_0000)ps2cf<=0;if(ps2d_filter==8'b1111_1111)ps2df<=1;elseif(ps2d_filter==8'b0000_0000)ps2df<=0;endendalways@(negedge ps2cf or negedge rst_n)beginif(!rst_n)beginshift1<=0;shift2<=1;endelsebeginshift1<={ps2df,shift1[10:1]};shift2<={shift1[0],shift2[10:1]};endendparameterone = 16'b0001_0110_0001_0110,//{16,16},two = 16'b0001_1110_0001_1110,//{1e,1e},three = 16'b0010_0110_0010_0110,//{26,26},four = 16'b0010_0101_0010_0101,//{25,25},onen = 16'b1111_0000_0001_0110,//{F0,16},twon = 16'b1111_0000_0001_1110,//{F0,1E},threen = 16'b1111_0000_0010_0110,//{F0,26},fourn = 16'b1111_0000_0010_0101;//{F0,25};always@(xkey)case(xkey)one:key_val<=4'b1000;two:key_val<=4'b0100;three:key_val<=4'b0010;four:key_val<=4'b0001;onen:key_val<=4'b0000;twon:key_val<=4'b0000;threen:key_val<=4'b0000;fourn:key_val<=4'b0000;default:key_val<=4'b0000;endcaseendmodulemodule keyboard(input sys_clk,// input rst_n,input ps2_clk,input ps2_data,output reg[3:0] key_val);wire [15:0]xkey;reg ps2cf,ps2df;reg clk25=0;reg [7:0]ps2c_filter,ps2d_filter;reg [10:0]shift1,shift2;assign xkey={shift2[8:1],shift1[8:1]};assign rst_n=1;always@(posedge sys_clk)clk25=~clk25;always@(posedge clk25 or negedge rst_n)beginif(!rst_n)beginps2c_filter<=0;ps2d_filter<=0;ps2cf<=1;ps2df<=1;endelsebeginps2c_filter[7]<=ps2_clk;ps2c_filter[6:0]<=ps2c_filter[7:1];ps2d_filter[7]<=ps2_data;ps2d_filter[6:0]<=ps2c_filter[7:1];if(ps2c_filter==8'b1111_1111)ps2cf<=1;elseif(ps2c_filter==8'b0000_0000)ps2cf<=0;if(ps2d_filter==8'b1111_1111)ps2df<=1;elseif(ps2d_filter==8'b0000_0000)ps2df<=0;endendalways@(negedge ps2cf or negedge rst_n)beginif(!rst_n)beginshift1<=0;shift2<=1;endelsebeginshift1<={ps2df,shift1[10:1]};shift2<={shift1[0],shift2[10:1]};endendparameterone = 16'b0001_0110_0001_0110,//{16,16},two = 16'b0001_1110_0001_1110,//{1e,1e},three = 16'b0010_0110_0010_0110,//{26,26},four = 16'b0010_0101_0010_0101,//{25,25},onen = 16'b1111_0000_0001_0110,//{F0,16},twon = 16'b1111_0000_0001_1110,//{F0,1E},threen = 16'b1111_0000_0010_0110,//{F0,26},fourn = 16'b1111_0000_0010_0101;//{F0,25};always@(xkey)case(xkey)one:key_val<=4'b1000;two:key_val<=4'b0100;three:key_val<=4'b0010;four:key_val<=4'b0001;onen:key_val<=4'b0000;twon:key_val<=4'b0000;threen:key_val<=4'b0000;fourn:key_val<=4'b0000;default:key_val<=4'b0000;endcaseendmodule4、仿真波形图和波形解释:(1)、仿真波形图:(2)、波形解释:将系统的50Mhz的时钟频率进行分频为1hz的频率。
基于FPGA的数字钟设计
目录摘要 (1)Ⅰ设计任务与要求 (2)Ⅱ系统整体方案及设计原理 (2)Ⅲ各模块电路设计与实现 (2)1 分频模块 (2)2 计数模块 (4)3 数码管显示模块 (7)Ⅳ硬件下载及调试 (10)Ⅴ试验中出现的问题及解决办法 (11)Ⅵ设计总结 (11)参考文献 (12)摘要FPGA是可编程逻辑器件,在早期可编程逻辑器件PAL和GAL 的基础上发展而来,但电路规模更大。
同时FPGA具有许多优点,在数字电路设计中得到广泛的应用。
本次设计过程中,我们使用了Altera公司开发的CycloneⅡ芯片,使用EP2C8Q208C8开发板,完成我们的设计。
在设计过程中,主要使用Verilog编程语言进行编程,由于它和C语言有一定的相似之处,使用起来较为方便。
本次课程设计,我们通过编程来控制八段数码管显示我们要的时钟数字,我们通过编程控制交通灯的变换并且利用数码管显示剩余时间,根据EP2C8Q208C8 使用说明,合理安排引脚和时序,顺利完成预定的功能,同时也了解了FPGA和其编程控制过程,为以后的设计奠定了基础。
Ⅰ设计任务与要求。
1. 设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能。
2. 具体要求如下:1) 能进行正常的时、分、秒计时功能,最大计时显示23小时59分59秒。
2) 分别由六个数码管显示时分秒的计时。
Ⅱ系统整体方案及设计原理。
数字计时器是由计时电路、译码显示电路、脉冲发生电路等几部分组成的。
其中,脉冲发生电路将试验箱提供的50Mhz的频率分成电路所需要的频率;计时电路与动态显示电路相连,将时间显示在八段数码管上。
原理框图如下:脉冲发生电路计时器译码显示器Ⅲ各模块电路设计与实现。
1 分频模块。
分频模块程序:module div_clk(clk_50MHz,clk_1Hz,clk_1KHz);input clk_50MHz; //20M时钟频率output clk_1Hz,clk_1KHz;//20M时钟频率分为1Hz,200Hz,1MHz,1kHz,500Hz时钟频率reg clk_1Hz,clk_1KHz;reg [24:0] cnt;//计数器reg [14:0] cnt3;always @(posedge clk_50MHz)begin if(cnt == 24999999) //20MHz分为1Hz,当计数器到9999999时,时钟反转一次begin cnt <= 0; //即20000000次为一个时钟周期,即周期为1Hzclk_1Hz =~ clk_1Hz;//时钟翻转endelse cnt <= cnt + 1'b1;endalways @(posedge clk_50MHz)begin if(cnt3 == 24999)begin cnt3 <=0;clk_1KHz =~ clk_1KHz;//20MHz分为1kHz endelse cnt3 <= cnt3 + 1'b1;endendmodule分频模块时序仿真图如下:2 计数模块。
(完整版)基于FPGA的数字电子钟系统设计毕业论文
基于FPGA的数字电子钟系统设计摘要随着电子技术的飞速发展,现代电子产品渗透到了社会的各个领域,并有力地推动着社会生产力的发展和社会信息化程度的提高。
在现代电子技术中,可编程器无疑是扮演着重要角色。
现场可编程门阵列(FPGA)是近年来迅速发展起来的新型可编程器,其灵活的可编程逻辑可以方便的实现高速数字信号处理。
它突破了并行处理、流水级数的限制,具有反复的可编程能力,从而有效的地利用了片上资源,加上高效的硬件描述语言(VHDL),从而为数字系统设计提供了极大的方便。
本文较系统地介绍了FPGA的基本结构、基本原理、功能特点及其应用;阐述了数字系统设计的基本思想及设计流程,同时,也概述了FPGA在数字系统设计中的作用,基于FPGA的数字系统设计方法和流程;简要介绍了VHDL语言的发展历程,VHDL语言的功能特点等。
本文的主要内容是根据上述原理和方法设计一个电子钟系统,目的在于通过该系统的功能,体现出FPGA在数据处理中的应用。
该电子钟系统功能齐全,设计思路清晰。
系统程序基于VHDL语言,采用模块化设计方法。
系统设计包含8个子程序模块:分频组件、六十进制计数器组件、二十四进制计数器组件、闹钟设定组件、校时组件、i60BCD组件、i24BCD组件、以及二进制转换成七段码组件。
每个子程序均经过EDA 工具仿真,并附有仿真图,最后将各模块组装为一个整体——电子钟。
-关键词电子设计自动化;现场可编程门阵列;硬件描述语言;电子钟-Digital Electronic Clock DesignBased on Technology of FPGAAbstractWith the rapid development of electronic technology, modern electronic products , also increased. In modern electronic technology, the programmable logic devices play a key role.Field programmable gate arrays (FPGA), a new type of programmable device, is developing rapidly recent years.It introduced the concept of flexible programmable logic, which can realize -chip resources, coupled with efficient language VHDL, so as to design digital systems conveniently. This article introduces a system of the basic structure of the FPGA, the basic principle of features and applications; expounded on the basic design of digital systems thinking and design process, at the same time, also outlined the FPGA in the design of digital systems, FPGA-based digital system design methods and processes; gave a briefing on the development of VHDL language, VHDL language and other features.The main work is based on the principles and methods, design an electronic clock system to the adoption of the system, embodied in the FPGA data processing of applications. The electronic clock system is fully functional, designed clear ideas. Based on VHDL system procedures, The system is modular in design methods. It includes 8 sub-system design process modules:frequency division system, 60 M counter system,24 M-counter system,Alarm clock settings system, timing system, i60BCD system, i24BCD system, and convert binary into Seven-Segment code system. each subroutine simulated by EDA tools, with a simulation map. The modules will be the final assembly as a whole - the electronic clock.Key words EDA;FPGA; VHDL; Electronic clock-目录摘要 (I)Abstract (II)第1章绪论 (1)1.1课题背景和意义 (1)1.2可编程器件的发展历程 (1)1.2.1早期的可编程器件——PLD (2)1.2.2高级可编程器件FPGACPLD (3)1.3国内外研究现状 (4)1.4本文主要内容 (5)第2章FPGA基本结构及数字系统设计原理 (6)2.1 FPGA的基本结构及工作原理 (6)2.1.1基于查找表结构的FPGA (8)2.1.2查找表结构的FPGA逻辑实现原理 (8)2.1.3 FPGA的工作原理 (9)2.2数字系统设计概述 (9)2.2.1数字系统的组成 (10)2.2.2数字系统设计方法 (10)2.2.3数字系统设计的一般过程 (11)2.3本章小结 (12)-第3章数字电子钟功能模块设计 (13)3.1数字系统设计中的FPGA (13)3.1.1 FPGA在数字系统设计中的作用 (13)3.1.2基于FPGA的应用系统设计 (13)3.2数字系统设计的重要工具——VHDL (16)3.2.1 VHDL语言的特点 (16)3.2.2基于VHDL的系统设计流程 (17)3.3电子钟主要功能模块设计 (18)3.3.1分频模块 (18)3.3.2六十进制计数器模块 (19)3.3.3二十四进制计数器模块 (20)3.3.4校时模块 (22)3.3.5 BCD七段显示译码器 (23)3.4本章小结 (23)第4章电子钟模拟仿真及其分析 (24)4.1系统设计的总体思路 (24)4.2各功能模块仿真分析 (25)4.2.1 分频组件 (25)4.2.2 六十进制计数器组件 (25)4.2.3 二十四进制计数器组件 (26)4.2.4 闹钟设定组件 (26)4.2.5 校时组件 (27)4.2.6 i60BCD组件 (28)4.2.7 i24BCD组件 (29)4.2.8 二进制转换成七段码组件 (30)4.3数字电子钟功能仿真图 (30)4.4采用FPGA设计优势分析 (33)4.5本章小结 (34)结论 (35)致谢 (36)参考文献 (37)附录A (38)附录B (43)附录C (47)附录D (48)第1章绪论1.1课题背景和意义20世纪70年代,随着中小规模集成电路的开发应用,传统的手工制图设计印刷电路板和集成电路的方法已无法满足设计的精度和效率的要求。
基于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的数字时钟设计
基于FPGA的数字时钟设计数字时钟是现代生活中必不可少的时间展示设备,广泛应用于各种场所,如家庭、办公室、学校等。
随着科技的不断发展,数字时钟的功能也得到不断升级,为人们日常生活提供了更多的便利和体验。
本文将介绍基于FPGA的数字时钟设计方案。
FPGA(Field Programmable Gate Array)是可编程门阵列的缩写,是一种现场可编程逻辑器件。
FPGA具有可编程性强、功能强大、极低的延迟等特点,被广泛应用于数字系统设计中。
本文中使用FPGA来实现数字时钟设计方案。
数字时钟的核心是计时电路,计时电路可以通过FPGA实现,使用FPGA来实现数字时钟的主要优点是可编程性强,能够满足不同需求的设计。
一、数字时钟的设计思路1、时钟信号的产生数字时钟的起点是时钟信号的产生,时钟信号的产生一般需要使用晶振。
晶振可以在一定频率范围内提供稳定的时钟信号。
FPGA可以通过将晶振与逻辑电路相连接,从而得到稳定的时钟信号。
2、计时电路的设计在数字时钟中,需要实现时、分、秒的计时功能。
这可以采用三个计时器来实现。
计时器可以使用FPGA内置的计数器实现,也可以通过逻辑电路实现。
计时器根据时钟信号的变化而变化,通过累计时钟信号的脉冲数计算出时、分、秒。
3、数码管的控制数字时钟的时间要通过数码管进行显示,数码管需要接受来自FPGA的控制信号才能正常显示数字。
通常采用多路复用器的方式来控制数码管的显示。
这里可以使用FPGA内置的多路复用器实现,FPGA输出控制信号,控制多路复用器选择哪个数码管进行显示。
数字时钟的硬件设计主要包括以下部分:时钟信号发生电路包含晶振以及晶振产生的时钟信号经过变压器传送到电路板上。
在电路板上,时钟信号经过电路处理,产生一定的电平和频率,供后续计时模块使用。
2、计时模块计时模块包括三个计时器,分别用于计算时、分、秒。
计时器通过累加时钟信号的脉冲数计算时间。
计时模块的输出需要送到数码管的控制模块进行显示。
基于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的数字电子时钟设计
名目第一章绪论现代社会的标志之一确实是根基信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速开展的根底确实是根基微电子制造工艺水平的提高和电子产品设计开发技术的开展。
前者以微细加工技术为代表,而后者的代表确实是根基电子设计自动化〔electronicdesignautomatic,EDA〕技术。
本设计采纳的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、存放器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特不的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造本钞票低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在操纵系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所对应的功能。
因此,按键信息输进是与软件结构紧密相关的过程。
依据键盘结构的不同,采纳不同的编码方法,但不管有无编码以及采纳什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。
[1]钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些根基上以钟表数字化为根底的。
因此研究数字钟以及扩大其应用有着特不现实的意义。
1.1选题背景本节将从FPGA嵌进式应用开发技术与数字钟技术开展的客瞧实际动身,通过对该技术开展状况的了解及课题本身的需要,指出研究基于FPGA的芯片系统与设计——数字钟的设计与实现的必要性。
课题相关技术的开展当今电子产品正向功能多元化,体积最小化,功耗最低化的方向开展。
它与传统的电子产品在设计上的显着区不是大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗落低,同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
基于FPGA的数字时钟设计
基于FPGA的数字时钟设计一、数字时钟的设计方案及框图1.1 设计方案(1)数字时钟按24 h 制设计,由6 只数码管显示小时、分钟、秒;(2)小时单元和分钟单元具有复位功能,当按下对应按键时,小时单元和分钟单元复位为00;(3)动态扫描功能,扫描输出轮流点亮各个数码管,可用来检测数码管的好坏;由功能要求可将系统分模块实现。
将系统分为7 个模块来实现。
这7 个模块分别为:①24 进制计数器;②60 进制计数器;③分频器;④选择显示数据模块:其功能为将输入的六路信号(时十位﹑时个位﹑分十位﹑分个位﹑秒十位﹑秒个位)轮流选中送给七段显示译码器,即在一个时间单元内只显示一路信号的值;⑤动态扫描控制模块:其功能为控制数码管电路的亮灭,即完成对6 个数码管的扫描控制功能;⑥七段显示译码器:完成BCD 码向7 段显示码的转换;⑦模六计数器:用来控制数码管的片选信号,同时作为选择显示数据模块的地址产生器。
1.2 系统的模块框图如图1 所示,采用自顶向下的设计方法,通过对功能框图的分析,将系统分模块来进行设计,然后再通过例化语句完成各模块间的衔接,最终实现了顶层描述,完成系统预定功能。
1.3 系统的工作流程描述如图1,时钟系统具有一个使能端en、一个异步清零端clr 以及时钟脉冲输入端clk。
由6 个计数器分别完成小时、分钟、秒的计时,并分别通过数据选择器的6 个输入端送入选择器,数据选择器的使能端由一个模为六的计数器控制,轮流选中数据选择器的6 个输入端,这样,6 个输入端口的数据在数据选择器的输出端口就得到了串行轮流的输出。
此输出作为七段显示译码器的字符输入端,经译码后在数码管显示电路上显示出对应字形。
数码管显示电路上的6 个数码管同样采用轮流点亮的方式。
由于循环的速度非常快,所以肉眼看起来仍然是同时显示的感觉。
二、各模块的设计实现2.1 24 进制计数器和60 进制计数器的实现24 进制计数器的功能为完成计时电路中小时单元的计时功能,并且具有异步清零端clr(低电平有效)﹑使能端en(高电平有效);当数字钟处于正常计时状态时,完成小时计时,并且受分计时模块(60 进制)进位输出信号的控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南昌大学实验报告学生姓名:邓儒超学号:6100210045 专业班级:卓越通信101 实验类型:□验证□综合□√设计□创新实验日期:2012.10.28 实验成绩:实验三数字钟设计一、实验目的(1)掌握数字钟的设计二、实验内容与要求(1)设计一个数字钟,要求具有调时功能和24/12进制转换功能(2)进行波形仿真,并分析仿真波形图;(3)下载测试是否正确;三、设计思路/原理图本次数字钟的设计采用了自顶向下分模块的设计。
底层是实现各功能的模块,各模块由vhdl语言编程实现:顶层采用原理图形式调用。
其中底层模块包括秒、分、时三个计数器模块、按键去抖动模块、按键控制模块、时钟分频模块、数码管显示模块,其中,时计数器模块又包括24进制计数模块、12进制计数模块、24/12进制转换模块。
设计框图如下:由图可以清晰的看到数字钟系统设计中各功能模块间连接关系。
系统时钟1KHZ经过分频后产生1秒的时钟信号,1秒的时钟信号作为秒计数模块的输入信号,秒计数模块产生的进位信号作为分计数模块的输入信号,分计数模块的进位信号作为时计数模块的输入信号。
秒计数模块、分计数模块、时计数模块的计数输出分别送到显示模块。
由于设计中要使用按键进行调节时间,而按键的动作过程中存在产生得脉冲的不稳定问题,所以就牵扯到按键去抖动的问题,对此系统中设置了按键去抖动模块,按键去抖动模块产生稳定的脉冲信号送入按键控制模块,按键控制模块根据按键的动作对秒、分、时进行调节。
原理图如下:四、实验程序(程序来源:参考实验室里的和百度文库的稍加改动,还有自己写的)1、分频模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fenpin ISPORT(CLK:IN STD_LOGIC;CLK1:OUT STD_LOGIC);END fenpin;ARCHITECTURE behav OF fenpin ISSIGNAL X,CNT:STD_LOGIC_VECTOR(11 DOWNTO 0);BEGINP1:PROCESS(CLK)BEGINX<="001111101000";--1000分频IF CLK'EVENT AND CLK = '1' THEN CNT<=CNT+1;IF CNT=X-1 THEN CLK1<='1';CNT<="000000000000";ELSE CLK1<='0';END IF;END IF;END PROCESS;END behav;2、60进制计数器(秒、分计数器)模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count60 ISPORT(EN,RST,CLK1: IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END count60;ARCHITECTURE behav OF count60 ISSIGNAL J : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位BCD计数值SIGNAL GW,SW : STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器的个,十BEGINP2:PROCESS(EN,RST,CLK1)BEGINGW<=J(3 downto 0);SW<=J(7 downto 4);IF RST='1' THEN J<=(others=>'0');ELSIF CLK1'EVENT AND CLK1='1' THENIF EN='1' THENIF J<"01011001" THENIF GW=9 THEN --个位为9时加7调整J<=J+7;ELSE J<=J+1;END IF;ELSE J<=(others=>'0');END IF;END IF;IF J ="01011001" THENCOUT <='1'; ELSE COUT<='0';END IF;END IF;Q<=J;END PROCESS;END behav;3、24进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count24 ISPORT(EN,RST,CLK1: IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END count24;ARCHITECTURE behav OF count24 ISSIGNAL J : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位BCD计数值SIGNAL GW,SW : STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器的个,十BEGINP2:PROCESS(EN,RST,CLK1)--计数BEGINGW<=J(3 downto 0);SW<=J(7 downto 4);IF RST='1' THEN J<=(others=>'0');ELSIF CLK1'EVENT AND CLK1='1' THENIF EN='1' THENIF J<"00100011" THENIF GW=9 THEN --个位为9时加7调整J<=J+7;ELSE J<=J+1;END IF;ELSE J<=(others=>'0');END IF;END IF;IF J ="00100011" THENCOUT <='1'; ELSE COUT<='0';END IF;END IF;Q<=J;END PROCESS;END behav;4、12进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count12 ISPORT(EN,RST,CLK1: IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END count12;ARCHITECTURE behav OF count12 ISSIGNAL J : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位BCD计数值SIGNAL GW,SW : STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器的个,十BEGINP2:PROCESS(EN,RST,CLK1)--计数BEGINGW<=J(3 downto 0);SW<=J(7 downto 4);IF RST='1' THEN J<=(others=>'0');ELSIF CLK1'EVENT AND CLK1='1' THENIF EN='1' THENIF J<"00010010" THENIF GW=9 THEN --个位为9时加7调整J<=J+7;ELSE J<=J+1;END IF;ELSE J<="00000001";END IF;END IF;IF J ="00010010" THENCOUT <='1'; ELSE COUT<='0';END IF;END IF;Q<=J;END PROCESS;END behav;5、24/12进制转换模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY control ISPORT(TMODE: IN STD_LOGIC;C24: IN STD_LOGIC_VECTOR(7 DOWNTO 0);C12: IN STD_LOGIC_VECTOR(7 DOWNTO 0);Q: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: BUFFER STD_LOGIC);END control;ARCHITECTURE behav OF control ISBEGINP1:PROCESS(TMODE,C24,C12,Q,COUT)BEGINIF TMODE='0' THENQ<=C24;ELSE Q<=C12;END IF;COUT<='0';IF TMODE='1' THENIF C24>"00010010" THENCOUT<='1';END IF;END IF;END PROCESS;END behav;6、按键去抖模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qudou isport(clk,k1,k2,k3,k4:in std_logic;o1,o2,o3,o4:out std_logic);--设置按键输入信号输出端口end;architecture beh of qudou isbeginprocess(clk,k1,k2,k3,k4)variable cant1:integer;variable cant2:integer;variable cant3:integer;variable cant4:integer;beginif clk'event and clk='1' thenif k1='1' then cant1:=0;end if;--设置计数初值if k2='1' then cant2:=0;end if; --设置计数初值if k3='1' then cant3:=0;--设置计数初值end if;if k4='1' then cant4:=0;end if; --设置计数初值if cant1>2499999 then o1<='0';else o1<='1';--延时0.5send if;if cant2>2499999 then o2<='0';else o2<='1'; --延时0.5send if;if cant3>2499999 then o3<='0';else o3<='1'; --延时0.5send if;if cant4>2499999 then o4<='0';else o4<='1'; --延时0.5send if;cant1:=cant1+1; --加一计数cant2:=cant2+1; --加一计数cant3:=cant3+1; --加一计数cant4:=cant4+1; --加一计数end if;end process;end beh;7、按键控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY control2 ISPORT(CLK,CHANGE,CCLK: IN STD_LOGIC;CLK1: OUT STD_LOGIC);END control2;ARCHITECTURE behav OF control2 ISSIGNAL M:STD_LOGIC;BEGINPROCESS(CLK,CHANGE,CCLK)BEGINIF CHANGE'EVENT AND CHANGE='1' THENM<=NOT(M);END IF;IF M='1' THENCLK1<=CCLK;ELSECLK1<=CLK;END IF;END PROCESS;END behav;8、数码管显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPLAY ISPORT(CLK:IN STD_LOGIC;SEC:IN STD_LOGIC_VECTOR(7 DOWNTO 0);MIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);HOUR:IN STD_LOGIC_VECTOR(7 DOWNTO 0);sel0,sel1,sel2:buffer STD_LOGIC;SG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END DISPLAY;ARCHITECTURE behav OF DISPLAY ISSIGNAL A: STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器的个,十SIGNAL CNT8: STD_LOGIC_VECTOR(2 DOWNTO 0);--数码管选择BEGINP3:PROCESS(CLK) --数码管控制BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8<"111" THEN CNT8 <=CNT8+1;ELSE CNT8<=(OTHERS=>'0');END IF;END IF;CASE CNT8 IS --时、分、秒分别送数码管动态显示WHEN "111" => sel2<='0';sel1<='0';sel0<='0';A<=HOUR(7 downto 4);WHEN "110" => sel2<='0';sel1<='0';sel0<='1';A<=HOUR(3 downto 0);WHEN "101" => sel2<='0';sel1<='1';sel0<='0';A<="1111";WHEN "100" => sel2<='0';sel1<='1';sel0<='1';A<=MIN(7 downto 4);WHEN "011" => sel2<='1';sel1<='0';sel0<='0';A<=MIN(3 downto 0);WHEN "010" => sel2<='1';sel1<='0';sel0<='1';A<="1111";WHEN "001" => sel2<='1';sel1<='1';sel0<='0';A<=SEC(7 downto 4);WHEN "000" => sel2<='1';sel1<='1';sel0<='1';A<=SEC(3 downto 0);WHEN OTHERS =>NULL;END CASE;END PROCESS ;P4:PROCESS(A)--七段译码BEGINCASE A ISWHEN "0000" =>SG<="00111111"; WHEN "0001" =>SG<="00000110";WHEN "0010" =>SG<="01011011"; WHEN "0011" =>SG<="01001111";WHEN "0100" =>SG<="01100110"; WHEN "0101" =>SG<="01101101";WHEN "0110" =>SG<="01111101"; WHEN "0111" =>SG<="00000111";WHEN "1000" =>SG<="01111111"; WHEN "1001" =>SG<="01101111";WHEN "1111" =>SG<="01000000";WHEN OTHERS=>NULL;END CASE;END PROCESS;END behav;五、实验步骤1.打开Quartus II,新建一个工程,然后在工程里建立VHDL文件,把各个模块程序输入进去,保存,编译。