您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 华科-数电课设-基于basys2的数字时钟
/***********************************verilog*************************************/moduleclock_final(clk,clr,switch,ad,adj,o_seg,a);inputclk,clr,switch,ad;input[3:0]adj;//output[2:0]led;//led灯output[6:0]o_seg;//7段数码管output[3:0]a;//扫描输出reg[6:0]segs;//数码管寄存器reg[3:0]a;reg[15:0]temp;//显示过程的中间变量wire[23:0]cnt;//走时模式和校时模式临时变量wireen0,enp1,enp2,enp3,enp4,enp5,cp1hz,cp,out_500hz;//switch-N3转换信号分两个屏一个是小时/分钟,一个是分钟/秒//clr-E2清零信号//adj[3]控制小时的十位设置//adj[2]控制小时的个位设置//adj[1]控制分钟的十位设置//adj[0]控制分钟的个位设置initialbegina=4'b1110;end//初始化assigncp=cp1hz,//判断ad是否等于1,如果等于,cp就输出cp10hz否则就输出cp1hz,en0=(~ad)|(switch&adj[0]),enp1=~ad?(cnt[3:0]==4'd9):(adj[1]&switch),enp2=~ad?(cnt[7:4]==4'd5)&(cnt[3:0]==4'd9):(adj[0]&switch==0),enp3=~ad?(enp2&(cnt[11:8]==4'd9)):(adj[1]&switch==0),enp4=~ad?(enp3&(cnt[15:12]==4'd5)):(adj[2]&switch==0),enp5=~ad?(enp4&((cnt[19:16]==4'd9)|(cnt[23:20]==4'b0010&cnt[19:16]==4'd3))):(adj[3]&switch==0),o_seg=segs;in50MHz_out1Hzu0(clk,cp1hz);//输出频率1HZin50MHz_out_8MHzu7(clk,out_500hz);//输出500HZcounter10u1(en0,clr,cp,cnt[3:0]);//second个位计数counter6u2(enp1,clr,cp,cnt[7:4]);//second十位计数counter10u3(enp2,clr,cp,cnt[11:8]);//minutes个位计数counter6u4(enp3,clr,cp,cnt[15:12]);//minutes十位计数counter10_hu5(enp4,clr,cp,cnt[19:16],cnt[23:20]);//hours个位计数counter3u6(enp5,clr,cp,cnt[23:20]);//hours十位计数//////always@(ad)begin//显示模式选择//if((~ad))begintemp[15:0]=cnt1[15:0];temp[31:16]=cnt1[23:8];end//elsebegintemp[15:0]=cnt;temp[31:16]=cnt[23:8];end//endalways@(posedgeclk)beginif(switch==1'b0)temp=cnt[23:8];elseif(switch==1'b1)temp=cnt[15:0];endalways@(posedgeout_500hz)beginif(a==4'b1110)a=4'b1101;//M13elseif(a==4'b1101)a=4'b1011;//J12elseif(a==4'b1011)a=4'b0111;//F12elsea=4'b1110;//K14endalways@(posedgeclk)//数码管显示译码if(switch==1'b0)beginif(a==4'b1110)//K14begincase(temp[3:0])4'd0:segs=7'b1000000;//04'd1:segs=7'b1111001;//14'd2:segs=7'b0100100;4'd3:segs=7'b0110000;4'd4:segs=7'b0011001;4'd5:segs=7'b0010010;4'd6:segs=7'b0000010;4'd7:segs=7'b1111000;4'd8:segs=7'b0000000;4'd9:segs=7'b0010000;//9defaultsegs=7'b1111111;endcaseendelseif(a==4'b1101)//M13begincase(temp[7:4])4'd0:segs=7'b1000000;4'd1:segs=7'b1111001;4'd2:segs=7'b0100100;4'd3:segs=7'b0110000;4'd4:segs=7'b0011001;4'd5:segs=7'b0010010;defaultsegs=7'b1111111;endcaseendelseif(a==4'b1011)begincase(temp[11:8])//hours个位4'h0:segs=7'b1000000;4'h1:segs=7'b1111001;4'h2:segs=7'b0100100;4'h3:segs=7'b0110000;4'h4:segs=7'b0011001;4'h5:segs=7'b0010010;4'h6:segs=7'b0000010;4'h7:segs=7'b1111000;4'h8:segs=7'b0000000;4'h9:segs=7'b0010000;4'ha:segs=7'b0001000;defaultsegs=7'b1111111;endcaseendelseif(a==4'b0111)begincase(temp[15:12])//hours十位4'h0:segs=7'b1000000;4'h1:segs=7'b1111001;4'h2:segs=7'b0100100;defaultsegs=7'b1111111;endcaseendendelseif(switch==1)beginif(a==4'b1110)begincase(temp[3:0])4'd0:segs=7'b1000000;4'd1:segs=7'b1111001;4'd2:segs=7'b0100100;4'd3:segs=7'b0110000;4'd4:segs=7'b0011001;4'd5:segs=7'b0010010;4'd6:segs=7'b0000010;4'd7:segs=7'b1111000;4'd8:segs=7'b0000000;4'd9:segs=7'b0010000;defaultsegs=7'b1111111;endcaseendelseif(a==4'b1101)begincase(temp[7:4])4'd0:segs=7'b1000000;4'd1:segs=7'b1111001;4'd2:segs=7'b0100100;4'd3:segs=7'b0110000;4'd4:segs=7'b0011001;4'd5:segs=7'b0010010;//4'd6:segs=7'b0000010;//4'd7:segs=7'b1111000;//4'd8:segs=7'b0000000;//4'd9:segs=7'b0010000;defaultsegs=7'b1111111;endcaseendelseif(a==4'b1011)begincase(temp[11:8])4'd0:segs=7'b1000000;4'd1:segs=7'b1111001;4'd2:segs=7'b0100100;4'd3:segs=7'b0110000;4'd4:segs=7'b0011001;4'd5:segs=7'b0010010;4'd6:segs=7'b0000010;4'd7:segs=7'b1111000;4'd8:segs=7'b0000000;4'd9:segs=7'b0010000;defaultsegs=7'b1111111;endcaseendelseif(a==4'b0111)begincase(temp[15:12])4'd0:segs=7'b1000000;4'd1:segs=7'b1111001;4'd2:segs=7'b0100100;4'd3:segs=7'b0110000;4'd4:segs=7'b0011001;4'd5:segs=7'b0010010;defaultsegs=7'b1111111;endcaseendendendmodule/***************分频模块***********************************************///分频模块1Hzmodulein50MHz_out1Hz(in_50MHz,out_1Hz);inputin_50MHz;outputout_1Hz;regout_1Hz;reg[31:0]cnt;//usecnttocountalways@(posedgein_50MHz)beginif(cnt32'd24999999)//计数到24999999begincnt=cnt+1'B1;endelsebegincnt=32'b0;out_1Hz=~out_1Hz;//频率为1HZendendendmodulemodulein50MHz_out_8MHz(in_50MHz,out_500hz);inputin_50MHz;outputout_500hz;regout_500hz;reg[31:0]cnt;//usecnttocountalways@(posedgein_50MHz)beginif(cnt32'd50000)//begincnt=cnt+1'B1;endelsebegincnt=32'b0;out_500hz=~out_500hz;//频率为1HZendendendmodule//counter10(0~9)modulecounter10(en,clr,clk,q);inputen,clr,clk;output[3:0]q;reg[3:0]q;always@(posedgeclk)beginif(clr)q=4'd0;//clr=0时,清零elseif(~en)q=q;//EN=0,暂停计数elseif(q==4'b1001)q=4'b0000;elseq=q+1;//计数器加1endendmodule//counter10(时针个位)modulecounter10_h(en,clr,clk,q,p);inputen,clr,clk;input[3:0]p;output[3:0]q;reg[3:0]q;always@(posedgeclk)beginif(clr)q=4'd0;//clr=0时,清零elseif(~en)q=q;//EN=0,暂停计数elseif(p==4'b0010&q==4'b0011)q=4'b0000;elseif((q==4'b1001)&~(p==4'b0010))q=4'b0000;elseq=q+1;//计数器加1endendmodule/*****************计数模块********************************************/
本文标题:华科-数电课设-基于basys2的数字时钟
链接地址:https://www.777doc.com/doc-4398237 .html