External Memory Interfaces (EMIF) IP User Guide: Agilex™ 3 FPGAs and SoCs
3.6.1.6. Pin Placement for Agilex™ 3 EMIF IP
Pin Assignments
To determine locations for all EMIF I/O pins you should refer to the pin table for your device. When referring to the pin table, the bank numbers, I/O bank indices, and pin names are provided. It is important to strictly follow the pin placement for a given memory topology when assigning pin locations for your EMIF IP.
You can perform pin assignments in a variety of ways. The recommended approach is to manually constrain some interface signals and let the Quartus® Prime Fitter handle the rest. This method consists of consulting the pin tables to find legal positions for some of the interface pins and assigning them through the .qsf file that is generated with the EMIF design example. For this method of I/O placement, you must constrain the following signals:
- RZQ pin
- PLL reference clock
- Memory reset
If you need to swap the DQ pins within a DQS group or swap the DQS group to simplify board design, enter the swizzling specification when instantiating the EMIF IP. Refer to Configuring DQ Pin Swizzling for more information about swapping the DQ pin and DQS group.
Based on the above constraints, the Quartus® Prime Fitter runs place and route based on these assignments.
To generate a .sof programming file using the Quartus® Prime software version 25.1.1 or later, all the pins used in the design must have both a location assignment and I/O standard assignment. The I/O standard for EMIF pins is automatically constrained by the IP. The reference clock for user pll in the design example is not considered as a EMIF pin, therefore you must provide the I/O standard assignment.
- Back-annotate all the EMIF pin locations after a successful compilation.
- Manually assign the pin locations using .qsf file or Pin Planner.
The user pll reference clock pin in the design example is not automatically constrained by the EMIF IP; you must constraint the location and I/O standard for this pin.
For dual-rank component interfaces, you cannot have different swizzling specifications for rank 0 and rank 1.
The following table shows the EMIF LPDDR4 pin placement on the I/O bank.
Lane Number | Pin Index | x32 | 2 Channel x16 |
---|---|---|---|
BL7 | 95 | MEM_DQ[31] | MEM_1_MEM_DQ[15] |
94 | MEM_DQ[30] | MEM_1_MEM_DQ[14] | |
93 | MEM_DQ[29] | MEM_1_MEM_DQ[13] | |
92 | MEM_DQ[28] | MEM_1_MEM_DQ[12] | |
91 | |||
90 | MEM_DMI[3] | MEM_1_MEM_DMI[1] | |
89 | MEM_DQS_C[3] | MEM_1_MEM_DQS_C[1] | |
88 | MEM_DQS_T[3] | MEM_1_MEM_DQS_T[1] | |
87 | MEM_DQ[27] | MEM_1_MEM_DQ[11] | |
86 | MEM_DQ[26] | MEM_1_MEM_DQ[10] | |
85 | MEM_DQ[25] | MEM_1_MEM_DQ[9] | |
84 | MEM_DQ[24] | MEM_1_MEM_DQ[8] | |
BL6 | 83 | MEM_DQ[23] | MEM_1_MEM_DQ[7] |
82 | MEM_DQ[22] | MEM_1_MEM_DQ[6] | |
81 | MEM_DQ[21] | MEM_1_MEM_DQ[5] | |
80 | MEM_DQ[20] | MEM_1_MEM_DQ[4] | |
79 | |||
78 | MEM_DMI[2] | MEM_1_MEM_DMI[0] | |
77 | MEM_DQS_C[2] | MEM_1_MEM_DQS_C[0] | |
76 | MEM_DQS_T[2] | MEM_1_MEM_DQS_T[0] | |
75 | MEM_DQ[19] | MEM_1_MEM_DQ[3] | |
74 | MEM_DQ[18] | MEM_1_MEM_DQ[2] | |
73 | MEM_DQ[17] | MEM_1_MEM_DQ[1] | |
72 | MEM_DQ[16] | MEM_1_MEM_DQ[0] | |
BL5 | 71 | ||
70 | |||
69 | |||
68 | |||
67 | MEM_1_MEM_CK_C | ||
66 | MEM_1_MEM_CK_T | ||
65 | |||
64 | |||
63 | MEM_1_MEM_RESET_N | ||
62 | OCT_1_OCT_RZQIN | ||
61 | |||
60 | |||
BL4 | 59 | Differential "N-side" reference clock input site | |
58 | Differential "P-side" reference clock input site | ||
57 | MEM_1_MEM_CS[1] | ||
56 | MEM_1_MEM_CS[0] | ||
55 | MEM_1_MEM_CKE[1] | ||
54 | MEM_1_MEM_CKE[0] | ||
53 | MEM_1_MEM_CA[5] | ||
52 | MEM_1_MEM_CA[4] | ||
51 | MEM_1_MEM_CA[3] | ||
50 | MEM_1_MEM_CA[2] | ||
49 | MEM_1_MEM_CA[1] | ||
48 | MEM_1_MEM_CA[0] | ||
BL3 | 47 | ||
46 | |||
45 | |||
44 | |||
43 | MEM_CK_C | MEM_0_MEM_CK_C | |
42 | MEM_CK_T | MEM_0_MEM_CK_T | |
41 | |||
40 | |||
39 | MEM_RESET_N | MEM_0_MEM_RESET_N | |
38 | RZQ Site | OCT_0_OCT_RZQIN | |
37 | |||
36 | |||
BL2 | 35 | Differential "N-side" reference clock input site | |
34 | Differential "P-side" reference clock input site | ||
33 | MEM_CS[1] | MEM_0_MEM_CS[1] | |
32 | MEM_CS[0] | MEM_0_MEM_CS[0] | |
31 | MEM_CKE[1] | MEM_0_MEM_CKE[1] | |
30 | MEM_CKE[0] | MEM_0_MEM_CKE[0] | |
29 | MEM_CA[5] | MEM_0_MEM_CA[5] | |
28 | MEM_CA[4] | MEM_0_MEM_CA[4] | |
27 | MEM_CA[3] | MEM_0_MEM_CA[3] | |
26 | MEM_CA[2] | MEM_0_MEM_CA[2] | |
25 | MEM_CA[1] | MEM_0_MEM_CA[1] | |
24 | MEM_CA[0] | MEM_0_MEM_CA[0] | |
BL1 | 23 | MEM_DQ[15] | MEM_0_MEM_DQ[15] |
22 | MEM_DQ[14] | MEM_0_MEM_DQ[14] | |
21 | MEM_DQ[13] | MEM_0_MEM_DQ[13] | |
20 | MEM_DQ[12] | MEM_0_MEM_DQ[12] | |
19 | |||
18 | MEM_DMI[1] | MEM_0_MEM_DMI[1] | |
17 | MEM_DQS_C[1] | MEM_0_MEM_DQS_C[1] | |
16 | MEM_DQS_T[1] | MEM_0_MEM_DQS_T[1] | |
15 | MEM_DQ[11] | MEM_0_MEM_DQ[11] | |
14 | MEM_DQ[10] | MEM_0_MEM_DQ[10] | |
13 | MEM_DQ[9] | MEM_0_MEM_DQ[9] | |
12 | MEM_DQ[8] | MEM_0_MEM_DQ[8] | |
BL0 | 11 | MEM_DQ[7] | MEM_0_MEM_DQ[7] |
10 | MEM_DQ[6] | MEM_0_MEM_DQ[6] | |
9 | MEM_DQ[5] | MEM_0_MEM_DQ[5] | |
8 | MEM_DQ[4] | MEM_0_MEM_DQ[4] | |
7 | |||
6 | MEM_DMI[0] | MEM_0_MEM_DMI[0] | |
5 | MEM_DQS_C[0] | MEM_0_MEM_DQS_C[0] | |
4 | MEM_DQS_T[0] | MEM_0_MEM_DQS_T[0] | |
3 | MEM_DQ[3] | MEM_0_MEM_DQ[3] | |
2 | MEM_DQ[2] | MEM_0_MEM_DQ[2] | |
1 | MEM_DQ[1] | MEM_0_MEM_DQ[1] | |
0 | MEM_DQ[0] | MEM_0_MEM_DQ[0] |