wangguojun 发表于 2012-4-5 09:20:38

FPGA设计的电子时钟verilog语言

我用verilog语言设计的电子时钟程序,烧写到开发板中,分钟和秒钟的走时正常,可是小时的两个数码管始终没有显示,分钟计到59后,小时也不计1,始终显示00,请求那位高手帮我解决一下!万分感谢。
module clock_ver1(clr_key,clk,segdat,sl);
input clr_key;//复位信号,低电平有效
input clk;//系统时钟20MHZ
outputsegdat;//八段数码管显示输出
outputsl;//数码管位选
regcount;//对系统时钟进行计数
regsec,min,hou;//分、秒的八位寄存器
regsegdat_reg;//数码管显示输出寄存器
regsl_reg;//数码管位选寄存器
regdisp_dat;//数码管分、秒显示
reg second;//分频后产生1HZ的秒信号
reg cn;//秒向分的进位,高有效
reg cn_hou;//分向时进位信号
//对系统时钟进行分频,产生1HZ信号
always@(posedge clk)
   begin
   count<=count+1'b1;
   if(count==25'd99999)
      begin
                count<=25'h000000;
                second<=~second;
      end
   end
//***********************************************************************//
//利用计数器的第十二、十三位选中分、秒
always@(count)
   begin
        case(count)
        3'b000:disp_dat<=sec;
        3'b001:disp_dat<=sec;
        3'b010:disp_dat<=min;
        3'b011:disp_dat<=min;
        3'b100:disp_dat<=hou;
        3'b101:disp_dat<=hou;
        default: disp_dat <= 4'bx;
        endcase
   end
//************************************************************************//
//八段数码管显示输出
always@(disp_dat)
   begin
        case(disp_dat)
        4'h0:segdat_reg<=8'hc0;
        4'h1:segdat_reg<=8'hf9;
        4'h2:segdat_reg<=8'ha4;
        4'h3:segdat_reg<=8'hb0;
        4'h4:segdat_reg<=8'h99;
        4'h5:segdat_reg<=8'h92;
        4'h6:segdat_reg<=8'h82;
        4'h7:segdat_reg<=8'hf8;
        4'h8:segdat_reg<=8'h80;
        4'h9:segdat_reg<=8'h90;
        default: segdat_reg <= 8'hx;
        endcase
   /*if((count==2'b10)&second)
   segdat_reg=segdat_reg&8'b01111111;*/
end
//***************************************************************************//
//位选
always@(count)
begin
        case(count)
        3'b000:sl_reg<=6'b111110;
        3'b001:sl_reg<=6'b111101;
        3'b010:sl_reg<=6'b111011;
        3'b011:sl_reg<=6'b110111;
        3'b100:sl_reg<=6'b101111;
        3'b101:sl_reg<=6'b011111;
        default:sl_reg<=6'bx;
        endcase
end
//****************************************************************************//
//秒计时
always@(posedge second )
begin
    if(!clr_key)//复位
      begin
                sec<=8'h0;
                cn<=0;
      end
    else
      begin
                        cn<=0;
                        sec<=sec+1;
                        if(sec==4'd9)//秒低位计到十
            begin
                                sec<=4'd0;
                                sec<=sec+1;
                                if(sec==4'd5 && sec==4'd9)//秒高位计到六
                  begin
                                        sec<=4'd0;
                                        cn<=1'd1;
                  end
            end
      end
    end
//*******************************************************************//
//秒向分产生进位信号cn
always@(posedge cn)
begin
    if(!clr_key)
      begin
       min<=8'h0;
      end
    else
      begin
                min<=min+1'b1;
                if(min==4'd9)
          begin
                        min<=4'd0;
                        min<=min+1'b1;
                        if(min==4'd5 && min == 4'd9)
            begin
               min<=4'd0;
               cn_hou <= 1'd1;
            end
          end
      end
end
//*****************************************************************
//分向时产生进位信号an
always@(posedge cn_hou)
   begin
   if(!clr_key)
       begin
      hou<=0;
       end
    else
      begin
      hou<=hou+1'b1;
      if(hou==4'd9)
          begin
            hou<=4'd0;
            hou<=hou+1'b1;
          end
            if(hou==4'd2 && hou==4'd3)
            begin
               hou<=8'h0;
            end
            else
               hou<=hou+1'b1;
       end
   end

assign segdat=segdat_reg;
assign sl=sl_reg;
endmodule

zxopenljx 发表于 2021-2-21 17:34:24

FPGA设计的电子时钟verilog语言

大鹏 发表于 2021-2-25 15:55:11

FPGA设计的电子时钟verilog语言

508482294 发表于 2021-12-4 18:15:43

FPGA设计的电子时钟verilog语言

大鹏 发表于 2021-12-5 14:08:08

FPGA设计的电子时钟verilog语言
页: [1]
查看完整版本: FPGA设计的电子时钟verilog语言