UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Visitor xuyangfirst
Visitor
528 Views
Registered: ‎08-26-2018

Ring Oscillator with jitter of 500 -1000PPM, is this typical value?

Hi, 

I use 3 LUT1 in xcku040 to build a 3 stage ring oscillator. And use this clock to count in "1 second window" provided by external signal. I got a clock about 602MHz.

I found the count result is quit unstable, the variation between seconds is usually more than 500PPM, some times will reach 1000 PPM. Is this variation reasonable for LUT build ring oscillator?

 

Code is list, implement result and  count result is attached. Thanks


assign #1 ring_0_input = r_osc_en&ring_stage_2;

(* keep_hierarchy = "yes" *) LUT1 #(
.INIT(2'b01) // Logic function
)
RING_0 (
.O (ring_stage_0), // 1-bit output: LUT
.I0(ring_0_input) // 1-bit input: LUT
);

(* keep_hierarchy = "yes" *) LUT1 #(
.INIT(2'b01) // Logic function
)
RING_1 (
.O (ring_stage_1), // 1-bit output: LUT
.I0(ring_stage_0) // 1-bit input: LUT
);

(* keep_hierarchy = "yes" *) LUT1 #(
.INIT(2'b01) // Logic function
)
RING_2 (
.O (ring_stage_2), // 1-bit output: LUT
.I0(ring_stage_1) // 1-bit input: LUT
);

(* keep_hierarchy = "yes" *) LUT1 #(
.INIT(2'b01) // Logic function
)
OSC_BUFR (
.O (osc_clk_pre ), // 1-bit output: LUT
.I0(ring_stage_2) // 1-bit input: LUT
);

//assign osc_clk_pre = ring_stage_1;

BUFR U_BUFR_OSC(
.I (osc_clk_pre ),
.O (osc_clk )
);

0 Kudos
3 Replies
496 Views
Registered: ‎01-08-2012

Re: Ring Oscillator with jitter of 500 -1000PPM, is this typical value?

That's actually more stable that I would have expected, based on my past experiments.

It would be fairly simple to adjust your setup to estimate the Allan variance to show how the frequency stability of multiple samples varies with the sample time (which is 1 second in your example).  My tests were all done with much shorter sample times (much less than 1ms), which might be why I observed much more instability.

I assume you weren't varying the temperature between measurements.  You could try that to see what difference it makes.

Also, I found that other nearby routing would affect the results.  It's not uncommon to instantiate multiple ring oscillators (e.g. when used as an entropy source) and (unless care is taken with e.g. a large physical separation and isolation design flow) these will tend to lock together, or lock to another clock on the die.  This shows up in the correlation tests on the outputs.

Visitor xuyangfirst
Visitor
481 Views
Registered: ‎08-26-2018

Re: Ring Oscillator with jitter of 500 -1000PPM, is this typical value?

Hi Allan

Thanks for your suggestion. The test result is temperature stable since it's in a air-conditioning lab with only 1 board, in less than 1 hour period.

Actually this result is stably different with the result one month ago, about 1000PPM in average. May be I can test this with aircon off.

I will try to move away the adjacent logic, and see if the stability improve.

 

0 Kudos
Visitor xuyangfirst
Visitor
408 Views
Registered: ‎08-26-2018

Re: Ring Oscillator with jitter of 500 -1000PPM, is this typical value?

Hi Allan

I've test isolate the ring oscillator part with Pblock, seems the stability is still poor.

This picture shows the implementation result, and the PPM.

Point N's PPM is N/(Ave(N:N+499))-1)*1000000; Each point is 1 second's counting. Seems no improve.

 

pblog.png
0 Kudos