《基于FPGA的多功能电子万年历(共37页).doc》由会员分享,可在线阅读,更多相关《基于FPGA的多功能电子万年历(共37页).doc(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上湖南文理学院芙蓉学院课程设计报告课程名称: 专业课程课程设计 专业班级: 芙蓉通信1101班 学号(13) 学生姓名: 叶紫 指导教师: 戴正科 完成时间: 2014年6月17日 报告成绩: 评阅意见: 评阅教师 日期 目录专心-专注-专业基于FPGA的多功能电子万年历的设计一、设计要求基于FPGA设计多功能电子万年历,其中要包括对FPGA的介绍、电子万年历的八个模块以及顶层模块的工作原理和仿真调试。二、设计的内容及目的1. 简介并了解FPGA;2. 了解FPGA的工作原理;3. 了解万年历的工作原理,比较不同的设计方案;4. 了解万年历的八个模块及顶层模块的结构功能
2、、工作流程,并仿真;5. 了解时钟万年的控制系统。三、设计方案3.1 FPGA简介PLD/FPGA是近几年集成电路中发展最快的产品。由于PLD性能的高速发展以及设计人员自身能力的提高,可编程逻辑器件供应商将进一步扩大可编程芯片的领地,将复杂的专用芯片挤向高端和超复杂应用。据IC Insights的数据显示,PLD市场从1999年的29亿美元增长到去年的56亿美元,几乎翻了一番。Matas预计这种高速增长局面以后很难出现,但可编程逻辑器件依然是集成电路中最具活力和前途的产业。复杂可编程逻辑器件。可编程逻辑器件的两种主要类型是现场可编程门阵列(FPGA)和复杂可编程逻辑(CPLD)。在这两类可编程
3、逻辑器件中,FPGA提供了最高的逻辑密度、最丰富的特性和最高的性能。 现在最新的FPGA器件,如Xilinx Virtex系列中的部分器件,可提供八百万系统门(相对逻辑密度)。 这些先进的器件还提供诸如内建的硬连线处理器(如IBM Power PC)、大容量存储器、时钟管理系统等特性,并支持多种最新的超快速器件至器件(device-to-device)信号技术。 FPGA被应用于范围广泛的应用中,从数据处理和存储,以及到仪器仪表、电信和数字信号处理等。3.2 FPGA的工作原理FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Con
4、figurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在
5、存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。3.3电子万年历的工作原理按键消抖 可 编功能键 程调整键1 逻调整键2 辑 器 件 CPLD/FPGA LED显示模块图1电子万年历的工作原理1功能键用来选择不同的工作模式:时间正常显示功能、时间调整与显示、秒表功能、闹钟设置与查看、日期显示、日期调整与设置。2调整键1:主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的位置选择按钮,与功能键配合使用。 2号键功能模式,即时间调整与设置时,用作时、分、秒的移位,按一下,将会实现“时-分-秒”的
6、依次移位,便于在特定位置进行调整; 4号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的移位,按一下,将会实现“时-分-秒”的依次移位,便于在特定位置进行调整; 6号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会实现“月-日”的依次移位,便于在特定位置进行调整。3调整键2:主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的调整按钮,与功能键配合使用。 2号键功能模式,即时间调整与设置时,用作时、分、秒的调整,按一下,将会使得当前调整键1选择的位置数字增加1; 4号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的调整,按一下,将会使得当前调整键1选择的位置数字增加
7、1; 6号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会使得当前调整键1选择的位置数字增加1。3.4 时钟万年历的设计方案选择与比较1. 方案一:基于FPGA设计万年历2. 方案二:采用 Dallas 公司的专用时钟芯片 DS1302。该芯片内部采用石英晶体振荡器,其芯片精度不大于 10ms/年,可直接读取时间、日期,使得软件编程相对简单。而 且 DS1302 可以在很小电流的后备电源(2.5V-5.5V,在2.5V 时耗电小于 300nA)下继续计时,时钟在电网电压不足或突然掉电等突发情况下仍能正常工作。3. 方案三:本方案完全用软件实现走时,原理为:利用定时器与软件结合实现
8、 1 秒定时中断,每产生一次中断,存储器内相应的秒值加 1;若秒值达到 60,则将其清零,并 将相应的分字节值加 1;若分值达到 60,则清零分字节,并将时字节值加 1;若时值达 到 24,则将十字节清零。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高,而且由于是软件实现,当单片机不上电,程序不执行时钟将不工作。4选择与比较选择:方案一比较:方案一采用FPGA技术,方案二和方案三采用的是单片机。相比单片机,FPGA组织逻辑能力更强,时序能力更强,且有以下优点,所以本次设计采用FPGA技术。 FPGA运行速度快FPGA内部集成锁项环,可以把外部时钟倍频,可以到几百M,而单片机运行
9、速度低的多.在高速场合,单片机无法代替FPGA FPGA管脚多,容易实现大规模系统单片机IO口有限,而FPGA动辄数百IO,可以方便连接外设.比如一个系统有多路AD,DA,单片机要进行仔细的资源分配,总线隔离,而FPGA由于丰富的IO资源,可以很容易用不同IO连接各外设 FPGA内部程序并行运行,有处理更复杂功能的能力单片机程序是串行执行的,执行完一条才能执行下一条,在处理时只能调用有限的中断资源;而FPGA不同逻辑可以并行执行,可以同时处理不同任务,这就导致了FPGA工作更有效率 FPGA有大量软核,可以方便进行FPGA甚至包含单片机和DSP软核,并且IO数仅受FPGA自身IO限制,所以,F
10、PGA又是单片机和DSP的超集,也就是说,单片机和DSP能实现的功能,FPGA一般都能实现3.5时钟万年历的控制系统此电子万年历系统主要有8个模块,分别是以下8个模块:1. 主控制模块 maincontrol2. 时间及其设置模块 timepiece_main3. 时间显示动态位选模块 time_disp_select4. 显示模块 disp_data_mux5. 秒表模块 stopwatch6. 日期显示与设置模块 date_main7. 闹钟模块 alarmclock8. 分频模块 fdiv四、系统设计4.1电子万年历的八个模块1主控制模块 maincontrol该模块实现对各个功能模块的
11、整体控制,包括对时间显示与调整、日期显示与调整、闹钟显示与调整、秒表操作等的控制,结构功能图如2所示。图2 主控制模块的结构功能图SW3是功能键,从波形图中可知,SW3每出现一次上升沿,输出都会发生相应的变化,即按照Timepiece_EN(时钟自动显示使能),TimeSet_EN(时钟设置与调整使能),Stopwatch_EN(秒表功能使能),Alarmclock_EN(闹钟时间设置使能),Date_EN(日期显示使能),DateSet_EN(日期显示与设置使能)的顺序依次输出有效波形“1”,对相应的模块输入有效使能,从而实现相应的功能。2时间及其设置模块 time_auto_and_set
12、时间及其设置模块主要完成时间的自动正常运行与显示,以及在相应的功能号下,实现时间的调整与设置。 时间模块 timepiece_main该模块主要完成时间的自动增加与显示功能,即为正常的自动模式运行,其结构功能图如3所示,时间模块的结构功能图如4所示。 图3 时间及其设置模块的结构功能图 图4 时间模块的结构功能图a.秒自动计时子模块 second_counter,结构功能图如5所示,图5 秒自动计时子模块的结构功能图b.分自动计时子模块 minute_counter,结构功能图如6示。图6 分自动计时子模块的结构功能图c.小时自动计时子模块 hour_counter,结构功能图如7所示。图7
13、小时自动计时子模块的结构功能图当Timepiece_EN为1时,即处于时间自动工作状态,即每出现一次时钟信号clk,计数一次,先计数second0,当计数到1001(即十进制的9)时,向second1发出一个计数信号,此时second1进行一次计数,类推,second1计数到0101(即十进制的5),且second0计数到1001(即十进制的9)时,minute0则进行一次计数,按照此规律进行时间的计数。当计满24小时,向day_EN发出一个计数信号,即此使能端输出有效信号1,进行日期的计数。时间设置模块 timeset该模块主要完成对时间的设置相关的闪烁显示控制以及时间中的小时、分钟、秒等数
14、据的改变,流程图如8所示,结构功能图如9所示。 图 8 时间设置模块的流程图图9 时间设置模块的结构功能图表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_driv
15、e设置中的闪烁显示设置当Timeset_EN为1时,即实现时间设置功能。SW1实现时间格式中小时高、低位,分钟高、低位,秒钟高、低位的位选,即每出现一个SW1上升沿,disp_drive的相应数值加1(选择具体的需要调整的位置)。SW2实现相应得位的数值得调整,即每出现一个SW2上升沿,相应位的数值增加1。时间数据与时间设置数据多路选择模块 time_mux该模块用来分时向显示单元传输显示数据,流程图如10所示,结构功能图如11所示。图10 多路选择模块的结构功能图开 始依输入条件,判断是自动显示时间,或显示调整后的时间Timeset_EN=1?显示设置后的时间显示自动模式时的时间结 束图 1
16、1 多路选择模块的流程图表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,s
17、econd_1当前需要显示的秒输出3时间显示动态位选模块 time_disp_select该模块用来分时显示时间数据,但是在选择合适的时间间隔下,人眼并不能分辨出是分时显示的,这样显示的方式可以降低功耗,结构功能图如12所示。图12 时间显示动态位选模块的结构功能图TimeSet_EN表示时间设置使能,Time_EN表示时间自动显示使能,clk_1kHz用于动态显示时间,clk_200Hz用于闪烁显示时间,timeset_disp_drive表示时间设置数据显示的同步信号,time_disp_select表示显示动态位选输出信号。当TimeSet_EN为0,Time_EN为1时,以clk_1k
18、Hz为是时钟信号,输出自动显示的时间,按位依次显示;当TimeSet_EN为1,Time_EN为0时,则以clk_200Hz为时钟信号,输出以timeset_disp_drive对应的位置。4显示模块 disp_data_mux模块是时间、日期等数据用数码管显示的控制与数据传输模块,包括数据的传输以及BCD码的译码等,结构功能图如13所示。图13 显示模块的结构功能图显示原理采用的是七段数码管的现实原理,如14所示:图14 七段数码管的显示原理5秒表模块 stopwatch该模块实现秒表的功能,在实际中,可以通过改变自动工作模式下的时间的计数时钟的频率来实现秒表的功能,流程图如15所示,结构功
19、能图如16所示。开 始EN=1?秒表工作状态时间自动工作状态结 束图15 秒表模块的流程图图16 秒表模块的结构功能图EN表示秒表使能控制信号,clk1表示自动工作模式的时钟信号,clk2表示秒表工作模式的时钟信号,故当EN为有效信号1时,输出F_out与clk2同,即处于秒表工作状态,同理EN为0时,输出F_out与clk1同,即处于自动工作状态。6日期显示与设置模块 date_main该模块实现日期的显示和日期的调整与设置,结构功能图如17所示。图17 时间显示与设置模块的结构功能图6.1日期自动工作模块 autodate该模块实现的是日期的自动工作功能,结构功能图如18所示。图18 日期
20、自动工作模块的结构功能图6.2日期设置模块 setdate该模块用于日期,结构功能图如19所示。图19日期设置模块的结构功能图7闹钟模块alarmclock该模块实现的功能包括闹钟的设置以及闹钟时间到后的提示,流程图如20所示,结构功能图如21所示。开 始设置的闹钟与当前时间比较alarm=1b1闹钟工作alarm=1b0闹钟不工作EN=1disp_drive3b101?disp_drive=disp_drive+3,b1disp_drive=3b0根据不同的disp_drive选择在不同的位置上的数值加1结 束 图 20闹钟模块的流程图图21 闹钟模块的结构功能图EN为闹钟设置使能,clk_
21、200Hz用于设置中的闪烁显示的时钟,其中还定义了hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0,用来表示已经设置好的闹钟时间。闹钟一直处于工作状态,当前时间(hour1,hour0,minute1,minute0,second1,second0)与设置的闹钟时间相比较,当小时、分钟、秒钟的时间完全相同时,则闹铃响,输出信号alarm为有效信号1。SW1和SW2是调整键,分别控制位选和数值的调整。8分频模块 fdiv该模块完成全局时钟信号分频输出200Hz、60Hz、1Hz的三种时钟信号,结构功能图如22所
22、示,流程图如23所示。图22 分频模块的结构功能图开始,输入1kHz时钟信号posedge clkCNT4?输出200Hz时钟信号f200HzCNT=CNT+1posedge f200HzCNT22?CNT2=CNT2+1输出60Hz时钟信号posedge f200HzCNT3199?CNT3=CNT3+1输出1Hz时钟信号结 束图23 分频模块的流程图4.2顶层模块将各个主模块综合成电子万年历系统,其包括:fdiv分频模块,maincontrol主控制模块,stopwatch秒表模块,time_auto_and_set时间及其设置模块,date_main日期及其设置模块,alarmclock
23、闹钟模块,time_disp_select时间显示动态位选模块及disp_data_mux显示模块,该顶层电路Top如图24所示。图24 顶层电路Top五、系统仿真与调试1.主控制模块 maincontrol图25 主控制模块的波形仿真图2.时间及其设置模块 time_auto_and_set时间模块 timepiece_main图26 时间模块的波形仿真图 时间设置模块 timeset图27 时间设置模块的波形仿真图 时间数据与时间设置数据多路选择模块 time_mux图28 多路选择模块的波形仿真图3.时间显示动态位选模块 time_disp_select图29 时间显示动态位选模块的波形
24、仿真图图30 时间显示动态位选模块的波形仿真图4.显示模块 disp_data_mux图31 显示模块的波形仿真图5.秒表模块 stopwatch图32 秒表功能的波形仿真图6.日期显示与设置模块 date_main图33 日期自动工作模块的波形仿真图图34 日期自动工作模块的波形仿真图7.闹钟模块alarmclock图35 闹钟模块的波形仿真图8.分频模块 fdiv图36 分频模块的波形仿真图六、心得与体会 本次的课题是基于FPGA的多功能电子万年历的设计,从最开始的对FPGA的不了解以及对电子万年历原理的不知晓,到后来的找资料、设计,这个过程我学到了很多,也感悟了很多。在学校课堂上学到的东
25、西和在实训中学到的东西是不完全一致的。实训是符合社会的,社会是发展的,是进步的,每时每刻都在发生着变化,你要适应社会,而不是要社会来适应你,所以你就得不断地学习,不断地充电。实训是对每个人综合能力的检验,是让我们能更好的巩固专业知识、积累工作经验、掌握工作技能。让我深深地体会到要想做好每一件事,除了自己平时要有一定的专业知识外,还需要有一定的实践动手能力,操作能力。参考文献1帕尔尼卡、夏宇闻. VERILOG HDL数字设计与综合,电子工业出版社,2004.2褚振勇,翁木云. FPGA设计与应用(第二版),西安电子科技大学出版社,2006.3侯伯亨,顾新. VHDL硬件描述语言与数字逻辑电路设
26、计修订版,西安电子科技大学出版社,2004.4赵曙光,郭万有. 可编程逻辑器件原理,西安电子科技大学出版社,2000.5徐志军,徐光辉. CPLD/FPGA的开发与应用,电子工业出版社,2002.6冼进,戴仙金,潘懿萱. Verilog HDL数字控制系统设计实例,中国水利水电出版社,2007.7夏宇闻. Verilog HDL数字系统设计教程,北京航空航天大学出版社,2003.8黄智伟. FPGA系统设计与实践,电子工业出版社,2003.9王金明等.数字系统设计与verilog HDL,电子工业出版社,2002.10 J.Bhasker. Verilog HDL Synthesis: A P
27、ractical Prime, Star Galaxy Publishing, 1998.附录电子万年历系统的Verilog HDL语言程序设计部分代码 1主控制模块module maincontrol(clk,SW3,Timepiece_EN,TimeSet_EN,Stopwatch_EN,Alarmclock_EN,Date_EN,DateSet_EN);output Timepiece_EN; /时间自动显示使能output TimeSet_EN; /时间调整与设置使能output Stopwatch_EN; /秒钟功能使能output Alarmclock_EN; /闹钟时间设置使能o
28、utput Date_EN; /时期显示使能output DateSet_EN; /日期调整与设置使能input SW3; /功能号选择input clk;reg Timepiece_EN; reg TimeSet_EN; reg Stopwatch_EN; reg Alarmclock_EN; reg Date_EN; reg DateSet_EN; reg 2:0 Function;reg 31:0 cnt;reg q1,q2,q3;reg CLK;always(posedge clk)begin if(cnt49999) begin cnt=cnt+1; CLK=0; end else
29、begin cnt=0; CLK=1b1; end endalways(posedge CLK)begin begin q2=q1; q1=SW3; end begin q3=q1&(q2); endendalways(posedge q3 ) /*实现对时间显示与调整,日期显示与 调整,闹钟显示与调整,秒表操作等的控制*/ begin /功能号的产生以及其自动循环 if(Function3b101 & SW3=1b1) Function=Function+3b1; else Function=3b0; case(Function) /各个分功能的控制和实现 /时钟自动显示 3b000:beg
30、in Timepiece_EN=1b1; TimeSet_EN=1b0; Stopwatch_EN=1b0; Alarmclock_EN=1b0; Date_EN=1b0; DateSet_EN=1b0; end /时钟调整与设置 3b001:begin end /秒表 3b010:begin end /闹钟时间设置 3b011:begin end /日期显示 3b100:begin end /日期调整与设置 3b101:begin end default:begin end endcase endendmodule 2秒自动计时子模块module second_counter(EN,clk,
31、second_data1,second_data0,E0);output 3:0 second_data1,second_data0;output E0;input clk,EN;reg 3:0 second_data1,second_data0;reg E0;always(posedge clk) begin if(EN=1b1) begin if(second_data04b1001) second_data0=second_data0+4b1; else begin E0=1b0; second_data0=4b0; if(second_data14b0101) second_data1
32、= second_data1+4b1; else begin second_data1=4b0; E0=1b1; end end end endendmodule3时间自动工作控制module timepiece_main(CLK,Timepiece_EN,day_EN,hour0,hour1,minute0,minute1,second0,second1);input CLK;input Timepiece_EN;output day_EN;output 3:0 hour1,hour0;output 3:0 minute1,minute0;output 3:0 second1,second0
33、;wire SYNTHESIZED_WIRE_0;wire SYNTHESIZED_WIRE_1;hour_counter /*小时计时*/b2v_inst(.clk(SYNTHESIZED_WIRE_0),.EN(Timepiece_EN),.E0(day_EN),.hour_data0(hour0),.hour_data1(hour1);minute_counter /*分钟计时*/b2v_inst1(.clk(SYNTHESIZED_WIRE_1),.EN(Timepiece_EN),.E0(SYNTHESIZED_WIRE_0),.minute_data0(minute0),.minu
34、te_data1(minute1);second_counter /*秒计时*/b2v_inst2(.clk(CLK),.EN(Timepiece_EN),.E0(SYNTHESIZED_WIRE_1),.second_data0(second0),.second_data1(second1);endmodule4时间数据与时间设置数据多路选择模块module time_mux(TimeSet_EN,hour1,hour0,minute1,minute0,second1,second0,hour_set1,hour_set0,minute_set1,minute_set0,second_set
35、1,second_set0,hour_1,hour_0,minute_1,minute_0,second_1,second_0);output 3:0 hour_1,hour_0; /当前需要显示的小时输出output 3:0 minute_1,minute_0; /当前需要显示的分钟输出output 3:0 second_1,second_0; /当前需要显示的秒输出input TimeSet_EN; /时间设置使能信号input 3:0 hour1,hour0; /自动模式中当前时间的小时输入input 3:0 minute1,minute0; /自动模式中当前时间的分钟输入input 3
36、:0 second1,second0; /自动模式中当前时间的秒输入input 3:0 hour_set1,hour_set0; /时间设置后的小时输入input 3:0 minute_set1,minute_set0; /时间设置后的分钟输入input 3:0 second_set1,second_set0; /时间设置后的秒输入reg 3:0 hour_1,hour_0;reg 3:0 minute_1,minute_0;reg 3:0 second_1,second_0;/*时间自动显示与时间调整与设置中显示数据的多路选择*/always(TimeSet_EN,hour1,hour0,m
37、inute1,minute0,second1,second0,hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0) begin if(TimeSet_EN=1b1) begin hour_1=hour_set1; hour_0=hour_set0; minute_1=minute_set1; minute_0=minute_set0; second_1=second_set1; second_0=second_set0; end else begin hour_1=hour1; hour_0=hour0; minute_1=minute1; minute_0=minute0; second_1=second1; second_0=second0; end endendmodule 5时间及其设置模块 module time_auto_and_set(CLK,Timepiece_EN,TimeSet_EN,SW1,SW2,Day_EN,hour_0,hour_1,minute_0,minute_1,second_0,second_1,TimeSet_disp_drive);input CLK;input Timepiece_EN;input TimeSet_EN;input SW1;in
限制150内