资源描述:
《Verilog数字钟设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于FPGA实现多功能数字钟摘要本文利用VerilogHDL语言自顶向下的设计方法设计多功能数字钟,并通过ISE完成综合、仿真。此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中,实现了基本的计时显示和设置,调整时间,闹钟设置的功能。[关键词]FPGA;VerilogHDL;数字钟一、多功能数字钟的设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示。能够利用按键实现“较时”、“较分”功能,随时对数码管的显示进行校正和校对。数字中系统主要由系统时钟,三个功能
2、按键(mode,turn,change),FPGA,数码管和蜂鸣器部分组成。数码管显示模块分蜂频计时模块闹钟模块鸣模器Clk块控制模块图:多功能数字钟总体设计模块以下就各个模块说明其功能1.分频模块由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法。RTL图如下:代码如下://fenpinmodulefenpin(clk,clk_1Hz,clk_100Hz,clk_1k);outputclk_1Hz,clk_100Hz,clk_1k;inputclk;regcl
3、k_1Hz=0,clk_3=0,clk_1=0,clk_2=0,clk_1k=0;reg[6:0]cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;wireclk_100Hz;always@(posedgeclk)beginif(cnt1<156/2-1)/////////////////////////////////////////////156分频,生成1MHz信号begincnt1<=cnt1+1;endelsebegincnt1<=0;clk_1<=~clk_1;endendalways@(posedgeclk_
4、1)if(cnt2<156/2-1)/////////////////////////////////////100分频,生成10000Hz信号begincnt2<=cnt2+1;endelsebegincnt2<=0;clk_2<=~clk_2;endalways@(posedgeclk_2)if(cnt5<10/2-1)/////////////////////////////////////////10分频,生成1kHz标准信号begincnt5<=cnt5+1;endelsebegincnt5<=0;clk_1k<=~clk_1k;e
5、ndalways@(posedgeclk_2)if(cnt3<100/2-1)//////////////////////////////////////////100分频,生成100Hz信号begincnt3<=cnt3+1;endelsebegincnt3<=0;clk_3<=~clk_3;endassignclk_100Hz=clk_3;always@(posedgeclk_3)if(cnt4<100/2-1)/////////////////////////////////////////100分频,生成1Hz标准信号begincnt
6、4<=cnt4+1;endelsebegincnt4<=0;clk_1Hz<=~clk_1Hz;endendmodule最终输出的是1Hz,100Hz,1kHz的标准时钟信号clk_1Hz,clk_100Hz,clk_1k。2、计时模块原理:m是模式按键,当m=0时,进入计时模式,在计时模式下可以进行时间调整。num3,num4产生加速调整时间,当其值为1时,可以快速调整时间,该调整时间的频率由clk提供。counta,count1是手动调节时间。Turn接按键,可以改变当前调节的是小时还是分钟,长按turn键还可以使秒钟信号清零。sec1,
7、min1,hour1输出的是计时的秒,分,时。RTL图如下:代码如下://jishimodulejishi(clk,clk_1Hz,turn,////turn:接按键,在手动校时功能时,选择是调整小时,还是分钟;若长时间按住该键,还可使秒信号清零,用于精确调时mode,count1,counta,sec1,min1,hour1,num3,num4);inputclk,clk_1Hz,turn,num3,num4;inputmode;inputcount1,counta;output[7:0]sec1,min1;output[7:0]hour1
8、;wireclk_1Hz,ct1,cta,turn,num3,num4;reg[7:0]sec1=0,min1=0;reg[7:0]hour1=0;reg[1:0]