Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Clock divider by 3 with 50% duty cycle?

Status
Not open for further replies.

davyzhu

Advanced Member level 1
Advanced Member level 1
Joined
May 23, 2004
Messages
494
Helped
5
Reputation
10
Reaction score
2
Trophy points
1,298
Location
oriental
Activity points
4,436
clock divider by 3

Hi all,

How to Build a Clock divider by 3 with 50% duty cycle?
Input and output are listed below.

Clkin
__--__--__--__--__--__--
Clkout
______------______------

Any suggestions will be appreciated!
Best regards,
Davy
 

Davood Amerion

Advanced Member level 2
Advanced Member level 2
Joined
Mar 1, 2005
Messages
579
Helped
116
Reputation
232
Reaction score
24
Trophy points
1,298
Location
Persia
Activity points
6,345
divide by 3 clock

First you have to double input frequency, and then divide it by 3.
then divide it by 2 to produce 50% duty.
for doubling input frequency simply put one delay (such as RC, or buffer gates)
for example 20nS, then XOR input frequency and delayed one, you get 2x multiplayer.

Regards
Davood Amerion
 

IanP

Advanced Member level 7
Advanced Member level 7
Joined
Oct 5, 2004
Messages
7,929
Helped
2,311
Reputation
4,624
Reaction score
531
Trophy points
1,393
Location
West Coast
Activity points
66,416
clock dividers made easy

Below is a circuit that divides incomming wave by 3 with 50% duty cycle ..
Reards,
IanP
 

archillios

Full Member level 1
Full Member level 1
Joined
Jun 29, 2005
Messages
97
Helped
5
Reputation
10
Reaction score
1
Trophy points
1,288
Activity points
1,910
clock divide by 3

I prefer Davood Amerion's method,
that would avoid clock glitching.

hi,IanP
can you assure there is no glitching in your combinational source of clock?
 

    davyzhu

    Points: 2
    Helpful Answer Positive Rating

echo47

Advanced Member level 6
Advanced Member level 6
Joined
Apr 7, 2002
Messages
3,933
Helped
638
Reputation
1,274
Reaction score
90
Trophy points
1,328
Location
USA
Activity points
33,176
divider by 3

It looks glitch-free. It's from a Xilinx app note "Unusual Clock Dividers":
**broken link removed**

The author repeatedly warns about possible simulator problems, but I have no problem simulating it in Verilog/ModelSim.

Both of these methods assume the input clock has 50% duty cycle, or else the output won't be symmetrical.
 

davyzhu

Advanced Member level 1
Advanced Member level 1
Joined
May 23, 2004
Messages
494
Helped
5
Reputation
10
Reaction score
2
Trophy points
1,298
Location
oriental
Activity points
4,436
divide clock by 3

Hi Davood,

Thank you :)
What's "and then divide it by 3." mean?
Is it 50% duty?

Any suggestions will be appreciated!
Best regards,
Davy
 

echo47

Advanced Member level 6
Advanced Member level 6
Joined
Apr 7, 2002
Messages
3,933
Helped
638
Reputation
1,274
Reaction score
90
Trophy points
1,328
Location
USA
Activity points
33,176
divide by 3 circuit with 50 duty cycle

The "divide it by 3" can be just an ordinary two-bit counter that goes 0,1,2,0,1,2,...

After doing those steps, you would have signals like this. For the output to have 50% duty cycle, the input clock must also have 50% duty cycle.
 

anjali

Full Member level 3
Full Member level 3
Joined
Aug 16, 2005
Messages
173
Helped
14
Reputation
28
Reaction score
6
Trophy points
1,298
Activity points
3,033
divide by 3 with 50 duty cycle

Davood Amerion said:
First you have to double input frequency, and then divide it by 3.
then divide it by 2 to produce 50% duty.
for doubling input frequency simply put one delay (such as RC, or buffer gates)
for example 20nS, then XOR input frequency and delayed one, you get 2x multiplayer.

Regards
Davood Amerion

why dont we divide by 3 directly insted of multipliying by2, then divide by 3, and then divide by 2.
 

Davood Amerion

Advanced Member level 2
Advanced Member level 2
Joined
Mar 1, 2005
Messages
579
Helped
116
Reputation
232
Reaction score
24
Trophy points
1,298
Location
Persia
Activity points
6,345
clock divided by 3

Dear davyzhu,
I think the echo47's answer is complete.

Dear anjali
Because when we directly divide by 3 we can't get 50% duty (insted we get 33.3% duty)

Regards
 

anjali

Full Member level 3
Full Member level 3
Joined
Aug 16, 2005
Messages
173
Helped
14
Reputation
28
Reaction score
6
Trophy points
1,298
Activity points
3,033
clock divide 3

hai davood, we can get 50% duty cycle even by directly DIVIDE BY 3. by using 2 couters (one posedge triggered & one negedge triggered) & once total count equals 3, output clk need to be toggled. i followed int his way, instead of multiplying by 2, then divide by 3, then divide by 2.
 

davyzhu

Advanced Member level 1
Advanced Member level 1
Joined
May 23, 2004
Messages
494
Helped
5
Reputation
10
Reaction score
2
Trophy points
1,298
Location
oriental
Activity points
4,436
divider 3

Hi echo47,

Why not go directly from "XOR" to "Divide by 6"?

Best regards,
Davy
 

archillios

Full Member level 1
Full Member level 1
Joined
Jun 29, 2005
Messages
97
Helped
5
Reputation
10
Reaction score
1
Trophy points
1,288
Activity points
1,910
unusual clock dividers

oh, thanks to echo47 ,
your design is glitching free,the combinational based latch is great!
 

echo47

Advanced Member level 6
Advanced Member level 6
Joined
Apr 7, 2002
Messages
3,933
Helped
638
Reputation
1,274
Reaction score
90
Trophy points
1,328
Location
USA
Activity points
33,176
clock dividers

You guys are giving my too much credit. ;)

I drew the timing diagram to illustrate the suggestion by Davood Amerion.

The latch-based design was suggest by IanP. The design is from "Unusual Clock Dividers" by a Xilinx applications engineer.

davyzhu, an ordinary divide-by-6 counter that goes 0,1,2,3,4,5,0,1,2,3,4,5,... wouldn't have 50% duty cycle. By separating the counter into divide-by-3 and divide-by-2, you get 50%. (Actually, this still is a divide-by-6 counter, but with a funny count sequence.)

Someone asked me which program I used to draw that timing diagram. It's just lines drawn with a CAD program. I used good old OrCAD SDT for DOS. I still use it for large project schematics. I prefer it over all the modern tools.
 

nand_gates

Advanced Member level 3
Advanced Member level 3
Joined
Jul 19, 2004
Messages
899
Helped
175
Reputation
350
Reaction score
53
Trophy points
1,308
Activity points
7,037
esnips + clock dividers made easy

Here is one more ckt in verilog!!
Code:
module clk_div3(clk,clk_out);
   input clk;
   output      clk_out;

   reg [1:0]   cnt_p, cnt_n;
   wire [1:0]   cnt_p_nx, cnt_n_nx;

   initial begin
      cnt_p = 2'b11;
      cnt_n = 2'b11;
   end
     
   assign clk_out = cnt_p[0] | cnt_n[0];
   assign cnt_p_nx = {cnt_p[0],~(cnt_p[0] | cnt_p[1])};
   assign cnt_n_nx = {cnt_n[0],~(cnt_n[0] | cnt_n[1])};
   
   always @(posedge clk)
     cnt_p <= cnt_p_nx;
   always @(negedge clk)
     cnt_n <= cnt_n_nx;

endmodule // clk_div3

You can add reset signal to remove the initial statement!
 

    V

    Points: 2
    Helpful Answer Positive Rating

    sanju_

    Points: 2
    Helpful Answer Positive Rating

    boko_dyuzov

    Points: 2
    Helpful Answer Positive Rating

tut

Member level 4
Member level 4
Joined
Dec 12, 2003
Messages
78
Helped
7
Reputation
14
Reaction score
2
Trophy points
1,288
Location
India
Activity points
720
2/3 divider 50% duty

CLOCK DIVIDERS MADE EASY
 

    davyzhu

    Points: 2
    Helpful Answer Positive Rating

maxsnail

Member level 5
Member level 5
Joined
Sep 29, 2004
Messages
85
Helped
6
Reputation
28
Reaction score
1
Trophy points
1,288
Activity points
584
verilog clock divider 50 duty cycle

Thanks. it is useful for me
nand_gates said:
Here is one more ckt in verilog!!
Code:
module clk_div3(clk,clk_out);
   input clk;
   output      clk_out;

   reg [1:0]   cnt_p, cnt_n;
   wire [1:0]   cnt_p_nx, cnt_n_nx;

   initial begin
      cnt_p = 2'b11;
      cnt_n = 2'b11;
   end
     
   assign clk_out = cnt_p[0] | cnt_n[0];
   assign cnt_p_nx = {cnt_p[0],~(cnt_p[0] | cnt_p[1])};
   assign cnt_n_nx = {cnt_n[0],~(cnt_n[0] | cnt_n[1])};
   
   always @(posedge clk)
     cnt_p <= cnt_p_nx;
   always @(negedge clk)
     cnt_n <= cnt_n_nx;

endmodule // clk_div3

You can add reset signal to remove the initial statement!
 

    davyzhu

    Points: 2
    Helpful Answer Positive Rating

tlihu

Full Member level 6
Full Member level 6
Joined
Jan 2, 2002
Messages
335
Helped
19
Reputation
42
Reaction score
13
Trophy points
1,298
Activity points
2,258
clock divided by 3 circuit

Check this paper as well



Maybe it is the same as the one by tut.
 

    davyzhu

    Points: 2
    Helpful Answer Positive Rating

blanket

Junior Member level 3
Junior Member level 3
Joined
Jan 14, 2003
Messages
28
Helped
1
Reputation
2
Reaction score
0
Trophy points
1,281
Activity points
310
xilinx application note digital clock divider

If simplicity of design strikes you, then here's a solution.

If i have a 3 bit ring counter preloaded with a value 001, then I tap the output from any point, I'd have a divide-by-three 33% duty cycle output.

If i have another 3 bit-ring counter preloaded with same value 001, but clocked on the negative edge of the clock, I'd have another divide-by-three 33% duty cycle output with phase shift of 90 degree wrt the first output.

I OR these two outputs and I get a divide-by-three 50% duty cycle output. Am i right?
 

echo47

Advanced Member level 6
Advanced Member level 6
Joined
Apr 7, 2002
Messages
3,933
Helped
638
Reputation
1,274
Reaction score
90
Trophy points
1,328
Location
USA
Activity points
33,176
clock dividers made easy.pdf

Yes that would give a 50% duty cycle (assuming the input clock is square), however I wouldn't say a six-flop solution is "simplicity of design". ;)

By the way, if those two counters should ever fall out of sync (for example by a noise glitch or cosmic ray hit), then they would stay that way forever. I recommend using self-synchronizing logic wherever possible.
 
  • Like
Reactions: sdeora

    sdeora

    Points: 2
    Helpful Answer Positive Rating

blanket

Junior Member level 3
Junior Member level 3
Joined
Jan 14, 2003
Messages
28
Helped
1
Reputation
2
Reaction score
0
Trophy points
1,281
Activity points
310
clk divider 3

Just so that i understand the comment. Is Davood Amerion's solution the best available? Aren't there any issues in that circuit to produce 2x frequency square waves from a XOR gate and delay elements? Isn't designing the delay element more involved than putting six standard flops? I ask this so that i get the perspective...
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top