资源描述:
《多功能数字钟设计fpga verilog》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、NJUST多功能数字钟设计基于VerilogHDL语言学院:电子工程与光电技术学院学号:912104220139姓名:匡鑫指导教师:谭雪琴2014年11月21日星期五31摘要:基于FPGA平台,运用Verilog语言编写设计一多功能数字钟,包括基本的时钟,校时校分,整点报时功能。扩展闹钟,秒表,万年历,键盘输入功能。Abstract:FPGA-basedplatform,usingVeriloglanguagetodesignamulti-functionaldigitalclock,includingbasicfunctionofclock,schoolhours,schoolminut
2、es,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扫描显示模块73.6秒表模块93.7闹钟模块103.8万年历模块123.9键盘扫描
3、模块134调试仿真155编程下载166结论167参考文献178实验感想179源代码17311设计要求基于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,)。提
4、高部分要求:添加按键:K4,K5分别为设置位选择,设置位加一。K6,K7为组合功能选择,当K6K7值:(11)为时钟功能,(10)为秒表功能,(01)为闹钟设置,(00)为万年历功能。1.闹时功能,按动方式键,使电路工作于预置状态,此时显示器与时钟脱开,而与预置计数器相连,利用前面手动校时,校分方式进行预置,预置后回到正常模式。当计时计至预置的时间时,扬声器发出闹铃信号,时间为半分钟,闹铃信号可以用开关“止闹”,按下此开关后,闹铃声立刻中止,正常情况下应将此开关释放,否则无闹时作用。2.秒表功能。按start键开始计秒,按stop键停止计秒并保持显示数不变,直到复位信号加入。3.万年历功能
5、,4.使用4*4矩阵键盘输入设置信号2设计方案选择及思路分析由于之前参加过华为杯电子设计大赛,当时采用的是VerilogHDL语言,而且EDA实验一曾经做过用器件搭数字钟的实验,如果再用原理图方法的话没有挑战性,而且VerilogHDL语言更为灵活方便,因此决定采用其完成本次电子设计。设计的总体部分按照要求可以分为基本模块:分频模块、时钟计时及调整模31块、扫描显示。附加模块:万年历、整点报时、闹钟功能和秒表功能。其总体设计框图如下:嗡鸣器闹钟报时秒表日月年计数分频秒分时计数扫描显示3各子模块设计原理和分析3.1分频模块初步分析后面所需要的信号频率,分频器的功能主要有4个:分别是产生计时用
6、的标准秒脉冲1HZ信号;闹钟及万年历设置时用的2HZ闪烁信号整点报时及显示扫描用的1kHZ高音频信号和500HZ低音频信号。分析系统时钟为48M,经过48K的分频后得到1K信号,再经过2分频可以得到500HZ方波,1K经过5分频得到200HZ信号,最后100分频得到的2HZ信号,再2分频得到1HZ的时钟。原理框图如下图5所示。1HZ2HZ200HZ1K48M500HZ图5分频信号框图Verilog设计分频器很简单,在偶数分频时,在输入脉冲下直接计数到所分频数的一半,然后翻转即可。如:31always@(posedgeclk)beginf1k<=(count48k<48000/2)?1'b1
7、:1'b0;if(count48k==48000-1)count48k<=0;elsecount48k<=count48k+1;end但是奇数分频则要复杂得多,若奇数分频不要求占空比为50%,原理同偶数分频,可计数到(N-1)/2翻转,此时占空比接近50%。但如果要求占空比为准确的50%,通过查阅资料得知也可以实现的。原理如下图always@(posedgef1k)//上升沿计数if(count5p==4)count5p