Low Latency 100G Ethernet Intel® FPGA IP Core User Guide: For Intel® Stratix® 10 Devices

ID 683100
Date 2/16/2022
Public
Document Table of Contents

7.1. PHY Registers

Table 23.  PHY RegistersThe global hard reset csr_rst_n resets all of these registers. The TX reset tx_rst_n and RX reset rx_rst_n signals do not reset these registers.
Addr Name Description Reset Access
0x300 REVID IP core PHY module revision ID 0x0809 2017 RO
0x301 SCRATCH Scratch register available for testing 0x0000 0000 RW
0x302 PHY_NAME_0 First characters of IP core variation identifier string, "100". 0x0031 3030 RO
0x303 PHY_NAME_1 Next characters of IP core variation identifier string, "GE". 0x0000 4745 RO
0x304 PHY_NAME_2 Final characters of IP core variation identifier string, "pcs". 0x0070 6373 RO
0x310 PHY_CONFIG PHY configuration registers. The following bit fields are defined:
  • Bit[0]: : eio_sys_rst. Full system reset (except registers). Set this bit to initiate the internal reset sequence.
  • Bit[1]: soft_txp_rst. TX soft reset.
  • Bit[2]: soft_rxp_rst. RX soft reset.
  • Bit[3]: Reserved.
  • Bit[4]: set_ref_lock. Directs the RX CDR PLL to lock to the reference clock.
  • Bit[5]: set_data_lock. Directs the RX CDR PLL to lock to data.
  • Bits[31:6]: Reserved.
The reset bits are not self-clearing. To force a reset, you can set and reset a reset bit in back-to-back register write operations.
26'hX_2'b0_1'bX_3'b0

(X= don't care)

RW
0x312 WORD_LOCK Each of the 20 lower order bits, when asserted, indicates that the corresponding virtual channel has identified 66 bit block boundaries in the serial data stream.

If Enable RS-FEC is turned on, the value is always zero.

0xXXX0 0000

(X= don't care)

RO
0x313 EIO_SLOOP Serial PMA loopback. Setting a bit puts the corresponding transceiver in serial loopback mode. In serial loopback mode, the TX lane loops back to the RX lane on an internal loopback path. 0xXXXX XXX0 RW
0x314 EIO_FLAG_SEL Supports indirect addressing of individual FIFO flags in the 10G PCS Native PHY IP core. Program this register with the encoding for a specific FIFO flag. The flag values (one per transceiver) are then accessible in the EIO_FLAGS register.

The value in the EIO_FLAG_SEL register directs the IP core to make available the following FIFO flag:

  • 3'b000: TX FIFO full
  • 3'b001: TX FIFO empty
  • 3'b010: TX FIFO partially full
  • 3'b011: TX FIFO partially empty
  • 3'b100: RX FIFO full
  • 3'b101: RX FIFO empty
  • 3'b110: RX FIFO partially full
  • 3'b111: RX FIFO partially empty
29'bX_3'b000 RW
0x315 EIO_FLAGS PCS indirect data. To read a FIFO flag, set the value in the EIO_FLAG_SEL register to indicate the flag you want to read. After you specify the flag in the EIO_FLAG_SEL register, each bit [n] in the EIO_FLAGS register has the value of that FIFO flag for the transceiver channel for lane [n]. 0xXXXX XXX0 RO
0x321 EIO_FREQ_LOCK Each of the lower order four bits, when asserted, indicates that the corresponding lane RX clock data recovery (CDR) phase-locked loop (PLL) is locked. 0xXXXX XXX0 RO
0x322 PHY_CLK The following encodings are defined:
  • Bit[0]: If set to 1, indicates the TX transceivers have completed reset.
  • Bit [1]: If set to 1, indicates the TX core clock is stable. And if the Enable RS-FEC is turned on, the FEC TX PLL has acquired frequency lock.
  • Bit[2]: If set to 1, indicates the RX core clock is stable. And if the Enable RS-FEC is turned on, the FEC RX PLL has acquired frequency lock.
29'bX_3'b000 RO
0x323 FRM_ERR

Each of the 20 lower order bits, when asserted, indicates that the corresponding virtual lane has a frame error. You can read this register to determine if the IP core sustains a low number of frame errors, below the threshold to lose word lock. These bits are sticky, unless the virtual lane loses word lock. Write 1'b1 to the SCLR_FRM_ERR register to clear.

If a virtual lane loses word lock, it clears the corresponding register bit.

Each bit in this register has a valid value only if the corresponding bit in the WORD_LOCK register at offset 0x312 has the value of 1.

If Enable RS-FEC is turned on, the value is always zero.

0xXXX0 0000 RO
0x324 SCLR_FRM_ERR Synchronous clear for FRM_ERR register. Write 1'b1 to this register to clear the FRM_ERR register and bit [1] of the LANE_DESKEWED register. A single bit clears all sticky framing errors.

This bit does not auto clear. Write a 1'b0 to continue logging frame errors.

0x0000 0000 RW
0x325 EIO_RX_SOFT_PURGE_S Set bit [0] to clear the RX FIFO for all four physical lanes.
  • Bit[11]: If set to 1, disables the bitslip request from PCS to PMA.
  • Bit[12]: If set to 1, holds auto adaptation module in Idle state. If set to 0, releases auto adaptation module from the Idle state.
0x0000 0000 RW
0x326 RX_PCS_FULLY_ALIGNED_S Indicates the RX PCS is fully aligned and ready to accept traffic.
  • Bit[0]: RX PCS fully aligned status.
  • Bit[1]: RX PCS HI BER status.

If Enable RS-FEC is turned on, the value is always zero.

30'bX_2'b00

RO
0x327 ERR_INJ When set to 1, injects an error in the corresponding lane. The register is rising-edge triggered. Write a 0 to clear. 0xXXXX XXX0 RW
0x328 AM_LOCK When bit [0] is asserted, indicates that the IP core has identified virtual lane alignment markers in the data stream of all 20 virtual lanes, and has ordered the virtual lanes.

If Enable RS-FEC is turned on, the value is always zero.

0xXXXX XXX0 RO
0x329 LANE_DESKEWED The following encodings are defined:
  • Bit [0]: Indicates all lanes are deskewed.
  • Bit [1]: When asserted indicates a change in lanes deskewed status. To clear this sticky bit, write 1'b1 to the corresponding bit of the SCLR_FRM_ERR register. This is a latched signal.

If Enable RS-FEC is turned on, the value is always zero.

30'bX_2'b00

RO
0x330 PCS_VLANE0 PCS virtual lane mapping. Identifies the five virtual lanes detected on physical lane 0. Virtual lanes are encoded with the five-bit binary virtual lane number. One virtual lane index is encoded in register bits [4:0], another in register bits [9:5], another in register bits [14:10], another in register bits [19:15], and another in register bits [24:20].

For example, if the value of the register is 25'b00001_00101_00011_00000_01000, virtual lanes 0, 1, 3, 5, and 8 map to physical lane 0.

The value 0x1F in any of these fields indicates no virtual lane is recorded yet. Before the IP core asserts rx_pcs_ready, transitional values can appear in the register fields. Therefore, you should read the register three to four times to ensure you read the correct virtual lane indicators.

If Enable RS-FEC is turned on, the value remains at the reset value.

0x01FF FFFF RO
0x331 PCS_VLANE1 PCS virtual lane mapping for physical lane 1.

The value 0x1F in any of these fields indicates no virtual lane is recorded yet. Before the IP core asserts rx_pcs_ready, transitional values can appear in the register fields. Therefore, you should read the register three to four times to ensure you read the correct virtual lane indicators.

If Enable RS-FEC is turned on, the value remains at the reset value.

0x01FF FFFF RO
0x332 PCS_VLANE2 PCS virtual lane mapping for physical lane 2.

The value 0x1F in any of these fields indicates no virtual lane is recorded yet. Before the IP core asserts rx_pcs_ready, transitional values can appear in the register fields. Therefore, you should read the register three to four times to ensure you read the correct virtual lane indicators.

If Enable RS-FEC is turned on, the value remains at the reset value.

0x01FF FFFF RO
0x333 PCS_VLANE3 PCS virtual lane mapping for physical lane 3.

The value 0x1F in any of these fields indicates no virtual lane is recorded yet. Before the IP core asserts rx_pcs_ready, transitional values can appear in the register fields. Therefore, you should read the register three to four times to ensure you read the correct virtual lane indicators.

If Enable RS-FEC is turned on, the value remains at the reset value.

0x01FF FFFF RO
0x341 KHZ_RX RX clock (clk_rxmac) frequency in KHz, assuming the clk_status clock has the frequency of 100 MHz. The RX clock frequency is the value in this register times the frequency of the clk_status clock, divided by 100. 0x0000 0000 RO
0x342 KHZ_TX TX clock (clk_txmac) frequency in KHz, assuming the clk_status clock has the frequency of 100 MHz. The TX clock frequency is the value in this register times the frequency of the clk_status clock, divided by 100. 0x0000 0000 RO
0x343 KHZ_TX_RS FEC TX clock (clk_tx_rs) frequency in KHz, assuming the clk_status clock has the frequency of 100 MHz. The TX FEC clock frequency is the value in this register times the frequency of the clk_status clock, divided by 100.

This register is available only if Enable RS-FEC is turned on.

0x0000 0000 RO
0x344 KHZ_RX_RS FEC RX clock (clk_rx_rs) frequency in KHz, assuming the clk_status clock has the frequency of 100 MHz. The RX FEC clock frequency is the value in this register times the frequency of the clk_status clock, divided by 100.

This register is available only if Enable RS-FEC is turned on.

0x0000 0000 RO
0x350 ENABLE_RSFEC

Allows you to dynamically control the RS-FEC block which is part of the data path. This register is available only if the Enable RS-FEC is turned on.

When the RS-FEC block is enabled, writing 1 enables the RS-FEC data path and writing 0 disables the RS-FEC data path.
Note: In a configuration where the RS-FEC + KR feature is enabled, this register has no effect because the data path always includes the RS-FEC by default.
0x0000 0001 RW