Visible to Intel only — GUID: msj1689205063776
Ixiasoft
Visible to Intel only — GUID: msj1689205063776
Ixiasoft
3.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 11-bit offset address left-padded with 13’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™ 5 D-Series and E-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™ 5 D-Series and E-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
- Set InternalClocksOn=1
- Reset the training by setting TrainReset from 0 to 1 and back to 0.
- Perform calibration.
- Set InternalClocksOn=0.
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:
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 |