基于FPGA的电子钟的设计.docx

上传人:b****5 文档编号:3795446 上传时间:2022-11-25 格式:DOCX 页数:43 大小:633.09KB
下载 相关 举报
基于FPGA的电子钟的设计.docx_第1页
第1页 / 共43页
基于FPGA的电子钟的设计.docx_第2页
第2页 / 共43页
基于FPGA的电子钟的设计.docx_第3页
第3页 / 共43页
基于FPGA的电子钟的设计.docx_第4页
第4页 / 共43页
基于FPGA的电子钟的设计.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

基于FPGA的电子钟的设计.docx

《基于FPGA的电子钟的设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的电子钟的设计.docx(43页珍藏版)》请在冰豆网上搜索。

基于FPGA的电子钟的设计.docx

基于FPGA的电子钟的设计

北方民族大学

学士学位论文

论文题目:

基于FPGA的数字钟的设计

 

院(部)名称:

电气信息工程学院

学生姓名:

*****************

专业:

测控技术与仪器学号:

********

指导教师姓名:

周春艳

论文提交时间:

2012年4月25日

论文答辩时间:

2010年5月6日

学位授予时间:

 

北方民族大学教务处制

摘要

本设计为一个多功能的数字钟,具有时间日期显示功能,以24小时循环计数;具有校时、跑表以及任意时刻闹钟功能。

本设计采用EDA技术,以硬件描述语言VerilogHDL为系统逻辑描述手段设计文件,在Quartusii工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。

系统主要由主分频模块、控制模块、时间及其设置模块、时间显示动态位选模块、显示模块、秒表模块、日期显示与设置模块、闹钟模块等8个模块组成。

本系统能够完成日期和时间的分别显示,由按键输入进行数字钟的校时、清零、启停功能。

 

关键词:

数字钟,硬件描述语言,VerilogHDL,FPGA

 

ABSTRACT

Thisdesignforamulti-functiondigitalclock,withtimedatetoshowthefunctionto24hourscyclecount;WhenPaoBiaoand,withthealarmclockfunctionatanytime.

TheuseofEDAdesigntechnology,hardware-descriptionlanguageVerilogHDLdescriptionlogicmeansforthesystemdesigndocuments,inQuartusiitoolsenvironment,atop-downdesign,bythevariousmodulestogetherbuildaFPGA-baseddigitalclock.

Systemmainlybythemainpointsfrequencymodule,controlmodule,timeandsetmodule,timedisplaydynamicachoosemodule,displaymodule,astopwatchmodule,datedisplayandsetmodule,alarmclockmoduleeightmodules.Thissystemcanfinishdateandtimedisplayrespectively,thekeyofinputofthedigitalclock,reset,andwhenthe1stopfunction.

 

Keywords:

digitalclock,hardwaredescriptionlanguage,VerilogHDL,FPGA

 

第一章前言

1.1选题的目的、意义

现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。

支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。

前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronicdesignautomatic,EDA)技术。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

而可编程逻辑器件(如CPLD、FPGA)的应用普及,为数字系统的设计带来了极大的灵活性。

这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。

这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展[1-4]。

本设计采用的VerilogHDL是目前应用最为广泛的硬件描述语言,能支持算法级,寄存器级,逻辑级,开关级、系统级和版图级等各个层次的设计和描述;VerilogHDL进行设计最大的优点是其工艺无关性,这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路,因此在实际应用中越来越广泛。

ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。

而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点[5-10]。

钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些都是以钟表数字化为基础的。

近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求,因此研究数字钟以及扩大其应用有着非常现实的意义[11-12]。

1.2课题研究的内容

本设计主要研究基于FPGA的数字钟,要求时间可以24小时制或12小时制,显示时间和日期。

具有校时以及整点报时、任意时刻闹钟、跑表等功能,可以对时间及日期进行单独校对,使其校正到标准时间。

 

第二章系统总体设计方案

2.1数字钟的顶层电路

将各个主模块综合成数字钟系统,其包括:

fidv分频模块,maintrol时钟主控制模块,time_auto_and_set时间及其设置模块,time_disp_select时间显示动态位选模块,disp_data_mux显示模块,stopwatch跑表模块,date_main日期显示与设置模块及alarmclock闹钟模块,该系统顶层电路Top如图2-1所示。

图2-1数字钟顶层电路图

2.2数字钟的工作原理

图2-2数字钟整体框图

功能键SW3用来选择不同的工作模式:

时间正常显示功能、时间调整与显示、秒表功能、闹钟设置与查看、日期显示、日期调整与设置。

调整键SW1:

主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的位置选择按钮,与功能键配合使用。

2号键功能模式,即时间调整与设置时,用作时、分、秒的移位,按一下,将会实现“时-分-秒”的依次移位,便于在特定位置进行调整;

4号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的移位,按一下,将会实现“时-分-秒”的依次移位,便于在特定位置进行调整;

6号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会实现“月-日”的依次移位,便于在特定位置进行调整。

调整键SW2:

主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的调整按钮,与功能键配合使用。

2号键功能模式,即时间调整与设置时,用作时、分、秒的调整,按一下,将会使得当前调整键1选择的位置数字增加1;

4号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的调整,按一下,将会使得当前调整键1选择的位置数字增加1;

6号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会使得当前调整键1选择的位置数字增加1。

分频电路将1KHZ的输入信号分频为1HZ的计时模块信号源、60HZ的信号跑表基准时钟信号源和200HZ的数码管动态显示扫描频率。

秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器满24后向日期进位。

计满后各计数器清零,重新计数。

计数器的输出分别经译码器送数码管显示。

计时出现误差时,可以用时间设置和日期设置电路调整时间和日期。

在控制信号中除了一般的校时信号外,还有自动走时使能信号。

控制信号由按键输入。

显示由数码管完成。

 

第三章单元电路设计

3.1分频模块(fidv)

该模块完成全局时钟信号分频输出200Hz、60Hz、1Hz的三种时钟信号。

分频电路的流程图如图3-1所示,逻辑框图如图3-2所示。

仿真波形图如图3-3所示。

图3-1分频电路流程图

图3-2分频电路模块逻辑框图

该电路的VerilogHDL程序如下:

modulefdiv(clk,f200hz,f60hz,f1hz);

outputf200hz,f60hz,f1hz;

inputclk;//1KHzinput

regf200hz,f60hz,f1hz;

integerCNT1=0,CNT2=0,CNT3=0;

always@(posedgeclk)

begin

if(CNT1<4)

begin

CNT1=CNT1+1;

f200hz<=1'b0;

end

else

begin

CNT1=0;

f200hz<=1'b1;

end

end

always@(posedgef200hz)

begin

if(CNT2<2)

begin

CNT2=CNT2+1;

f60hz<=1'b0;

end

else

begin

CNT2=0;

f60hz<=1'b1;

end

end

always@(posedgef200hz)

begin

if(CNT3<199)

begin

CNT3=CNT3+1;

f1hz<=1'b0;

end

else

begin

CNT3=0;

f1hz<=1'b1;

end

end

endmodule

图3-3分频模块仿真波形图

3.2时钟主控制模块(maincontrol)

该模块实现对各个功能模块的整体控制,包括对时间显示与调整、日期显示与调整、闹钟显示与调整、秒表操作等的控制。

主控制电路模块的逻辑框图如图3-4所示。

仿真波形图如图3-5所示。

图3-4时钟主控制电路模块逻辑框图

图3-5时钟主控制模块仿真波形图

该模块的VerilogHDL程序如下:

modconulemaintrol(SW3,//功能号选择

Timepiece_EN,//时间自动显示使能

TimeSet_EN,//时间调整与设置使能

Stopwatch_EN,//跑表功能使能

Alarmclock_EN,//闹钟功能使能

Date_EN,//日期显示使能

DateSet_EN);//日期调整与设置使能

outputTimepiece_EN,TimeSet_EN,Stopwatch_EN,Alarmclock_EN,Date_EN,DateSet_EN;

inputSW3;

regTimepiece_EN,TimeSet_EN,Stopwatch_EN,Alarmclock_EN,Date_EN,DateSet_EN;

reg[2:

0]Function;//存放功能号

always@(posedgeSW3)

begin

if(Function<3'b101)

Function<=Function+3'b1;

else

Function<=3'b0;

case(Function)

//时间自动显示

3'b000:

begin

Timepiece_EN<=1'b1;

TimeSet_EN<=1'b0;

Stopwatch_EN<=1'b0;

Alarmclock_EN<=1'b0;

Date_EN<=1'b0;

DateSet_EN<=1'b0;

end

//时间调整与设置

3'b001:

begin

Timepiece_EN<=1'b0;

TimeSet_EN<=1'b1;

Stopwatch_EN<=1'b0;

Alarmclock_EN<=1'b0;

Date_EN<=1'b0;

DateSet_EN<=1'b0;

end

//跑表

3'b010:

begin

Timepiece_EN<=1'b0;

TimeSet_EN<=1'b0;

Stopwatch_EN<=1'b1;

Alarmclock_EN<=1'b0;

Date_EN<=1'b0;

DateSet_EN<=1'b0;

end

//闹钟设置

3'b011:

begin

Timepiece_EN<=1'b0;

TimeSet_EN<=1'b0;

Stopwatch_EN<=1'b0;

Alarmclock_EN<=1'b1;

Date_EN<=1'b0;

DateSet_EN<=1'b0;

end

//日期显示

3'b100:

begin

Timepiece_EN<=1'b0;

TimeSet_EN<=1'b0;

Stopwatch_EN<=1'b0;

Alarmclock_EN<=1'b0;

Date_EN<=1'b1;

DateSet_EN<=1'b0;

end

//日期调整与设置

3'b101:

begin

Timepiece_EN<=1'b0;

TimeSet_EN<=1'b0;

Stopwatch_EN<=1'b0;

Alarmclock_EN<=1'b0;

Date_EN<=1'b0;

DateSet_EN<=1'b1;

end

default:

begin

Timepiece_EN<=1'b0;

TimeSet_EN<=1'b0;

Stopwatch_EN<=1'b0;

Alarmclock_EN<=1'b0;

Date_EN<=1'b0;

DateSet_EN<=1'b0;

end

endcase

end

endmodule

3.3时间及其设置模块(time_auto_and_set)

该模块主要完成时间的自动正常运行与显示,以及在相应的功能号下,实现时间的调整与设置。

该模块分为三个小模块:

时间计数模块、时间设置模块和时间数据多路选择模块。

该模块顶层电路如图3-6所示:

图3-6时间及其设置模块顶层电路图

该模块逻辑框图如图3-7所示:

图3-7时间及其设置模块逻辑框图

3.3.1时间计数模块(timepiece_main)

该模块主要完成时间的自动增加与显示功能,即为正常的自动模式运行。

该模块分为三个小模块:

秒计数子模块、分计数子模块和时计数子模块。

该模块电路图如图3-8所示:

图3-8时间计数模块电路图

该模块逻辑框图如图3-9所示。

仿真波形图如图3-10所示。

图3-9时间计数模块逻辑框图

图3-10时间计数模块仿真波形图

◆秒计数子模块逻辑框图如图3-11所示。

图3-11秒计数子模块框图

EN是时间显示信号,当Timepiece_En=1时有效;clk是秒脉冲输入端口;输出端口second_data0[3..0]是秒时钟的低位,second_data1[3..0]是高位;EO端口是进位输出端口,当秒计数到59时输出高电平,其它时候输出低电平。

◆分计数子模块的设计原理与秒模块的类似。

逻辑框图如图3-12所示。

图3-12分计数子模块框图

◆时计数子模块逻辑框图如图3-13所示。

图3-13时计数模块框图

3.3.2时间设置模块(timeset)

该模块主要完成对时间的设置相关的闪烁显示控制以及时间中的小时、分钟、秒等数据的改变,流程图如图3-14所示,逻辑框图如3-15所示,波形仿真图如3-16所示。

图3-14时间设置模块流程图

图3-15时间设置模块框图

图3-16时间设置模块波形仿真图

表3-1时间设置模块的端口说明

输入端口

功能

TimeSet_EN

时间设置使能,当其电平为高时,时间设置有效

SW1,SW2

调整键1与调整键2输入信号

hour1,hour0

当前时间的小时数输入

minute1,minute0

当前时间的分钟数输入

second0,second1

当前时间的秒数输入

输出端口

功能

hour_set1,hour_set0

设置时间后的小时数

minute_set1,minute_set0

设置时间后的分钟数

second_set1,second_set0

设置时间后的秒数

disp_drive

设置中的闪烁显示设置

当Timeset_EN为1时,即实现时间设置功能。

SW1实现时间格式中小时高、低位,分钟高、低位,秒高、低位的位选,即每出现一个SW1上升沿,disp_drive的相应数值加1(选择具体的需要调整的位置)。

SW2实现相应得位的数值的调整,即每出现一个SW2上升沿,相应位的数值增加1。

3.3.3时间数据多路选择模块(time_mux)

该模块用来选择向显示单元传输所要显示的数据,流程图如图3-17所示,逻辑框图如图3-18所示,波形仿真如图3-19所示。

图3-17多路选择模块的流程图

表3-2多路选择模块的端口说明

输入端口

功能

TimeSet_EN

时间设置使能信号

hour1,hour0

自动模式中当前时间的小时数输入

minute1,minute0

自动模式中当前时间的分钟数输入

second0,second1

自动模式中当前时间的秒数输入

hour_set1,hour_set0

时间设置后的小时数输入

minute_set1,minute_set0

时间设置后的分钟数输入

second_set1,second_set0

时间设置后的秒数输入

输出端口

功能

hour_1,hour_0

当前需要显示的小时输出

minute_1,minute_0

当前需要显示的分钟输出

second_0,second_1

当前需要显示的秒输出

图3-18时间数据多路选择模块框图

图3-19时间数据多路选择模块波形仿真图

3.4时间显示动态位选模块(time_disp_select)

该模块用来分时显示时间数据,TimeSet_EN表示时间设置使能,Time_EN表示时间自动显示使能,clk_1kHz用于动态显示时,clk_200Hz用于闪烁显示时间,timeset_disp_drive表示时间设置数据显示的同步信号,time_disp_select表示显示动态位选输出信号。

当TimeSet_EN为0,Time_EN为1时,以clk_1kHz为时钟信号,输出自动显示的时间,按位依次显示;当TimeSet_EN为1,Time_EN为0时,则以clk_200Hz为时钟信号,输出以timeset_disp_drive对应的位置。

逻辑框图如图3-20所示,波形仿真如图3-21所示。

图3-20时间显示动态位选模块框图

图3-21(a)时间显示动态位选模仿真波形图

图3-21(b)时间显示动态位选模仿真波形图

该模块的VerilogHDL程序如下:

moduletime_disp_select(clk_1khz,clk_200hz,Time_EN,TimeSet_EN,

timeset_disp_drive,time_disp_select);

output[5:

0]time_disp_select;

inputclk_1khz;

inputclk_200hz;

inputTime_EN;

inputTimeSet_EN;

input[2:

0]timeset_disp_drive;

reg[5:

0]time_disp_select;

reg[2:

0]auto_disp_drive;

regclk;

reg[2:

0]disp_drive;

always@(posedgeclk_1khz)/*实现自动运行模式中的动态显示“位选的驱动”*/

begin

if(auto_disp_drive<3'b101)

auto_disp_drive<=auto_disp_drive+3'b1;

else

auto_disp_drive<=3'b0;

end

always

begin/*实现自动运行模式中时间动态显示位选驱动与时间设置中的时间动态显示位选驱动的二选一*/

if(Time_EN==1'b1)

begin

clk<=clk_1khz;

disp_drive<=auto_disp_drive;

end

elseif(TimeSet_EN==1'b1)

begin

clk<=clk_200hz;

disp_drive<=timeset_disp_drive;

end

end

always@(posedgeclk)

begin

case(disp_drive)

3'b000:

time_disp_select<=6'b100000;

3'b001:

time_disp_select<=6'b010000;

3'b010:

time_disp_select<=6'b001000;

3'b011:

time_disp_select<=6'b000100;

3'b100:

time_disp_select<=6'b000010;

3'b101:

time_disp_select<=6'b000001;

default:

time_disp_select<=6'b000000;

endcase

end

endmodule

3.5显示模块(disp_data_mux)

该模块是时间、日期等数据用数码管显示的控制与数据传输模块,包括数据的传输以及BCD码的译码等。

逻辑框图如图3-22所示,仿真波形如图3-23所示。

图3-22显示模块逻辑框图

图3-23显示模块波形仿真图

该模块的VerilogHDL程序如下:

moduledisp_data_mux(Timepiece_EN,TimeSet_EN,Stopwatch_EN,time_disp_select,

Alarmclock_EN,alarmclock_disp_select,hour1,hour0,minute1,minute0,second1,second0,Date_EN,DateSet_EN,date_disp_s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1