PHY Lite for Parallel Interfaces FPGA IP User Guide

ID 683716
Date 3/31/2025
Public
Document Table of Contents

2.2.2.3. Register Map

When you generate the IP, the IP automatically creates the address register map file (addr_map.vh) and the corresponding C header file. It contains the Avalon® memory-mapped interface registers that you can read and write to use the AXI4-Lite IP interface of the Calibration IP.

Since these registers include multiple fields for different settings, only change with a read-modify-write cycle to ensure that other fields in the register remain intact. The address of a register is 24 bits, consisting of an 11-bit base address right padded with 13’b0, and an 13-bit offset address left-padded with 11’b0. The padding is done to make the base address and offset address 24 bits.

The 11-bit base address is configured as:

Base address = {3’b011, 3-bit instance ID, 2-bit atom ID, 3-bit lane ID},

where atom ID is 2’b00 for Byte control. All the reconfigurable PHY Lite for Parallel Interfaces FPGA IP for Agilex™ 3 C-Series settings are in Byte control, i.e., 2’b00.

The offset address for different registers in the address map, as well as bit-field description of the registers, are provided in AXI4-Lite IP Interface Signals table. The Avalon® memory-mapped interface registers are 32-bit wide, but AXI4-Lite IP Interface Signals only shows the relevant bit-fields in the registers as they appear in the automatic generated address map.

As an example, suppose that the PHY Lite for Parallel Interfaces FPGA IP for Agilex™ 3 C-Series Instance ID is 0 and group 0 is assigned to lane 0. To change the output delay of pin 0, you need to modify the INSTANCE_0_GROUP_0_PIN_00_DDRCRTIMINGCONTROL register.

The base and offset addresses are derived as:

Base address = {3’b011, 3’b000, 2’b00, 3’b000, 13’b0} = 24'h60_0000

Offset address = {11’b0, 0x100} = 24'h00_0100

Full address = Base address + Offset address = 24’h60_0100

Before adjusting any delays with dynamic reconfiguration, set the InternalClocksOn and reset the training. After calibration, reset InternalClocksOn to zero to save power. Follow these steps:
  1. Set InternalClocksOn=1
  2. Reset the training by setting TrainReset from 0 to 1 and back to 0.
  3. Perform calibration.
  4. Set InternalClocksOn=0.
Table 18.  Address Register Map
Register name Offset address (13 bits) Description Bit-field Bit-field Description
INSTANCE_<n>_GROUP_<n>_PIN_00_DDRCRTIMINGCONTROL 0x100 DQ and DQS timing [31:21] TxDqDelay
INSTANCE_<n>_GROUP_<n>_PIN_01_DDRCRTIMINGCONTROL 0xfc
INSTANCE_<n>_GROUP_<n>_PIN_02_DDRCRTIMINGCONTROL 0xf8
INSTANCE_<n>_GROUP_<n>_PIN_03_DDRCRTIMINGCONTROL 0xf4
INSTANCE_<n>_GROUP_<n>_PIN_04_DDRCRTIMINGCONTROL 0xf0 [13:7] RxDqsNDelayPi
INSTANCE_<n>_GROUP_<n>_PIN_05_DDRCRTIMINGCONTROL 0xec
INSTANCE_<n>_GROUP_<n>_PIN_06_DDRCRTIMINGCONTROL 0xe8
INSTANCE_<n>_GROUP_<n>_PIN_07_DDRCRTIMINGCONTROL 0xe4
INSTANCE_<n>_GROUP_<n>_PIN_08_DDRCRTIMINGCONTROL 0xe0 [6:0] RxDqsPDelayPi
INSTANCE_<n>_GROUP_<n>_PIN_09_DDRCRTIMINGCONTROL 0xdc
INSTANCE_<n>_GROUP_<n>_PIN_10_DDRCRTIMINGCONTROL 0xd8
INSTANCE_<n>_GROUP_<n>_PIN_11_DDRCRTIMINGCONTROL 0xd4
INSTANCE_<n>_PHY_LANE_<n>_UPPER_NIBBLE_RCVEN 0x114 RcvEn delay for upper nibble [10:0] RxRcvEnPiRank0
INSTANCE_<n>_PHY_LANE_<n>_LOWER_NIBBLE_RCVEN 0x11c RcvEn delay for lower nibble [10:0] RxRcvEnPiRank0
INSTANCE_<n>_PHY_LANE_<n>_UPPER_NIBBLE_DATACONTROL2 0x10c DQ/DQS ODT, DQ sense amp delay and duration upper nibble [31:27] DqsSenseAmpDelay
[26:23] DqSenseAmpDuration
[22:18] DqSenseAmpDelay
[17:14] DqOdtDuration
[13:9] DqOdtDelay
[8:5] DqsOdtDuration
[4:0] DqsOdtDelay
INSTANCE_<n>_PHY_LANE_<n>_LOWER_NIBBLE_DATACONTROL2 0x110 DQ/DQS ODT, DQ sense amp delay and duration lower nibble [31:27] DqsSenseAmpDelay
[26:23] DqSenseAmpDuration
[22:18] DqSenseAmpDelay
[17:14] DqOdtDuration
[13:9] DqOdtDelay
[8:5] DqsOdtDuration
[4:0] DqsOdtDelay
INSTANCE_<n>_PHY_LANE_<n>_UPPER_NIBBLE_DQSSENSEAMPDURATION 0x124 DQS sense amp duration upper nibble [29:26] DqsSenseAmpDuration
INSTANCE_<n>_PHY_LANE_<n>_LOWER_NIBBLE_DQSSENSEAMPDURATION 0x128 ovrd_val for RX path [31] rx_ana_ovrd_val
ovrd_en for RX path [30] rx_ana_ovrd_en
DQS sense amp duration lower nibble [29:26] DqsSenseAmpDuration
INSTANCE_<n>_PHY_LANE_<n>_RXFIFO 0x13c Read enable offset change read valid delay [3:0] read_enable_offset
INSTANCE_<n>_PHY_LANE_<n>_DATATRAINFEEDBACK 0x160 Train reset and training mode [14] TrainReset
[9] RLTrainingMode
INSTANCE_<n>_PHY_LANE_<n>_TRAINFEEDBACK 0x1f4 Train feedback [23:12] DataTrainFeedback_N1
[11:0] DataTrainFeedback_N0
INSTANCE_<n>_PHY_LANE_<n>_DATACONTROL0 0x104 Internal Clocks [11] InternalClocksOn
INSTANCE_<n>_PHY_LANE_<n>_DATACONTROL6 0x130 Vref IO Voltage [29:21] RxDataVrefL
[20:12] RxDataVrefU
INSTANCE_<n>_PHY_LANE_<n>_DATACONTROL1 0x108 Delay RxDqD0 for matched Rx [29:28] D0DlyRange
INSTANCE_<n>_PHY_LANE_<n>_DLLCOMPOFFSET 0x140   [2] read_enable_offset_msb
[1] rxfifo_offset_mode_1
[0] rxfifo_offset_mode_0

Example x16 Pin Assignment

Consider a x16 group occupying lane 0 and lane 1. Differential strobe signals, S and SB, are assigned to pin indices 4 and 5 of lane 0 (the first of the two lanes), respectively. 22 DQ data pins are assigned in increasing order across the two lanes. The following table provides the pin addresses:

Table 19.  Sample Pin Assignment and Address for a x16 Group
Register Name Lane Pin Index Pin Address
INSTANCE_0_GROUP_0_PIN_00_DDRCRTIMINGCONTROL 0 0 0x600100
INSTANCE_0_GROUP_0_PIN_01_DDRCRTIMINGCONTROL

0 1 0x6000fc
INSTANCE_0_GROUP_0_PIN_02_DDRCRTIMINGCONTROL 0 2 0x6000f8
INSTANCE_0_GROUP_0_PIN_03_DDRCRTIMINGCONTROL 0 3 0x6000f4
INSTANCE_0_GROUP_0_PIN_S_DDRCRTIMINGCONTROL 0 4 0x600f0
INSTANCE_0_GROUP_0_PIN_SB_DDRCRTIMINGCONTROL 0 5 0x600ec
INSTANCE_0_GROUP_0_PIN_04_DDRCRTIMINGCONTROL 0 6 0x6000e8
INSTANCE_0_GROUP_0_PIN_05_DDRCRTIMINGCONTROL 0 7 0x6000e4
INSTANCE_0_GROUP_0_PIN_06_DDRCRTIMINGCONTROL 0 8 0x6000e0
INSTANCE_0_GROUP_0_PIN_07_DDRCRTIMINGCONTROL 0 9 0x6000dc
INSTANCE_0_GROUP_0_PIN_08_DDRCRTIMINGCONTROL 0 10 0x6000d8
INSTANCE_0_GROUP_0_PIN_09_DDRCRTIMINGCONTROL 0 11 0x6000d4
INSTANCE_0_GROUP_0_PIN_10_DDRCRTIMINGCONTROL 1 0 0x602100
INSTANCE_0_GROUP_0_PIN_11_DDRCRTIMINGCONTROL 1 1 0x6020fc
INSTANCE_0_GROUP_0_PIN_12_DDRCRTIMINGCONTROL 1 2 0x6020f8
INSTANCE_0_GROUP_0_PIN_13_DDRCRTIMINGCONTROL 1 3 0x6020f4
INSTANCE_0_GROUP_0_PIN_14_DDRCRTIMINGCONTROL 1 4 0x6020f0
INSTANCE_0_GROUP_0_PIN_15_DDRCRTIMINGCONTROL 1 5 0x6020ec
INSTANCE_0_GROUP_0_PIN_16_DDRCRTIMINGCONTROL 1 6 0x6020e8
INSTANCE_0_GROUP_0_PIN_17_DDRCRTIMINGCONTROL 1 7 0x6020e4
INSTANCE_0_GROUP_0_PIN_18_DDRCRTIMINGCONTROL 1 8 0x6020e0
INSTANCE_0_GROUP_0_PIN_19_DDRCRTIMINGCONTROL 1 9 0x6020dc
INSTANCE_0_GROUP_0_PIN_20_DDRCRTIMINGCONTROL 1 10 0x6020d8
INSTANCE_0_GROUP_0_PIN_21_DDRCRTIMINGCONTROL 1 11 0x6020d4