Hvordan lage 2 / 3 clock freq divisjon?

M

mhytr

Guest
For eksempel generere en 40MHz klokke danne en 60MHz klokke.

 
mhytr skrev:

For eksempel generere en 40MHz klokke danne en 60MHz klokke.
 
Hvis du matet en omvendt klokke i, kan du generere en 40 Mhz en mulig, men det ville ikke være 50% duty cycle.

 
Bruksfasen lås spranget.For Xilinx enheter, kan du bruke DCM.

 
1 - Divide 60MHz med 6 og får deretter fa = 10MHz.
2 - Bruk en VCO å generere 40MHz (og dekker også andre frekvenser i området nødvendig).
3 - Del 40MHz fra VCO produksjon av 4 og få fb = 10MHz.
4 - Sammenlikn faser av fa og fb bruker en fase-frekvens detektor (PFD).
5 - Bruk produksjon av PFD å korrigere fase / frekvens av VCO.
6 - Hvis VCO har lavere fase støy enn 60MHz referanse signalisere en lavpassfilter i kontroll-loopen kan også bidra til å redusere jitter på 40MHz produksjon kommer fra 60MHz referanse.
7 - Utgangen av VCO vil være nødvendig signal (2 / 3 av 60MHz referanse signal).

Håper det hjelper.
S.

PS: Delingen av 6 kan utføres av en programmerbar divider med 3 etterfulgt av en t-flip-flop (divider ved 2) å gi en 50% driftssyklus (10MHz).

 
For FPGA er DCM nok.
men for ASIC, tar areal og kostnader i betraktning
DLL eller PLL er valgfritt.
Men jeg foretrekker DLL på grunn av den lave hyppigheten.

 
Sinatra skrev:

1 - Divide 60MHz med 6 og får deretter fa = 10MHz.

2 - Bruk en VCO å generere 40MHz (og dekker også andre frekvenser i området nødvendig).

3 - Del 40MHz fra VCO produksjon av 4 og få fb = 10MHz.

4 - Sammenlikn faser av fa og fb bruker en fase-frekvens detektor (PFD).

5 - Bruk produksjon av PFD å korrigere fase / frekvens av VCO.

6 - Hvis VCO har lavere fase støy enn 60MHz referanse signalisere en lavpassfilter i kontroll-loopen kan også bidra til å redusere jitter på 40MHz produksjon kommer fra 60MHz referanse.

7 - Utgangen av VCO vil være nødvendig signal (2 / 3 av 60MHz referanse signal).Håper det hjelper.

S.PS: Delingen av 6 kan utføres av en programmerbar divider med 3 etterfulgt av en t-flip-floppen (divider ved 2) å gi en 50% driftssyklus (10MHz).
 
Checkout Denne koden .....
Håper dette hjelper!

Code:

modul 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;

tildele clk_2by3 = (~ clk_by3_neg [0] & clk_by3_pos [0]) | (clk_by3_neg [1] & clk_by3_pos [1]);alltid @ (posedge clk eller negedge reset_n)

if (! reset_n)

clk_by3_pos <= 0;

ellers

hvis clk_by3_pos (== 2)

clk_by3_pos <= 0;

ellers

clk_by3_pos <= clk_by3_pos 1;alltid @ (negedge clk eller negedge reset_n)

if (! reset_n)

clk_by3_neg <= 0;

ellers

if (clk_by3_neg == 2)

clk_by3_neg <= 0;

ellers

clk_by3_neg <= clk_by3_neg 1;endmodule / / div_2by3

 
eller annen grunn tok jeg han hadde ikke en PLL

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />
 
en generell metode er å bruke en DDS klokke synthesizer ....det avhenger veldig nøyaktig hvordan du vil at klokken skal være (på lang sikt) - som du kan i hovedsak bestemt av størrelsen på registeret.åpenbart driftssyklusen skal slingre rundt på kort sikt.likevel - alt er det er virkelig en gratis-løper telleren hvor MSB bytter som resulterende klokke.

`definere DDS_ACCUM_SIZE 8

/ * Tuning ord = ((Fout / FCK) * ACM)
hvor: Fout = påkrevd output frekvens
FCK = DDS kilde klokke (60MHz)
ACM = Accumulator stater (2powN)
* /
/ / ((40/60) * 256)
`definere WSTEP 8'haa

modul DDS (CLK, DDS_ClkIn, notRESET, DDS_ClkOut);
input CLK; / / Main core clock
input DDS_ClkIn; / / Fast DDS input clock
output DDS_ClkOut;
reg DDS_ClkOut;
/ / Interne registre
reg [ `DDS_ACCUM_SIZE-1: 0] A / / akkumulator
/ / Fase akkumulator ...
alltid @ (posedge DDS_ClkIn eller negedge notRESET) begin
if (! notRESET) A <= `DDS_ACCUM_SIZE'b0;
else A <= (A `WSTEP);
slutt
/ / DDS clock utgang er MSB av akkumulator
alltid @ (posedge DDS_ClkIn eller negedge notRESET) begin
if (! notRESET) DDS_ClkOut <= 0;
else DDS_ClkOut <= A [ `DDS_ACCUM_SIZE-1];
slutt
endmodule / / DDSps.Kan jeg stille noen spørsmål?hvordan skriver jeg dette uten alle innrykk får tygget av?(beklager dette simpleton søket!); o)

 

Welcome to EDABoard.com

Sponsor

Back
Top