M
michael6866
Guest
Hi,
I'm reading a paper which talks about designing a 2/9 clock divider and it doesn't require 50% duty cycle. The author presents the following approach:
1. use a 9-bit shift registers (assuming bit [8] is MSB, bit [0] is LSB) which is left-rotated on every rising edge of the original clock clk. The initial value is "000000001"
2. On every *Rising* edge of clk, read the value of bit [1] into DFF_R1, bit [2] into DFF_R2 and bit [6] into DFF_R6 correspondingly.
3. On every *Falling* edge of clk, read the value of bit [1] into DFF_F1, bit [5] into DFF_F5 and bit[6] into DFF_F6.
4. The divided clock can be generated by feeding those 1-bit DFFs into a few OR gates:
clk_div = ((DFF_R1|DFF_R2)|DFF_F1) | ((DFF_F5|DFF_F6)|DFF_R6)
I understand the above solution works fine. What I don't understand is why it couldn't be as simple as:
clkd_div = DFF_R1 | DFF_F5
Maybe I'm missing something obvious here, but could anyone tell why the original solution is better than the naive one in my mind?
Thanks,
Michael
I'm reading a paper which talks about designing a 2/9 clock divider and it doesn't require 50% duty cycle. The author presents the following approach:
1. use a 9-bit shift registers (assuming bit [8] is MSB, bit [0] is LSB) which is left-rotated on every rising edge of the original clock clk. The initial value is "000000001"
2. On every *Rising* edge of clk, read the value of bit [1] into DFF_R1, bit [2] into DFF_R2 and bit [6] into DFF_R6 correspondingly.
3. On every *Falling* edge of clk, read the value of bit [1] into DFF_F1, bit [5] into DFF_F5 and bit[6] into DFF_F6.
4. The divided clock can be generated by feeding those 1-bit DFFs into a few OR gates:
clk_div = ((DFF_R1|DFF_R2)|DFF_F1) | ((DFF_F5|DFF_F6)|DFF_R6)
I understand the above solution works fine. What I don't understand is why it couldn't be as simple as:
clkd_div = DFF_R1 | DFF_F5
Maybe I'm missing something obvious here, but could anyone tell why the original solution is better than the naive one in my mind?
Thanks,
Michael