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.

[参考译文] ADC12QJ800-Q1:CRC 错误和使用 TI JESD204 IP 66b66b 编码 JMODE8的受限数据流

Guru**** 1472385 points
Other Parts Discussed in Thread: ADC12QJ800
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1268758/adc12qj800-q1-crc-errors-and-limited-data-stream-with-ti-jesd204-ip-66b66b-encoding-jmode8

器件型号:ADC12QJ800-Q1
主题中讨论的其他器件:ADC12QJ800

我们目前正在为其中一款使用 ADC12QJ800的产品开发一种新的数据采集系统
连接到从 zcu102参考设计修改的 TI-JESD204 IP、以适应我们项目中使用的 Kria K26 SOM。

我已成功配置 ADC 和 JESD IP、以12位 ADC 分辨率在800msps 的速率下运行4个通道。 来自 ADC SPI 命令的 JESD_Status 显示链路已接通、但当我释放 JESD 复位时、它并不总是为缓冲器释放值提供引脚。 我已经设置了适当的缓冲区释放延迟。 一些连续复位后、我使 lemc 释放缓冲器、并在停止之前获得一些具有 x 数量数据的有效时钟。 这一切都是在 ILA 能够捕获另一个有效信号之前发生的、因此不长。 我偶尔会遇到一些 CRC 错误、并且我已经运行斜坡测试模式、似乎有时数据中只出现几次毛刺脉冲。 我想知道如何调试和解决此问题、以便获得能够全天候传输数据的可靠链接。 我不确定这是否只是同步问题、而且由于电路板布局布线、我缺少了一些东西或数据完整性问题。 lemc 脉冲与 sysref 对齐、并且似乎继续、而不管有效数据如何、并且似乎从我的所有计算中产生了准确的周期。  

已将 ADC 配置为将差分时钟引脚与板上在 ADC 本地生成的100MHz 参考时钟配合使用。 PLLREFO 随后将该时钟传递给 FPGA、为200MHz 处的 JESDIP/收发器和 FPGA 器件时钟生成 DRP 频率线速率/66= 150MHz 时钟、对其进行采样以生成312.5KHz 参考频率。 Trigout 被编程为309.375MHz 进入 GTH 参考时钟。

ADC 计算

GTH 收发器设置

MMCM 时钟配置

VIO

ILA 复位触发器

ILA 触发数据有效

ADC 的 SPI 代码

//软复位
SPI_DATA = ADC_WriteRegister (ADC_CONFIG_A、0xB0、1);
xil_printf ("软复位 ADC12QJ800\r\n");

//等待 INIT_DONE
SPI_DATA = 0;
while (SPI_DATA =0){
   usleep(100000 );
   SPI_DATA = ADC_ReadRegister (ADC_INIT_STATUS、1);
   xil_printf ("init_status:0x%x\r\n "、SPI_DATA);


// CPLL 配置
ADC_WriteRegister (ADC_CPLL_RESET  、0x01、1);//复位 CPLL

ADC_WriteRegister (ADC_CPLL_VCOCTRL1、0x4A、1);//VA11Q 和 VCLK11噪声抑制
ADC_WriteRegister (ADC_CLK_CTRL0   、0xE7、1);//SYSREF_PROC&RECV_EN SYSREF_SEL=7
ADC_WriteRegister (ADC_CLK_CTRL2   、0x05、1);//CPLL VCO_BIAS
ADC_WriteRegister (ADC_CPLL_FBIV1 、0x04、1);//VCO/(PxV)= 800MHz (P=2 V=5)
ADC_WriteRegister (ADC_CPLL_FBIV2 、0x08、1);//Fs/Ref=800MHz / 100MHz (N=8)
ADC_WriteRegister (ADC_VCO_CAL_CTRL、0x41、1);//VCO_CAL_EN
ADC_WriteRegister (ADC_CPLL_RESET  、0x00、1);

//停止 JESDC
ADC_WriteRegister (ADC_JESD_EN     、0x00、1);
ADC_WriteRegister (ADC_CAL_EN      、0x00、1);
ADC_WriteRegister (ADC_JMODE       、0x08、1);//JMODE8
ADC_WriteRegister (ADC_JTEST       、0x04、1);//斜坡测试数据
ADC_WriteRegister (ADC_JCTRL       、0x0B、1);//JSYNC_N 有符号2的 扰码
ADC_WriteRegister (ADC_TRIGOUT_CTRL、0x82、1);//TRIGOUT 9.9Gbps/32= 309.375MHz
ADC_WriteRegister (ADC_OVR_CFG     、0x0F、1);//OVR_EN 512Samples

//等待 VCO_CAL_DONE
SPI_DATA = 0;
while (SPI_DATA =0){
   usleep(100000 );
   SPI_DATA = ADC_ReadRegister (ADC_VCO_CAL_STATUS、1);
   xil_printf ("VCO_CAL_STATUS:0x%x\r\n "、SPI_DATA);


//等待 CPLL_LOCKED
SPI_DATA = 0;
while (SPI_DATA =0){
   usleep(100000 );
   SPI_DATA = ADC_ReadRegister (ADC_JESD_STATUS、1);
   xil_printf ("ADC_JESD_STATUS:0x%x\r\n"、SPI_DATA);
   SPI_DATA = SPI_DATA & 0x01;


//启用 JESD204C
ADC_WriteRegister (ADC_CAL_EN      、0x01、1);
ADC_WriteRegister (ADC_JESD_EN     、0x01、1);

ADC_WriteRegister (ADC_ALM_STATUS  、0x3F、1);//清除警报

ADC_WriteRegister (ADC_CAL_PIN_CFG  、0x00、1);//FG_DONE、CAL_PIN_CFG
ADC_WriteRegister (ADC_CAL_SOFT_TRIG、0x00、1);
ADC_WriteRegister (ADC_CAL_SOFT_TRIG、0x01、1);//启动校准

//等待 FG_DONE
SPI_DATA = 0;
while (SPI_DATA =0){
   usleep(100000 );
   SPI_DATA = ADC_ReadRegister (ADC_CAL_STATUS、1);
   xil_printf ("FG 校准完成:0x%x\r\n"、SPI_DATA);
   SPI_DATA = SPI_DATA & 0x01;

ADC 调试 SPI 状态

我尝试过配置不同的测试模式、一些测试模式的工作效率比其他测试模式更可靠一些、我还尝试配置500MSps 的测试结果类似、但无论错误看起来如何、我似乎从未得到超过第一组数据、然后就会停止。 当使用 SerDes 预加重的东西似乎变得最糟糕时、我也尝试了 GTH 插入损耗、但它似乎没有太大的区别、因为使它变得更好。 我还尝试了100,200和300 ppm 的偏移、但我认为这些也使情况变得更糟、因此我将其保留为0。

您可以建议哪些内容来帮助了解我遇到的错误、以及如何解析链接以获得连续流?

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mohan:

    您能否验证是否正确设置了 JESD_STATUS 寄存器地址= 0x208中的对齐和重新对齐位。

    正确的功能应该是:当您配置器件时、它们都将设置为1、然后您必须将重新对齐位重置为零并验证它不会再次设置。 这基本上是检查链路永远不会关闭且必须重新对齐。  

    此外、我认为您应该在 重新连接 JESD 后启用 sysref 处理和接收。  

    这些测试将帮助我们缩小问题所在的范围。

    此致!

    埃里克·克莱克纳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Eric、您好!

    感谢您的建议、我目前未清除重新对齐位。 我今天将进行尝试、将 sysref 处理和接收功能移至 JESD 重新启用后。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因此、当我清除 JESD_Status 重新对齐位时、
    我得到0x6D 的状态、似乎一直保持这样、因此 sysref 似乎对齐了、并且在第一次重新对齐后不必重新对齐、我认为这很好。

    在查看将 ADC 连接到 Xilinx SOM 的自定义载板后、我们发现该板使用标准 PCB 材料进行设计。 因此、我们正在审查该设计、以使用 TI JESD 指南中推荐的支持10G 和 RX 通道布线以满足所有标准和 JESD 指南的 PCB 材料。

    我认为这可能是我们所有的问题都存在,因为除了数据的完整性之外,所有其他东西似乎都从我所看到的正确运行。 如果有任何其他建议、或者您认为我已经计算或误解了 JESD 的提出要求、请告知我、因为这是我第一次使用这个特定协议。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mohan:

    这是正确的重新对齐行为、只能对齐一次、不能再次对齐。

    我认为 JESD 链接配置正确、并且能够捕获数据。 您正在正确地对器件进行编程、因此我相信 PCB 材料会导致信号完整性问题、从而导致您看到的问题。我会确保遵循 PCB 和通道布线建议的最佳实践。

    此致!

    埃里克·克莱克纳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Eric 的耐心等待我将此问题标记为已解决、并期待测试我们电路板的下一个修订版。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    没问题 Mohan、如果您有任何其他问题需要我帮忙、请告诉我。

    此致!

    埃里克