关于#数字时钟#的问题,如何解决?


module clock(
  input clk,           // 时钟信号
  output reg [3:0] hour, // 小时
  output reg [3:0] min,  // 分钟
  output reg [3:0] sec,  // 秒钟
  output reg [11:0] display // 数码管显示值
);

  reg [26:0] counter;   // 计数器,使用 27 位存储秒数

  // 秒数计数实现
  always @(posedge clk) begin
    if (counter == 27'd125000000) begin // 一个时钟周期为 1/50MHz,总周期为 1 秒
      counter <= 0;
      if (sec == 4'b1001) begin // 将秒钟计数到 59 后自动归零,累加分钟和小时
        sec <= 0;
        if (min == 4'b1001) begin
          min <= 0;
          if (hour == 4'b1001) begin
            hour <= 0;
          end
          else begin
            hour <= hour + 1;
          end
        end
        else begin
          min <= min + 1;
        end
      end
      else begin
        sec <= sec + 1;
      end
    end
    else begin
      counter <= counter + 1;
    end
  end

  // 将时分秒数值转换为数码管显示值
  wire [3:0] seg_sec = convert(seg(sec));   // 将秒钟数值转换为数码管显示值
  wire [3:0] seg_min = convert(seg(min));   // 将分钟数值转换为数码管显示值
  wire [3:0] seg_hour = convert(seg(hour)); // 将小时数值转换为数码管显示值
  
  // 将时分秒数值的七段数码管显示值拼接成一条 12 位的数据线
  assign display = {7'b0000001, seg_sec, 7'b0000001, seg_min, 7'b0000001, seg_hour};

  // 数码管转换实现
  function [3:0] convert;
    input [3:0] value;
    reg [3:0] result;
    begin
      case (value) // 数码管对应显示值
        4'b0000: result = 7'b1000000; // 0
        4'b0001: result = 7'b1111001; // 1
        4'b0010: result = 7'b0100100; // 2
        4'b0011: result = 7'b0110000; // 3
        4'b0100: result = 7'b0011001; // 4
        4'b0101: result = 7'b0010010; // 5
        4'b0110: result = 7'b0000010; // 6
        4'b0111: result = 7'b1111000; // 7
        4'b1000: result = 7'b0000000; // 8
        4'b1001: result = 7'b0010000; // 9
        default: result = 7'b0000001; // 其他
      endcase
      convert = result;
    end
  endfunction

endmodule

img


此问题该如何解决

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^