DIVIDE BY 3 COUNTER

module div_by_3(clk,reset,clk_3);
input    clk      ;
input    reset    ;
output   clk_3    ;

wire       Da     ;
reg        Qa     ;
reg        Qb     ;
reg        Qc     ;

  assign Da   =~Qa && ~Qb  ;
  assign clk_3= Qb ||  Qc  ;

  always@(posedge clk or negedge reset ) begin
    if(~reset)begin
     Qa<=1'b0 ;
    end
    else begin
     Qa<=Da   ;
    end
  end

  always@(posedge clk or negedge reset ) begin
    if(~reset)begin
     Qb<=1'b0 ;
    end
    else begin
     Qb<=Qa   ;
    end
  end
  
  always@(negedge clk or negedge reset ) begin
    if(~reset)begin
     Qc<=1'b0 ;
    end
     else begin
     Qc<=Qb   ;
    end
  end
endmodule