E-Tile Transceiver PHY User Guide

ID 683723
Date 4/01/2024
Public
Document Table of Contents

8.1. Reconfiguring the Duplex PMA Using the Reset Controller in Automatic Mode

Dynamic reconfiguration is the process of modifying transceiver channels to meet changing requirements during device operation. You can customize channels by initiating reconfiguration during device operation or after device configuration.
Common PMA parameters that are reconfigured are the reference clock source, data rate and PMA serialization/deserialization factor. Refer to PMA Attribute Codes for how to change the attribute codes. The following example shows how to reconfigure a duplex PMA channel in NRZ mode in order to:
  • Reconfigure the PMA reference clock from refclk0 to refclk1 as listed in the Native PHY IP
  • Change the PMA baud rate
  • Change the deserialization factor
Figure 109. Sending PMA Attribute Through Avalon® Memory-Mapped Interface

Reconfiguration Flow

  1. Assert tx_reset/rx_reset.
  2. Wait for the tx_ready/rx_ready to deassert.
  3. Disable the PMA by using PMA attribute code 0x0001.
    1. Optional: Write 0x8A[7] = 0x1 to ensure the PMA attribute status flag (0x8A[7] for the previous attribute) is cleared before writing to registers 0x84 to 0x87 to load in the new PMA attribute.
    2. Write 0x84[7:0] = 0x00.
    3. Write 0x85[7:0] = 0x00.
    4. Write 0x86[7:0] = 0x01.
    5. Write 0x87[7:0] = 0x00.
    6. Write 0x90[0] = 1’b1.
    7. Read 0x8A[7]. It should be 1.
    8. Read 0x8B[0] until it changes to 0.
    9. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  4. Wait for tx_pma_ready/rx_pma_ready to deassert.
  5. Refer to Switching Reference Clocks for how to change the reference clock.
  6. Reset the internal controller inside the PMA because the REFCLK source changed by:
    1. Write 0x200[7:0] = 0x00.
    2. Write 0x201[7:0] = 0x00.
    3. Write 0x202[7:0] = 0x00.
    4. Write 0x203[7:0] = 0x81.
    5. Read 0x207 until it becomes 0x80. This indicates that the operation completed successfully.
  7. Change TX/RX baud rate to refclk * 50 and above 15 Gbps by using PMA attribute code 0x0005.
    1. Write 0x84[7:0] = 0x32.
    2. Write 0x85[7:0] = 0x80 (bit 7 applies the update to both TX/RX).
    3. Write 0x86[7:0] = 0x05.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1’b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  8. Change serialization/deserialization factor to 40 bits wide by using PMA attribute code 0x0014.
    1. Write 0x84[7:0] = 0x33.
    2. Write 0x85[7:0] =0x00.
    3. Write 0x86[7:0] = 0x14.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1’b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  9. Change the RX phase slip to maximize the RX PMA timing margin.
    1. Write 0x84[7:0] = 0x00.
    2. Write 0x85[7:0] = 0xA4 to slip by 36 UI.
    3. Write 0x86[7:0] = 0x0E.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1’b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  10. Enable the PMA by using PMA attribute code 0x0001.
    1. Write 0x84[7:0] = 0x07.
    2. Write 0x85[7:0] =0x00.
    3. Write 0x86[7:0] = 0x01.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1’b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  11. Enable PRBS31 data.
    1. Write 0x84[7:0] = 0x25.
    2. Write 0x85[7:0] = 0x03.
    3. Write 0x86[7:0] = 0x02.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1'b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  12. Change to internal serial loopback mode by using PMA attribute code 0x0008.
    1. Write 0x84[7:0] = 0x01.
    2. Write 0x85[7:0] = 0x01.
    3. Write 0x86[7:0] = 0x08.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1’b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  13. Enable initial coarse adaptive equalization by using PMA attribute code 0x000A.
    1. Write 0x84[7:0] = 0x01.
    2. Write 0x85[7:0] = 0x00.
    3. Write 0x86[7:0] = 0x0A.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1'b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  14. Read initial coarse adaptation status by using PMA attribute code 0x0126.
    1. Write 0x84[7:0] = 0x00.
    2. Write 0x85[7:0] = 0x0B.
    3. Write 0x86[7:0] = 0x26.
    4. Write 0x87[7:0] = 0x01.
    5. Write 0x90[0] = 1'b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
    9. Read register 0x88. Repeat current step 14 until 0x88[0] =0 to indicate that initial coarse adaptation has completed.
  15. If you are using a stored PMA configuration, first choose the PMA configuration.
    1. Write 0x40143 = (0x80 + configuration number you want to load). For example, write value 0x82 to load configuration 2. You can access the stored PMA configurations only from channel 0.
    2. Read 0x40144[0] until it reports 0x1.
  16. If using a stored PMA configuration, load the configuration into the transceiver channel using opcode 0x14.
    1. Write 0x200 = 0x00.
    2. Write 0x201 = 0x00.
    3. Write 0x202 = 0x00.
    4. Write 0x203 = 0x94.
    5. Poll 0x207 until = 0x80.

Skip the next step if you are running internal serial loopback mode.

  1. Disable Internal Serial Loopback using PMA attributes.
    1. Write 0x84[7:0] = 0x00.
    2. Write 0x85[7:0] = 0x01.
    3. Write 0x86[7:0] = 0x08.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1'b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.

Skip the next step if you are running internal serial loopback mode.

  1. Perform initial adaptation using PMA attributes.
    1. Write 0x84[7:0] = 0x01.
    2. Write 0x85[7:0] = 0x00.
    3. Write 0x86[7:0] = 0x0A.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1'b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  2. Deassert tx_reset/rx_reset.
  3. Disable PRBS31 data using opcode 0x13.
    1. If in mission mode, write 0x200 = 0x1E.
    2. If in internal serial loopback mode, write 0x200 = 0x1F.
    3. Write 0x201 = 0x00.
    4. Write 0x202 = 0x00.
    5. Write 0x203 = 0x93.
    6. Read 0x207 until it becomes 0x80. This indicates that the operation completed successfully.
  4. If valid data rate traffic is available at RX, go to the next step, or re-run initial coarse adaptation until the traffic is valid.
  5. If you need to set a PMA analog parameter before running continuous adaptation, send the attributes. Refer to Reading and Writing PMA Analog Parameters Using Attributes.
  6. Enable continuous adaptive equalization by using PMA attribute code 0x000A.
    1. Write 0x84[7:0] = 0x06.
    2. Write 0x85[7:0] = 0x00.
    3. Write 0x86[7:0] = 0x0A.
    4. Write 0x87[7:0] = 0x00.
    5. Write 0x90[0] = 1'b1.
    6. Read 0x8A[7]. It should be 1.
    7. Read 0x8B[0] until it changes to 0.
    8. Write 0x8A[7] to 1'b1 to clear the 0x8A[7] value.
  7. Optionally, check the rx_is_lockedtodata output pin.
  8. The link is up.