Advertisement
Guest User

Untitled

a guest
May 2nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module stopwatch(
  2.     input clock,
  3.     input reset,
  4.     input start,
  5.     output [6:0]hex0,
  6.     output [6:0]hex1,
  7.     output [6:0]hex2,
  8.     output [6:0]hex3
  9.     );
  10.  
  11. reg [3:0] reg_d0, reg_d1, reg_d2, reg_d3; //registers that will hold the individual counts
  12. reg [22:0] ticker; //23 bits needed to count up to 5M bits
  13. wire click;
  14.  
  15.  
  16. //the mod 5M clock to generate a tick ever 0.1 second
  17.  
  18. always @ (posedge clock or posedge reset)
  19. begin
  20.  if(reset)
  21.  
  22.   ticker <= 0;
  23.  
  24.  else if(ticker == 50000000) //if it reaches the desired max value reset it
  25.   ticker <= 0;
  26.  else if(start) //only start if the input is set high
  27.   ticker <= ticker + 1;
  28. end
  29.  
  30. assign click = ((ticker == 50000000)?1'b1:1'b0); //click to be assigned high every 0.1 second
  31.  
  32. always @ (posedge clock or posedge reset)
  33. begin
  34.  if (reset)
  35.   begin
  36.    reg_d0 <= 0;
  37.    reg_d1 <= 0;
  38.    reg_d2 <= 0;
  39.    reg_d3 <= 0;
  40.   end
  41.    
  42.  else if (click) //increment at every click
  43.   begin
  44.    if(reg_d0 == 9) //xxx9 - the 0.1 second digit
  45.    begin  //if_1
  46.     reg_d0 <= 0;
  47.      
  48.     if (reg_d1 == 9) //xx99
  49.     begin  // if_2
  50.      reg_d1 <= 0;
  51.      if (reg_d2 == 5) //x599 - the two digit seconds digits
  52.      begin //if_3
  53.       reg_d2 <= 0;
  54.       if(reg_d3 == 9) //9599 - The minute digit
  55.        reg_d3 <= 0;
  56.       else
  57.        reg_d3 <= reg_d3 + 1;
  58.      end
  59.      else //else_3
  60.       reg_d2 <= reg_d2 + 1;
  61.     end
  62.      
  63.     else //else_2
  64.      reg_d1 <= reg_d1 + 1;
  65.    end
  66.    
  67.    else //else_1
  68.     reg_d0 <= reg_d0 + 1;
  69.   end
  70. end
  71.  
  72. reg [6:0]hex0_temp;
  73. reg [6:0]hex1_temp;
  74. reg [6:0]hex2_temp;
  75. reg [6:0]hex3_temp;
  76.  
  77. always @ (*)
  78.  begin
  79.   case(reg_d0)
  80.    4'd0 : hex0_temp = 7'b0111111;
  81.    4'd1 : hex0_temp = 7'b0000110;
  82.    4'd2 : hex0_temp = 7'b1011011;
  83.    4'd3 : hex0_temp = 7'b1001111;
  84.    4'd4 : hex0_temp = 7'b1100110;
  85.    4'd5 : hex0_temp = 7'b1101101;
  86.    4'd6 : hex0_temp = 7'b1111101;
  87.    4'd7 : hex0_temp = 7'b0000111;
  88.    4'd8 : hex0_temp = 7'b1111111;
  89.    4'd9 : hex0_temp = 7'b1101111;
  90.    default : hex0_temp = 7'b1000000; //dash
  91.   endcase
  92.   case(reg_d1)
  93.    4'd0 : hex1_temp = 7'b0111111;
  94.    4'd1 : hex1_temp = 7'b0000110;
  95.    4'd2 : hex1_temp = 7'b1011011;
  96.    4'd3 : hex1_temp = 7'b1001111;
  97.    4'd4 : hex1_temp = 7'b1100110;
  98.    4'd5 : hex1_temp = 7'b1101101;
  99.    4'd6 : hex1_temp = 7'b1111101;
  100.    4'd7 : hex1_temp = 7'b0000111;
  101.    4'd8 : hex1_temp = 7'b1111111;
  102.    4'd9 : hex1_temp = 7'b1101111;
  103.    default : hex1_temp = 7'b1000000; //dash
  104.   endcase
  105.   case(reg_d2)
  106.    4'd0 : hex2_temp = 7'b0111111;
  107.    4'd1 : hex2_temp = 7'b0000110;
  108.    4'd2 : hex2_temp = 7'b1011011;
  109.    4'd3 : hex2_temp = 7'b1001111;
  110.    4'd4 : hex2_temp = 7'b1100110;
  111.    4'd5 : hex2_temp = 7'b1101101;
  112.    4'd6 : hex2_temp = 7'b1111101;
  113.    4'd7 : hex2_temp = 7'b0000111;
  114.    4'd8 : hex2_temp = 7'b1111111;
  115.    4'd9 : hex2_temp = 7'b1101111;
  116.    default : hex2_temp = 7'b1000000; //dash
  117.   endcase
  118.   case(reg_d3)
  119.    4'd0 : hex3_temp = 7'b0111111;
  120.    4'd1 : hex3_temp = 7'b0000110;
  121.    4'd2 : hex3_temp = 7'b1011011;
  122.    4'd3 : hex3_temp = 7'b1001111;
  123.    4'd4 : hex3_temp = 7'b1100110;
  124.    4'd5 : hex3_temp = 7'b1101101;
  125.    4'd6 : hex3_temp = 7'b1111101;
  126.    4'd7 : hex3_temp = 7'b0000111;
  127.    4'd8 : hex3_temp = 7'b1111111;
  128.    4'd9 : hex3_temp = 7'b1101111;
  129.    default : hex3_temp = 7'b1000000; //dash
  130.   endcase
  131.  end
  132.  
  133. assign hex0 = hex0_temp;
  134. assign hex1 = hex1_temp;
  135. assign hex2 = hex2_temp;
  136. assign hex3 = hex3_temp;
  137.  
  138. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement