Post Go back to editing

[ADRV9009] Sample rates of 40/80 Msps possible?

Hi,

We have a custom design using the ADRV9009 and are encountering issues with sample rates of 40Msps or 80Msps. We can generate profiles (attached) without error but they cannot be imported. TALISE_initDigitalClocks fails with the error: "Unsupported PLL reference clock or refclk out of range"

Note: Our design can select between different VCXOs and in the case described it is configured for 100MHz.

Can you confirm these rates are achievable and that the attached profile settings are correct?

Looking closer at the implementation [1],[2], TALISE_initDigitalClocks() wont accept a deviceClock_kHz of 80000. In this case, scaledRefClk_kHz is computed to 80000 and that exceeds the bounds for the final if/then/else statement which calculates the vcoCalOffset, loopFilterIcp, loopFilterC2C1, loopFilterR1C3, loopFilterR3 and the function exits.

Thank you for your support, and we appreciate any suggestions or workarounds you can provide.



  • What is the dev_clk frequency? Can you share the profile that you have generated from the filter wizard tool?

    Are you generating  the config files from the TES GUI after loading this generated profile from the profile wizard tool. You need to use the same config files in your setup.

  • The dev_clock frequency is 80MHz.

    Sorry, it looks like the profiles attachment was cutoff.  Yes, we are generating the profile from the Filter Wizard tool.

    We are have generated the config files from the TES GUI and use them as a guide when populating the structs in taliseInit_t, but this is done manually as we have a custom design.  We are successfully able to switch between several profiles, but not these two.  The difference here is the dev_clk- these two both use 80MHz.

    <profile Talise version=1 name=Rx_BW20_OR40_ORx_BW20_OR40>
     <clocks>
      <deviceClock_kHz=80000>
      <clkPllVcoFreq_kHz=6400000>
      <clkPllHsDiv=2.5>
     </clocks>
    
     <rx name=Rx 20.00MHz, OutputRate 40.00MHz, TotalDecimation 32>
      <rxChannels=TAL_RX1RX2>
      <rxFirDecimation=4>
      <rxDec5Decimation=4>
      <rhb1Decimation=2>
      <rxOutputRate_kHz=40000>
      <rfBandwidth_Hz=20000000>
      <rxBbf3dBCorner_kHz=40000>
      <rxDdcMode=0>
    
      <rxNcoShifterCfg>
       <bandAInputBandWidth_kHz=0>
       <bandAInputCenterFreq_kHz=0>
       <bandANco1Freq_kHz=0>
       <bandANco2Freq_kHz=0>
       <bandBInputBandWidth_kHz=0>
       <bandBInputCenterFreq_kHz=0>
       <bandBNco1Freq_kHz=0>
       <bandBNco2Freq_kHz=0>
      </rxNcoShifterCfg>
    
      <filter FIR gain_dB=-12 numFirCoefs=72>
      0
      0
      0
      -1
      -2
      -2
      3
      13
      22
      19
      -8
      -57
      -104
      -102
      -10
      164
      340
      376
      153
      -324
      -851
      -1071
      -661
      419
      1754
      2559
      2034
      -102
      -3213
      -5752
      -5798
      -1953
      5810
      15829
      25197
      30855
      30855
      25197
      15829
      5810
      -1953
      -5798
      -5752
      -3213
      -102
      2034
      2559
      1754
      419
      -661
      -1071
      -851
      -324
      153
      376
      340
      164
      -10
      -102
      -104
      -57
      -8
      19
      22
      13
      3
      -2
      -2
      -1
      0
      0
      0
      </filter>
    
      <rxAdcProfile num=42>
      409
      223
      181
      90
      1280
      366
      1243
      26
      814
      11
      465
      39
      48
      30
      18
      168
      0
      0
      0
      0
      42
      0
      6
      4
      26
      0
      6
      4
      26
      0
      25
      3
      0
      0
      25
      3
      0
      0
      165
      44
      31
      905
      </rxAdcProfile>
     </rx>
    
     <obsRx name=Rx 20.00MHz, OutputRate 40.00MHz, TotalDecimation 32>
      <obsRxChannelsEnable=TAL_ORX1ORX2>
      <enAdcStitching=0>
      <rxFirDecimation=4>
      <rxDec5Decimation=4>
      <rhb1Decimation=2>
      <orxOutputRate_kHz=40000>
      <rfBandwidth_Hz=20000000>
      <rxBbf3dBCorner_kHz=225000>
      <orxDdcMode=0>
    
      <filter FIR gain_dB=-12 numFirCoefs=72>
      0
      0
      -1
      -2
      -4
      -2
      5
      17
      27
      21
      -11
      -66
      -113
      -105
      -4
      175
      346
      370
      136
      -335
      -834
      -1018
      -596
      441
      1679
      2375
      1807
      -241
      -3120
      -5360
      -5178
      -1320
      6183
      15732
      24599
      29935
      29935
      24599
      15732
      6183
      -1320
      -5178
      -5360
      -3120
      -241
      1807
      2375
      1679
      441
      -596
      -1018
      -834
      -335
      136
      370
      346
      175
      -4
      -105
      -113
      -66
      -11
      21
      27
      17
      5
      -2
      -4
      -2
      -1
      0
      0
      </filter>
    
      <orxLowPassAdcProfile num=42>
      409
      223
      181
      90
      1280
      366
      1243
      26
      814
      11
      465
      39
      48
      30
      18
      168
      0
      0
      0
      0
      42
      0
      6
      4
      26
      0
      6
      4
      26
      0
      25
      3
      0
      0
      25
      3
      0
      0
      165
      44
      31
      905
      </orxLowPassAdcProfile>
    
      <orxBandPassAdcProfile num=42>
      409
      223
      181
      90
      1280
      366
      1243
      26
      814
      11
      465
      39
      48
      30
      18
      168
      0
      0
      0
      0
      42
      0
      6
      4
      26
      0
      6
      4
      26
      0
      25
      3
      0
      0
      25
      3
      0
      0
      165
      44
      31
      905
      </orxBandPassAdcProfile>
    
     </obsRx>
    
     <lpbk>
      <rxFirDecimation=2>
      <rhb1Decimation=1>
      <outputRate_kHz=245760>
      <rfBandwidth_Hz=220000000>
      <rxBbf3dBCorner_kHz=225000>
    
      <filter FIR gain_dB=0 num=48>
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      1
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      </filter>
    
      <lpbkAdcProfile num=1>
      0
      </lpbkAdcProfile>
     </lpbk>
    
     <tx name=Tx 200.00MHz, InputRate 245.76MHz, TotalInterpolation 32>
      <txChannels=TAL_TXOFF>
      <dacDiv=1>
      <txFirInterpolation=1>
      <thb1Interpolation=2>
      <thb2Interpolation=2>
      <thb3Interpolation=2>
      <txInt5Interpolation=1>
      <txInputRate_kHz=245760>
      <primarySigBandwidth_Hz=75000000>
      <rfBandwidth_Hz=200000000>
      <txDac3dBCorner_kHz=200000>
      <txBbf3dBCorner_kHz=100000>
    
      <filter FIR gain_dB=0 numFirCoefs=20>
      0
      0
      0
      0
      0
      0
      0
      0
      0
      1
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      </filter>
     </tx>
    </profile>
    
    <profile Talise version=1 name=Rx_BW40_OR80_ORx_BW40_OR80>
     <clocks>
      <deviceClock_kHz=80000>
      <clkPllVcoFreq_kHz=6400000>
      <clkPllHsDiv=2.0>
     </clocks>
    
     <rx name=Rx 40.00MHz, OutputRate 80.00MHz, TotalDecimation 20>
      <rxChannels=TAL_RX1RX2>
      <rxFirDecimation=2>
      <rxDec5Decimation=5>
      <rhb1Decimation=2>
      <rxOutputRate_kHz=80000>
      <rfBandwidth_Hz=40000000>
      <rxBbf3dBCorner_kHz=40000>
      <rxDdcMode=0>
    
      <rxNcoShifterCfg>
       <bandAInputBandWidth_kHz=0>
       <bandAInputCenterFreq_kHz=0>
       <bandANco1Freq_kHz=0>
       <bandANco2Freq_kHz=0>
       <bandBInputBandWidth_kHz=0>
       <bandBInputCenterFreq_kHz=0>
       <bandBNco1Freq_kHz=0>
       <bandBNco2Freq_kHz=0>
      </rxNcoShifterCfg>
    
      <filter FIR gain_dB=-6 numFirCoefs=72>
      -8
      11
      19
      16
      -16
      -49
      -45
      21
      100
      105
      -11
      -172
      -215
      -36
      259
      392
      151
      -343
      -650
      -374
      393
      1005
      764
      -359
      -1483
      -1432
      137
      2122
      2604
      495
      -3102
      -5135
      -2626
      4879
      14380
      20974
      20974
      14380
      4879
      -2626
      -5135
      -3102
      495
      2604
      2122
      137
      -1432
      -1483
      -359
      764
      1005
      393
      -374
      -650
      -343
      151
      392
      259
      -36
      -215
      -172
      -11
      105
      100
      21
      -45
      -49
      -16
      16
      19
      11
      -8
      </filter>
    
      <rxAdcProfile num=42>
      326
      179
      181
      90
      1280
      366
      1250
      27
      1021
      14
      583
      39
      48
      37
      23
      165
      0
      0
      0
      0
      41
      0
      7
      6
      42
      0
      7
      6
      42
      0
      25
      27
      0
      0
      25
      27
      0
      0
      165
      44
      31
      905
      </rxAdcProfile>
     </rx>
    
     <obsRx name=Rx 40.00MHz, OutputRate 80.00MHz, TotalDecimation 20>
      <obsRxChannelsEnable=TAL_ORX1ORX2>
      <enAdcStitching=0>
      <rxFirDecimation=2>
      <rxDec5Decimation=5>
      <rhb1Decimation=2>
      <orxOutputRate_kHz=80000>
      <rfBandwidth_Hz=40000000>
      <rxBbf3dBCorner_kHz=225000>
      <orxDdcMode=0>
    
      <filter FIR gain_dB=-6 numFirCoefs=72>
      -4
      9
      16
      10
      -16
      -41
      -33
      24
      86
      82
      -20
      -151
      -174
      -14
      231
      325
      104
      -313
      -549
      -287
      369
      860
      612
      -362
      -1284
      -1175
      206
      1865
      2167
      256
      -2811
      -4334
      -1757
      5215
      13855
      19804
      19804
      13855
      5215
      -1757
      -4334
      -2811
      256
      2167
      1865
      206
      -1175
      -1284
      -362
      612
      860
      369
      -287
      -549
      -313
      104
      325
      231
      -14
      -174
      -151
      -20
      82
      86
      24
      -33
      -41
      -16
      10
      16
      9
      -4
      </filter>
    
      <orxLowPassAdcProfile num=42>
      326
      179
      181
      90
      1280
      366
      1250
      27
      1021
      14
      583
      39
      48
      37
      23
      165
      0
      0
      0
      0
      41
      0
      7
      6
      42
      0
      7
      6
      42
      0
      25
      27
      0
      0
      25
      27
      0
      0
      165
      44
      31
      905
      </orxLowPassAdcProfile>
    
      <orxBandPassAdcProfile num=42>
      326
      179
      181
      90
      1280
      366
      1250
      27
      1021
      14
      583
      39
      48
      37
      23
      165
      0
      0
      0
      0
      41
      0
      7
      6
      42
      0
      7
      6
      42
      0
      25
      27
      0
      0
      25
      27
      0
      0
      165
      44
      31
      905
      </orxBandPassAdcProfile>
    
     </obsRx>
    
     <lpbk>
      <rxFirDecimation=2>
      <rhb1Decimation=1>
      <outputRate_kHz=245760>
      <rfBandwidth_Hz=220000000>
      <rxBbf3dBCorner_kHz=225000>
    
      <filter FIR gain_dB=0 num=48>
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      1
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      </filter>
    
      <lpbkAdcProfile num=1>
      0
      </lpbkAdcProfile>
     </lpbk>
    
     <tx name=Tx 200.00MHz, InputRate 245.76MHz, TotalInterpolation 32>
      <txChannels=TAL_TXOFF>
      <dacDiv=1>
      <txFirInterpolation=1>
      <thb1Interpolation=2>
      <thb2Interpolation=2>
      <thb3Interpolation=2>
      <txInt5Interpolation=1>
      <txInputRate_kHz=245760>
      <primarySigBandwidth_Hz=75000000>
      <rfBandwidth_Hz=200000000>
      <txDac3dBCorner_kHz=200000>
      <txBbf3dBCorner_kHz=100000>
    
      <filter FIR gain_dB=0 numFirCoefs=20>
      0
      0
      0
      0
      0
      0
      0
      0
      0
      1
      0
      0
      0
      0
      0
      0
      0
      0
      0
      0
      </filter>
     </tx>
    </profile>
    

  • The two profiles you have shared doesn't follow the profile generation rules . Please download the Talise filter wizard tool from below link.

    https://www.analog.com/en/design-center/landing-pages/001/transceiver-evaluation-software.html

    After downloading the filter wizard you will find the link to User Guide where you can check the profile generation rules recommended for generating any profile .

    We do not recommend to change /modify  the filter profiles generated from the profile wizard manually. You need to load the same filter profiles generated as it is from the filter wizard to TES GUI without any change /modification.. 

  • The two profiles you have shared doesn't follow the profile generation rules . Please download the Talise filter wizard tool from below link.

    These profiles have been generated with the latest v2.5 version without any "manual" modification and the tool raises no errors.  Can you elaborate on which rules are violated?  Our design uses nearly 30 profiles successfully but we can't use any that have a 80MHz device clock.

    Attached are the settings used in the Filter Wizard Tool:

    Thanks!

  • Good afternoon @vanitha,

    This issue has managed to make its way to the very top of our customer's impediment list so if you could please advise it would be greatly appreciated.

    Thanks in advance, 

    Barry

  • We cannot load 80MHz device clock as we have a 122.88 VCXO on the board.

  • Hello, would you be able to touch base with your team(s) that support the filter wizard/gui/api to investigate this further? We are trying to keep the ball rolling on this issue.
    Thank you!
    Barry
  • Can you try generating profile from the filter wizard without AD9528 settings and use the same profile in your custom setup.

    Use register writes for programming AD9528 chip separately and then please check if you are facing the same issue .

    Refer to the below link for the control register map configurations :

    https://www.analog.com/media/en/technical-documentation/data-sheets/ad9528.pdf

  • Hi Vanitha,

    Thank you for the suggestion.  I had tried this initially but omitting the ad9528 settings doesn't make a difference.  It seems the dev_clk is the limiting factor, and that parameter is unchanged by the inclusion of the ad9528 settings.

  • Good morning,

    I wanted to check in to see how things were progressing and if you needed any further information on out end.

    Thanks, Barry