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.

ADS54J42EVM: JESD204B Interface between ADC & Intel Arria 10 FPGA Development Kit

Part Number: ADS54J42EVM

Hi TI Experts,

I've been trying to interface the ADS54J42 EVM with the Intel Arria 10 FPGA Development Board. I have them connected via FMC. Thus far, I've been unsuccessful.

To clarify, my JESD204B module on the FPGA is configured as a receiver with subclass 1, 2500 Mbps data rate, Soft PCS enabled, 62.5 MHz Reference Clock, LMFS = 8224, K = 32, N = 14, N’ = 16, and scrambling enabled (though I think this should not affect the link sequence).

I am using Intel's Signal Tap to capture the signals going to/coming from the interface. Here are some screenshots:

rx_islockedtodata is input to my reset controller from the JESD IF. It goes from some value (0xEF in the screenshots) to 0xFF. After some time, the rx_digitalreset (input to JESD IF from reset controller) goes from 0xFF to 0x00, and rx_ready (input to JESD IF from reset controller) goes from some value (0xD2 in the screenshots) to 0xFF. I think this is to indicate that all lanes are ready.

At this point, rx_data_valid pulses, and then the interrupt signal rx_data_int is asserted for some time. Once it is deasserted, the digital reset signal is again 0xFF, and the rx_islockedtodata goes back to some non-0xFF value (0xFB in the screenshots).

From my simulations, I expect that after this reset sequence:

  • rx_is_lockedtodata 0x00 -> 0xFF
  • rx_digitalreset 0xFF -> 0x00 & rx_ready 0x00 -> 0xFF

the adc_syncb_in signal will be asserted, followed by the dev_lane_aligned. After this, rx_data_valid will be asserted with valid data from the serial data pins. The interrupt signal is not asserted.

I've attached the cfg files given to me for this link up test with the ADC EVM board. The instructions are to follow this procedure for a 500 MHz external clock input to the LMK:

1. Launch ADC54Jxx EVM GUI

2. Confirm that the USB Status LED on the GUI is on

3. Load LMK_Config_External_Clock.cfg in the "Low Level View" Tab

4. Confirm that D1 & D2 LEDs do not light

5. Press SW1 for ADC Reset

6. Load ADS54J40_LMF_8224_K32.cfg in the Low Level View Tab

I'm stumped and was hoping for your insight. Here are some of my questions:

1. Is the ADC configured correctly given the config file attached?

2. Is the LMK clock source configured correctly given the config file attached? The expected clock outputs are 62.5 MHz for the device clock & 3.90625 MHz for the system reference clock for an external 500 MHz reference clock input to the J6 LMK_CLKIN port.

3. Do I have to desolder the shunt component in SJP2 since I'm using an external clock source?

4. Should I be using the CLK_LAO_0 signal? Currently I use the FPGA_JESD_CLK at my 62.5 MHz device clock. This is input to the JESD Interface module as a pll_ref_clk signal. My rxlink_clk is also a 62.5 MHz clock, which is the output of another PLL which uses the FPGA_JESD_CLK as reference to output the 62.5 MHz rxlink_clk (as well as some other clocks for the system).

Apologies for the long post, and thank you in advance for any insight.

Regards,

Abdul

ADS54J40_LMF_8224_K32.cfgLMK_Config_External_Clock.cfg

  • Hi Abdul,

    We are looking at your question and will get back to you.

    Regards,

    Neeraj

  • Hi Neeraj,

    Thanks for the reply. I'm editing my post to make it more concise. I think I've solved the issue with the link up. It was partly a problem with the cfg files and one of the settings of the PLL used to produce the rxlink clock. I'm now able to link the ADC and Arria 10 FPGA without any interrupt/error assertions.

    My last issue is about the frame assembly described in the datasheet.

    I get a 256-bit data stream per 62.5 MHz clock cycle. I'm just not so sure if I have the data in correct sample order. Below is what I've implemented, with data0 - data7 being consecutive data points.

    Have I done the assignments correctly? Do I have it correct that data7 is the oldest sample & data0 is the latest (for each channel)?

    Thank you for any insight you can provide.

    Regards,

    Abdul

  • Abdul,

    Your ADC configuration file works fine with our TSW14J57EVM (Arria 10 FPGA). I would suggest you move the SYSREF divide register writes to the beginning of the file as these new settings will not be used by the ADC since you disabled the SYSREF going to ADC before doing these divides.

    I am not very familiar with the firmware so I cannot answer the question you have about your mapping. Not sure what you are asking about data 7 to data 0. In the table from the data sheet, it is showing only 4 samples for each channel.

    Also, if you did not notice, the serdes lanes coming out of the ADC do not map 0 to 0, 1 to 1, ect... with the FMC connector per the Vita FMC standard. This must be taken into consideration when mapping the data inside your FPGA.

    Regards,

    Jim

  • Hi Jim,

    Thanks for the tip on the serdes lanes. Eventually I realized that I had to switch the data pins coming into the JESD Interface IP module according to the sample order in the datasheet. I changed it from

    {DB3, DB2, DB1, DB0, DA3, DA2, DA1, DA0} -> {DB0, DB1, DB3, DB2, DA0, DA1, DA3, DA2}.

    Doing this, I didn't have to rearrange the rx_link_data bits (256 bits, 128 bits/channel, 32 bits/serial lane, N' = 16 & N = 14 bits/sample) corresponding to each data point (data0 oldest - data7 latest).

    Also, in case it'll help anyone in the future, I spent a bit of time on debugging the link because an interrupt signal was being asserted despite everything seemingly performing alright. I eventually found out that I had to set the PLL compensation mode setting to normal instead of the direct default setting. This PLL uses the device clock as reference to produce the rxlink_clk needed by the JESD Interface IP module.

    Thanks again for your time. Consider this matter resolved.

    Regards,

    Abdul