Advertisement
Guest User

BCD Counter

a guest
May 11th, 2025
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SystemVerilog 2.61 KB | Source Code | 0 0
  1. `timescale 1ns / 1ps
  2. module bcdCounter
  3.     #(parameter width = 25, maxcount = 26_999_999)(
  4.     input logic clk, reset,
  5.     output logic [3:0] counter, //units place
  6.     output logic [3:0] counter2,//tens place
  7.     output logic [6:0] seg7, seg7_2//units and tens place respectively
  8.     );
  9.     logic [width-1:0] count;//enable generator count
  10.     logic en, carry;
  11.     always_ff @(posedge clk, posedge reset) //asynch reset
  12.         if (reset) begin
  13.             count <= 0;
  14.             en <= 0;
  15.         end
  16.         else begin
  17.             en <= 0;
  18.             count <= count + 1;
  19.             if (count <= maxcount) begin
  20.                 en <= 1; //enable generated
  21.                 count <= 0;
  22.             end
  23.         end
  24.        
  25.     always_ff @(posedge clk, posedge reset) //asynch reset
  26.         begin
  27.             if (reset) begin
  28.                 counter <= 4'b0000;
  29.                 carry <= 0;
  30.             end
  31.             else if (en) begin
  32.                 counter <= counter + 1;
  33.                 carry <= 0; //carry generated for only 1 clock cycle
  34.                 if (counter == 9) begin
  35.                     counter <= 0;
  36.                     carry <= 1; //carry generated
  37.                 end
  38.             end
  39.         end  
  40.     always_ff @(posedge carry, posedge reset) //asynch reset
  41.         begin
  42.             if (reset) begin
  43.                 counter2 <= 4'b0000;
  44.             end
  45.             else if (en) begin
  46.                 counter2 <= counter2 + 1;
  47.                 if (counter2 == 9) begin
  48.                     counter2 <= 0;
  49.                 end
  50.             end
  51.         end
  52.     always_comb //combinational design to connect counter output to 7 seg display
  53.         begin
  54.             case(counter)
  55.             0: seg7 = 7'b011_1111;
  56.             1: seg7 = 7'b000_0110;
  57.             2: seg7 = 7'b101_1011;
  58.             3: seg7 = 7'b100_1111;
  59.             4: seg7 = 7'b110_0110;
  60.             5: seg7 = 7'b110_1101;
  61.             6: seg7 = 7'b111_1101;
  62.             7: seg7 = 7'b000_0111;
  63.             8: seg7 = 7'b111_1111;
  64.             9: seg7 = 7'b110_1111;
  65.             default: seg7 = 7'bxxx_xxxx;
  66.             endcase
  67.             case(counter2)
  68.             0: seg7_2 = 7'b011_1111;
  69.             1: seg7_2 = 7'b000_0110;
  70.             2: seg7_2 = 7'b101_1011;
  71.             3: seg7_2 = 7'b100_1111;
  72.             4: seg7_2 = 7'b110_0110;
  73.             5: seg7_2 = 7'b110_1101;
  74.             6: seg7_2 = 7'b111_1101;
  75.             7: seg7_2 = 7'b000_0111;
  76.             8: seg7_2 = 7'b111_1111;
  77.             9: seg7_2 = 7'b110_1111;
  78.             default: seg7_2 = 7'bxxx_xxxx;
  79.             endcase
  80.         end
  81. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement