您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 多功能数字钟设计FPGA Verilog
多功能数字钟NJUST多功能数字钟设计基于VerilogHDL语言学院:电子工程与光电技术学院学号:912104220139姓名:匡鑫指导教师:谭雪琴2014年11月21日星期五1摘要:基于FPGA平台,运用Verilog语言编写设计一多功能数字钟,包括基本的时钟,校时校分,整点报时功能。扩展闹钟,秒表,万年历,键盘输入功能。Abstract:FPGA-basedplatform,usingVeriloglanguagetodesignamulti-functionaldigitalclock,includingbasicfunctionofclock,schoolhours,schoolminutes,thewholepointtimekeeping.Andextendedfunctionofalarmclock,stopwatch,calendar,keyboardinput.关键词:多功能数字钟,可编程逻辑器件,EDA设计,VerilogKeywords:multi-functionaldigitalclock,FPGA,EDAdisign,Verilog目录1设计要求.......................................................................................................22设计方案选择及思路分析................................................................................23各子模块设计原理和分析.................................................................................33.1分频模块...............................................................................................33.2时分秒模块............................................................................................53.3时分调整模块........................................................................................63.4报时模块...............................................................................................73.5扫描显示模块........................................................................................83.6秒表模块...............................................................................................93.7闹钟模块.............................................................................................103.8万年历模块..........................................................................................123.9键盘扫描模块......................................................................................134调试仿真......................................................................................................155编程下载......................................................................................................166结论.............................................................................................................177参考文献......................................................................................................178实验感想......................................................................................................179源代码.........................................................................................................1821设计要求基于FPGA可编程逻辑器件,用quatusII软件设计一个多功能数字钟,其基本要求如下:1.有基础的计时显示功能,即时、分、秒显示在6个七段管上2.K0,K1,K2,K3分别为系统使能(暂停),时钟清零,校时,校分开关。由于按键是长期处于“1”状态,故在这里采用低电平“0”为有效电平(本人认为原要求中“1”为有效电平不合理)。3.使时钟具有整点报时功能(当时钟计到59’53”时开始报时,在59’53”,59’55”,59’57”时报时频率为500Hz,59’59”时报时频率为1KHz,)。提高部分要求:添加按键:K4,K5分别为设置位选择,设置位加一。K6,K7为组合功能选择,当K6K7值:(11)为时钟功能,(10)为秒表功能,(01)为闹钟设置,(00)为万年历功能。1.闹时功能,按动方式键,使电路工作于预置状态,此时显示器与时钟脱开,而与预置计数器相连,利用前面手动校时,校分方式进行预置,预置后回到正常模式。当计时计至预置的时间时,扬声器发出闹铃信号,时间为半分钟,闹铃信号可以用开关“止闹”,按下此开关后,闹铃声立刻中止,正常情况下应将此开关释放,否则无闹时作用。2.秒表功能。按start键开始计秒,按stop键停止计秒并保持显示数不变,直到复位信号加入。3.万年历功能,4.使用4*4矩阵键盘输入设置信号2设计方案选择及思路分析由于之前参加过华为杯电子设计大赛,当时采用的是VerilogHDL语言,而且EDA实验一曾经做过用器件搭数字钟的实验,如果再用原理图方法的话没有挑战性,而且VerilogHDL语言更为灵活方便,因此决定采用其完成本次电子设计。设计的总体部分按照要求可以分为基本模块:分频模块、时钟计时及调整模3块、扫描显示。附加模块:万年历、整点报时、闹钟功能和秒表功能。其总体设计框图如下:3各子模块设计原理和分析3.1分频模块初步分析后面所需要的信号频率,分频器的功能主要有4个:分别是产生计时用的标准秒脉冲1HZ信号;闹钟及万年历设置时用的2HZ闪烁信号整点报时及显示扫描用的1kHZ高音频信号和500HZ低音频信号。分析系统时钟为48M,经过48K的分频后得到1K信号,再经过2分频可以得到500HZ方波,1K经过5分频得到200HZ信号,最后100分频得到的2HZ信号,再2分频得到1HZ的时钟。原理框图如下图5所示。图5分频信号框图Verilog设计分频器很简单,在偶数分频时,在输入脉冲下直接计数到所分频数的一半,然后翻转即可。如:分频秒分时计数日月年计数扫描显示秒表闹钟报时嗡鸣器48M1K500HZ200HZ2HZ1HZ4always@(posedgeclk)beginf1k=(count48k48000/2)?1'b1:1'b0;if(count48k==48000-1)count48k=0;elsecount48k=count48k+1;end但是奇数分频则要复杂得多,若奇数分频不要求占空比为50%,原理同偶数分频,可计数到(N-1)/2翻转,此时占空比接近50%。但如果要求占空比为准确的50%,通过查阅资料得知也可以实现的。原理如下图always@(posedgef1k)//上升沿计数if(count5p==4)count5p=0;elsecount5p=count5p+1;//posedgewave//上升沿波形always@(posedgef1k)beginif(count5p2)f200p=1;elsef200p=0;end//negedgecounteralways@(negedgef1k)//下降沿计数if(count5n==4)count5n=0;elsecount5n=count5n+1;//negedgewavealways@(negedgef1k)//下降沿波形beginif(count5n2)f200n=1;else5f200n=0;endassignf200hz=f200n|f200p;//波形相或仿真波形如下,clk设置频率为4800M,则f1k的周期为10us,仿真结果正确。3.2时分秒模块均用BCD码来保存便于后期显示,时分秒的情况基本相同,现详细分析秒的进位情况。用4位寄存器来保存秒个位,4位寄存器来保存秒十位。时分秒一共需要24位寄存器。在1HZ的脉冲下,秒个位计数,当满10时即4’ha时向秒十位进位,秒个位清零;秒十位满6即4’h6时向分个位进位,秒十位清零……以此类推,特别在时十位处理时有些不同,当小时整体满24即8’h24时,清零,(向天进位,为以后万年历做铺垫)。代码如下,(此处把年月日的计数一起处理)beginsecond[3:0]=second[3:0]+1'b1;if(second[3:0]==4'ha)beginsecond[3:0]=4'h0;second[7:4]=second[7:4]+1'b1;if(second[7:4]==4'h6)beginsecond[7:4]=4'h0;minute[3:0]=minute[3:0]+1'b1;if(minute[3:0]==4'ha)beginminute[3:0]=4'h0;minute[7:4]=minute[7:4]+1'b1;if(minute[7:4]==4'h6)beginminute[7:4]=4'h0;hour[3:0]=hour[3:0]+1'b1;if(hour[3:0]==4'ha)beginhour[3:0]=4'h0;hour[7:4]=hour[7:4]+1'b1;6if(hour==8'h24)beginhour[7:4]=4'h0;day[3:0]=day[3:0]+1'b1;if(day[3:0]==4'ha)beginday[3:0]=4'h0;day[7:4]=day[7:4]+1'b1;if(day[7:4]==4'h3)beginday[7:4]=4'h0;month[3:0]=month[3:0]+1'b1;if(month[3:0]==4'ha)beginmonth[3:0]=4'h0;month[7:4]=month[7:4]+1'b1;if(month[7:0]==8'h12)beginmonth=8'h0;year=year+1;endendendendendendendendenden
本文标题:多功能数字钟设计FPGA Verilog
链接地址:https://www.777doc.com/doc-4410956 .html