Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
mhytr said:For example,generate a 40Mhz clock form a 60Mhz clock.
Can anyone give an example?sinatra said:1- Divide 60Mhz by 6 and obtain then fa=10MHz.
2- Use a VCO to generate 40Mhz (and cover also other frequencies in the range needed) .
3- Divide the 40MHz from the VCO output by 4 and obtain fb=10MHz.
4- Compare the phases of fa and fb using a phase-frequency detector (PFD).
5- Use the output of the PFD to correct the phase/frequency of the VCO.
6- If your VCO has lower phase noise than your 60MHz reference signal a low pass filter in the control loop could also help to reduce jitter at the 40MHz output coming from the 60MHz reference.
7- The output of the VCO will be the required signal (2/3 of the 60MHz reference signal).
Hope it helps.
S.
PS: The division by 6 can be performed by a programmable divider by 3 followed by a t-flip-flop (divider by 2) to provide a 50% duty cycle (10MHz).
module div_2by3(/*AUTOARG*/
// Outputs
clk_2by3,
// Inputs
clk, reset_n
);
input clk, reset_n;
output clk_2by3;
reg [1:0] clk_by3_pos, clk_by3_neg ;
assign clk_2by3 = (~clk_by3_neg[0] & clk_by3_pos[0]) | (clk_by3_neg[1] & clk_by3_pos[1]);
always @(posedge clk or negedge reset_n)
if (!reset_n)
clk_by3_pos <= 0;
else
if (clk_by3_pos == 2)
clk_by3_pos <= 0;
else
clk_by3_pos <= clk_by3_pos + 1;
always @(negedge clk or negedge reset_n)
if (!reset_n)
clk_by3_neg <= 0;
else
if (clk_by3_neg == 2)
clk_by3_neg <= 0;
else
clk_by3_neg <= clk_by3_neg + 1;
endmodule // div_2by3