It is pretty simple to make a clock divider with odd frequency division (let's say 3 or 5). But it doesn't have 50% duty cycle. Some modifications are essential to achieve that 50% duty cycle. You might argue, why so much fuss about 50%? To give you an insight into it, consider the following divided waveform with 66% DC:

As you can note from the above waveforms:

- NEG-TO-POS arc (i.e. any path launching from a negative edge triggered flop and being captured at positive edge triggered flop) would have least time to meet the setup time requirement and hence can be critical.
- On the other hand, POS-TO-POS and NEG-TO-NEG are so much relaxed.

Can you design such a circuit which takes a clock signal of frequency

**f**, and outputs another clock signal of frequency*f/3*with 50% duty cycle?
Yes I can

ReplyDeleteHello. Would really appreciate it if you can post or mail me a solution. Would love to share it with the readers.

DeleteThanks!

It can be done by one pos-edge triggered state machine giving output as A=110 and another neg-edge triggered state machine giving output as B=011 and finally Y=A.B'

ReplyDeleteWould really appreciate it if you can mail me a solution.why you taking 110 and 011 input only

Deleteprashantguptaengg@gmail.com

Here is the code:

ReplyDeleteNote: clk3 = clk/3

`timescale 1ns/1ps

module clk3;

reg clk;

wire clk3;

reg clk110, clk011;

reg [1:0] ccnt110;

reg [1:0] ccnt011;

assign clk3 = clk110 & clk011;

initial begin

clk=0;

ccnt110=0;

ccnt011=0;

$display("clk=%b ccnt110=%d ccnt011=%d", clk, ccnt110,ccnt011);

forever

begin #10

clk=~clk;

$display("clk=%b ccnt110=%d ccnt011=%d", clk, ccnt110,ccnt011);

end

end

always@(posedge clk)

begin

ccnt110++;

if(ccnt110 == 2'd3) begin

ccnt110=2'd0;

clk110=0;

end else

clk110=1;

end

always@(negedge clk)

begin

ccnt011++;

if(ccnt011 == 2'd3) begin

ccnt011=2'd0;

clk011=0;

end else

clk011=1;

end

initial begin

#1000 $finish;

end

//initial begin

//$vcdpluson;

//end

endmodule

1. Design a divide by 3 counter (active on posedge of clock)

ReplyDelete2. Give the LSB bit output of the counter(q0) to a D Flip flop acting on negedge of clock. (same clock as counter)

3. Give q0 and the output of DFF to an OR gate. The output of OR gate gives the divided by 3 clock with 50% dutycycle.

Thanks to : vlsiupdatez //refer this blog to see odd division of clock with 50% dutycycle

Regards,

Vaidhy.

Thank you, dear Anonymous!

DeleteThe purpose of this puzzle was to elicit the answer out of the readers and maybe start a discussion on which one is a better implementation based on the timing and power constraints.

Thanks, anyway for posting the answer.

use neg edge clock to get neg edge of divde by3... however its still not balanced.

Delete