Post Go back to editing

JESD204 - AD9683 Data Coherancy Issue

Category: Hardware
Product Number: AD9683

We have a hardware platform containing the AD9683 ADC running at 50 MS/s. It is connected to an AMD ZYNQ-7000 SoC, where i have a running hardware design using the AMD/XILINX JESD204B receiver IP. The hardware design seems to be running correctly (i.e. data-transfer from JESD serial interface to DRAM is working).

Issue(s):

1. ILA configuration data mismatch between AD9683 <=> JESD204 receiver

    During the inter-lane-alignment sequence of the JESD-interface the link parameters are transmited to the receiver and stored in a handful of registers that i have read out:

   

    Now compare this to the values as configured in the AD9683's registers:

  

   

     As you can see all of the parameters match except for:

     - Device ID: Is 60 (0x3C) but should be (0xC3)

     - JESD204 Version: Is 6 (0b110) but should be (0b001 => this means JESD204B)

       

     - Converter Resolution (N): Is 19 but should be 14

     - I also found an error in the AD9683 datasheet: It is stated that the link-parameter CF is equalt to 0 for AD9683, but according to the register description this would be incorrect. The value in the register woud then have to be -1

     

            

2. Now for the data coherancy issue:

   

    In order to verify that the transfered data is correct, i have enabled the ADC test-pattern generator.

    I tested three options for CS=0 (i.e. no control-bits and tail-bits = 0):

    - Checkerboard (the data is constant so no point in showing more than one transfer)

      You are looking at a single transfer on the AXI4 bus (32-bit i.e. two samples). As you can see OCTET1 always seems to be correct while OCTET0 contains errors

   +---------------------- Captured Data -----------------------+
   ¦ No. ¦ Address    ¦ Data (raw)                              ¦
   ¦ --- ¦ ---------- ¦ --------------------------------------- ¦
   ¦   0 ¦ 0x0011D050 ¦ 0b 10101011'10101010'01001000'01010101  ¦
                           -------- -------- -------- --------
                            OCTET0   OCTET1   OCTET0   OCTET1
                           ----------------- -----------------
                               SAMPLE N+1        SAMPLE N

    - Positive Full-Scale

      Same again OCTET1 appears to be correct and OCTET0 contains errors, i.e. bits [4:2] are 0 instead of 1

   +---------------------- Captured Data -----------------------+
   ¦ No. ¦ Address    ¦ Data (raw)                              ¦
   ¦ --- ¦ ---------- ¦ --------------------------------------- ¦
   ¦   0 ¦ 0x0011D050 ¦ 0b 11100011'01111111'11100011'01111111  ¦
                           -------- -------- -------- --------
                            OCTET0   OCTET1   OCTET0   OCTET1
                           ----------------- -----------------
                               SAMPLE N+1        SAMPLE N

    - Negative Full-Scale

      Now this is interesting: Both OCTET1 and OCTET0 are correct

   +---------------------- Captured Data -----------------------+
   ¦ No. ¦ Address    ¦ Data (raw)                              ¦
   ¦ --- ¦ ---------- ¦ --------------------------------------- ¦
   ¦   0 ¦ 0x0011D050 ¦ 0b 00000000'10000000'00000000'10000000  ¦
                           -------- -------- -------- --------
                            OCTET0   OCTET1   OCTET0   OCTET1
                           ----------------- -----------------
                               SAMPLE N+1        SAMPLE N

        But as you will see this is about to change:

    I tried the same three patterns but this time for CS=2 (i.e. 2 control-bits and no tail-bits):

    - Checkerboard

      As before OCTET1 is correct but OCTET0 is false.

   +---------------------- Captured Data -----------------------+
   ¦ No. ¦ Address    ¦ Data (raw)                              ¦
   ¦ --- ¦ ---------- ¦ --------------------------------------- ¦
   ¦   0 ¦ 0x0011D050 ¦ 0b 10110111'10101010'01010100'01010101  ¦
                           -------- -------- -------- --------
                            OCTET0   OCTET1   OCTET0   OCTET1
                           ----------------- -----------------
                               SAMPLE N+1        SAMPLE N

    - Positive Full-Scale

      Now this is interesting: Both OCTET1 and OCTET0 are correct with CS=2

   +---------------------- Captured Data -----------------------+
   ¦ No. ¦ Address    ¦ Data (raw)                              ¦
   ¦ --- ¦ ---------- ¦ --------------------------------------- ¦
   ¦   0 ¦ 0x0011D050 ¦ 0b 11111111'01111111'11111111'01111111  ¦
                           -------- -------- -------- --------
                            OCTET0   OCTET1   OCTET0   OCTET1
                           ----------------- -----------------
                               SAMPLE N+1        SAMPLE N

    - Negative Full-Scale

      What is going on? Now that i set CS=2 OCTET0 reads incorrect at the same locations as it was the case before with CS=0 and positive full scale.

   +---------------------- Captured Data -----------------------+
   ¦ No. ¦ Address    ¦ Data (raw)                              ¦
   ¦ --- ¦ ---------- ¦ --------------------------------------- ¦
   ¦   0 ¦ 0x0011D050 ¦ 0b 00011100'10000000'00011100'10000000  ¦
                           -------- -------- -------- --------
                            OCTET0   OCTET1   OCTET0   OCTET1
                           ----------------- -----------------
                               SAMPLE N+1        SAMPLE N
If anybody has any idea, whatsoever, what to do, no matter where, or who, or who you are with, or where you are going, or where you came from, for any reason whatsoever, i would highly appreciate it :))