数字时钟的Verilog代码_第1页
数字时钟的Verilog代码_第2页
数字时钟的Verilog代码_第3页
数字时钟的Verilog代码_第4页
数字时钟的Verilog代码_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字时钟的Verilog代码功能说明:可准确计时可按键复位可模式切换是正常计数还是调整秒位,或调整分位或小时位,再按置数键可调整切换为调整模式时,相应的被调整位会2Hz的闪烁注:我的FPGA开发板时钟为33.8688Mhz我的主体代码里的信号都是1有效,但开发板按键按下去时是置0,所以我在主体代码的前面都使用了反相器。代码均调试成功,没有任何问题,同学们可以放心复制粘贴。模块说明主体代码按键消抖模块分频器模块我的主题代码中嵌入了按键消抖模块,按键消抖中又嵌入了分频器。请阅读此文档的同学不要漏加,否则不能正常工作代码主体代码moduleclock(seg7,scan,clk,clr1,mode2,inc2);output[7:0]seg7;output[5:0]scan;inputclk;//时钟输入20MHzinputclr1;//清零端inputmode2;//控制信号,用于选择模式inputinc2;//置数信号//按键全部反逻辑wireclr,mode,inc;assignclr=~clr1;wiremode1,inc1;assignmode=~mode1;assigninc=~inc1;reg[7:0]seg7;//8段显示控制信号(abcdefg.dp)reg[5:0]scan;//数码管地址选择信号reg[1:0]state;//定义4种状态reg[3:0]qhh,qhl,qmh,qml,qsh,qsl;//小时、分、秒的高位和低位reg[3:0]data;reg[2:0]cnt;//扫描数码管的计数器regclk1khz,clk1hz,clk2hz;//1kHz、1Hz、2Hz的分频信号reg[2:0]blink;//闪烁信号reginc_reg;//按键置数寄存器reg[7:0]sec,min;//定义按键置数时的时分秒寄存器reg[7:0]hour;parameterstate0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;//状态0-3定义reg[14:0]n1;reg[24:0]n2;reg[23:0]n3;//----------------------按键消抖-----------------------------IP_ButtonDebouncem1(.clk(clk),.rst(clr),.BTN0(mode2),.BTN_DEB(mode1));IP_ButtonDebouncem2(.clk(clk),.rst(clr),.BTN0(inc2),.BTN_DEB(inc1));assignmode=~mode1;assigninc=~inc1;//-----------------------------800Hz分频,用于扫描数码管地址--------always@(posedgeclkorposedgeclr)begin if(clr)begin clk1khz<=0; n1<=0; end elseif(n1==42336/2-1)begin clk1khz<=~clk1khz; n1<=0; end elsen1<=n1+1;end //----------------------1Hz分频,用于计时-----------------------------always@(posedgeclkorposedgeclr)begin if(clr)begin clk1hz<=0; n2<=0; end elseif(n2==33868800/2-1)begin clk1hz<=~clk1hz; n2<=0; end elsen2<=n2+1;end//----------------------2Hz分频,用于闪烁-----------------------------always@(posedgeclkorposedgeclr)begin if(clr)begin clk2hz<=0; n3<=0; end elseif(n3==16934400/2-1)begin clk2hz<=~clk2hz; n3<=0; end elsen3<=n3+1;end//-------------------------模式转换-------------------------always@(posedgemodeorposedgeclr)begin if(clr)begin state<=2'b00; end elsebegin if(state==2'b11)begin state<=2'b00; end elsebegin state<=state+1; end endend//-------------------------状态控制-----------------------------always@(posedgeclk1hzorposedgeclr)begin if(clr)begin hour<=7'b0000000; min<=7'b0000000; sec<=7'b0000000; inc_reg<=0; end elsebegin case(state) state0:begin//模式0,正常计时 if(sec==8'd59) begin sec<=8'd0; if(min==8'd59)begin min<=8'd0; if(hour==8'd23)begin hour<=8'd0; end elsebegin hour<=hour+1; end end elsebegin min<=min+1; end end elsebegin sec<=sec+1; end end state1:begin//模式1,设定小时时间 if(inc) begin//如果置数键按下 if(!inc_reg)begin//如果置数寄存器值为0 inc_reg<=1;//置数寄存器值置1 if(hour==8'd23)begin hour<=8'd0; end elsebegin hour<=hour+1; end end end elsebegin//如果置数键未按下 inc_reg<=0;//置数寄存器还是为0 end end state2:begin//模式2,设定分钟时间 if(inc)begin if(!inc_reg)begin inc_reg<=1; if(min==8'd59)begin min<=8'd0; end elsebegin min<=min+1; end end end elsebegin inc_reg<=0; end end state3:begin//模式3,设定秒钟时间 if(inc)begin if(!inc_reg)begin inc_reg<=1; if(sec==8'd59)begin sec<=8'd0; end elsebegin sec<=sec+1; end end end elsebegin inc_reg<=0; end end endcase endend//--------------------------------当进行时间设定时,令数码管闪烁-----------------------always@(state,clk2hz,clr)beginif(clr)beginblink[2:0]<=3'b111;endelsebegincase(state) state0:blink[2:0]<=3'b111;//正常计数时,闪烁信号全为1 state1:blink[2]<=clk2hz; state2:blink[1]<=clk2hz; state3:blink[0]<=clk2hz; default:blink[2:0]<=3'b111;//默认为1endcaseendend//--------------------------秒计数的十进制转BCD码---------------------------always@(sec,clr)beginif(clr)beginqsh[3:0]<=4'b0000;qsl[3:0]<=4'b0000;endelsebegincase(sec[7:0])8'd0:beginqsh[3:0]<='b0000;qsl[3:0]<='b0000;end8'd1:beginqsh[3:0]<='b0000;qsl[3:0]<='b0001;end8'd2:beginqsh[3:0]<='b0000;qsl[3:0]<='b0010;end8'd3:beginqsh[3:0]<='b0000;qsl[3:0]<='b0011;end8'd4:beginqsh[3:0]<='b0000;qsl[3:0]<='b0100;end8'd5:beginqsh[3:0]<='b0000;qsl[3:0]<='b0101;end8'd6:beginqsh[3:0]<='b0000;qsl[3:0]<='b0110;end8'd7:beginqsh[3:0]<='b0000;qsl[3:0]<='b0111;end8'd8:beginqsh[3:0]<='b0000;qsl[3:0]<='b1000;end8'd9:beginqsh[3:0]<='b0000;qsl[3:0]<='b1001;end8'd10:beginqsh[3:0]<='b0001;qsl[3:0]<='b0000;end8'd11:beginqsh[3:0]<='b0001;qsl[3:0]<='b0001;end8'd12:beginqsh[3:0]<='b0001;qsl[3:0]<='b0010;end8'd13:beginqsh[3:0]<='b0001;qsl[3:0]<='b0011;end8'd14:beginqsh[3:0]<='b0001;qsl[3:0]<='b0100;end8'd15:beginqsh[3:0]<='b0001;qsl[3:0]<='b0101;end8'd16:beginqsh[3:0]<='b0001;qsl[3:0]<='b0110;end8'd17:beginqsh[3:0]<='b0001;qsl[3:0]<='b0111;end8'd18:beginqsh[3:0]<='b0001;qsl[3:0]<='b1000;end8'd19:beginqsh[3:0]<='b0001;qsl[3:0]<='b1001;end8'd20:beginqsh[3:0]<='b0010;qsl[3:0]<='b0000;end8'd21:beginqsh[3:0]<='b0010;qsl[3:0]<='b0001;end8'd22:beginqsh[3:0]<='b0010;qsl[3:0]<='b0010;end8'd23:beginqsh[3:0]<='b0010;qsl[3:0]<='b0011;end8'd24:beginqsh[3:0]<='b0010;qsl[3:0]<='b0100;end8'd25:beginqsh[3:0]<='b0010;qsl[3:0]<='b0101;end8'd26:beginqsh[3:0]<='b0010;qsl[3:0]<='b0110;end8'd27:beginqsh[3:0]<='b0010;qsl[3:0]<='b0111;end8'd28:beginqsh[3:0]<='b0010;qsl[3:0]<='b1000;end8'd29:beginqsh[3:0]<='b0010;qsl[3:0]<='b1001;end8'd30:beginqsh[3:0]<='b0011;qsl[3:0]<='b0000;end8'd31:beginqsh[3:0]<='b0011;qsl[3:0]<='b0001;end8'd32:beginqsh[3:0]<='b0011;qsl[3:0]<='b0010;end8'd33:beginqsh[3:0]<='b0011;qsl[3:0]<='b0011;end8'd34:beginqsh[3:0]<='b0011;qsl[3:0]<='b0100;end8'd35:beginqsh[3:0]<='b0011;qsl[3:0]<='b0101;end8'd36:beginqsh[3:0]<='b0011;qsl[3:0]<='b0110;end8'd37:beginqsh[3:0]<='b0011;qsl[3:0]<='b0111;end8'd38:beginqsh[3:0]<='b0011;qsl[3:0]<='b1000;end8'd39:beginqsh[3:0]<='b0011;qsl[3:0]<='b1001;end8'd40:beginqsh[3:0]<='b0100;qsl[3:0]<='b0000;end8'd41:beginqsh[3:0]<='b0100;qsl[3:0]<='b0001;end8'd42:beginqsh[3:0]<='b0100;qsl[3:0]<='b0010;end8'd43:beginqsh[3:0]<='b0100;qsl[3:0]<='b0011;end8'd44:beginqsh[3:0]<='b0100;qsl[3:0]<='b0100;end8'd45:beginqsh[3:0]<='b0100;qsl[3:0]<='b0101;end8'd46:beginqsh[3:0]<='b0100;qsl[3:0]<='b0110;end8'd47:beginqsh[3:0]<='b0100;qsl[3:0]<='b0111;end8'd48:beginqsh[3:0]<='b0100;qsl[3:0]<='b1000;end8'd49:beginqsh[3:0]<='b0100;qsl[3:0]<='b1001;end8'd50:beginqsh[3:0]<='b0101;qsl[3:0]<='b0000;end8'd51:beginqsh[3:0]<='b0101;qsl[3:0]<='b0001;end8'd52:beginqsh[3:0]<='b0101;qsl[3:0]<='b0010;end8'd53:beginqsh[3:0]<='b0101;qsl[3:0]<='b0011;end8'd54:beginqsh[3:0]<='b0101;qsl[3:0]<='b0100;end8'd55:beginqsh[3:0]<='b0101;qsl[3:0]<='b0101;end8'd56:beginqsh[3:0]<='b0101;qsl[3:0]<='b0110;end8'd57:beginqsh[3:0]<='b0101;qsl[3:0]<='b0111;end8'd58:beginqsh[3:0]<='b0101;qsl[3:0]<='b1000;end8'd59:beginqsh[3:0]<='b0101;qsl[3:0]<='b1001;enddefault:beginqsh[3:0]<=4'b0000;qsl[3:0]<='b0;endendcaseendend//---------------------------分计数的十进制转BCD码--------------------always@(min,clr)beginif(clr)beginqmh[3:0]<='b0000;qml[3:0]<='b0000;endelsebegincase(min[7:0])8'd0:beginqmh[3:0]<='b0000;qml[3:0]<='b0000;end8'd1:beginqmh[3:0]<='b0000;qml[3:0]<='b0001;end8'd2:beginqmh[3:0]<='b0000;qml[3:0]<='b0010;end8'd3:beginqmh[3:0]<='b0000;qml[3:0]<='b0011;end8'd4:beginqmh[3:0]<='b0000;qml[3:0]<='b0100;end8'd5:beginqmh[3:0]<='b0000;qml[3:0]<='b0101;end8'd6:beginqmh[3:0]<='b0000;qml[3:0]<='b0110;end8'd7:beginqmh[3:0]<='b0000;qml[3:0]<='b0111;end8'd8:beginqmh[3:0]<='b0000;qml[3:0]<='b1000;end8'd9:beginqmh[3:0]<='b0000;qml[3:0]<='b1001;end8'd10:beginqmh[3:0]<='b0001;qml[3:0]<='b0000;end8'd11:beginqmh[3:0]<='b0001;qml[3:0]<='b0001;end8'd12:beginqmh[3:0]<='b0001;qml[3:0]<='b0010;end8'd13:beginqmh[3:0]<='b0001;qml[3:0]<='b0011;end8'd14:beginqmh[3:0]<='b0001;qml[3:0]<='b0100;end8'd15:beginqmh[3:0]<='b0001;qml[3:0]<='b0101;end8'd16:beginqmh[3:0]<='b0001;qml[3:0]<='b0110;end8'd17:beginqmh[3:0]<='b0001;qml[3:0]<='b0111;end8'd18:beginqmh[3:0]<='b0001;qml[3:0]<='b1000;end8'd19:beginqmh[3:0]<='b0001;qml[3:0]<='b1001;end8'd20:beginqmh[3:0]<='b0010;qml[3:0]<='b0000;end8'd21:beginqmh[3:0]<='b0010;qml[3:0]<='b0001;end8'd22:beginqmh[3:0]<='b0010;qml[3:0]<='b0010;end8'd23:beginqmh[3:0]<='b0010;qml[3:0]<='b0011;end8'd24:beginqmh[3:0]<='b0010;qml[3:0]<='b0100;end8'd25:beginqmh[3:0]<='b0010;qml[3:0]<='b0101;end8'd26:beginqmh[3:0]<='b0010;qml[3:0]<='b0110;end8'd27:beginqmh[3:0]<='b0010;qml[3:0]<='b0111;end8'd28:beginqmh[3:0]<='b0010;qml[3:0]<='b1000;end8'd29:beginqmh[3:0]<='b0010;qml[3:0]<='b1001;end8'd30:beginqmh[3:0]<='b0011;qml[3:0]<='b0000;end8'd31:beginqmh[3:0]<='b0011;qml[3:0]<='b0001;end8'd32:beginqmh[3:0]<='b0011;qml[3:0]<='b0010;end8'd33:beginqmh[3:0]<='b0011;qml[3:0]<='b0011;end8'd34:beginqmh[3:0]<='b0011;qml[3:0]<='b0100;end8'd35:beginqmh[3:0]<='b0011;qml[3:0]<='b0101;end8'd36:beginqmh[3:0]<='b0011;qml[3:0]<='b0110;end8'd37:beginqmh[3:0]<='b0011;qml[3:0]<='b0111;end8'd38:beginqmh[3:0]<='b0011;qml[3:0]<='b1000;end8'd39:beginqmh[3:0]<='b0011;qml[3:0]<='b1001;end8'd40:beginqmh[3:0]<='b0100;qml[3:0]<='b0000;end8'd41:beginqmh[3:0]<='b0100;qml[3:0]<='b0001;end8'd42:beginqmh[3:0]<='b0100;qml[3:0]<='b0010;end8'd43:beginqmh[3:0]<='b0100;qml[3:0]<='b0011;end8'd44:beginqmh[3:0]<='b0100;qml[3:0]<='b0100;end8'd45:beginqmh[3:0]<='b0100;qml[3:0]<='b0101;end8'd46:beginqmh[3:0]<='b0100;qml[3:0]<='b0110;end8'd47:beginqmh[3:0]<='b0100;qml[3:0]<='b0111;end8'd48:beginqmh[3:0]<='b0100;qml[3:0]<='b1000;end8'd49:beginqmh[3:0]<='b0100;qml[3:0]<='b1001;end8'd50:beginqmh[3:0]<='b0101;qml[3:0]<='b0000;end8'd51:beginqmh[3:0]<='b0101;qml[3:0]<='b0001;end8'd52:beginqmh[3:0]<='b0101;qml[3:0]<='b0010;end8'd53:beginqmh[3:0]<='b0101;qml[3:0]<='b0011;end8'd54:beginqmh[3:0]<='b0101;qml[3:0]<='b0100;end8'd55:beginqmh[3:0]<='b0101;qml[3:0]<='b0101;end8'd56:beginqmh[3:0]<='b0101;qml[3:0]<='b0110;end8'd57:beginqmh[3:0]<='b0101;qml[3:0]<='b0111;end8'd58:beginqmh[3:0]<='b0101;qml[3:0]<='b1000;end8'd59:beginqmh[3:0]<='b0101;qml[3:0]<='b1001;enddefault:beginqmh[3:0]<='b0;qml[3:0]<='b0;endendcaseendend//----------------------------小时计数的十进制转BCD码------------------------always@(hour,clr)beginif(clr)beginqhh[3:0]<='b0000;qhl[3:0]<='b0000;endelsebegincase(hour)8'd0:beginqhh[3:0]<='b0000;qhl[3:0]<='b0000;end8'd1:beginqhh[3:0]<='b0000;qhl[3:0]<='b0001;end8'd2:beginqhh[3:0]<='b0000;qhl[3:0]<='b0010;end8'd3:beginqhh[3:0]<='b0000;qhl[3:0]<='b0011;end8'd4:beginqhh[3:0]<='b0000;qhl[3:0]<='b0100;end8'd5:beginqhh[3:0]<='b0000;qhl[3:0]<='b0101;end8'd6:beginqhh[3:0]<='b0000;qhl[3:0]<='b0110;end8'd7:beginqhh[3:0]<='b0000;qhl[3:0]<='b0111;end8'd8:beginqhh[3:0]<='b0000;qhl[3:0]<='b1000;end8'd9:beginqhh[3:0]<='b0000;qhl[3:0]<='b1001;end8'd10:beginqhh[3:0]<='b0001;qhl[3:0]<='b0000;end8'd11:beginqhh[3:0]<='b0001;qhl[3:0]<='b0001;end8'd12:beginqhh[3:0]<='b0001;qhl[3:0]<='b0010;end8'd13:beginqhh[3:0]<='b0001;qhl[3:0]<='b0011;end8'd14:beginqhh[3:0]<='b0001;qhl[3:0]<='b0100;end8'd15:beginqhh[3:0]<='b0001;qhl[3:0]<='b0101;end8'd16:beginqhh[3:0]<='b0001;qhl[3:0]<='b0110;end8'd17:beginqhh[3:0]<='b0001;qhl[3:0]<='b0111;end8'd18:beginqhh[3:0]<='b0001;qhl[3:0]<='b1000;end8'd19:beginqhh[3:0]<='b0001;qhl[3:0]<='b1001;end8'd20:beginqhh[3:0]<='b0010;qhl[3:0]<='b0000;end8'd21:beginqhh[3:0]<='b0010;qhl[3:0]<='b0001;end8'd22:beginqhh[3:0]<='b0010;qhl[3:0]<='b0010;end8'd23:beginqhh[3:0]<='b0010;qhl[3:0]<='b0011;enddefault:beginqhh[3:0]<='b0;qhl[3:0]<='b0;endendcaseendend//------------------------------数码管动态扫描-------------------------------------always@(posedgeclk1khzorposedgeclr)begin if(clr)begin cnt<=3'b000; scan<=6'b111111; data<=4'b0000; end elseif(clk1khz)begin if(cnt==3'b101)cnt<=3'b000; elsecnt<=cnt+1; case(cnt) 3'b000:begindata[3:0]<=qsl[3:0];scan[5:0]<=6'b000001&{6{blink[0]}};end 3'b001:begindata[3:0]<=qsh[3:0];scan[5:0]<=6'b000010&{6{blink[0]}};end 3'b010:begindata[3:0]<=qml[3:0];scan[5:0]<=6'b000100&{6{blink[1]}};end 3'b011:begindata[3:0]<=qmh[3:0];scan[5:0]<=6'b001000&{6{blink[1]}};end 3'b100:begindata[3:0]<=qhl[3:0];scan[5:0]<=6'b010000&{6{blink[2]}};end 3'b101

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论