This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADC32J25: JESD204B Configuration

Part Number: ADC32J25
Other Parts Discussed in Thread: LMK04828,

Hello,

We now have the board built and are in the process of bringing up.

The schematic was reviewed before but wanted to double check.

  • on Sheet 18
    • MGTREFCLK0P/N is 160 MHz device clock to the FPGA (receiver)
    • FPGACLK1P/N is 8 MHz SYSREF to the FPGA
    • ADCCLKP/N is the 160 MHz clock to the ADC (ADC32J25IRGZT, transmitter)
    • SYSREFP/N is the SYSREF to the ADC
    • Should they be all LVDS?
      • If so I should remove R414 and R415
      • Should I also update R418 and R419 to 0 Ohm?
      • Do I still need R346 and R347 for LVDS going to the FPGA?
  • Previously the following was mentioned
    • The lane rate = (Fs * 10 * F) / S. With LMFS = 2221, this is (160M * 10 * F) / 1 = 3.2Gbps. If you use a value of 20 for K, your SYSREF = Fs / (N * K), where N is any whole integer. If N = 1, your SYSREF = 8MHz.
    • Per the JESD204B standard, the following two equations must be met:

       1 < K < 32

      17 < F*K < 1024

      Since your F is 2, K will need to be at least 9. The larger value you use for K, the more buffering you provided for the data, but the larger the latency will be. Some parts only allow certain values of K to be used.

  • N doesn't seem to be tied to any parameters.  Then K becomes arbitrary.  How do I determine N?

The schematic was reviewed but could you take another look at

  • Sheet 2: SYNCP_ADC & SYNCM_ADC
    • are generated as 3.3V CMOS
  • Sheet 3: FPGACLK1P/N: SYSREF from LMK04828
    • LVDS
  • Sheet 5: DAP/M_ADC, DBP/M_ADC, and GTREFCLK0P/N
    • All LVDS
  • Sheet 15: ADC32J25IRGZT
  • Sheet 18: LMK04828

I think all of the differential signals are LVDS except SYNCs.

I would appreciate if you could take another look and confirm on the circuits and terminations.

Regards,

Andrew

1067.fibersense_v1p23.pdf

  • Hi Andrew,

    I will check into this. Just a heads up, the response may be delayed due to the holiday.

    Regards, Amy

  • Andrew,

    Yes, all clocks and SYSREF should be LVDS.

    N is an integer such that the SYSREF frequency falls on a multi-frame boundary. If you want to run the SYSREF frequency slower, it must be an integer multiple of the maximum SYSREF frequency (Fs/K). In the example above, if you set N=2, then the new SYSREF frequency will be 4MHz. This still lands on a multi-frame boundary.

    The only worry I see with your schematic is this device uses a differential SYNC. SYNCP and SYNCN should be DC coupled with VCM at 0.95V.

    Typically in cases like this, an LVDS to LVPECL translation is performed using a voltage divider. What is the IO level for these FPGA pins?

    Thanks, Chase

  • Hi Chase,

    My apologies for delay.  was traveling.

    SYNCP~ and SYNCM~ are 3.3V CMOS from regular FPGA pins.

    Would it still work for 1.3V VIH?

    Thank you,

    Andrew

  • Hi Chase,

    Could you take a look at SYNCP/M~ signals on the schematic?

    They are generated by the regular FPGA pins with 3.3V CMOS.

    Also for Class 1 JESC, as I understand, SYNC~ is not used.  Instead SYSREF is used.

    Is this correct?

    Thank you,

    Andrew 

  • Hi Chase,

    Btw I found the following quote from my previous thread on schematic review of the current design with ADC32J25

    "SYNC is basically a DC signal in the JESD204B standard and should not have the AC caps. The 100 Ohm termination is also not needed."

    I think that was the reason I kept the design the way it is now.

    Please let me know.

    Andrew

  • Hi Chase,

    Can you take a look at this or try it?

    DCLKout0 is the reference clock to the FPGA at 160 MHz

    and SDCLKout1 is the SYSREF to the FPGA at 8 MHz

    I probed both.  I observed a 160 MHz signal at DCLKout0 but there is no signal at SDCLKout1.

    Could you see if I am missing something for the SYSREF output?

    Thank you,

    Andrew

    LMK04828b_v071623c.tcs

  • I have tried a few different configurations but still no SYSREF on SDCLKout1.

    I was just looking at the datasheet.  Do I need to pulse or toggle the SYNC (Pin 6) on LMK04828 to generate the SYSREF signal?

    Thank you,

    Andrew

  • Hi Andrew,

    Sorry for the delay. I was out sick earlier this week and have returned today. Please find my comments below.

    SYNCP~ and SYNCM~ are 3.3V CMOS from regular FPGA pins.

    Would it still work for 1.3V VIH?

    No, this will not work. The device is expecting a DC couped differential signal for SYNC with max voltage applied up to AVDD + 0.3V. This means either SYNC pin should only see a max of 2.1V.

    Also for Class 1 JESC, as I understand, SYNC~ is not used.  Instead SYSREF is used.

    Partially correct, JESD204B subclass 1 uses SYSREF for deterministic latency, but still uses SYNC for beginning CGS (code group synchronization) phase of bring up. The ILAS (Initial lane alignment sequence) phase will be driven by SYSREF as the ILAS falls on a LMFC boundary (which in subclass 1 is aligned to SYSREF).

    Hi Chase,

    Can you take a look at this or try it?

    DCLKout0 is the reference clock to the FPGA at 160 MHz

    and SDCLKout1 is the SYSREF to the FPGA at 8 MHz

    I probed both.  I observed a 160 MHz signal at DCLKout0 but there is no signal at SDCLKout1.

    Could you see if I am missing something for the SYSREF output?

    Thank you,

    Andrew

    LMK04828b_v071623c.tcs

    We will have someone from the clocking team look at this shortly.

    I was just looking at the datasheet.  Do I need to pulse or toggle the SYNC (Pin 6) on LMK04828 to generate the SYSREF signal?

    From my understanding, if you are in pin-pulse mode, you will need to toggle SYNC on LMK04828 to generate a burst of SYSREF signal. If you are in continuous SYSREF mode, this is not necessary. Again, someone from the clocking team will review this for you.

    Regards, Chase

  • HI Chase,

    I started another thread on LMK04828 where I'm trying to see if LMK04828 is set up correctly.

    Below is the register file with the steps to set up the SYSREF generation (Lines 137 thru 147.

    Still not seeing the SYSREF output from SDCLKout1.

    In the meanwhile, all of the control signals including SYNC~ are coming from 3.3V pins,

    So they are above AVDD (1.8V) + 0.3V.  I can try to read back. 

    Would they have damaged the ADC? Would they not work at all, even if we slow down significantly?

    I will try to see if there are ways to rework but am preparing for a board spin.

    Thank you,

    Andrew

  • I have missed the file.  Here it is.

    Thank you

    0x000090
    0x000010
    0x000200
    0x000306
    0x0004D0
    0x00055B
    0x000600
    0x000C51
    0x000D04
    0x01000F
    0x010155
    0x010255
    0x010301
    0x010422
    0x010500
    0x010670
    0x010711
    0x01080F
    0x010955
    0x010A55
    0x010B00
    0x010C22
    0x010D00
    0x010E70
    0x010F11
    0x01100F
    0x011155
    0x011255
    0x011300
    0x011422
    0x011500
    0x0116F0
    0x011711
    0x011818
    0x011955
    0x011A55
    0x011B00
    0x011C02
    0x011D00
    0x011EF1
    0x011F11
    0x012018
    0x012155
    0x012255
    0x012300
    0x012402
    0x012500
    0x0126F1
    0x012711
    0x012808
    0x012955
    0x012A55
    0x012B00
    0x012C02
    0x012D00
    0x012EF9
    0x012F00
    0x01300F
    0x013155
    0x013255
    0x013300
    0x013402
    0x013500
    0x0136F1
    0x013706
    0x013800
    0x013900
    0x013A01
    0x013B2C
    0x013C00
    0x013D08
    0x013E03
    0x013F00
    0x01400B
    0x014101
    0x014200
    0x014319
    0x014400
    0x01457F
    0x014600
    0x01471A
    0x014802
    0x014942
    0x014A02
    0x014B16
    0x014C00
    0x014D00
    0x014EC0
    0x014F7F
    0x015003
    0x015102
    0x015200
    0x015300
    0x015478
    0x015500
    0x015664
    0x015700
    0x015896
    0x015900
    0x015A64
    0x015BD4
    0x015C20
    0x015D00
    0x015E00
    0x015F0B
    0x016000
    0x016101
    0x016225
    0x016300
    0x016400
    0x01650F
    0x0171AA
    0x017202
    0x017C15
    0x017D33
    0x016600
    0x016700
    0x01680F
    0x016959
    0x016A20
    0x016B00
    0x016C00
    0x016D00
    0x016E13
    0x017300
    0x018200
    0x018300
    0x018400
    0x018500
    0x018800
    0x018900
    0x018A00
    0x018B00
    0x1FFD00
    0x1FFE00
    0x1FFF53
    0x013900
    0x014319
    0x01000F
    0x01080F
    0x013A01
    0x013B2C
    0x014008
    0x014319
    0x013E03
    0x014339
    0x014319
    
    
    

  • Hello Andrew,

    I was able to replicate your issue on the bench but I'm still struggling to understand why we are both seeing the same issue. I should have this resolved by next week and I can get back to you then. Also, following up on Chase's response, what he said is correct. You can generate the SYSREF signal by either toggling the SYNC pin or using the SYSREF pulser, not necessarily both. Also is your question/statement below:

    Below is the register file with the steps to set up the SYSREF generation (Lines 137 thru 147.

    Still not seeing the SYSREF output from SDCLKout1.

    related to the same issue you mentioned here:

    I observed a 160 MHz signal at DCLKout0 but there is no signal at SDCLKout1.

    Thanks!

    Best,

    Andrea

  • Hi Andrea,

    Here's the TICs pro file I used to export the register values.

    Thank you,

    Andrew

    LMK04828b_v072123a.tcs

  • Hello Andrew,

    I was able to solve your problem. From the second file you attached, you need to:

    1) Set SYNC_DISSYSREF = 0 and then toggle SYNC by setting 0x143 = 31 and 0x143 = 11. This resets the dividers and aligns your outputs.

    2) Set 0x144 = FF. This disables the outputs from being resynchronized from a SYNC event.

    3) Set 0x143 = 11. This sets the device to obtain the SYNC from the SYNC pin generated via SPI.

    4) Set 0x139 = 03. This makes the SYSREF_MUX output a continuous SYSREF so you will be able to see a signal at any time you probe the pin. If you don't want to see use a continuous signal, but still see the signal when you probe it, you need to set your scope to trigger on the rising edge of your signal.

    I have attached the .tcs file that works on my end. You should load it and it should work.

    LMK04828_JESD204B_Config_Cust.tcs

    Hope this helps. Good luck!

    Best,

    Andrea

  • Hi Andrea,

    The 8-MHz Sysref is working after following your suggestions!

    Also attached below are the .tcs (which is the same as yours) and the .hex file I used (basically exported from TICs Pro and added your suggested commands after 0x1FFF53

    0820.LMK04828_JESD204B_Config_Cust.tcs

    0x000090
    0x000010
    0x000200
    0x000306
    0x0004D0
    0x00055B
    0x000600
    0x000C51
    0x000D04
    0x01000F
    0x010155
    0x010255
    0x010301
    0x010422
    0x010500
    0x010670
    0x010711
    0x01080F
    0x010955
    0x010A55
    0x010B00
    0x010C22
    0x010D00
    0x010E70
    0x010F66
    0x01100F
    0x011155
    0x011255
    0x011300
    0x011402
    0x011500
    0x0116F0
    0x011711
    0x01180F
    0x011955
    0x011A55
    0x011B00
    0x011C02
    0x011D00
    0x011EF0
    0x011F17
    0x012018
    0x012155
    0x012255
    0x012300
    0x012402
    0x012500
    0x0126F1
    0x012711
    0x012808
    0x012955
    0x012A55
    0x012B00
    0x012C02
    0x012D00
    0x012EF9
    0x012F00
    0x01300F
    0x013155
    0x013255
    0x013300
    0x013402
    0x013500
    0x0136F1
    0x013706
    0x013805
    0x013903
    0x013A01
    0x013B2C
    0x013C00
    0x013D08
    0x013E03
    0x013F00
    0x014009
    0x014101
    0x014200
    0x014311
    0x0144FF
    0x01457F
    0x014600
    0x01471A
    0x014802
    0x014942
    0x014A02
    0x014B16
    0x014C00
    0x014D00
    0x014EC0
    0x014F7F
    0x015003
    0x015102
    0x015200
    0x015300
    0x015478
    0x015500
    0x015664
    0x015700
    0x015896
    0x015900
    0x015A64
    0x015BD4
    0x015C20
    0x015D00
    0x015E00
    0x015F0B
    0x016000
    0x016101
    0x016225
    0x016300
    0x016400
    0x01650F
    0x0171AA
    0x017202
    0x017C15
    0x017D33
    0x016600
    0x016700
    0x01680F
    0x016959
    0x016A20
    0x016B00
    0x016C00
    0x016D00
    0x016E13
    0x017300
    0x018200
    0x018300
    0x018400
    0x018500
    0x018800
    0x018900
    0x018A00
    0x018B00
    0x1FFD00
    0x1FFE00
    0x1FFF53
    0x014400
    0x014331
    0x014311
    0x0144FF
    0x014311
    0x013903
    
    

    I will now try to get the ADC working with JESD204B.

    Thank you so much,

    Andrew

    ps: I would like to keep this for a few more days while I am trying to get the JESD204B working with the ADC

     

  • Hi Andrea,

    Could you take a look at the notes and the schematic?

    Mainly I'm trying to see if the signaling types are consistent between LMK04828 and ADC32J25

    • ADC32J25 is expecting ADCCLKP/N and SYSREFP/N to be LVDS
    • On LMK04828, those signals are designed to be LVPECL.  I can update the resistors.

    Thank you,

    Andrew

    notes 072423a.pdf

    6318.fibersense_v1p23.pdf

  • Hello Andrew,

    Here are my suggestions on your schematic:

    • Instead of powering down CLKout10_11, I would power down CLKout8_9 and use CLKout10_11 for your 100-MHz outputs. Since 160-MHz and 100-MHz pins are relatively close, placing them as far apart from each other as possible will minimize crosstalk.
    • VCC9_CP2 0.1-uF cap next to the ferrite bead should be placed to the left of the ferrite bead. From Figure 41 on the DS (included below), the 0.1uF to the right should only be added for phase detector frequencies (PFD) < 50-MHz, which is not your case (your PFD is 80-MHz). 

    • To any SPI lines, it's a good rule of thumb to add a series resistor on those lines (a 10-Ω resistor should suffice) close to the SPI pin. That applies to CLKin_SEL (pins 58 and 59), STATUS_LD (pins 31 and 48), RESET (pin 5), SYNC (pin 6), SCK (pin 19), and SDIO (pin 20)
    • If you are planning to change the termination to LVDS, you should use the below setup (Figure 30 on LMK04828 DS) for the ADC and SYSREF to the ADC since both inputs to the ADC require an external termination.

    • For CLKout6, since it's LCPECL, you need the below termination:

    • The termination for CLKout8 and CLKout9 should be on the receiver side, not the LMK04828.

    I'll let Chase comment on the rest of the schematic.

    Best,

    Andrea

  • Hi Andrea,

    Thanks again for your review.

    Currently the board has been built so I'll try to get it working as much as possible, and follow your recommendations in the next board spin.

    As for ADCCLKP/N and SYSREFP/N, the ADC is designed for LVPECL and so is LMK04828.

    So I think it should be okay.

    With Sysref working, let me see if I can capture some data from ADC.

    My concern is the control signals are coming from 3.3V FPGA pins, above 1.8V + 0.3V.

    Let me get back to you once I try.

    Regards,

    Andrew

  • Hello Andrew,

    All the suggestions I made are more recommendations rather than requirements to make the part work, except for the CLKout6, not sure if that termination you have will allow you to see a LCPECL signal. If you are seeing your desired output, then I would not worry in terms of the LMK04828.

    For the LVPECL signal coming out of the LMK04828 to the ADC, that should not cause any issues on either part. In fact, the ADC can handle an LVPECL clock and because of the higher swing, it'll actually improve your ADC performance. In fact, I would recommend that termination to the ADC if you don't mind higher power consumption. Hope this helps.

    Best,

    Andrea

  • Hi Andrea,

    I had been traveling, and am back to this.

    I have verified that the FPGA is able to send the register values to the ADC correctly.

    Previously I was concerned that the FPGA bank was 3.3V with ADC SPI expecting 1.8V signals.

    I was able to read back the register values correctly.  I changed several time to make certain. And the correct register values were read everytime.

    Having said this, I'm trying the following

    • Send a test pattern from ADC32J25 and verify in the FPGA. 
      • I was using several registers: 3Bh, 09h, 0Ah, and 0Bh.  
      • I think 09h, 0Ah, and 0Bh are generating the test pattern at the SERDES level
      • 3Bh is generating at the Link Layer
      • In the end, I was just using 3Bh to try the different test patterns
      • I have gotten to a point where when I set the pattern to K28.5 (010) I was capturing BCBC on consistent basis
      • However, for other patterns, the captured data was not consistent
      • The SYSREF would be periodic.  Do I need to make this one time to be able to capture ADC data?

    00C00600
    00400601
    00C00600
    00400100
    00400300
    00400400
    00400600
    00400700
    00400800
    00400900
    00400A00
    00400B00
    00400C00
    00400D00
    00400E00
    00400F00
    00401300
    00401500
    00402700
    00402A53
    00402B03
    00402F00
    00403001
    00403113
    00403420
    00403A00
    00403B60
    00403C00
    00442200
    00443400
    00452200
    00453400

    Would it be possible for you to take a look at the registers and let me know where I need to make changes to receive consistent test patterns?

    If possible, could you provide a few sets of registers values with expected received data patterns?

    Also let me know if I need to make changes to LMK04828 to make the SYSREF one time.

    Btw

    • Frames per multi frame: 20
    • Octets per frame: 2
    • Scrambling: off

    Besides 3Bh, 09h, 0Ah, and 0Bh, there is also 2Ah for Serdes test pattern.  I'm trying to see which test modes I should be looking at.

    In terms of setting the JESD204B on the FPGA

    • Scrambling: disabled
    • 0 = No SYSREF event is required on a Link Re-Sync event:
      • RX core deasserts SYNC on the next LMFC.
      • SYSREF delay: 0 core_clk cycles delay
      • 0 = Core only aligns LMFC counter on the first SYSREF event detected following reset,
        and ignores subsequent SYSREF events

    Thanks again for your help

    Andrew

  • Hello Andrew,

    Why do you need to generate the test patterns? What are you trying to achieve with them? Ideally, if I know your goal/what you're trying to do with the ADC32J25, I can better support with this question. Thanks!

    Best,

    Andrea

  • HI Andrea,

    I just wanted to make certain the JESD is working properly for troubleshooting purpose but the end goal is to get the sampled data from the ADC32J25.

    We can try the ADC data first.

    Thank you,

    Andrew

  • Hello Andrew,

    It would be great if you could test the data right away and if not we'll go back to your test pattern. If that works for you, let me know if it works/doesn't work and we can go from there.

    Thanks again,

    Andrea

  • Hi Andrea,

    Okay.  Let me try it today.

    Thank you,

    Andrew

  • HI Andrea.

    Here are a couple of screen captures to show the K characters

    Also attached is a list of the register values.  The only non-zero values are 2B, 30, and 31.

    Not certain what the next step should be.  We have reworked the FPGA design and it seems to be okay.  All the clocks are working.  The ILAs are working.

    Regards,

    Andrew

      adc_regi.pdf

  • Andrew,

    This looks like sync is having issues, likely due to the format of which it was designed in. I think you will have to use the device's software sync to initialize this link. Refer to register 0x3A SYNC_REQ and SYNC_REQ_EN.

    Regards, Chase

  • Hi Chase,

    You were correct.  

    We worked on the sync sequence and timing, and it looks like we are receiving valid data.

    Please see the attached screen captures.

    We just need to parse the data and verify.

    One question, would it be more advantageous to have a one-time SYSREF as opposed to repeating?

    I can look at but appreciate if you point me in the direction to update the LMK04828 registers for one-time SYSREF,

    Regards,

    Andrew

  • Hi Andrew,

    Glad you are receiving proper data now. Regarding sysref, continuous sysref is convenient but not necessary.  , can you help with LMK reg updates?

    Regards, Chase

  • Hello Andrew,

    To just generate a pulse for your SYSREF after toggling SYNC, all you need to do is set register 0x139[1:0] = 0 (make SYSREF_MUX = Normal SYNC). Hope this helps!

    Best,

    Andrea

  • Hi Andrea,

    Attached is a waveform captured in the FPGA.

    The 1st figure is a plot of the data directly from Vivado ILA.

    In the 2nd, I extracted the red parts of the 1st waveform and concatenated them.

    In short, I believe the basic mechanisms of the ADC and JESD are working.

    We would just need to improve the synchronization process and figure out the data formatting.

    So I am closing the case.

    Once we get everything working as we would like to be, I may update the schematic and share for review.

    Thank you and others for all the support.

    Regards,

    Andrewadc_capture1.pdf

  • Hi Andrew,

    I am glad to hear your link is up. The data you attached looks good! If you have any issues, please include a link to this thread in any future forum post regarding this topic as it will help to provide some backstory.

    Regards, Chase