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.

DS250DF230EVM: how to Clear PRBS Checker Error Count

Part Number: DS250DF230EVM
Other Parts Discussed in Thread: DS250DF230

We use DS250DF230EVM to test PRBS checker. But we can not Clear PRBS Checker Error Count following your "DS2x0DF810, DS250DFx10, DS250DF230 Programmer's Guide". we can reak PRBS ERR Counter, but we cannot clear the PRBS ERR Counter. Attached is our code. (we have set Channel correctly)

Thanks 

Jack

  • set PRBS checker enable

                regData = new SetRegisterData(0x0d, 0x80, 0x00);

                registerData.Add(regData);

                regData = new SetRegisterData(0x79, 0x40, 0x40);

                registerData.Add(regData);

                regData = new SetRegisterData(0x30, 0x08, 0x00);

                registerData.Add(regData);

                regData = new SetRegisterData(0x30, 0x08, 0x08);

                registerData.Add(regData);

                regData = new SetRegisterData(0x30, 0x10, 0x10);

                registerData.Add(regData);

                regData = new SetRegisterData(0x30, 0x10, 0x00);

                registerData.Add(regData);

                regData = new SetRegisterData(0x82, 0x40, 0x40);

                registerData.Add(regData);

                regData = new SetRegisterData(0x82, 0x40, 0x00);

                registerData.Add(regData);

 

read PRBS ERR Counter

            registerChannelRecord = new SetWriteReadRegisterData(writeCommand, 0x82, 0x80, 0x80);

            registdatas.Add(registerChannelRecord);

            registerChannelRecord = new SetWriteReadRegisterData(readCommand, 0x83, 0xff, 0xff);

            registdatas.Add(registerChannelRecord);

            registerChannelRecord = new SetWriteReadRegisterData(readCommand, 0x84, 0xff, 0xff);

            registdatas.Add(registerChannelRecord);

            registerChannelRecord = new SetWriteReadRegisterData(writeCommand, 0x82, 0x80, 0x00);

            registdatas.Add(registerChannelRecord);

 

clear PRBS ERR Counter

            registerChannelRecord = new SetWriteReadRegisterData(writeCommand, 0x82, 0x40, 0x40);

            registdatas.Add(registerChannelRecord);

            registerChannelRecord = new SetWriteReadRegisterData(writeCommand, 0x82, 0x40, 0x00);

            registdatas.Add(registerChannelRecord);

  • Related to:   registerChannelRecord = new SetWriteReadRegisterData(writeCommand, 0x82, 0x40, 0x00

    Can you confirm that the write value is 0x00 and the write mask is 0x40?

    The routine per the programming guide works, TI have validated it extensively.

    A couple of debug questions.

    • Is checker locking to the correct PRBS pattern as observed via retimer channel register 0x01?
    • What values are being observed on the PRBS checker retimer channel for channel registers 0x27, 0x28 and 0x78?

    Table 54. Register Writes to Clear PRBS Checker Error Count

     

    STEP

    SHARED/ CHANNEL REGISTER SET

     

    OPERATION

     

    REGISTER ADDRESS [HEX]

     

    REGISTER VALUE [HEX]

     

    WRITE MASK [HEX]

     

    COMMENT

    1

    Channel

    Write

    82

    40

    40

    Reset PRBS counter

    2

    Channel

    Write

    82

    00

    40

    Un-reset PRBS counter

    Thanks,

    Rodrigo Natal

  • Hi Rodrigo,

    Following your questions:

    register value
    0x01 0xd2
    0x27 0x11
    0x28 0x6c
    0x78 0x30

    I can confirm that the write value is 0x00 and the write mask is 0x40.


    public void ClearPRBSCheckerErrorCount(int address, int die, int channel, byte commandNumber)
    {
    SetRegisterData regData;
    List<SetRegisterData> registerData = new List<SetRegisterData>();
    regData = new SetRegisterData(0x82, 0x40, 0x40);
    registerData.Add(regData);
    regData = new SetRegisterData(0x82, 0x40, 0x00);
    registerData.Add(regData);
    USBOption.SetMaskRgisterValues((byte)address, (byte)die, (byte)(channel), commandNumber, registerData);
    }
    public SetRegisterData(byte address, byte mask, byte data,string remarks=null)
    {
    this.Address=address;
    this.Mask=mask;
    this.Data=data;
    this.Remarks = remarks;
    }
    Thank you

  • Hi Jack,

    With 01 =0xD2 this means PRBS pattern was detected and the pattern is PRBS9. Does that sound correct?

    The retimer shows signal detected and CDR locked and the reported retimer eye opening values are good, thus I would have expected zero BER at the retimer PRBS checker.

    Question: Can you provide a full retimer channel registers dump (i.e. read the retimer register values observed in your system) so that I can see all of the settings you are actually applying?

    Thanks,

    Rodrigo 

  • Hi Rodrigo,

    PRBS9 is correct. Normally, the BRE is 0, when I turn off the signal source, the biggest BRE is 2047. Now I want to clear it, but BRE keeps 2047. When I re-initial it, the BRE is 0;

    Could you please give me your email address?

    Thanks

    Jack

  • Hi,

    Please try the below, and see if it solves the issue.

    • Make sure to un-freeze the PRBS error counter after reading
    • If you get into error condition with count = 2047 you may need to "Re-Load PRBS Checker Pattern Match". See retimer register routine below

     

    Table. Register Writes to Re-Load PRBS Checker Pattern Match

     

     

    STEP

    SHARED/ CHANNEL REGISTER SET

     

    OPERATION

     

    REGISTER ADDRESS [HEX]

     

    REGISTER VALUE [HEX]

     

    WRITE MASK [HEX]

     

    COMMENT

    1

    Channel

    Write

    30

    00

    08

    Set prbs_en_dig_clk=0 to disable the digital clock

    2

    Channel

    Write

    30

    08

    08

    Set prbs_en_dig_clk=1 to enable the digital clock

    3

    Channel

    Write

    30

    10

    10

    Force reload of PRBS checker seed

    4

    Channel

    Write

    30

    00

    10

    Undo force reload of PRBS

    checker seed

    5

    Channel

    Write

    82

    40

    40

    Reset PRBS counters

    6

    Channel

    Write

    82

    00

    40

    Un-reset PRBS counters

    7

    Channel

    Read

    01

    Read PRBS status:
    Reg_0x01[6]: PRBS pattern
    polarity detection
    1’b0: Polarity detected is not
    inverted
    1’b1: Polarity detected is
    inverted
    Reg_0x01[4]: PRBS sequence
    detected
    1’b1: Pattern detected
    1’b0: No pattern detected
    Reg_0x01[3:1]: PRBS detect
    result
    3’b000: PRBS7
    3’b001: PRBS9
    3’b010: PRBS11
    3’b011: PRBS15
    3’b100: PRBS23
    3’b101: PRBS31
    3’b110: PRBS58
    3’b111: PRBS63

  • Yes, I know that. But why 2047 can not use simply clear BRE,? Reload patterns needs more time. Another question, How can I accumulate PRBS for a long time without losing PRBS ERR Count as little as possible?

  • You should be able to run the retimer PRBS checker indefinitely as long as the PRBS pattern doesn't change.

    Thanks,

  • I mean, before I read the BRC, it has reached 2047, which means that a part of the count value has been lost. How to ensure that the BRC is read before it reaches 2047?

  • The clear PRBS checker sequence per the programming guide should clear the errors. if errors max out again do to PRBS checker losing lock/sync then the only other option is to perform the "reload PRBS checker match" sequence.

    Rodrigo Natal

  • Do you have any suggestions on how long to read the BRC?

    Jack

  • The PRBS test duration would depend on what BER level you are verifying for. As example, assume BER target is 1E-12 with data rate of 25.78125Gbps.

    • To reach that target, you would need to observe no more than a single error per 1E+12 bits transmit
    • A single iteration of 1E+12 bits takes around 39 seconds i.e. 1E12 bits/(25.78125Gb/s)
    • For statistical confidence you want to run 3 or more iterations of 1E+12 or 3E+12 bits. The PRBS checker test duration for that is ~3*39 seconds or around 2 minutes  

    Thanks,

    Rodrigo Natal