基于FPGA的数字电子时钟设计与实现
- 格式:doc
- 大小:1.59 MB
- 文档页数:18
基于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技术的数字时钟电路,以满足工业系统时间测量和管理的需求。
数字时钟电路的设计主要分为三个方面:晶振、时钟频率调整以及I/O管脚分配。
首先,选用封装形式为HC49-S的晶振器,其主要特征包括频率精度低至±50ppm、温度范围
宽至−10℃至+70℃、工作温度可升至105℃以及动态特性良好等。
其次,进行时钟频率
调节用FPGA。
FPGA的时钟频率调节模块采用MMC和VCO技术实现时钟频率抢断,可对晶
振的稳定频率进行调节,从而获得高精度的时钟信号。
最后,通过FPGA的I/O管脚分配
完成时钟信号输出,从而将数字信号变换为时间信号,实现时间数据的采集和处理。
基于FPGA技术的数字时钟电路可以有效地满足工业系统实时时间测量和管理的需求,实现工业系统时间计量技术的发展。
该电路具有稳定高效、体积小、功耗低以及现场可实
现调整参数等优缺点,在工业领域具有很高的应用前景。
数字钟的设计一、 设计要求设计一个数字钟,要求用数码管分别显示时、分、秒的计数,同时可以进行时间设置,并且要求在整点的时候能够实现报时功能。
二、 设计原理计数器在正常工作下是对1Hz的频率计数,在调整时间状态下是对调整的时间模块进行计数;控制按键来选择是正常计数还是调整时间,并决定是调整时还是分;时间显示的LED数码管采用动态扫描实现;在整点到达时,还具有整点报时功能。
三、 电路符号数字钟电路符号如下图所示。
CLK2为分频之前的信号,CLR为清零端,CCK 为校时允许端。
MC为分信号调整端,HC为时信号调整端。
HH[3..0]为时高位,HL[3..0]为时低位,MH[3..0]为分高位,ML[3..0]为分低位,SH[3..0]为秒高位,SL[3..0]为秒低位。
DOUT[6..0]是数码管驱动,SEG[5..0]是位选择信号,RING是整点报时信号。
四、 设计方法本设计的电子时钟包括:分频模块、计时模块、校时模块、动态扫描译码显示模块和整点报时模块。
下面通过各个模块的设计来了解电子时钟的构成:一、 分频模块程序附录:module clk2clk1s(clk,clk1s); input clk;output clk1s;reg clk1s;reg [3:0] cnt;always@(posedge clk)if(cnt==4'b1111)beginclk1s<=~clk1s;cnt<=0;endelsecnt<=cnt+1; endmodule波形仿真:二、 计时模块六十进制计数器六十进制计数器程序附录:六十进制计数器模块:module m60(clk,clr,qh,ql,cao);input clk,clr;output cao;output[3:0] qh,ql;reg [3:0] qh,ql;reg cao;always @(posedge clk or negedge clr) beginif(clr==0)beginqh<=4'h0;ql<=4'h0;cao<=0;endelse if(ql==9)beginql<=0;if(qh==5)beginqh<=0;cao<=1;endelse qh=qh+1;endelsebeginql<=ql+1;cao<=0;endendendmodule二十四进制计数器模块:module m24(clk,clr,qh,ql);input clk,clr;output[3:0] qh,ql;reg [3:0] qh,ql;always @(posedge clk or negedge clr) beginif(clr==0)beginqh<=4'h0;ql<=4'h0;endelse if(qh==2)beginql<=ql+1;if(ql==3)beginqh<=0;ql<=0;endendelse if(ql==9)beginqh<=qh+1;ql<=0;endelseql<=ql+1; end endmodule波形仿真:清零清零正常计时三、 校时模块四、 动态译码显示模块CCK 为0不支持校时,有进位信号时产生分(时)脉冲程序附录:1、位扫描信号(HH,HL,MH,ML,SH,SL逐位扫描,并输出)module sel(clk,hh,hl,mh,ml,sh,sl,out);input clk;input [3:0] hh,hl,mh,ml,sh,sl;output [3:0] out;reg [3:0] out;reg [3:0] ss=0;always @(posedge clk)beginif(ss<4'b0101)ss<=ss+1;elsess<=0;endalways @(posedge clk)begincase(ss)4'd0:out<=sl;4'd1:out<=sh;4'd2:out<=ml;4'd3:out<=mh;4'd4:out<=hl;4'd5:out<=hh;endendmodule仿真图:2、段扫描信号(选择数码管点亮哪一位)module seg(clk,seg);input clk;output [5:0] seg;reg [5:0] seg;reg [3:0] ss=0;always @(posedge clk)beginif(ss<4'b0101)ss<=ss+1;elsess<=0;endalways @(posedge clk)begincase(ss)4'd0:seg<=6'b111110;4'd1:seg<=6'b111101;4'd2:seg<=6'b111011;4'd3:seg<=6'b110111;4'd4:seg<=6'b101111;4'd5:seg<=6'b011111;default:seg<=6'b111111;endcaseend3、4—7译码module decode4_7(decodeout,indec); output[6:0] decodeout;input[3:0] indec;reg[6:0] decodeout;always @(indec)begincase(indec)4'd0:decodeout=7'b1111110;4'd1:decodeout=7'b0110000;4'd2:decodeout=7'b1101101;4'd3:decodeout=7'b1111001;4'd4:decodeout=7'b0110011;4'd5:decodeout=7'b1011011;4'd6:decodeout=7'b1011111;4'd7:decodeout=7'b1110000;4'd8:decodeout=7'b1111111;4'd9:decodeout=7'b1111011;default: decodeout=7'b0000000;endcaseendendmodule五、 整点报时模块六、 数字钟仿真图数字钟的设计注:动态扫描的时钟频率尽量要快。
基于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 的数字电子时钟设计院 (系 :信息与通信学院专学生姓名:学号:0900240115指导教师:职2012 年 12 月 25 日一、所用设备与器材1.1仪器设备使用仪器设备有 FPGA DE2-70开发板、 PC 机、信号发生器。
图 1 FPGA DE2-70开发板图二.系统方案2.1 设计思想利用数字电子技术、 EDA 设计方法、 FPGA 等技术,设计、仿真并实现一个基于 FPGA 的数字电子时钟基本功能, 其基本组成框图如图 1所示,振荡器采用ALTERA 的 DE2-70实验板的 50MHz 输出,分频器将 50MHz 的方波进行分频进而得到 1Hz 的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。
扩展功能设计为倒计时功能,从 59分 55秒至 59分 59秒,每秒亮一盏灯报时。
2.1.1课题背景20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高, 同时也使现代电子产品性能更进一步, 产品更新换代的节奏也越来越快。
20世纪 80年代末,出现了 FPGA(Field Progrommable Gate Array, CAE 和 CAD 技术的应用更为广泛,它们在 PCB 设计的原理图输入,自动布局布线及 PCB 分析, 以及逻辑设计,逻辑仿真布尔综合和化简等方面担任了重要的角色,为电子设计自动化必须解决的电路建模,标准文档及仿真测试奠定了基础。
硬件描述语言是 EDA 技术的重要组成部分, VHDL 是作为电子设计主流硬件的描述语言。
本论文就是应用 VHDL 语言来实现秒表的电路设计。
VHDL 语言是标准硬件描述语言,它的特点就是能形式化抽样表示电路结构及行为,支持逻辑设计中层次领域的描述,借用了高级语言的精巧结构简化电路描述,具有电路模拟与验证及保证设计的正确性,支持电路由高层向底层的综合变换,便于文档管理,易于理解和设计重用。
基于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的数字钟课程设计1.任务和设计要求设计具有时、分、秒计数显示,以24小时循环计时的时钟电路,带有清零和校准功能;2.设计原理采用硬件描述语言Verilog 进行编程,实现20MHZ晶振到1HZ的分频;采用verilog 语言实现数字表功能实现的各个模块;通过各个模块的代码生成相应的模块原理图;再将各个模块生成的原理图进行叠加组成一个数字表系统;3.系统设计设计的数字表有6个输入,16个输出;6个输入中,有一个是时钟信号,开发板上的28号引脚输入的50MHZ的时钟信号;一个清零端,当数字表正常显示时,按下清零端可以实现数字钟整体电路图:4.各个模块设计基于EP1C6Q240C8的数字钟设计,有6个模块组成:Fdiv 分频模块Control 模式选择模块Tune 校正模块Zoushi 时间正常运行模块Saomiao 数码管动态扫描模块;Decoder BCD译码模块;Fdiv 模块:功能:实现20MHZ的时钟信号分成10KHZ的信号和1HZ的信号;输入:clk 为20MHZ的时钟信号;输出:f10000HZ 为10KH的时钟信号;F1HZ 为1HZ的时钟信号;Fdiv 模块代码:module fdiv(clk,f10000Hz,f1Hz);output f10000Hz,f1Hz;input clk;reg f10000Hz,f1Hz;integer CNT1=0,CNT2=0;always@(posedge clk)beginif(CNT1<1999)beginCNT1=CNT1+1;f10000Hz<=1'b0;endelsebeginCNT1=0;f10000Hz<=1'b1;endendalways@(posedge f10000Hz)beginif(CNT2<9999)beginCNT2=CNT2+1;f1Hz<=1'b0;endelsebeginCNT2=0;f1Hz<=1'b1;endendendmodulefdiv 模块波形仿真:由于实际的分频波形仿真中,由于要将20MHZ的分成1HZ的,需要将信号缩小20 000 000倍,因此,此处采用将20HZ的先分成10HZ,然后再将10HZ的分成1HZ的时钟信号;在仿真中这样整,在实际演示中再改下代码,实现真正的20MHZ到1HZ的分频;它们只是一个倍数关系而已;Control 模块:功能:实现电子表的正常显示及时间校正模式的转换;输入:key 模式修改键,每来一个高电平,mode加一次。
基于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的数字电子钟系统设计摘要随着电子技术的飞速发展,现代电子产品渗透到了社会的各个领域,并有力地推动着社会生产力的发展和社会信息化程度的提高。
在现代电子技术中,可编程器无疑是扮演着重要角色。
现场可编程门阵列(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的数字电子时钟设计院(系):信息与通信学院专业:微电子学学生姓名:学号:**********指导教师:职称:实验师2012 年12 月25 日一、所用设备与器材1.1仪器设备使用仪器设备有FPGA DE2-70开发板、PC机、信号发生器。
图1 FPGA DE2-70开发板图二.系统方案2.1 设计思想利用数字电子技术、EDA设计方法、FPGA等技术,设计、仿真并实现一个基于FPGA的数字电子时钟基本功能,其基本组成框图如图1所示,振荡器采用ALTERA的DE2-70实验板的50MHz输出,分频器将50MHz的方波进行分频进而得到1Hz的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。
扩展功能设计为倒计时功能,从59分55秒至59分59秒,每秒亮一盏灯报时。
2.1.1课题背景20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能更进一步,产品更新换代的节奏也越来越快。
20世纪80年代末,出现了FPGA(Field Progrommable Gate Array),CAE 和CAD技术的应用更为广泛,它们在PCB设计的原理图输入,自动布局布线及PCB分析,以及逻辑设计,逻辑仿真布尔综合和化简等方面担任了重要的角色,为电子设计自动化必须解决的电路建模,标准文档及仿真测试奠定了基础。
硬件描述语言是EDA技术的重要组成部分,VHDL是作为电子设计主流硬件的描述语言。
本论文就是应用VHDL语言来实现秒表的电路设计。
VHDL语言是标准硬件描述语言,它的特点就是能形式化抽样表示电路结构及行为,支持逻辑设计中层次领域的描述,借用了高级语言的精巧结构简化电路描述,具有电路模拟与验证及保证设计的正确性,支持电路由高层向底层的综合变换,便于文档管理,易于理解和设计重用。
EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
目前EDA 技术已在各大公司、企事业单位和科研教学部门广泛使用。
例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。
EDA 设计可分为系统级、电路级和物理实现级。
用VHDL语言开发的流程:(1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。
通常VHDL文件保存为.vhd文件。
(2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)。
(3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。
逻辑综合软件会生成.edf(edif)的EDA工业标准文件。
(4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。
(5)编程下载:确认仿真无误后,将文件下载到芯片中。
本设计为一个多功能的数字钟,具有时、分、秒计数显示功能,以24小时的循环计数:具有校对功能。
本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在Quartus 工具软件下,采用自顶向下的设计方式,由各个基本模块共同构建了一个基本FPGA的数字钟。
系统主芯片采用EP2C70F896C6,有时钟模块、控制模块、计时模块、数据译码模块、显示以及报时模块组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的校时、清零、启停功能。
随着电子技术的发展,数字电路朝着速度快、容量大、体积小、重量轻的方向发展。
人们对时间计量的精度要求越来越高,钟表的数字化给人们生产生活带来了极大的方便。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
本次设计以数字电子为主,实现对时、分、秒数字显示的计时装置,周期为24小时,显示满刻度为23时59分59秒,并具有校时功能和报时功能的数字电子钟。
课程设计所采用的开发平台:Quartus II是可编程片上系统的综合性设计环境,它支持CPLD和FPGA器件的开发。
FPGA (Field Programmable Gate Array)现场可编程门阵列,内部主要由许多可编程逻辑模块组成,靠纵横交错的分布式可编程互连线连接起来,可构成极其复杂的逻辑电路。
本次课程设计所采用的FPGA芯片 Cyclone II系列的EP2C70F896C6。
2.2工作原理及系统框图利用数字电子技术、EDA设计方法、FPGA等技术,设计、仿真并实现一个基于FPGA的数字电子时钟基本功能,其基本组成框图如图1所示,振荡器采用ALTERA的DE2-70实验板的50MHz输出,分频器将50MHz的方波进行分频进而得到1Hz的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。
电子时钟扩展功能为倒计时流水灯。
数字电子钟的电路组成框图片如下图:图15 系统框图1.数字钟电路系统由主体电路和扩展电路两大部分所组成。
2. 数字电子时钟电路具有时、分、秒计时,秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。
3. 准确计时,以数字形式显示时、分、秒的时间,计数器的输出经译码器送显示器。
4. 具有分、时校正功能,校正输入脉冲频率为1Hz5. 复位功能,时、分、秒计时清零。
6.扩展功能为:具有仿广播电台整点报时的功能,即每逢59分51秒、52秒、53秒、54秒、55秒及57秒,LED绿灯依此点亮,59分59秒时,LED红灯亮,形成倒计时流水灯报时。
三.软件方案3.1 程序流程图3.1.1 24进制小时采用24进制计时,当CP↑,EN和nCR为高电平时计数,计数范围为[0,23],使能信号EN等于0时,计时器保持。
当高位大于2或高位等于2且低位大于3时,计时器清零,否则继续计时。
流程图见下图。
图16 24进制程序流程图3.1.2 10进制流程图当CP↑,EN和nCR为高电平时计数,计数范围为[0,9],使能信号EN等于0时,计时器保持。
当计时到9的时候,计时器清零,否则继续计时。
流程图见下图。
图17 10进制流程图3.1.3 6进制当CP↑,EN和nCR为高电平时计数,计数范围为[0,5],使能信号EN等于0时,计时器保持。
当计时到5的时候,计时器清零,否则继续计时。
流程图见下图。
图18 6进制流程图3.1.4 60进制分、秒采用60进制计时,当CP↑,EN和nCR为高电平时计数,计数范围为[0,59],使能信号EN等于0时,计时器保持。
当个位等于9时向十位进位;当个位等于9十位等于5,计时器清零,否则继续计时。
流程图见下图。
图19 60进制流程图3.1.5 from0to9数码管有7段组成,分共阳极和共阴极,本次设计采用共阳极数码管。
当输入为低电平时,数码管显示;当输入为高电平时,数码管不显示。
用这样的方法输入不同的高低信号控制数码管的显示。
图20 from0to9流程图3.1.6 分频模块图21 分频模块流程图3.1.7 总流程图图22 总流程图3.2 程序清单3.2.1头文件complete_clock程序module complete_clock(HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,_50MHzIn,_1Hz,_50Hz,_5KHz,_500KHz,AdjMinkey,AdjHrkey,nCR,Alarm,LED0,LED10,LED3,LED4,LED5,LED6,LED 7,LED8,LED9);output [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;output Alarm,_1Hz,_50Hz,_5KHz,_500KHz;output LED0;output LED10;output LED3;output LED4;output LED5;output LED6;output LED7;output LED8;output LED9;wire [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;input nCR,_50MHzIn;wire _1Hz,_50Hz,_5KHz,_500KHz;wire LED0;wire LED10;wire LED3;wire LED4;wire LED5;wire LED6;wire LED7;wire LED8;wire LED9;input AdjMinkey,AdjHrkey;wire [7:0] Second,Minute,Hour;Divided_Frequency C1(_5KHz,_500KHz,nCR,_50MHzIn);//调用分频模块,输入50MHz的频率,经两次分频后变为5KHz Divided_Frequency U0(_1Hz,_50Hz,nCR,_5KHz);//调用分频模块,输入5KHz的频率,经两次分频后变为1Hztop_clock U1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey);//调用校时模块,对时、分模块进行校时baoshi U2(Alarm_Ring,Minute,Second,_50Hz,_5KHz);assign Alarm=Alarm_Ring;assign LED0=({Minute,Second}==16'h5951);//定义LED0为59分51秒时灯亮assign LED10=({Minute,Second}==16'h5952);//定义LED10为59分52秒时灯亮assign LED3=({Minute,Second}==16'h5953);//定义LED3为59分53秒时灯亮assign LED4=({Minute,Second}==16'h5954);//定义LED4为59分54秒时灯亮assign LED5=({Minute,Second}==16'h5955);//定义LED5为59分55秒时灯亮assign LED6=({Minute,Second}==16'h5956);//定义LED6为59分56秒时灯亮assign LED7=({Minute,Second}==16'h5957);//定义LED7为59分57秒时灯亮assign LED8=({Minute,Second}==16'h5958);//定义LED8为59分58秒时灯亮assign LED9=({Minute,Second}==16'h5959);//定义LED9为59分59秒时灯亮from0to9 U10(HEX0,Second[3:0]); //个位秒调用译码from0to9 U9(HEX1,Second[7:4]); //十位秒调用译码from0to9 U3(HEX2,Minute[3:0]); //个位分调用译码from0to9 U4(HEX3,Minute[7:4]); //个位分调用译码from0to9 U5(HEX4,Hour[3:0]); //个位时调用译码from0to9 U6(HEX5,Hour[7:4]); //十位时调用译码endmodule3.2.2 counter24程序module counter24(CntH,CntL,nCR,EN,CP);input CP,nCR,EN;output [3:0] CntH,CntL;reg [3:0] CntH,CntL;always @(posedge CP or negedge nCR)beginif(~nCR) {CntH,CntL}<=8'h00;//当nCR=0时,计时器清零else if(~EN) {CntH,CntL}<={CntH,CntL};//当EN=0时,停止计时,保持else if((CntH>2)||(CntH>9)||((CntH==2)&&(CntL>=3))){CntH,CntL}<=8'h00;else if((CntH==2)&&(CntL<3))begin CntH<=CntH;CntL<=CntL+1'b1;endelse if(CntL==9)begin CntH<=CntH+1'b1;CntL<=4'b0000;endelsebegin CntH<=CntH;CntL<=CntL+1'b1;endendEndmodule3.2.3 counter60程序module counter60(Q1,Q2,Q3,Q4,Q5,Q6,Cnt,Cnt1,Cnt24,nCR,EN,CP,LED,LED1,LED2); input CP,nCR,EN;output [7:0] Cnt;output [7:0] Cnt1;output [7:0] Cnt24;output [6:0] Q1;output [6:0] Q2;output [6:0] Q3;output [6:0] Q4;output [6:0] Q5;output [6:0] Q6;output LED;output LED1;output LED2;wire [7:0] Cnt;wire [7:0] Cnt1;wire [7:0] Cnt24;wire [6:0] Q1;wire [6:0] Q2;wire [6:0] Q3;wire [6:0] Q4;wire [6:0] Q5;wire [6:0] Q6;wire LED;wire LED1;wire LED2;wire ENP;wire ENP1;wire ENP2;wire ENP3;counter10 UC0(Cnt[3:0],nCR,EN,CP);counter6 UC1(Cnt[7:4],nCR,ENP,CP);counter10 UC2(Cnt1[3:0],nCR,ENP1,CP);counter6 UC3(Cnt1[7:4],nCR,ENP2,CP);counter24 UC4(Cnt24[7:4],Cnt24[3:0],nCR,ENP3,CP);assign ENP=(Cnt[3:0]==4'h9);assign ENP1=(Cnt==8'h59);assign ENP2=((Cnt1[3:0]==4'h9)&&(Cnt==8'h59));assign ENP3=((Cnt1==8'h59)&&(Cnt==8'h59));assign LED=~CP;assign LED1=~CP;assign LED2=~CP;from0to9 UC5(Q1,Cnt[3:0]);from0to9 UC6(Q2,Cnt[7:4]);from0to9 UC7(Q3,Cnt1[3:0]);from0to9 UC8(Q4,Cnt1[7:4]);from0to9 UC9(Q5,Cnt24[3:0]);from0to9 UC10(Q6,Cnt24[7:4]);Endmodule3.2.4 from0to9程序module from0to9(HEX,D);output [6:0] HEX;input [3:0] D;reg [6:0] HEX;always @(D)begincase(D)4'd0:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000001; 4'd1:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001111; 4'd2:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0010010;4'd3:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000110;4'd4:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001100;4'd5:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100100;4'd6:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100000;4'd7:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0001111;4'd8:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000000;4'd9:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000100; default:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1111111; endcaseendendmodule3.2.5 counter6程序module counter6(Q,nCR,EN,CP);input CP,nCR,EN;output [3:0] Q;reg [3:0] Q;always @(posedge CP or negedge nCR)beginif(~nCR) Q<=4'b0000;//当nCR=0时,计时器清零else if(~EN) Q<=Q;//当EN=0时,停止计时,保持else if(Q==4'b0101) Q<=4'b0000;else Q<=Q+1'b1;//计时器正常计时endEndmodule3.2.6 counter10程序module counter10(Q,nCR,EN,CP);input CP,nCR,EN;output [3:0] Q;reg [3:0] Q;always @(posedge CP or negedge nCR)beginif(~nCR) Q<=4'b0000;//当nCR=0时,计时器清零else if(~EN) Q<=Q;//当EN=0时,停止计时,保持else if(Q==4'b1001) Q<=4'b0000;else Q<=Q+1'b1;//计时器正常计时endEndmodule3.2.7 分频程序module Divided_Frequency(_1HzOut,nCR,_5kHzIN);input _5kHzIN,nCR;output _1HzOut;supply1 Vdd;//定义 Vdd 是高电平wire [15:0] Q;//计时器的输出信号(中间变量 )wire EN1,EN2,EN3;// 计时器的使能信号(中间变量 )counter10 DU0(Q[3:0],nCR,Vdd,_5kHzIN);//调用十进制counter10 DU1(Q[7:4],nCR,EN1,_5kHzIN);counter10 DU2(Q[11:8],nCR,EN2,_5kHzIN);counter10 DU3(Q[15:12],nCR,EN3,_5kHzIN);assign EN1=(Q[3:0]==4'h9);assign EN2=(Q[7:4]==4'h9)&(Q[3:0]==4'h9);assign EN3=(Q[11:8]==4'h9)&(Q[7:4]==4'h9)&(Q[3:0]==4'h9);assign _1HzOut=Q[15];//assign _500HzOut=Q[0];endmodule3.2.8 校时模块程序module top_clock(Second,Minute,Hour,_1Hz,nCR,AdjMinKey,AdjHrkey);input _1Hz,nCR,AdjMinKey,AdjHrkey;output [7:0] Second,Minute,Hour;wire [7:0] Hour,Minute,Second;supply1 Vdd;wire MinCP,HrCP;counter60 UT1(Second,nCR,Vdd,_1Hz);//调用counter60,对秒计时counter60 UT2(Minute,nCR,Vdd,~MinCP);// 调用counter60,对分校时counter24 UT3(Hour[7:4],Hour[3:0],nCR,Vdd,~HrCP);//调用counter24,对时校时assign MinCP=AdjMinKey ? _1Hz:(Second==8'h59);//当MinCP=AdjMinKey时,执行校时,当MinCP≠AdjMinKey时,秒计时至59 时向分进位assign HrCP=AdjHrkey?_1Hz:({Minute,Second}==16'h5959);//当HrCP=AdjHrkey时,执行校时,当HrCP≠AdjHrkey时,分秒计时至59分59秒时向时进位Endmodule四.调试及结果4.1 模块仿真4.1.1 counter10模块仿真CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,9]图23 counter10仿真波形图4.1.2 counter24模块仿真CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,23]图24 counter24仿真波形图4.1.3 counter60模块仿真CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,59]图25 counter60仿真波形图4.1.4 分频模块仿真分频器是将输入的基本时钟信号分频为其他模块需要的5kHZ 和1HZ 的信号. 其中CLK 输入为5kHZ , CLK2 输出1HZ 信号,分频实际也是用了计数器的原理。