Advertisement
Guest User

Untitled

a guest
May 19th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module clocks (
  2.     input  wire   mclk,     // 25MHz input clock.
  3.     output wire [7:0] segments, // сегменты, включая точку.
  4.     output wire [5:0] digits    // общие катоды, 6 шт.
  5. );
  6.  
  7. // Переменные:
  8.     reg [24:0]  tima;
  9.     reg [06:0]  sec;
  10.     reg [06:0]  min;
  11.     reg [05:0]  hr;
  12.     reg [05:0]  digit;
  13.     reg [06:0]  seg;
  14.     reg [03:0]  num;
  15.     reg dot;
  16.     reg s_en = 1'b0;
  17.    
  18. // Получаем 1Гц.:
  19. always @ (posedge mclk) begin
  20.     if (tima==25'd24999999) begin tima <= 25'd0; s_en <= 1'b1; end
  21.         else begin tima <= tima + 1; s_en <= 1'b0;  end
  22. end
  23.  
  24. // Обработка секунд, минут, часов:
  25. always @ (posedge s_en)
  26. begin
  27.     if (sec < 8'h59) sec <= (sec[3:0] == 4'd9) ? sec+7 : sec+1;
  28.         else begin
  29.             sec <= 7'd0;
  30.             if (min < 8'h59) min <= (min[3:0] == 4'd9) ? min+7 : min+1;
  31.                 else begin
  32.                     min <= 7'd0;
  33.                     if(hr==6'd23) hr <= 0;
  34.                         else begin                 
  35.                             hr <= (hr[3:0] == 4'd9) ? hr+7 : hr+1;
  36.                         end
  37.                 end
  38.         end
  39. end
  40. //
  41. always @ (posedge mclk) begin
  42.     case (num)
  43.         4'd0:    seg[6:0] <= 7'b0000001;
  44.         4'd1:    seg[6:0] <= 7'b1001111;
  45.         4'd2:    seg[6:0] <= 7'b0010010;
  46.         4'd3:    seg[6:0] <= 7'b0000110;
  47.         4'd4:    seg[6:0] <= 7'b1001100;
  48.         4'd5:    seg[6:0] <= 7'b0100100;
  49.         4'd6:    seg[6:0] <= 7'b0100000;
  50.         4'd7:    seg[6:0] <= 7'b0001111;
  51.         4'd8:    seg[6:0] <= 7'b0000000;
  52.         4'd9:    seg[6:0] <= 7'b0000100;
  53.         default: seg[6:0] <= 7'b1111111;
  54.     endcase
  55. end    
  56.  
  57. always @ (posedge mclk) begin
  58.     if (tima[4]) begin
  59.         case (tima[7:5])
  60.             3'd0:   begin digit <= 6'b000001; num <= sec[3:0]; dot <= 1; end
  61.             3'd1:   begin digit <= 6'b000010; num <= {1'b0,sec[6:4]}; dot <= 1; end
  62.             3'd2:   begin digit <= 6'b000100; num <= min[3:0]; dot <= 0; end
  63.             3'd3:   begin digit <= 6'b001000; num <= {1'b0,min[6:4]}; dot <= 1; end
  64.             3'd4:   begin digit <= 6'b010000; num <= hr[3:0]; dot <= 0; end
  65.             3'd5:   begin digit <= 6'b100000; num <= {2'b00,hr[5:4]}; dot <= 1; end
  66.             default: digit <= 6'b000000;
  67.         endcase
  68.     end
  69.     else begin digit <= 6'b000000; num <= 4'd10; end
  70. end
  71.  
  72. assign segments[7:0] = {seg [6:0], dot};
  73. assign digits[5:0] = digit[5:0];
  74. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement