`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 07/12/2015 11:25:59 PM // Design Name: // Module Name: counter // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //////////////////////////////////////////////////////////////////////////////////


module counter( input clk, output Q0, output Q1, output Q2

   );

// Use K-map to find out the logic for data input. D is next state, Q is current state

wire D_Q0, D_Q1, D_Q2; //next state

   assign D_Q0 = (~Q2&~Q1&~Q0)|(~Q2&Q1&~Q0) | (Q2&~Q1&~Q0)| (Q2&Q1&~Q0);
   assign D_Q1 = (~Q2&~Q1&Q0) | (~Q2&Q1&~Q0) | (Q2&~Q1&Q0) | (Q2&Q1&~Q0);
   assign D_Q2 = (~Q2&Q1&Q0) | (Q2&~Q1&~Q0) | (Q2&~Q1&Q0) | (Q2&Q1&~Q0);
   

// Three D flip-flops for current and next state to generate the three digits output Q0,Q1,Q2

   FDCE #(
         .INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
   ) FDCE_0 (
         .Q(Q0),      // Data output
         .C(clk),      // Clock input
         .CE(1'b1),    // Clock enable input
         .CLR(1'b0),  // Asynchronous clear input
         .D(D_Q0)       // Data input
   );
   
   FDCE #(
         .INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
   ) FDCE_1 (
         .Q(Q1),      // Data output
         .C(clk),      // Clock input
         .CE(1'b1),    // Clock enable input
         .CLR(1'b0),  // Asynchronous clear input
         .D(D_Q1)       // Data input
   );
   
   FDCE #(
         .INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
   ) FDCE_2 (
         .Q(Q2),      // Data output
         .C(clk),      // Clock input
        .CE(1'b1),    // Clock enable input
         .CLR(1'b0),  // Asynchronous clear input
         .D(D_Q2)       // Data input
   );
   
   

endmodule

Community content is available under CC-BY-SA unless otherwise noted.