⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.v

📁 此设计采用Verilog HDL硬件语言设计,在掌宇开发板上实现. 将整个电路分为两个子模块
💻 V
字号:
/*--------小时、分钟和秒计时子模块 --------*/
//采用异步时钟计时
module timer(clk,reset,start,sec,min,hour,day);
  input clk,reset,start;
  output[7:0] sec,min,hour;
  output day;
  reg[7:0] sec,min,hour;
  reg min_clk,h_clk,day;
  reg started;                    // 中间变量,用于将脉冲信号转变为电平信号       
  always @(posedge clk or posedge reset or posedge start)  // ------(1)秒计时
    begin   
     if(reset)                    // 异步复位
       begin
         sec<=0;started<=0;       // 复位后,则秒计数器清零,且started为低电平,
                                  //使秒计数器维持0,则不会产生分时钟和小时时钟,故保证所有计数器为0。
       end
     else if(start) started<=1;   // 按下start,则started为高电平
     if(started)                  // 若已开始计数
       begin            
        if(sec==8'h59)            // 若计到59s
          begin
            sec[7:0]<=0;
            min_clk<=1;           // 则分时钟为1
          end
        else 
          begin
            if(sec[3:0]==9)
              begin
                sec[3:0]<=0;
                sec[7:4]<=sec[7:4]+1;
              end
            else sec[3:0]<=sec[3:0]+1;
            min_clk<=0;          // 否则分时钟为0
          end
      end
    end

  always @(posedge min_clk or posedge reset)  // ------(2)分计时
    begin 
      if(reset)                    // 异步复位
        min<=0; 
      else if(min==8'h59)          // 若计到59分
        begin
          min<=0;
          h_clk<=1;               // 则小时时钟为1
        end 
      else 
        begin
          if(min[3:0]==9 )
            begin 
              min[3:0]<=0;
              min[7:4]<=min[7:4]+1;
            end
          else min[3:0]<=min[3:0]+1;
          h_clk<=0;              // 否则小时时钟为0
        end
       end

  always @(posedge h_clk or posedge reset)  // ------(3)小时计时
    begin 
      if(reset)                  // 异步复位
         hour<=0;              
      else if(hour==8'h23)       // 若计到23小时
        begin
          hour<=0;
          day<=1;                // 则向一日进位
        end 
      else 
        begin
          if(hour[3:0]==9 )
            begin 
              hour[3:0]<=0;
              hour[7:4]<=hour[7:4]+1;
            end
          else hour[3:0]<=hour[3:0]+1;
          day<=0;                // 否则日时钟为0
        end
    end
      
endmodule              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -