Author Topic: Xilinx DCM/PLL phase noise  (Read 1812 times)

0 Members and 1 Guest are viewing this topic.

Offline NiHaoMikeTopic starter

  • Super Contributor
  • ***
  • Posts: 9243
  • Country: us
  • "Don't turn it on - Take it apart!"
    • Facebook Page
Xilinx DCM/PLL phase noise
« on: January 05, 2021, 03:08:23 pm »
I have a Spartan 6 LX100-3 board with an onboard 125MHz clock and I'm trying to get a 36.864MHz clock to drive an ADC.

Initially, I tried this:
Code: [Select]
DCM_CLKGEN #(
.CLKFX_DIVIDE (125),
.CLKFX_MULTIPLY (192),
.CLKIN_PERIOD(8)
) DCM0 (
.CLKFX(dcm0_clkfx), // 192MHz
.CLKFX180(),
.CLKFXDV(),
.LOCKED(dcm0_lckd),
.PROGCLK(),
.PROGDATA(),
.PROGDONE(),
.PROGEN(),
.STATUS(dcm0_status),
.CLKIN(osc_clk),
.FREEZEDCM(1'b0),
.RST(dcm0_status[2] && ~dcm0_lckd)
);
PLL_BASE # (
.BANDWIDTH("HIGH"),
.CLKIN_PERIOD(5.208),
.CLKFBOUT_MULT(24),
.CLKOUT0_DIVIDE(25),
.COMPENSATION("DCM2PLL"),
.DIVCLK_DIVIDE(5)
) PLL0 ( //921.6MHz
.CLKFBOUT(pll0_clkfb),
.CLKOUT0(sys_clk_36p8), //36.864MHz
.CLKOUT1(),
.CLKOUT2(),
.CLKOUT3(),
.CLKOUT4(),
.CLKOUT5(),
.LOCKED(pll0_lckd),
.CLKFBIN(pll0_clkfb),
.CLKIN(dcm0_clkfx),
.RST(~dcm0_lckd)
);
It worked but with a lot of phase noise according to my RTL-SDR. (RTL-SDR connected via a 100k resistor as an attenuator.)

The clocking wizard suggests this:
Code: [Select]
PLL_BASE # (
.BANDWIDTH("HIGH"),
.CLKIN_PERIOD(8),
.CLKFBOUT_MULT(23),
.CLKOUT0_DIVIDE(26),
.COMPENSATION("INTERNAL"),
.DIVCLK_DIVIDE(3)
) PLL0 (
.CLKFBOUT(pll0_clkfb),
.CLKOUT0(sys_clk_36p8),
.CLKOUT1(),
.CLKOUT2(),
.CLKOUT3(),
.CLKOUT4(),
.CLKOUT5(),
.LOCKED(pll0_lckd),
.CLKFBIN(pll0_clkfb),
.CLKIN(osc_clk),
.RST(1'b0)
);
Much less phase noise, but the frequency is not exact.

Am I correct that the DCM is inherently noisy or did I have it configured to use spread spectrum by mistake? Is there any way to get an exact 36.864MHz clock (to within the frequency accuracy as the 125MHz master clock) and have low phase noise using only the clocking resources on the FPGA?
Cryptocurrency has taught me to love math and at the same time be baffled by it.

Cryptocurrency lesson 0: Altcoins and Bitcoin are not the same thing.
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 8139
  • Country: ca
    • LinkedIn
Re: Xilinx DCM/PLL phase noise
« Reply #1 on: January 05, 2021, 03:59:18 pm »
This '36.864MHz' is a nasty factor.
If this is your system crucial frequency, then you need a standard off the shelf 12.288MHz oscillator.
That will make you a clean 36.864MHz, or, best go with an exact 38.864MHz oscillator.
Now, your 125MHz wont be exact...
 

Offline Bassman59

  • Super Contributor
  • ***
  • Posts: 2501
  • Country: us
  • Yes, I do this for a living
Re: Xilinx DCM/PLL phase noise
« Reply #2 on: January 05, 2021, 06:48:07 pm »
This '36.864MHz' is a nasty factor.
If this is your system crucial frequency, then you need a standard off the shelf 12.288MHz oscillator.
That will make you a clean 36.864MHz, or, best go with an exact 38.864MHz oscillator.
Now, your 125MHz wont be exact...

Or design the board to use both, and manage the clock domain crossings in the usual manner.
 

Offline Someone

  • Super Contributor
  • ***
  • Posts: 5013
  • Country: au
    • send complaints here
Re: Xilinx DCM/PLL phase noise
« Reply #3 on: January 05, 2021, 10:39:31 pm »
Am I correct that the DCM is inherently noisy
Yes.

The estimated jitter from the IP configurator is accurate (and focused on peak to peak deviations) so you can play around with configurations there to find the best design. With a lowest common multiple of 576GHz its going to need a few stages to avoid fractional steps with their added noise. There are simple prime factor solutions of 3 PLL stages (or 2 from a 8/16/32 MHz clock).
 

Offline asmi

  • Super Contributor
  • ***
  • Posts: 2839
  • Country: ca
Re: Xilinx DCM/PLL phase noise
« Reply #4 on: January 06, 2021, 12:24:02 am »
Few years ago I bought this kit: https://www.sitime.com/time-machine-oscillator-programmer and since that I never had any problems finding oscillators with whatever frequency, and, more importantly, didn't have to stock a whole bunch of different part numbers for different frequencies. It can program a whole bunch of different oscillators from simple 4 pin ones all the way to super-TCXOs and ultra-low jitter differential oscillators and VCXOs. For most parts, it supports frequencies with precision down to a single Hz, so things like 32.987654 MHz are absolutely possible.
So if you frequently find yourself needing oscillators with all kinds of frequencies, you might want to invest into this kit. It's a bit on a pricey side, but convenience it brings is unmatched. The kit also comes with a few sample blank devices to get you started (mine came with SiT2018BA-S1, SiT8008BI-11, SiT9121AI-1B1 and SiT9121AI-2C1, 3 devices each).
I believe Microchip also has it's own version of that system.
« Last Edit: January 06, 2021, 12:50:09 am by asmi »
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 8139
  • Country: ca
    • LinkedIn
Re: Xilinx DCM/PLL phase noise
« Reply #5 on: January 06, 2021, 12:55:01 am »
Uh, ok, if you want a super high quality VCXO with 2 PLL and 6 programmable outputs from 1 regular crystal, use TI's CDCE925.  Flash programmable and in system realtime frequency tuning.

Analog voltage tuning VCXO input pin as well as I2C software internal dac drive on that pin to tune the crystal.  Preprogrammable with more than 1 optional setup controlled by 1 or 2 inputs.

Dirt cheap version CDCE913 - 1 pll 3 outputs.  @2.58 each + 25cent xtal, costs less than a high quality crystal oscillator.

Up to 160MHz out with an 8-32MHz crystal.
Spread spectrum support.
« Last Edit: January 06, 2021, 01:00:27 am by BrianHG »
 

Offline asmi

  • Super Contributor
  • ***
  • Posts: 2839
  • Country: ca
Re: Xilinx DCM/PLL phase noise
« Reply #6 on: January 06, 2021, 02:35:30 am »
Uh, ok, if you want a super high quality VCXO with 2 PLL and 6 programmable outputs from 1 regular crystal, use TI's CDCE925.  Flash programmable and in system realtime frequency tuning.

Analog voltage tuning VCXO input pin as well as I2C software internal dac drive on that pin to tune the crystal.  Preprogrammable with more than 1 optional setup controlled by 1 or 2 inputs.

Dirt cheap version CDCE913 - 1 pll 3 outputs.  @2.58 each + 25cent xtal, costs less than a high quality crystal oscillator.

Up to 160MHz out with an 8-32MHz crystal.
Spread spectrum support.
That is massive overkill. A single small part with custom frequency, on the other hand, is simple and easy. SiT8008B FP devices go for about $1-2 per device depending on volume, and you can program any frequency from 1 to 110 MHz with a step of 1 Hz.

Offline miken

  • Regular Contributor
  • *
  • Posts: 102
  • Country: us
Re: Xilinx DCM/PLL phase noise
« Reply #7 on: January 06, 2021, 02:48:22 am »
Chaining Xilinx clock elements makes the final jitter considerably worse, in my experience. You could try setting the bandwidth to LOW but I imagine it won't help that much.

In an ideal world you wouldn't clock an ADC with an FPGA-generated clock, no matter the number of stages, but it all depends on what your target performance is.
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 8139
  • Country: ca
    • LinkedIn
Re: Xilinx DCM/PLL phase noise
« Reply #8 on: January 06, 2021, 08:25:06 am »
I've use the aforementioned single TI PLL with 1 output dedicated for ADC, 1 for DAC, 1 and for FPGA clk input, each with their own set clk & divider.
 

Offline radiolistener

  • Super Contributor
  • ***
  • Posts: 4064
  • Country: ua
Re: Xilinx DCM/PLL phase noise
« Reply #9 on: January 13, 2021, 10:57:19 am »
it's better to feed ADC directly from ultra low phase noise oscillator. Because FPGA logic has significant jitter, it will reduce ADC dynamic range.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf