毕业设计论文基于FPGA的数字时钟设计.docx
《毕业设计论文基于FPGA的数字时钟设计.docx》由会员分享,可在线阅读,更多相关《毕业设计论文基于FPGA的数字时钟设计.docx(52页珍藏版)》请在冰豆网上搜索。
毕业设计论文基于FPGA的数字时钟设计
基于FPGA的数字时钟设计
第一章绪论
1.1.选题意义与研究现状
在这个时间就是金钱的年代里,数字电子钟已成为人们生活中的必需品。
目前应用的数字钟不仅可以实现对年、月、日、时、分、秒的数字显示,还能实现对电子钟所在地点的温度显示和智能闹钟功能,广泛应用于车站、医院、机场、码头、厕所等公共场所的时间显示。
随着现场可编程门阵列(fieldprogram-mablegatearray,FPGA)的出现,电子系统向集成化、大规模和高速度等方向发展的趋势更加明显,作为可编程的集成度较高的ASIC,可在芯片级实现任意数字逻辑电路,从而可以简化硬件电路,提高系统工作速度,缩短产品研发周期。
故利用FPGA这一新的技术手段来研究电子钟有重要的现实意义。
设计采用FPGA现场可编程技术,运用自顶向下的设计思想设计电子钟。
避免了硬件电路的焊接与调试,而且由于FPGA的I/O端口丰富,内部逻辑可随意更改,使得数字电子钟的实现较为方便。
本课题使用CycloneEP1C6Q240的FPGA器件,完成实现一个可以计时的数字时钟。
该系统具有显示时、分、秒,智能闹钟,按键实现校准时钟,整点报时等功能。
满足人们得到精确时间以及时间提醒的需求,方便人们生活。
1.2.国内外研究及趋势
随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。
二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。
第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。
第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。
第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!
因此,电子时钟的出现带来了钟表计时业界跨跃性的进步。
我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使电子时钟除了原有的显示时间基本功能外,还具有闹铃,报警等功能。
商家生产的电子时钟更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。
1.3.论文结构
第一章详细论述了近些年来,数字化时钟系统研究领域的动态及整个数字化时钟系统的发展状况,同时分析了所面临的问题与解决方案,从而提出了本论文的研究任务。
第二章从研究任务着手,选择符合设计要求的常用芯片及其它元器件,详细论述了各接口电路的设计与连接,以模块化的形式,整合数字化时钟硬件的设计从小到大,从局部到整体,循序渐进,最终实现一个功能齐全的数字化时钟系统。
第三章根据系统设计要求,着手对数字化时钟系统软件进行功能的实现,将各功能模块有机结合,实现时钟走时,实现闹铃、整点报时附加功能。
第四章按照设计思路,在联机调试过程中,对时钟系统的不足和缺点进行分析,将调试过程作重点的记录。
第五章对全文的总结,对本系统功能实现以及制作过程中需要注意的方面,及整个系统软件编写中所吸取的经验教训进行论述,同时,也对整个研究应用进行展望。
第二章
编程软件及语言介绍
2.1QuartersII编程环境介绍
运行环境设计采用quartusII软件实现,因此针对软件需要用到的一些功能在这里进行描述.
QuartusII软件界面简单易操作,如下图2.1:
图2.1QuartusII软件界面图
2.1.1菜单栏
1)【File】菜单
QuartusII的【File】菜单除具有文件管理的功能外,还有许多其他选项
图2.2QuartusII菜单栏图
(1)【New】选项:
新建工程或文件,其下还有子菜单
【NewQuartusIIProject】选项:
新建工程。
【DesignFile】选项:
新建设计文件,常用的有:
AHDL文本文件、VHDL文本文件、VerilogHDL文本文件、原理图文件等。
【VectorWaveformFive】选项:
矢量波形文件。
(2)【Open】选项:
打开一个文件。
(3)【NewProjectWizard】选项:
创建新工程。
点击后弹出对话框。
单击对话框最上第一栏右侧的“…”按钮,找到文件夹已存盘的文件,再单击打开按钮,既出现如图所示的设置情况。
对话框中第一行表示工程所在的工作库文件夹,第二行表示此项工程的工程名,第三行表示顶层文件的实体名,一般与工程名相同。
图2.3QuartusII新建工程图
(4)【creat/update】选项:
生成元件符号。
可以将设计的电路封装成一个元件符号,供以后在原理图编辑器下进行层次设计时调用。
2)【View】菜单:
进行全屏显示或对窗口进行切换,包括层次窗口、状态窗口、消息窗口等。
图2.4QuartusII菜单栏全屏切换图
3)【Assignments】菜单
(1)【Device】选项:
为当前设计选择器件。
(2)【Pin】选项:
为当前层次树的一个或多个逻辑功能块分配芯片引脚或芯片内的位置。
(3)【TimingAnanlysisSetting】选项:
为当前设计的tpd、tco、tsu、fmax等时间参数设定时序要求。
(4)【EDAtoolsetting】选项:
EDA设置工具。
使用此工具可以对工程进行综合、仿真、时序分析,等等。
EDA设置工具属于第三方工具。
(5)【Setting】选项:
设置控制。
可以使用它对工程、文件、参数等进行修改,还可以设置编译器、仿真器、时序分析、功耗分析等。
(6)【assignmenteditor】选项:
任务编辑器。
(7)【pinplanner】选项:
可以使用它将所设计电路的I/O引脚合理的分配到已设定器件的引脚上。
图2.5QuartusII菜单栏设定引脚下拉图
4)【processing】菜单
【processing】菜单的功能是对所设计的电路进行编译和检查设计的正确性。
(1)【Stopprocess】选项:
停止编译设计项目。
(2)【StartCompilation】选项:
开始完全编译过程,这里包括分析与综合、适
配、装配文件、定时分析、网表文件提取等过程。
(3)【analyzecurrentfile】选项:
分析当前的设计文件,主要是对当前设计文
件的语法、语序进行检查。
(4)【compilationreport】选项:
适配信息报告,通过它可以查看详细的适配信
息,包括设置和适配结果等。
(5)【startsimulation】选项:
开始功能仿真。
(6)【simulationreport】选项:
生成功能仿真报告。
(7)【compilertool】选项:
它是一个编译工具,可以有选择对项目中的各个文
件进行分别编译。
(8)【simulationtool】选项:
对编译过电路进行功能仿真和时序仿真。
(9)【classictiminganalyzertool】选项:
classic时序仿真工具。
(10)【powerplaypoweranalyzertool】选项:
PowerPlay功耗分析工具。
图2.6QuartusII菜单栏运行下拉图
5)【tools】菜单
【tools】菜单的功能是
(1)【runEDAsimulationtool】选项:
运行EDA仿真工具,EDA是第三方仿真工具。
(2)【runEDAtiminganalyzertool】选项:
运行EDA时序分析工具,EDA是第三方仿真工具。
(3)【Programmer】选项:
打开编程器窗口,以便对Altera的器件进行下载编程。
图2.7QuartusII仿真菜单下拉图
2.1.2工具栏
工具栏紧邻菜单栏下方,它其实是各菜单功能的快捷按钮组合区。
2.8QuartusII菜单栏图
图2.9QuartusII菜单栏按键功能图
2.1.3功能仿真流程
1、新建仿真文件
图2.10QuartusII菜单栏新建文件夹图
2、功能方正操作
在菜单上点processing在下拉菜单中,如下图:
图2.11QuartusII菜单栏processing下拉图
2.2VerilogHDL语言介
2.2.1什么是verilogHDL语言
VerilogHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。
被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。
数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
VerilogHDL语言具有下述描述能力:
设计的行为特性、设计的数据流特性、设计的结构
组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言。
此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。
语言从C编程语言中继承了多种操作符和结构。
VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。
但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。
当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。
2.2.2主要功能
下面列出的是Verilog硬件描述语言的主要能力:
●基本逻辑门,例如and、or和nand等都内置在语言中。
●用户定义原语(UP)创建的灵活性。
用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。
●开关级基本结构模型,例如pmos和nmos等也被内置在语言中。
●提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。
●可采用三种不同方式或混合方式对设计建模。
这些方式包括:
行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。
●VerilogHDL中有两类数据类型:
线网数据类型和寄存器数据类型。
线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。
●能够描述层次设计,可使用模块实例结构描述任何层次。
●设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。
●VerilogHDL不再是某些公司的专有语言而是IEEE标准。
●人和机器都可阅读Verilog语言,因此它可作为EDA的工具和设计者之间的交互语言。
●VerilogHDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。
PLI是允许外部函数访问Verilog模块内信息、允许设计者与模拟器交互的例程集合。
●设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。
●能够使用内置开关级原语在开关级对设计完整建模。
●同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。
●VerilogHDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。
这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。
●在行为级描述中,VerilogHDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。
●能够使用门和模块实例化语句在结构级进行结构描述。
●如图显示了VerilogHDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。
●VerilogHDL还具有内置逻辑函数,例如&(按位与)和|(按位或)。
●对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。
●可以显式地对并发和定时进行建模。
●提供强有力的文件读写能力。
●语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。
图2.12混合设计层次图
第三章
数字化时钟系统硬件设计
3.1系统核心板电路分析
本系统采用的开发平台标配的核心板是QuickSOPC,可以实现EDA、SOP和DSP的实验及研发。
本系统采用QuickSOPC标准配置为Altera公司的EP1C6Q240C8芯片。
(1)核心板的硬件资源
核心板采用4层板精心设计,采用120针接口。
QuickSOPC核心板的硬件原理框图如图2-1所示:
图3.1QuickSOPC硬件方块图
(2)FPGA电路
核心板QuickSOPC上所用的FPGA为Altera公司Cyclone系列的EP1C6Q240。
EP1C6Q240包含有5980个逻辑单元和92Kbit的片上RAM。
EP1C6Q240有185个用户I/O口,封装为240-PinPQFP。
核心板EP1C6Q240器件特性如表2-1。
表3-1核心EP1C6Q240器件特性:
Hb7838电子-技术资料-电子元件-电路图-技术应用网站-基本知识-原理-维修-作用-参数-电子元器件符号-各种图纸
特性
核心板EP1C6Q240器件
逻辑单元(LE)
5980
M4KRAM块
20
RAM总量(bit)
92160
PLL(个)
2
最大用户I/O数(个)
185
配置二进制文件(.rbf)大小(bit)
1167216
可选串行主动配置器件
EPCS1/EPCS4/EPCS16
(3)配置电路
CycloneFPGA的配置方式包括:
主动配置模式、被动配置模式以及JTAG配置模式。
本系统采用的是JTAG配置模式下载配置数据到FPGA。
通过JTAG结果,利用QuartusII软件可以直接对FPGA进行单独的硬件重新配置。
QuartusII软件在编译时会自动生成用于JTAG配置的.sof文件。
CycloneFPGA设计成的JTAG指令比其他任何器件操作模式的优先级都高,因此JTAG配置可随时进行而不用等待其他配置模式完成。
JTAG模式使用4个专门的信号引脚:
TDI、TDO、TMS以及TCK。
JTAG的3个输入脚TDI、TMS和TCK具有内部弱上拉,上拉电阻大约为25kΩ。
在JGTA进行配置的时候,所有用户I/O扣都为高阻态。
(4)时钟电路
FPGA内部没振荡电路,使用有源晶振是比较理想的选择。
EP1C6Q240C8的输入的时钟频率范围为15.625~387MHz,经过内部的PLL电路后可输出15.625~275MHz的系统时钟。
当输入时钟频率较低时,可以使用FPGA的内部PLL调整FPGA所需的系统时钟,使系统运行速度更快。
核心板包含一个48MHz的有源晶振作为系统的时钟源。
如图2-2所示。
为了得到一个稳定、精确的时钟频率,有源晶振的供电电源经过了LC滤波。
本系统硬件整体设计框图如图2-3所示:
图3.2数字时钟系统硬件电路总体框图
3.2系统主板电路分析
3.2.1时钟模块电路
FPGA内部没振荡电路,使用有源晶振是比较理想的选择。
EP1C6Q240C8的输入的时钟频率范围为15.625~387MHz,经过内部的PLL电路后可输出15.625~275MHz的系统时钟。
当输入时钟频率较低时,可以使用FPGA的内部PLL调整FPGA所需的系统时钟,使系统运行速度更快。
核心板包含一个50MHz的有源晶振作为系统的时钟源。
为了得到一个稳定、精确的时钟频率,有源晶振的供电电源经过了LC滤波。
图3.3系统时钟电路图
3.2.2显示电路
由于本设计需要显示时间信息包括:
时、分、秒,显所以采用主板上七段数码管显示电路与系统连接实现显示模块的功能。
主板上七段数码管显示电路如图2-4所示,RP4和RP6是段码上的限流电阻,位码由于电流较大,采用了三极管驱动。
图3.4七段数码管显示电路图
数码管LED显示是工程项目中使用较广的一种输出显示器件。
常见的数管有共阴和共阳2种。
共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将8个发光二极管的阳极连接在一起作为公共端。
公共端常被称作位码,而将其他的8位称作段码。
如图2-5所示为共阳数码管及其电路,数码管有8个段分别为:
h、g、f、e、d、c、b和a(h为小数点),只要公共端为高电平“1”,某个段输出低电平“0”则相应的段就亮。
图3.5七段数码管显示电路图
从电路可以看出,数码管是共阳的,当位码驱动信号为0时,对应的数码管才能操作;当段码驱动信号为0时,对应的段码点亮。
3.2.3键盘控制电路
键盘控制电路要实现时钟系统调时的功能和闹铃开关的功能。
本设计采用主板上的独立键盘来实现这两个功能。
当键盘被按下是为“0”,未被按下是为“1”。
电路连接图如图2-6所示。
电路中为了防止FPGA的I/O设为输出且为高电平在按键下直接对地短路,电阻RP9、RP10对此都能起到保护作用。
图3.6键盘电路图
3.2.4蜂鸣电路设计
如图2-7所示,蜂鸣器使用PNP三极管进行驱动控制,蜂鸣器使用的是交流蜂鸣器。
当在BEEP输入一定频率的脉冲时,蜂鸣器蜂鸣,改变输入频率可以改变蜂鸣器的响声。
因此可以利用一个PWM来控制BEEP,通过改变PWM的频率来得到不同的声响,也可以用来播放音乐。
若把JP7断开,Q4截止,蜂鸣器停止蜂鸣。
图3.7蜂鸣电路图
第四章
数字化时钟系统软件设计
4.1整体方案介绍
4.1.1整体设计描述
设计中的数字时钟,带有按键校准,定点报时,数码管显示等功能。
因此数字时钟所包含的模块可分为,分频模块,按键模块,计时校准模块,闹钟模块,LED显示模块,模块之间的关系下图:
图4.1整体模块框图
针对框图流程,设定出各个模块的需求:
1、分频电路:
针对计时器模块与闹钟设定模块的需求,可以知道分频模块需要生成一个1Hz的频率信号,确保计时模块可以正常计数。
2、计时器模块:
计数模块的作用是收到分频模块1Hz频率的信号线,能进行正确计时,并且可以通过按键进行时间的修改,且当整点时,给蜂鸣器产生使能信号,进行整点报时,播放音乐。
3、闹钟设定模块:
可根据按键的设定闹钟的时间,当计时模块的时间与闹钟设定模块的时间相等的时候,给蜂鸣器一个使能信号,蜂鸣器闹铃。
。
4、蜂鸣器模块:
根据计时模块,闹钟模块给出的使能信号,判定蜂鸣器是整点报时,还是闹钟响铃。
整点报时会播放音乐,闹钟时嘀嘀嘀报警。
5、LED显示模块:
根据实际的需求显示计时模块的时间,还是闹钟设定模块的时间,8个七段码LED数码管,进行扫描方式显示数据。
4.1.2整体信号定义
对整个模块进行信号定义。
接口及寄存器定义
moduleclock(clk,key,dig,seg,beep);//模块名clock
inputclk;//输入时钟
input[4:
0]key;//输入按键,key[3:
0]分别为秒,分钟,小时的增加按键。
Key[4]为闹钟设置按键,key[5]为校准设置按键。
output[7:
0]dig;//数码管选择输出引脚a
output[7:
0]seg;//数码管段输出引脚
outputbeep;//蜂鸣器输出端
reg[7:
0]seg_r=8'h0;//定义数码管输出寄存器
reg[7:
0]dig_r;//定义数码管选择输出寄存器
reg[3:
0]disp_dat;//定义显示数据寄存器
reg[8:
0]count1;//定义计数寄存器
reg[14:
0]count;//定义计数中间寄存器
reg[23:
0]hour=24'h235956;//定义现在时刻寄存器
reg[23:
0]clktime=24'h000000;//定义设定闹钟
reg[1:
0]keyen=2'b11;//定义标志位
reg[4:
0]dout1=5'b11111;
reg[4:
0]dout2=5'b11111;
reg[4:
0]dout3=5'b11111;//寄存器
wire[4:
0]key_done;//按键消抖输出
reg[15:
0]beep_count=16'h0;//蜂鸣器寄存器
reg[15:
0]beep_count_end=16'hffff;//蜂鸣器截止寄存器
regclktime_en=1'b1;//闹钟使能寄存器
regsec;//1秒时钟
regclk1;//1ms时钟
regbeep_r;//寄存器
wirebeepen;//闹钟使能信号
4.1.3模块框图
通过quartusII的creatsymbleforcurrentfile功能生成框图如下:
图4.2生成的符号图
分频模块实现,计数电路所需时钟信号为1HZ,而系统时钟为48MHZ,所以要对系统时钟进行分频以来满足电路的需要。
4.2分频模块实现
4.2.1分频模块描述
对于分频模块,关键是生成个1Hz的时钟信号。
考虑到仿真的需要,模块中间生成1个1kHz的时钟信号。
1Hz的信号的产生用来产生时钟的秒脉冲,框图如下图4.2:
图4.3分频模块图
4.2.2分频模块设计
本系统程序设计时钟的准确与否主要取决于秒脉冲的精确度。
为了保证计时准确,我们对系统时钟48MHz进行了48000分频生成1kHz信号clk1,在通过1kHz信号,生成1Hz信号clk。
//1ms信号产生部分
always@(posedgeclk)//定义clock上升沿触发
begin
count=count+1'b1;
if(count==15'd24000)//0.5mS到了吗?
begin
count=15'd0;//计数器清零
clk1=~clk1;//置位秒标志
end
end
//秒信号产生部分
always@(posedgeclk1)//定义clock上升沿触发
begin
count1=count1+1'b1;
if(count1==9'd500)//0.5S到了吗?
begin
count1=9'd0;//计数器清零
sec=~sec;//置位秒标志
end
End
4.2.3分频模块仿真
通过设置功能仿真,检查代码的正确性
1、仿真结果
图4.4分频模块波形仿真图
右上图可以知道,计数寄存器count累加到23999时,重新变为0,共计数了24000个值。
触发clk1跳变,使得count1加一,count1累加到499的时候,下一个数据为0,共技术500个值。
所以,sec信号的频率为1Hz,满足设计要求。
4.3计时模块实现