资源描述:
《多功能数字钟的Verilog描述.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、l多功能数字钟的Verilog描述ll信号定义:clk:标准时钟信号,本例中,其频率为4Hz;clk_1k:产生闹铃音、报时音的时钟信号,本例中其频率为1024Hz;mode:功能控制信号;为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn:接按键,在手动校时功能时,选择是调整小时,还是分钟;若长时间按住该键,还可使秒信号清零,用于精确调时;change:接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快速加1,用于快速调时和定时;hour,min,sec:此三信号分别输出并显示时、分、秒信号,皆采用BCD码计数,分别驱动6
2、个数码管显示时间;alert:输出到扬声器的信号,用于产生闹铃音和报时音;闹铃音为持续20秒的急促的“嘀嘀嘀”音,若按住“change”键,则可屏蔽该音;整点报时音为“嘀嘀嘀嘀—嘟”四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_hour:接发光二极管,指示当前调整的是小时信号;LD_min:接发光二极管,指示当前调整的是分钟信号。*/moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_min);inputclk,
3、clk_1k,mode,change,turn;outputalert,LD_alert,LD_hour,LD_min;output[7:0]hour,min,sec;reg[7:0]hour,min,sec,hour1,min1,sec1,ahour,amin;reg[1:0]m,fm,num1,num2,num3,num4;reg[1:0]loop1,loop2,loop3,loop4,sound;王金明:《VerilogHDL程序设计教程》-65-regLD_hour,LD_min;regclk_1Hz,clk_2Hz,minclk,hc
4、lk;regalert1,alert2,ear;regcount1,count2,counta,countb;wirect1,ct2,cta,ctb,m_clk,h_clk;always@(posedgeclk)beginclk_2Hz<=~clk_2Hz;if(sound==3)beginsound<=0;ear<=1;end//ear信号用于产生或屏蔽声音elsebeginsound<=sound+1;ear<=0;endendalways@(posedgeclk_2Hz)//由4Hz的输入时钟产生1Hz的时基信号clk_1Hz<=~clk
5、_1Hz;always@(posedgemode)//mode信号控制系统在三种功能间转换beginif(m==2)m<=0;elsem<=m+1;endalways@(posedgeturn)fm<=~fm;always//该进程产生count1,count2,counta,countb四个信号begincase(m)2:beginif(fm)begincount1<=change;{LD_min,LD_hour}<=2;endelsebegincounta<=change;{LD_min,LD_hour}<=1;end{count2,cou
6、ntb}<=0;end1:beginif(fm)begincount2<=change;{LD_min,LD_hour}<=2;endelsebegincountb<=change;{LD_min,LD_hour}<=1;end{count1,counta}<=2'b00;enddefault:{count1,count2,counta,countb,LD_min,LD_hour}<=0;endcaseend程序文本-66-always@(negedgeclk)//如果长时间按下“change”键,则生成“num1”信号用于连续快速加1if(c
7、ount2)beginif(loop1==3)num1<=1;elsebeginloop1<=loop1+1;num1<=0;endendelsebeginloop1<=0;num1<=0;endalways@(negedgeclk)//产生num2信号if(countb)beginif(loop2==3)num2<=1;elsebeginloop2<=loop2+1;num2<=0;endendelsebeginloop2<=0;num2<=0;endalways@(negedgeclk)if(count1)beginif(loop3==3)
8、num3<=1;elsebeginloop3<=loop3+1;num3<=0;endendelsebeginloop3<=0;num3<=0;end