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.

[参考译文] TLK10081:检测到高速输出偶尔出现的意外序列

Guru**** 2502205 points
Other Parts Discussed in Thread: TLK10081

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1245638/tlk10081-occasional-unexpected-sequence-detected-on-high-speed-output

器件型号:TLK10081

您好!

我们已经完成相应设置、将8x625 Mbps 链路聚合为1x5.00 Gbps 链路。 我们仅在 TX 模式下使用 TLK10081。
在数据生成器芯片处于空闲模式时、它会生成0xBC 字符。 我们在通道0上配置了 TLK10081以将此 charackter 替换为0x5C。 这一切看起来都很好、我们在 FPGA 上接收到0xBC 和0x5C 字符。
但是、当我们基于 FPGA 而不是0xBC char 触发(注意、我们已再次在 FPGA 中将0x5C 替换为0xBC)时、我们 偶尔会得到
"6x 0xFE - 4x"idle char"(在本例中为0xFD)- 1x 0xFE"。 这些字符全部标记为控制字符。

我们得到的序列:/K30.7/K30.7/K30.7/K30.7/K30.7/K30.7/K30.7/K30.7/K30.7/K29.7/K29.7/K29.7/K29.7/K29.7/K30.7/

我们的 TLK 配置为:

{ TLK81_GLOBAL_CONTROL, 0x8610 },      // Reset
{ TLK81_CHANNEL_CONTROL, 0x0000 },     // Disable link training
{ TLK81_HS_SERDES_CONTROL_1, 0x8315 }, // Set PLL multiplier to 8x
{ TLK81_HS_SERDES_CONTROL_2, 0xA940 }, /* Set HS TX rate to half rate
                                          Disable HS RX */
{ TLK81_HS_SERDES_CONTROL_3, 0x1540 }, // Disables high frequency peaking.
{ TLK81_HS_TP_CONTROL, 0x0520 },       /* Disable HS Test Pattern (0x2520)(0x2200)(0x2020)(0x0520)
                                          Set HS tp 2^7
                                          Set LS PRBS 2^7
                                          Disable Deep Remote Loopback */
{ TLK81_LS_SERDES_CONTROL_1, 0x8110 },  // Set LS_MPY to 4 times
{ TLK81_LS_CH_CONTROL, 0x0001},
{ TLK81_LS_SERDES_CONTROL_2, 0xDE02},   /* Set LS PLL to quarter rate
                                           Disable LS_RX_ENTX to turn off LS transmitter*/
{ TLK81_CLK_CONTROL, 0x0080 },          // CLKOUTxP/N disable
{ TLK81_HS_ALIGN_CODE_CONTROL, 0x02BC },// Set TX marker selection on lane 0
{ TLK81_HS_CH_CONTROL, 0x0880 },        // Enable TX marker replace
 
{ TLK81_EXT_ADDRESS_CONTROL, TLK81EXT_VS_TX_MARKER_REPLACE_CHAR },
{ TLK81_EXT_ADDRESS_DATA, 0x25C },      // TX replace char 0x25C

{ TLK81_EXT_ADDRESS_CONTROL, TLK81EXT_VS_TX_IDLE_P_CHAR },
{ TLK81_EXT_ADDRESS_DATA, 0x2FD },      // TX idle Pchar

{ TLK81_EXT_ADDRESS_CONTROL, TLK81EXT_VS_TX_IDLE_N_CHAR },
{ TLK81_EXT_ADDRESS_DATA, 0x2FD },      // TX idle Nchar

{ TLK81_RESET_CONTROL, 0x0008 }         // DATAPATH_RESET

这就是在 FPGA 中执行通道去交错后得到的结果:



我们怀疑时钟容差补偿导致了这种情况。 但是、我们需要单个空闲字符(0xFD)。 那么、为什么它不是一个0xFD 字符、为什么我们也会得到几个0xFE 字符?  

提前感谢。

亚历山大~

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

    尊敬的 Alexander:

    感谢配置的详细说明和注释。  如果您回读 CHANNEL_STATUS_1和 LS_STATUS_1、会得到什么值?  您是否碰巧看到 FIFO 下溢或溢出?

    谢谢。

    德鲁

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

    尊敬的 Drew:
    感谢您的快速响应。

    通道状态:
    如果我快速运行 CHANNEL_STATUS_1四次(以大约1秒的间隔重复)、则得到:
    --------
    0x0200
    0x000 3
    0x000 3
    0x020 3
    --------
    0x020 3
    0x020 3
    0x000 3
    0x020 3
    --------
    "根据这些数据、看起来 HS_PLL 和 LS_PLL 已正确锁定并稳定。"

    低速状态:
    对于 LS_STATUS_1、八个链路具有相同的行为、因此我将仅报告链路0。
    当我快速运行 LS_STATUS_1四次(以大约1秒的间隔重复)时、得到:
    --------
    0x0844
    0x0140
    0x0140
    0x0140
    --------
    0x014 4
    0x0140
    0x0140
    0x0140
    --------
    0x014 4
    0x0140
    0x014 4
    0x0140
    --------

    "从这些数据来看、LS_TX_FIFO_OVER溢 会经常锁存到高电平。"

    错误代码:
    数据表第46页注意到0x2FE 字符是 LS 和 HS 的 FIFO 错误代码。
    我已经改变了 LS_TX_ERROR_CODE、这改变了顺序:前六个字节现在是新字符、最后一个字符仍然是旧的错误代码(0xFE)。 更改 LS_RX_ERROR_CODE、HS_RX_ERROR_CODE 或 HS_TX_ERROR_CODE 不会影响该错误。
    6x 0xFB (新字符)- 4x "idle char"(在本例中为0xFD)- 1x 0xFE (旧字符)。

    现在顺序如下:
    /K27.7/K27.7/K27.7/K27.7/K27.7/K27.7/K27.7/K29.7/K29.7/K29.7/K29.7/K29.7/K29.7/K29.7/K30.7/

    当我们只接收可丢弃的 K28.5字符时、为什么 FIFO 会被填满、对吧?
    LS_TX_ERROR_CODE 的确切含义是什么?
    什么会导致 K30.7字符出现? 数据表未指定任何可在其中插入0x2FE 的其它寄存器。

    谢谢。
    亚历山大~

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

    尊敬的 Alexander:

    感谢您分享这些寄存器的值。

    我目前没有关于 K30.7字符出现原因的假设。  由于这在 FIFO 错误后发生、我希望此问题会在解决 FIFO 问题后得到解决。

    关于 FIFO 问题、FIFO 下溢/溢出的最基本原因是时钟差异。  您的基准时钟源是什么?  它是否与 FPGA 共享?

    谢谢。

    德鲁