Because of the holidays, TI E2E™ design support forum responses will be delayed from Dec. 25 through Jan. 2. Thank you for your patience.

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.

ADC12QJ1600EVM: SPI Config for EVM Yields Toggling SYNC Signal

Part Number: ADC12QJ1600EVM

Using the ADCxxQJ1600EVM Software GUI, I extracted the Python SPI configuration, which showed the device commanding and ordering. Following the configuration from the software, I established a JESD204b link; however, the SYNC pin appears to be toggling.

Details:

Mode: JMODE0

Sampling Frequency: 1GHz

FPGA: Xilinx KU060

Xilinx IP: JESD204 PHY, JESD204 RX (https://www.xilinx.com/support/documentation/ip_documentation/jesd204/v7_2/pg066-jesd204.pdf)

  • Hi Heidi,

    There are many reasons for JESD sync signal to toggle. 

    1. Signal integrity issue between the ADC and FPGA. 

    2. K parameter is programmed wrong.

    3. The FPGA GBT clocking is not stable. 

    Can you please provide little bit of more insight into the issue. May be try the ADC gui to program the ADC and see if you see different resut?

    Regards,

    Neeraj  

  • I actually programmed the EVM using the GUI itself also, and it led to the same result. The Xilinx IP does not have very many parameters to set: F, K, and some boxes relating to the SYSREF. I've checked those boxes a few times, but I can look at them again.

  • Hi Heidi,

    Can you please share the gui settings by sending the screen shots of the GUI showing the settings you used to program the ADC. 

    Regards,

    Neeraj 

  • I attached images of the ADCQJxx1600 EVM software (I ran the program in simulation mode.). I also attached a python log of the SPI commands that the software issued.

    GUI_Module=__import__('ADC12QJ1600 EVM GUI')
    
    GUI=GUI_Module.Device_GUI("ADC12QJ1600 EVM GUI.exe",6640.000000)
    GUI.write_register("OSC_ENA","ENA OR DISABLE OSC",0x0)
    GUI.write_register("GBT_SEL","SEL_GTB_CLK_SOURCE",0x1)
    GUI.write_register("LMK04828","x000",0x80)
    GUI.write_register("LMK04828","x000",0x0)
    GUI.write_register("LMK04828","x002",0x0)
    GUI.write_register("LMK04828","x100",0x1)
    GUI.write_register("LMK04828","x101",0x55)
    GUI.write_register("LMK04828","x103",0x2)
    GUI.write_register("LMK04828","x104",0x20)
    GUI.write_register("LMK04828","x105",0x0)
    GUI.write_register("LMK04828","x106",0xF0)
    GUI.write_register("LMK04828","x107",0x6)
    GUI.write_register("LMK04828","x108",0x1)
    GUI.write_register("LMK04828","x109",0x55)
    GUI.write_register("LMK04828","x10B",0x0)
    GUI.write_register("LMK04828","x10C",0x22)
    GUI.write_register("LMK04828","x10D",0x0)
    GUI.write_register("LMK04828","x10E",0xF9)
    GUI.write_register("LMK04828","0x10F",0x0)
    GUI.write_register("LMK04828","x110",0x5)
    GUI.write_register("LMK04828","x111",0x55)
    GUI.write_register("LMK04828","x113",0x0)
    GUI.write_register("LMK04828","x114",0x2)
    GUI.write_register("LMK04828","x115",0x0)
    GUI.write_register("LMK04828","x116",0xF1)
    GUI.write_register("LMK04828","x117",0x1)
    GUI.write_register("LMK04828","x118",0x1)
    GUI.write_register("LMK04828","x119",0x55)
    GUI.write_register("LMK04828","x11B",0x2)
    GUI.write_register("LMK04828","x11C",0x2)
    GUI.write_register("LMK04828","x11D",0x0)
    GUI.write_register("LMK04828","x11E",0xF9)
    GUI.write_register("LMK04828","x11F",0x1)
    GUI.write_register("LMK04828","x120",0x5)
    GUI.write_register("LMK04828","x121",0x55)
    GUI.write_register("LMK04828","x123",0x0)
    GUI.write_register("LMK04828","x124",0x22)
    GUI.write_register("LMK04828","x125",0x0)
    GUI.write_register("LMK04828","x126",0xF1)
    GUI.write_register("LMK04828","x127",0x1)
    GUI.write_register("LMK04828","x128",0x1)
    GUI.write_register("LMK04828","x129",0x55)
    GUI.write_register("LMK04828","x12B",0x2)
    GUI.write_register("LMK04828","x12C",0x22)
    GUI.write_register("LMK04828","x12D",0x0)
    GUI.write_register("LMK04828","x12E",0xF0)
    GUI.write_register("LMK04828","x12F",0x10)
    GUI.write_register("LMK04828","x130",0x1)
    GUI.write_register("LMK04828","x131",0x55)
    GUI.write_register("LMK04828","x133",0x2)
    GUI.write_register("LMK04828","x134",0x22)
    GUI.write_register("LMK04828","x135",0x0)
    GUI.write_register("LMK04828","x136",0xF8)
    GUI.write_register("LMK04828","x137",0x1)
    GUI.write_register("LMK04828","x138",0x45)
    GUI.write_register("LMK04828","x139",0x3)
    GUI.write_register("LMK04828","x13A",0x0)
    GUI.write_register("LMK04828","x13B",0xA0)
    GUI.write_register("LMK04828","x13C",0x0)
    GUI.write_register("LMK04828","x13D",0x8)
    GUI.write_register("LMK04828","x13E",0x3)
    GUI.write_register("LMK04828","x13F",0x0)
    GUI.write_register("LMK04828","x140",0x1)
    GUI.write_register("LMK04828","x141",0x0)
    GUI.write_register("LMK04828","x142",0x8)
    GUI.write_register("LMK04828","x143",0x32)
    GUI.write_register("LMK04828","x144",0x87)
    GUI.write_register("LMK04828","x145",0x0)
    GUI.write_register("LMK04828","x146",0x18)
    GUI.write_register("LMK04828","x147",0x2)
    GUI.write_register("LMK04828","x148",0x2)
    GUI.write_register("LMK04828","x149",0x2)
    GUI.write_register("LMK04828","x14A",0x2)
    GUI.write_register("LMK04828","x14B",0x2)
    GUI.write_register("LMK04828","x14C",0x0)
    GUI.write_register("LMK04828","x14D",0x0)
    GUI.write_register("LMK04828","x14E",0x0)
    GUI.write_register("LMK04828","x14F",0x7F)
    GUI.write_register("LMK04828","x150",0x1)
    GUI.write_register("LMK04828","x151",0x2)
    GUI.write_register("LMK04828","x152",0x0)
    GUI.write_register("LMK04828","x153",0x0)
    GUI.write_register("LMK04828","x154",0xC)
    GUI.write_register("LMK04828","x155",0x0)
    GUI.write_register("LMK04828","x156",0xC)
    GUI.write_register("LMK04828","x157",0x0)
    GUI.write_register("LMK04828","x158",0x78)
    GUI.write_register("LMK04828","x159",0x0)
    GUI.write_register("LMK04828","x15A",0x78)
    GUI.write_register("LMK04828","x15B",0xD4)
    GUI.write_register("LMK04828","x15C",0x20)
    GUI.write_register("LMK04828","x15D",0x0)
    GUI.write_register("LMK04828","x15E",0x0)
    GUI.write_register("LMK04828","x15F",0xB)
    GUI.write_register("LMK04828","x160",0x0)
    GUI.write_register("LMK04828","x161",0x2)
    GUI.write_register("LMK04828","x162",0x44)
    GUI.write_register("LMK04828","x163",0x0)
    GUI.write_register("LMK04828","x164",0x0)
    GUI.write_register("LMK04828","x165",0xC)
    GUI.write_register("LMK04828","x17C",0x15)
    GUI.write_register("LMK04828","x17D",0x33)
    GUI.write_register("LMK04828","x166",0x0)
    GUI.write_register("LMK04828","x167",0x0)
    GUI.write_register("LMK04828","x168",0x1)
    GUI.write_register("LMK04828","x169",0x59)
    GUI.write_register("LMK04828","x16A",0x20)
    GUI.write_register("LMK04828","x16B",0x0)
    GUI.write_register("LMK04828","x16C",0x0)
    GUI.write_register("LMK04828","x16D",0x0)
    GUI.write_register("LMK04828","x16E",0x4)
    GUI.write_register("LMK04828","x139",0x0)
    GUI.write_register("LMK04828","x143",0x11)
    GUI.write_register("LMK04828","x140",0x0)
    GUI.write_register("LMK04828","x144",0x74)
    GUI.write_register("LMK04828","x143",0x11)
    GUI.write_register("LMK04828","x143",0x31)
    GUI.write_register("LMK04828","x143",0x11)
    GUI.write_register("LMK04828","x144",0xFF)
    GUI.write_register("LMK04828","x139",0x3)
    GUI.write_register("LMK04828","x14A",0x6)
    -- 0x00
    GUI.write_register("ADC12QJxx00","CONFIG_A",0xB0)
    -- 0x2B
    GUI.write_register("ADC12QJxx00","CLK_CTRL2",0x15)
    -- 0x200
    GUI.write_register("ADC12QJxx00","JESD_EN",0x0)
    -- 0x61
    GUI.write_register("ADC12QJxx00","CAL_EN",0x0)
    -- 0x201
    GUI.write_register("ADC12QJxx00","JMODE",0x0)
    -- 0x202
    GUI.write_register("ADC12QJxx00","KM1",0x3)
    -- 0x204
    GUI.write_register("ADC12QJxx00","JCTRL",0x1)
    -- 0x213
    GUI.write_register("ADC12QJxx00","OVR_CFG",0xF)
    -- 0x61
    GUI.write_register("ADC12QJxx00","CAL_EN",0x1)
    -- 0x200
    GUI.write_register("ADC12QJxx00","JESD_EN",0x1)
    -- 0x6C
    GUI.write_register("ADC12QJxx00","CAL_SOFT_TRIG",0x0)
    -- 0x6C
    GUI.write_register("ADC12QJxx00","CAL_SOFT_TRIG",0x1)
    GUI.__del__()
    

    Lastly, I verified the F (8) and K (4) parameters in the Xilinx JESD204b IP.

  • Hi Heidi,

    Can you please make sure when the clock is applied to ADC and the ADC has been programmed using the GUI.

    Click the following button to make sure SERDES PLL LOCKED indicator is turned on. This will tell us the clock is getting the ADC. 

    Regards,

    Neeraj