FPGA课程设计基于FPGA多功能电子钟设计.docx
- 文档编号:8655828
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:24
- 大小:118.60KB
FPGA课程设计基于FPGA多功能电子钟设计.docx
《FPGA课程设计基于FPGA多功能电子钟设计.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计基于FPGA多功能电子钟设计.docx(24页珍藏版)》请在冰豆网上搜索。
FPGA课程设计基于FPGA多功能电子钟设计
FPGA课程设计
报
告
书
题目:
基于FPGA多功能电子钟设计
学院:
电气工程与自动化
专业班级:
电信12-3班
摘要1
摘要
本文介绍了多功能电子钟的现状及发展动态,多功能电子钟的应用,多功能电子钟的基本原理和实现方法以及系统构建理论。
针对现行电子钟设计方案实现起来相对复杂、误差偏大等弊端,对以FPGA为核心器件的电子钟方案进行了实验研究,利用EDA技术自顶向下的设计方法,设计电子钟各模块及相应具体电路,通过编译、仿真并下载到FPGA实验平台进行测试,运行结果表明:
系统能以较小的误差显示时、分、秒,并且当走时不准时,可以通过相应设置键实现校时。
关键词:
多功能电子钟;EDA;FPGA
第一章FPGA简介
1.1FPGA概述
FPGA是现场可编程门阵列(FieldProgrammableGateArray)的简称,与之相应的CPLD是复杂可编程逻辑器件(ComplexProgrammableLogicDevice)的简称,两者的功能基本相同,只是实现原理略有不同,有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/PGFA。
CPLD/PGFA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路。
它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。
通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。
使用CPLD/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。
这些优点使得CPLD/FPGA技术在20世纪90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言HDL的进步。
1.2FPGA基本结构
FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块来实现不同的设计。
FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。
这3种可编程电路是:
可编程逻辑模块(CLB—ConfigurableLogicBlock)、输入/输出模块(IOB—I/OBlock)和互连资源(IR—InterconnectResource)。
可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路。
(1)CLB是FPGA的主要组成部分。
它主要由逻辑函数发生器、触发器、数据选择器等电路组成。
CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G’、F’和H’。
G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。
这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。
逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G’和F’,而另一个输入信号是来自信号变换电路的输出H1。
这个函数发生器能实现3输入变量的各种组合函数。
这3个函数发生器结合起来,可实现多达9变量的逻辑函数。
CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。
这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。
CLB中的逻辑函数发生器F和G均为查找表结构,其工作原理类似于ROM。
F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输出。
另外,逻辑函数发生器F和G还可以作为器件内高速RAM或小的可读写存储器使用,它由信号变换电路控制。
(2)输入/输出模块IOB。
IOB提供了器件引脚和内部逻辑阵列之间的连接。
它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。
每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。
当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器。
缓冲器的输出分成两路:
一路可以直接送到MUX,另一路延时几个纳秒(或者没有延时)后送到输入通路D触发器,再送到数据选择器。
通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器。
当IOB控制的引脚被定义为输出时,CLB阵列的输出信号OUT也可以有两条传输途径:
一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器。
IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通VCC、地线或者不接通,用以改善输出波形和负载能力。
(3)可编程互连资源IR。
可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。
IR主要由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。
1.3FPGA系统设计流程
流程说明:
(1)工程师按照“自顶向下”的设计方法进行系统划分。
(2)输入VHDL代码,这是设计中最为普遍的输入方式。
此外,还可以采用图形输入方式,这种输入方式具有直观、容易理解的优点。
(3)将以上的设计输入编译成标准的VHDL文件。
(4)进行代码级的功能仿真,主要是检验系统功能设计的正确性。
这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。
一般情况下,这一仿真步骤可略去。
(5)利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。
综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。
(6)利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。
一般的设计,也可略去这一步骤。
(7)利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。
(8)在适配完成后,产生多项设计结果:
a.适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;b.适配后的仿真模型;c.器件编程文件。
根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。
如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求。
最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。
第二章系统电路设计
2.1电子钟的设计方案选择
数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等
方案一:
运用单片机内部的定时/计数器来实现电子时钟的方法,该方案设计由单片机AT89S51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。
时钟的基本显示原理:
时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1,到9后,10秒位加1,秒位回0。
10秒位到5后,即59秒,分钟加1,10秒位回0。
依次类推,时钟最大的显示值为23小时59分59秒。
这里只要确定了1秒的定时时间,其它位均以此为基准往上累加。
方案二:
采用专用的时钟芯片实现,通过单片机读取时钟芯片的计时时间,在数码管上显示出来,就可以实现电子时钟功能,典型的时钟芯片有:
DS1302,DS12887,X1203,PCF8583等都可以实现电子时钟功能。
方案三:
采用FPGA来实现电子时钟功能,运用VHDL语言来描述电子时钟的各个功能模块。
将电子时钟分为六十进制计数器和二十四进制计数器两个基本的功能模块,然后将两个六十进制计数器和一个二十四进制计数器相级联,就构成一个具有时、分、秒的电子时钟。
比较方案一、方案二和方案三:
方案一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;方案二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,但该方案还具备日历功能,造成功能上的浪费;方案三是采用FPGA实现,运用VHDL语言描述,设计方法简单,而且运用有源晶振作为系统的时钟源,通过分频得到1HZ的信号,计时精度很高,不低于方案二的计时精度,而且运用VHDL语言来描述电子时钟是完全的硬件实现。
通过以上比较,系统中采用FPGA来实现电子时钟功能。
2.2总体设计方案
设计一个显示时(2位)、分(2位)、秒(2位)共六位的多功能电子钟,它的主要功能是进行准确的计时。
利用VHDL语言对硬件进行描述,通过下载到FPGA之中进行硬件验证。
系统采用4MHz的石英晶体振荡器作为时钟源,经过分频之后得到1HZ的秒钟信号,秒计满60即得1分钟,分计满60便得1小时的信号,小时计满24即得一天,电子时钟的外观图如图2.1所示。
其中有六个按键用于调整时间,复位等功能。
具体功能如下:
图2.1电子钟的外观图
OK键:
开始计时。
SET键:
与调时、调分、调秒键配合,可以调整到指定的时间。
RESET键:
清零。
电子时钟硬件总体框图如图2.2所示。
图2.2电子时钟硬件总体框图
在每个功能模块分项设计和组合前,先简单介绍一下每个方块的功能作用。
(1)分频器通过分频将4MHz的信号分频为1Hz的秒信号和100Hz的同步扫描时钟信号。
(2)1Hz的秒信号输入到秒计数电路,当计数器溢出时,向分计数器进位,当分计数器溢出时,向时计数器进位。
(3)BCD译码电路是将计数器的十六进制计数值转换为数码管显示所需要的段码。
(4)位码电路是用来选通某一位数码管,使其显示数字。
(5)扫描同步电路作用控制同一个数码管的段码和位码同步,同时对多个数码管轮流扫描。
(6)键盘控制电路作用是启动电子时钟计时,设定时间等。
2.3显示电路设计
显示电路有LCD和LED显示电路,系统中选用LED显示电路,LED器件是一种发光二极管显示器。
其特点如下:
(1)LED显示器具备稳定、高速、简单的系统;
(2)LED显示结构简单、性能稳定;
(3)LED显示应用在成熟的生产技术上。
发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。
八段发光二极管结构如图2.3所示。
图2.3八段发光二极管外型
发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的称为共阴极显示器。
1位显示器有8个发光二极管组成,其中7个发光二极管a~g控制7个笔段的亮或暗,另一个控制一个小数点的亮和暗,这种笔画式的八段显示器能显示的字符少。
字符的形象有些失真,但控制方便,使用简单。
图2.4共阴极数码管
图2.5共阳极数码管
显示器的显示方法有静态和动态两种方法。
显示器位数较少时,采用静态显示的方法是合适的。
当位数较多时,用静态显示所需的I/O太多,一般采用动态显示方法,所以在系统中我们采用动态显示。
此类数码管的工作特点是:
(1)数码管片选端清0时,对应位的数码管才有可能亮;
(2)每次只能有一个片选端清0,即只能动态移位显示相应的数据;
(3)控制器通过控制数码管显示相应数字要用查表子程序来实现。
系统中显示电路是由分频电路、扫描电路、BCD码多路选择器、位选码电路和BCD译码器构成的。
数码管动态扫描电路如图2.6所示,其中FPQ为分频器,通过分频得到扫描时钟信号,时钟信号为100Hz;SCAN为扫描电路,它是由状态机组成的,循环扫描数码管,使得数码管稳定的显示数据;BCDYMQ为BCD译码器,作用是将计数器输出的十六进制数转换为数码管显示所需要的段码;BIT为位码,作用是轮流选择数码管的位。
图2.6数码管动态扫描电路
2.3.1分频器电路
扫描电路所需要的扫描时钟信号为100Hz,是通过分频器将系统的4MHz时钟信号经过10000分频之后,再通过四分频得到的。
系统中采用四个十进制计数器相级联实现10000分频,然后通过两个T触发器实现四分频得到100Hz信号。
十进制计数器的VHDL语言描述见附录程序1。
2.3.2扫描电路电路
扫描电路是动态数码管显示的核心部件,通过扫描电路使得同一位数码管的段码、位码能够同步选择并稳定显示数据。
其VHDL语言描述见附录程序2.
图2.7扫描电路仿真图
扫描电路是由四位二进制计数器组成的状态机构成的,其仿真图如图3.7所示。
其中SCAN为扫描时钟信号输入端,COMCLK为状态输出端。
2.3.3BCD码多路选择器
BCD码多路选择器是输入的四位的BCD码根据扫描电路的输出进行选择,然后通过BCD译码器将对应的BCD码转换成显示所需要的段码。
见附录程序3。
2.3.4BCD译码器
BCD译码器是将输入的四位二进制数转换成七段显示代码,通过对应的显示代码驱动LED显示相应的数据,其仿真波形如图2.8所示。
其VHDL语言描述见附录程序4.
图2.8BCD译码器仿真波形
2.3.5位选码电路
位选码电路的作用是在扫描电路作用下,依次输出对应的数码管的位选码。
其仿真波形如图2.9所示。
程序见附录程序5.
图2.9位选码仿真波形
2.4电子时钟计数器电路设计
电子时钟是由两个60进制计数器和一个二十四进制计数器组成的,其中二十四进制计数器用于时计数器,60进制计数器用于秒和分计数器。
2.4.1秒和分计数器设计
秒和分计数器是由六十进制计数器组成的,而六十进制计数器是由一个十进制计数器和一个六进制计数器组成的。
(1)系统中采用的十进制计数器采用74161来设计,
其设计原理图如图2.10所示,其中CLK为外部时钟脉冲输入端,Q0~Q3为计数器计数值输出端,CNT为进位输出端,ENT为十进制计数器使能端,CLRN为十进制计数器清零端,十进制计数器仿真图如图2.11所示。
图3.10十进制计数器原理图
图3.11十进制计数器仿真图
(2)六进制计数器设计
系统中采用的六进制计数器采用74161来设计,其设计原理图如图2.12所示,其中CLK1为外部时钟脉冲输入端,QQ0~QQ3为计数器计数值输出端,CNT1为进位输出端,ENT1为十进制计数器使能端,CLRN1为十进制计数器清零端,六进制计数器仿真图如图2.13所示。
图2.12六进制计数器原理图
图2.13六进制计数器仿真图时序图
(3)六十进制计数器设计
系统中采用的十进制计数器与六进制计数器级联构成六十进制计数器,其设计原理图如图2.14所示,其中CLK2为外部时钟脉冲输入端,Q0~Q7为计数器计数值输出端,CNT2为进位输出端,ENT2为十进制计数器使能端,CLRN2为十进制计数器清零端,其中CNT10、CNT6是十进制计数器和六进制计数器所生成的封装库。
图2.14六十进制计数器原理图
2.4.2小时计数器设计
电子时钟电路的小时计数器是由二十四进制计数器组成的,系统需要将二十四进制计数器的计数值分解为两位的BCD码,然后再送到数码管上显示。
(1)二十四进制计数器
其仿真图如图2.15所示。
二十四进制计数器的VHDL语言描述见附录程序6。
图2.15二十四进制计数器仿真波形
由二十四进制计数器生成的图标文件如图2.16所示:
图2.16二十四进制计数器图标
(2)二十四进制计数器计数值分解电路
时计数器分为时个位和时十位,所以需要将二十四进制计数器的计数值分为BCD码十位和BCD码个位,其仿真图如图2.17所示,它生成的图标文件如图2.18所示。
其VHDL语言描述见附录程序7。
图2.17二十四进制计数器的计数值分解为十位和个位仿真图
图2.18二十四进制计数器的计数值分解为十位和个位生成的图标
(3)时计数器总体电路
时钟系统总体电路如图2.19所示,其中CNT10为十进制计数器,CNT6为六进制计数器;CNT23为二十四进制计数器;ZHHUAN为将二十四进制计数器的计数值分解为十位数据和个位数据的转换电路;CLK2为输入的秒信号;ENT2为使能信号,高电平有效。
图2.19时钟系统总体
键盘的硬件结构为独立式键盘,直接连到EPF10K10LC84-4芯片的引脚上,其特点是便于编程操作。
(1)开始/停止键KEY的设计
我们将此键经去抖后连接一T触发器,使其输出为电平方式,即按键盘一次,电平进行一次翻转。
输出Q0端接74161芯片的ENT端,从而达到了控制秒表的启动停止。
其原理图如图2.20所示。
图2.20KEY的MAX+plusII原理图
(2)清零键KEY1的设计
为了使键盘达到按下清零,松开恢复的功能,KEY1键我们应用脉冲输出方式,即按键盘一次,输出一个脉冲信号。
输出端Q0连接74161芯片的CLRN端。
这样在按下键盘时输出为低电平使能CLRN,松开后为高电平,禁止了该引脚。
电路图如图2.21所示。
图2.21KEY1键的MAX+plusII原理图
总结
以上对电子钟从硬件设计方案的选择到用硬件描述语言的设计,都进行了详细的介绍。
现在对本次设计工作进行一次总结。
在确定题目后,根据题目内容我首先阅读了大量的相关书籍和资料,这使我在脑海中产生出设计的雏形,接下来就这个构想将整个设计分为VHDL硬件描述语言的装置器件FPGA/CPLD的介绍、VHDL语言对电子钟的设计(七段显示器的显示设计、时间计数跟时间显示、弹跳现象的消除及时间设定和显示)部分。
分别对每一部分翻阅了相关的资料,逐步的选定方案与电路设计程序。
在用VHDL语言编好后,在计算机上又对程序进行了编译、下载到芯片及仿真,修改了程序中的错误,这样整个系统基本完成,最后对图纸进行了整理,撰写了这篇论文,至此,全部设计都进行完毕。
VHDL语言通俗易懂,并且更有益撑握模块工作原理,从而能够更好的理解系统功能。
它还具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大地简化了设计任务,提高了设计的效率和可靠性。
VHDL支持各种模式的设计方法,具有良好的适应性,并且具有良好的电路行为描述和系统描述能力,在语言易读性和层次化结构化设计表面表现了强大的生命力和应用潜力
本次设计重点在于对VHDL语言的应用,以电子钟作为一个具体的模型进行设计。
在整个设计的过程中虽然力求合理规范,也存在着一些缺憾,比如,在对电子钟的设计中,有些功能模块的设计不是最简便的方式,同时肯定还有欠考虑的地方。
总之,在系统的软硬件设计上由于能力所限,不一定是最佳选择;一些设计方案可能存在不足,这些有待进一步检验。
在这次的论文设计中,我感觉自己得到了一个难得的锻炼机会,设计中能将自己所学的理论知识同实践相结合起来,独立的进行分析、设计;而且培养出来一套有计划,有步骤进行设计的习惯,将对今后的工作学习有非常大的帮助,在设计中查阅了大量的资料,丰富了自己的知识,扩展了视野;加强了对计算机的应用能力。
通过此次设计,进一步掌握了有关数字钟的工作原理及相关设计知识。
特别是对其各工作模块的功能有了更深一步的了解。
在设计过程中,对VHDL语言的运用能力也得到了提高。
同时,还深刻体会到了VHDL在功能设计中所具有的优越性。
参考文献
[1]林明权.VHDL数字控制系统设计范例[M].北京:
电子工业出版社.2006
[2]卢毅,赖杰.VHDL与数字设计[M].北京:
科技出版社出版.2001
[3]潘松,黄继业.EDA技术实用教程[M].北京:
科技出版社.2009
[4]徐伟业,江冰,虞湘宾.CPLD/FPGA的发展与应用之比较[J].现代电子技术.2007[5]武玉华,裴荣琪,李莉,周玉坤.多功能电子钟ASIC设计[J],现代电子技术.200
[6]杨晖,张风言.大规模可编程逻辑器件与数字系统设计[M].北京:
航空航天大
学出版社.2001
[7]褚振勇,翁木云.FPGA设计及应用[M].西安:
电子科技大学出版社.2001
[8]朱明程.可编程逻辑系统的VHDL设计技术[M].南京:
东南大学出版社.2007
[9]罗映祥.基于Multisim9的数字电子钟设计与仿真[J].现代电子技术.2010
[10]候伯享,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:
电子科技大学出版社.2003
[11]AlteraCorporation.AlteraDigitalLibrary[J].Alter2006
[12]XilinxInc.DataBook2001[J].Xilinx,2001
[13]VHDLLanguageReferenceGuide[J],AldecInc.HendersonNVUSA,1999
[14] VHDLReferenceGuide,XilinxInc.SanJoseUSA[J],2006
附录
程序1
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFCQI<"1001"THENCQI:
=CQI+1;
ELSECQI:
=(OTHERS=>'0');
ENDIF;
ENDIF;
ENDIF;
IFCQI="1001"THENCOUT<='1';
ELSECOUT<='0';
ENDIF;
CQ<=CQI;
ENDPROCESS;
ENDbehav;
其中,CLK为外部脉冲输入端;RST为复位端,高电平有效,EN为使能端,高电平有效;CO为计数器的计数值输出端;COUT为进位输出端。
程序2
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSCANIS
PORT(
SCAN:
INSTD_LOGIC;
COMCLK:
OU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 课程设计 基于 多功能 电子钟 设计