Important: LPDDR5/5X protocol uses feedback on
the DQ bits during CA Training and Write Leveling calibration stages so any pin
swapping needs to be done and validated in the tools. You are encouraged to try the
Obtaining and Verifying Versal Adaptive SoC Memory
Pinouts tutorial available on GitHub. This is a fast and effective way
to quickly generate pinouts for Versal DDRMCs. All pin
swaps must be captured in the design's XDC and validated before generating hardware.
PCB level pin swaps not captured in the tools can lead to hardware failures if pin
rules are not followed.
- Command, Address, and Control pins are fixed. This includes all pins within this
group:
- Command/Address/Control pins:
CA[6:0],CS, andRESET_N.- CA (Address) signals of Channel 0 can be swapped within Channel 0 and similarly CA (Address) signals of Channel 1 can be swapped within Channel 1.
- CA (Address) signals of Channel 0 cannot be swapped with CA (Address) signals of Channel 1.
- All interfaces: DMI is mapped to pin 6.
- Command/Address/Control pins:
- RDQS/DQ/DMI Pin Guidelines that are fixed:
- RDQS Guidelines:
- x16 interfaces: RDQS_t/RDQS_c must be placed on pin 2 and 3 respectively in one of the two octads used for data nibbles.
- RDQS pairs must be placed in the neighboring octad of WCK (0/1, 2/3, 4/5, 6/7).
- DQ/DMI Guidelines:
- x16 interfaces: All DQ and associated RDQS/DMI must be within the octad pair (0/1, 2/3, 4/5, 6/7).
- All interfaces: DQs are mapped to pins 0, 1, 4, and 5 only.
- x16 interfaces: All DQs of word (byte pairs 0/1 & 2/3) must be placed in consecutive octads. So DQ[7:0] and DQ[15:8] pairs must be placed in consecutive octads and DQ[31:24] and DQ[23:16] pairs must be placed in consecutive octads.
- RDQS Guidelines:
- The following swapping is allowed for all DQ/DMI/RDQS pins:
- LPDDR5/5X DQ bit swap.Important: LPDDR5/5X protocol uses feedback on the DQ bits during CA Training and Write Leveling calibration stages so any required pin swapping must be validated in the tools.
- DQ bits within a byte (RDQS/DQ group) can be swapped.
Table 1. Example of DQ Bits Swapped within a Byte Package pin name Un-swapped Swapped Notes IO_L0P_H0O0P0_M0P0_700 DQ[0] DQ[4] IO_L0N_H0O0P1_M0P1_700 DQ[1] DQ[6] IO_L1P_XCC_H0O0P2_M0P2_700 WCK_t[0] WCK_t[0] Cannot swap IO_L1N_XCC_H0O0P3_M0P3_700 WCK_c[0] WCK_c[0] Cannot swap IO_L2P_H0O0P4_M0P4_700 DQ[2] DQ[7] IO_L2N_H0O0P5_M0P5_700 DQ[3] DQ[0] IO_L3P_GC_H0O0P6_M0P6_700 DMI[0] DMI[0] Cannot swap IO_L3N_GC_H0O0P7_M0P7_700 CA_0[6] CA_0[6] Cannot swap IO_L4P_H0O1P0_M0P8_700 DQ[4] DQ[3] IO_L4N_H0O1P1_M0P9_700 DQ[5] DQ[2] IO_L5P_XCC_H0O1P2_M0P10_700 RDQS_t[0] RDQS_t[0] Cannot swap IO_L5N_XCC_H0O1P3_M0P11_700 RDQS_c[0] RDQS_c[0] Cannot swap IO_L6P_H0O1P4_M0P12_700 DQ[6] DQ[1] IO_L6N_H0O1P5_M0P13_700 DQ[7] DQ[5] IO_L7P_H0O1P6_M0P14_700 CA_0[5] CA_0[5] Cannot swap IO_L7N_H0O1P7_M0P15_700 CA_0[4] CA_0[4] Cannot swap
- DQ bits within a byte (RDQS/DQ group) can be swapped.
- LPDDR5/5X RDQS/DQ byte swap:
When you swap byte/nibble, DQ must be swapped together with associated RDQS, WCK, and DMI. Also, RDQS, WCK, and DMI position must be intact (DQ must be swapped with DQ only, DMI must be swapped with DMI only, RDQS must be with RDQS only, and WCK must be swapped with WCK only).
Example of byte swap:
- Octad-0 has WCK[0], DMI[0] and DQ[3:0], Octad-1 has RDQS[0] and DQ[7:4].
- Octad-2 has WCK[1], DMI[1] and DQ[11:8], Octad-3 has RDQS[1] and DQ[15:12].
- When you swap the bytes, the relative position of RDQS, WCK, and
DMI is fixed with respect to its original position in an octad
pair.
- When DQ[7:0] is swapped with DQ[15:8]:
- WCK[1] must be placed in Octad-0, WCK[0] must be placed in Octad-2.
- RDQS[1] must be placed in Octad-1, RDQS[0] must be placed in Octad-3.
- DMI[1] must be placed in Octad-0, DMI[0] must be placed in Octad-2.
- When DQ[7:0] is swapped with DQ[15:8]:
- Single Channel Configuration: Only swapping of
byte pairs allowed. Complete swap of one x16 with another x16
allowed, swapping of one byte from one x16 with one byte from
another x16 is not allowed.
- Example for swapping of byte pairs:
- DQ[15:0], associated RDQS, WCK, and DM are placed in octad 0, 1, 2 and 3 of Bank x
- DQ[31:16], associated RDQS, WCK, and DM are placed in octad 0, 1, 2, and 3 of Bank x+1
- In this case, only a complete
swap of DQ[15:0] with DQ[31:16] is allowed:
- After swap, DQ[15:0] is placed in octad 0, 1, 2, and 3 of Bank x+1
- After swap, DQ[31:16] is placed in octad 0, octad 1, octad 2 and octad 3 of Bank x
- Swapping of single byte/nibble
from DQ[15:0] with DQ[31:16] is not allowed:
- Only swapping DQ[7:0] with DQ[23:16] and leaving DQ[15:8] and DQ[31:24] as is not allowed
- Any combination of swap of only one byte from one x16 to another x16 is not allowed
- Example of swapping within byte
pairs:
- DQ[15:0], associated RDQS, WCK, and DM are placed in octad 0, octad 1, octad 2 and octad 3 of Bank x. Where, DQ[7:0] is placed in octad 0 and octad 1. DQ[15:8] is placed in octad 2 and octad 3.
- DQ[31:16], associated RDQS, WCK, and DM are placed in octad 0, 1, 2, and 3 of Bank x+1. Where, DQ[23:16] is placed in octad 0 and 1. DQ[31:24] is placed in octad 2 and 3.
- Swap with in byte pairs
allowed:
- Valid swapping example is swap of DQ[7:0] with DQ[15:8] → After swap, DQ[7:0] is placed in octad 2 and octad 3. DQ[15:8] is placed in octad 0 and octad 1
- Another valid swapping example is swap of DQ[23:16] with DQ[31:24] → After swap, DQ[23:16] is placed in octad 2 and 3 of Bank x+1. DQ[31:24] is placed in octad 0 and 1 of Bank x+1.
- Example for swapping of byte pairs:
- Dual Channel Configuration:
- Only swapping of bytes within a byte pair or a Channel is allowed. Swap of bytes within Channel-0 are allowed and similarly, swap of bytes within Channel-1 are allowed.
- Swapping of Channel-0 with Channel-1 is not allowed.
- Example of swapping bytes within a
Channel:
- Channel-0 DQ[15:0], associated RDQS, WCK, and DM are placed in octad 0, octad 1, octad 2 and octad 3 of Bank x. Where, Channel-0 DQ[7:0] is placed in octad 0 and octad 1. Channel-0 DQ[15:8] is placed in octad 2 and octad 3.
- Channel-1 DQ[15:0], associated RDQS, WCK, and DM are placed in octad 0, 1, 2, and 3 of Bank x+1. Where, Channel-1 DQ[7:0] is placed in octad 0 and 1. Channel-1 DQ[15:8] is placed in octad 2 and 3.
- Allowed swap within Channel:
- Channel-0 DQ[7:0] swap with Channel-0 DQ[15:8] → After swap, Channel-0 DQ[7:0] is placed in octad 2 and octad 3 of Bank x. Channel-0 DQ[15:8] is placed in octad 0 and octad 1 in Bank x.
- Channel-1 DQ[7:0] swap with Channel-1 DQ[15:8] → After swap, Channel-1 DQ[7:0] is placed in octad 2 and 3 of Bank x+1. Channel-1 DQ[15:8] is placed in octad 0 and 1 of Bank x+1.
- Channel-0 DQ[15:0] must not be swapped with Channel-1 DQ[15:0]
- LPDDR5/5X DQ bit swap.
- DQ, and associated RDQS/RDS, WCK and DM must be in consecutive octad pairs: 0/1, 2/3, 4/5, 6/7 of Bank. For example, DQ[7:0], RDQS[0], WCK[0], DM0 must be placed in consecutive octad pairs. Similarly, DQ[15:8], RDQS[1], WCK[1], DM0 must be placed in consecutive octad pairs.
- In X5PHIO bank 700 and bank 800 (not present in all devices), there is an additional bank pin that is used as a reference to calibrate internal on-die termination. The IO_VR_700/ IO_VR_800 pin must be externally connected to a 240Ω resistor on the PCB and pulled up to the bank VCCO voltage.
- One differential system clock source (
sys_clk) is required per integrated DDRMC5. For example, in a design with two adjacent MCs, thesys_clkcan be placed in the adjacent bank. In a design with two interfaces occupying Bank 700, 701, 702, 703, 704, and 705, bothsys_clkpairs can be placed on the clock capable pins of bank 702 or 703. Thesys_clkpair must be placed on an available clock capable pin pair within the three Banks associated with a DDRMC5. Refer to Clocking for details. - For a single MC interface the
sys_clkcan be placed in any of the banks where the interface is located.- Example
- In a design with an interface occupying Bank 700, 701, or 702, the
sys_clkcan be placed in any of the three banks. Similarly for an interface in the next three consecutive banks (703, 704, 705) thesys_clkcan be placed in any of the three banks. - Example
- In a design with an interface occupying Bank 700 and 701, the
sys_clkcan be placed in Bank 700, 701, or 702. Similarly, for an interface occupying Bank 703 and 704 thesys_clkcan be placed in 703, 704, or 705.
Note: Allowed combinations for six consecutive banks are Banks: '700, 701, 702, 703, 704, 705' and Banks '706, 707, 708, 709, 710, 711' - In a design with two interfaces occupying six consecutive banks and no
sys_clksharing, thesys_clkcan be placed in the respective banks of each interface. Thesys_clkcan also be placed in the adjacent bank of the other interface.Note: This rule only applies to above mentioned six consecutive bank configuration.- Example
- In a design with an interface occupying Bank 706, 707, and 708 and
the second interface occupying Bank 709, 710 and 711:
-
sys_clkof the first interface can be placed in Bank 706, 707, or 708 -
sys_clkof the second interface can be placed in Bank 709, 710, or 711 -
sys_clkof the first interface can be placed in Bank 709 and sys_clk of second interface can be placed in Bank 708
-
- In a design with two interfaces occupying six consecutive banks with
sys_clksharing, thesys_clkmust be placed in the middle two banks of the six bank interface.Note:sys_clksharing is only allowed in the above mentioned six consecutive bank configuration.- Example
- In a design with an interface occupying Banks 706, 707, and 708 and
the second interface occupying Banks 709, 710, and 711:
- With
sys_clksharing, thesys_clkcan be placed in either Bank 708 or 709.
- With
- The reset_n signal is fixed and cannot be moved.
- Unused pins in an octad can be utilized for non-memory designs for route through only.