| 1 | [[TracNav(HardwareUsersGuides/WARPv3/TOC)]] |
| 2 | == WARP v3 User Guide: Memory == |
| 3 | The WARP v3 board includes a DDR3 SO-DIMM slot routed to dedicated pins on the FPGA. When combined with a DDR3 memory controller core in the FPGA, the SO-DIMM is available to user designs. The SO-DIMM interface on WARP v3 is designed to support modules up to 8GB in size and run at up to 400MHz. Faster speeds may be possible but are not recommended. |
| 4 | |
| 5 | Every WARP v3 kit ships with a pre-tested 2GB SO-DIMM rated for at least 400MHz operation. If you want to use another SO-DIMM, we recommend using modules from major manufacturers, acquired through authorized (and reputable) channels. All too often cheap modules can be out-of-spec (or outright counterfeits), and debugging flaky RAM in hardware is hard. |
| 6 | |
| 7 | == Memory Controllers == |
| 8 | Designing a DDR3 memory controller is challenging. Thankfully Xilinx provides the MIG (memory interface generator), which can generate FPGA implementations of known-good DDR3 controllers. MIG can be run from Coregen if you need a memory controller for a custom logic design. You can use the constraints below when running the MIG wizard to generate a controller for use on WARP v3. |
| 9 | |
| 10 | === XPS MPMC === |
| 11 | For embedded designs, XPS provides the MPMC, which wraps a MIG-generated DDR3 controller. The MPMC only supports 32-bit DDR3 memories on Virtex-6 devices. The MHS snipped below shows how to configure the MPMC in XPS 13.4 for use with the 2GB SO-DIMM on WARP v3. |
| 12 | |
| 13 | {{{ |
| 14 | #!sh |
| 15 | BEGIN mpmc |
| 16 | PARAMETER INSTANCE = DDR3_2GB_SODIMM |
| 17 | PARAMETER C_NUM_PORTS = 1 |
| 18 | PARAMETER C_MEM_TYPE = DDR3 |
| 19 | PARAMETER C_MEM_PARTNO = MT8JSF25664HZ-1G4 |
| 20 | PARAMETER C_MEM_ODT_TYPE = 1 |
| 21 | PARAMETER C_MEM_REG_DIMM = 0 |
| 22 | PARAMETER C_MEM_CLK_WIDTH = 1 |
| 23 | PARAMETER C_MEM_ODT_WIDTH = 1 |
| 24 | PARAMETER C_MEM_CE_WIDTH = 1 |
| 25 | PARAMETER C_MEM_CS_N_WIDTH = 1 |
| 26 | PARAMETER C_MEM_DATA_WIDTH = 32 |
| 27 | PARAMETER C_MEM_NDQS_COL0 = 4 |
| 28 | PARAMETER C_MEM_DQS_LOC_COL0 = 0x000000000000000000000000000003020100 |
| 29 | PARAMETER C_PIM0_BASETYPE = 2 |
| 30 | PARAMETER HW_VER = 6.05.a |
| 31 | PARAMETER C_FAMILY = virtex6 |
| 32 | PARAMETER C_MPMC_BASEADDR = 0x40000000 |
| 33 | PARAMETER C_MPMC_HIGHADDR = 0x7fffffff |
| 34 | BUS_INTERFACE SPLB0 = mb_plb |
| 35 | PORT MPMC_Clk0 = clk_150_0000MHzMMCM0 |
| 36 | PORT MPMC_Clk_200MHz = clk_200_0000MHz |
| 37 | PORT MPMC_Rst = sys_periph_reset |
| 38 | PORT MPMC_Clk_Mem = clk_300_0000MHzMMCM0 |
| 39 | PORT MPMC_Clk_Rd_Base = clk_300_0000MHzMMCM0_nobuf_varphase |
| 40 | PORT MPMC_DCM_PSEN = MPMC_DCM_PSEN |
| 41 | PORT MPMC_DCM_PSINCDEC = MPMC_DCM_PSINCDEC |
| 42 | PORT MPMC_DCM_PSDONE = MPMC_DCM_PSDONE |
| 43 | PORT DDR3_Clk = fpga_0_DDR3_2GB_SODIMM_DDR3_Clk_pin |
| 44 | PORT DDR3_Clk_n = fpga_0_DDR3_2GB_SODIMM_DDR3_Clk_n_pin |
| 45 | PORT DDR3_CE = fpga_0_DDR3_2GB_SODIMM_DDR3_CE_pin |
| 46 | PORT DDR3_CS_n = fpga_0_DDR3_2GB_SODIMM_DDR3_CS_n_pin |
| 47 | PORT DDR3_ODT = fpga_0_DDR3_2GB_SODIMM_DDR3_ODT_pin |
| 48 | PORT DDR3_RAS_n = fpga_0_DDR3_2GB_SODIMM_DDR3_RAS_n_pin |
| 49 | PORT DDR3_CAS_n = fpga_0_DDR3_2GB_SODIMM_DDR3_CAS_n_pin |
| 50 | PORT DDR3_WE_n = fpga_0_DDR3_2GB_SODIMM_DDR3_WE_n_pin |
| 51 | PORT DDR3_BankAddr = fpga_0_DDR3_2GB_SODIMM_DDR3_BankAddr_pin |
| 52 | PORT DDR3_Addr = fpga_0_DDR3_2GB_SODIMM_DDR3_Addr_pin |
| 53 | PORT DDR3_DQ = fpga_0_DDR3_2GB_SODIMM_DDR3_DQ_pin |
| 54 | PORT DDR3_DM = fpga_0_DDR3_2GB_SODIMM_DDR3_DM_pin |
| 55 | PORT DDR3_Reset_n = fpga_0_DDR3_2GB_SODIMM_DDR3_Reset_n_pin |
| 56 | PORT DDR3_DQS = fpga_0_DDR3_2GB_SODIMM_DDR3_DQS_pin |
| 57 | PORT DDR3_DQS_n = fpga_0_DDR3_2GB_SODIMM_DDR3_DQS_n_pin |
| 58 | END |
| 59 | }}} |
| 60 | |
| 61 | The UCF entries for timing and logic placement for this parameterization of the MPMC are listed below. The pin location constraints given in the next section are also required. All of these are tailored for the WARP v3 board with a 2GB SO-DIMM clocked at <400MHz. |
| 62 | |
| 63 | {{{ |
| 64 | #!sh |
| 65 | # Includes placement constraints for upper 32 bits of the 64-bit RAM, |
| 66 | # just in case Xilinx gets around to implementing a 64-bit DDR3 MPMC for V6 |
| 67 | |
| 68 | # These constraints are derived from the template generated by the MIG |
| 69 | # The comments below are all generated by the MIG and are included here for reference |
| 70 | |
| 71 | |
| 72 | # Constrain BUFR clocks used to synchronize data from IOB to fabric logic |
| 73 | # Note that ISE cannot infer this from other PERIOD constraints because |
| 74 | # of the use of OSERDES blocks in the BUFR clock generation path |
| 75 | NET "*/mpmc_core_0/gen_v6_ddr3_phy.mpmc_phy_if_0/clk_rsync[?]" TNM_NET = TNM_clk_rsync; |
| 76 | TIMESPEC "TS_clk_rsync" = PERIOD "TNM_clk_rsync" 5000 ps; # This is over-constraint for 200MHz, user can relax it to match mpmc_clk0 |
| 77 | |
| 78 | # Paths between DQ/DQS ISERDES.Q outputs and CLB flops clocked by falling |
| 79 | # edge of BUFR will by design only be used if DYNCLKDIVSEL is asserted for |
| 80 | # that particular flop. Mark this path as being a full-cycle, rather than |
| 81 | # a half cycle path for timing purposes. NOTE: This constraint forces full- |
| 82 | # cycle timing to be applied globally for all rising->falling edge paths |
| 83 | # in all resynchronizaton clock domains. If the user had modified the logic |
| 84 | # in the resync clock domain such that other rising->falling edge paths |
| 85 | # exist, then constraint below should be modified to utilize pattern |
| 86 | # matching to specific affect only the DQ/DQS ISERDES.Q outputs |
| 87 | TIMEGRP "TG_clk_rsync_rise" = RISING "TNM_clk_rsync"; |
| 88 | TIMEGRP "TG_clk_rsync_fall" = FALLING "TNM_clk_rsync"; |
| 89 | TIMESPEC "TS_clk_rsync_rise_to_fall" = FROM "TG_clk_rsync_rise" TO "TG_clk_rsync_fall" 5000 ps; # This is over-constraint for 200MHz, user can relax it to match mpmc_clk0 |
| 90 | |
| 91 | # Signal to select between controller and physical layer signals. Four divided by two clock |
| 92 | # cycles (4 memory clock cycles) are provided by design for the signal to settle down. |
| 93 | # Used only by the phy modules. |
| 94 | INST "*/mpmc_core_0/gen_v6_ddr3_phy.mpmc_phy_if_0/u_phy_init/u_ff_phy_init_data_sel" TNM = "TNM_PHY_INIT_SEL"; |
| 95 | TIMESPEC "TS_MC_PHY_INIT_SEL" = FROM "TNM_PHY_INIT_SEL" TO FFS = 10000 ps; # This is over-constraint, user can relax it to match 4 memory clock cycles |
| 96 | |
| 97 | #Internal Vref |
| 98 | CONFIG INTERNAL_VREF_BANK22=0.75; |
| 99 | CONFIG INTERNAL_VREF_BANK23=0.75; |
| 100 | CONFIG INTERNAL_VREF_BANK33=0.75; |
| 101 | |
| 102 | #DCI Cascading |
| 103 | CONFIG DCI_CASCADE = "23 22"; |
| 104 | |
| 105 | #BUFR IOBs (must be unconnected in FPGA and PCB) |
| 106 | CONFIG PROHIBIT = AH17,AP20; |
| 107 | |
| 108 | #BUFIO IOBs (must be unconnected in FPGA and PCB) |
| 109 | CONFIG PROHIBIT = AC13,AD12,AF19,AF20,AH23,AK27,AN27,AP11; |
| 110 | |
| 111 | ###################################################################################### |
| 112 | ##Place RSYNC OSERDES and IODELAY: ## |
| 113 | ###################################################################################### |
| 114 | |
| 115 | #MPMC as of EDK 13.4 only supports 32-bit memories |
| 116 | ##Site: AH17 -- Bank 32 |
| 117 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_loop_col1.u_oserdes_rsync" LOC = "OLOGIC_X2Y23"; |
| 118 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_loop_col1.u_odelay_rsync" LOC = "IODELAY_X2Y23"; |
| 119 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_loop_col1.u_bufr_rsync" LOC = "BUFR_X2Y1"; |
| 120 | |
| 121 | ##Site: AP20 -- Bank 22 |
| 122 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_loop_col0.u_oserdes_rsync" LOC = "OLOGIC_X1Y21"; |
| 123 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_loop_col0.u_odelay_rsync" LOC = "IODELAY_X1Y21"; |
| 124 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_loop_col0.u_bufr_rsync" LOC = "BUFR_X1Y1"; |
| 125 | |
| 126 | |
| 127 | ###################################################################################### |
| 128 | ##Place CPT OSERDES and IODELAY: ## |
| 129 | ###################################################################################### |
| 130 | |
| 131 | ##Site: AH23 -- Bank 23 |
| 132 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[0].u_oserdes_cpt" LOC = "OLOGIC_X1Y57"; |
| 133 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[0].u_odelay_cpt" LOC = "IODELAY_X1Y57"; |
| 134 | |
| 135 | ##Site: AK27 -- Bank 23 |
| 136 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[1].u_oserdes_cpt" LOC = "OLOGIC_X1Y59"; |
| 137 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[1].u_odelay_cpt" LOC = "IODELAY_X1Y59"; |
| 138 | |
| 139 | ##Site: AN27 -- Bank 23 |
| 140 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[2].u_oserdes_cpt" LOC = "OLOGIC_X1Y61"; |
| 141 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[2].u_odelay_cpt" LOC = "IODELAY_X1Y61"; |
| 142 | |
| 143 | ##Site: AF19 -- Bank 22 |
| 144 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[3].u_oserdes_cpt" LOC = "OLOGIC_X1Y23"; |
| 145 | INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[3].u_odelay_cpt" LOC = "IODELAY_X1Y23"; |
| 146 | |
| 147 | #MPMC as of EDK 13.4 only supports 32-bit memories |
| 148 | ##Site: AF20 -- Bank 22 |
| 149 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[4].u_oserdes_cpt" LOC = "OLOGIC_X1Y17"; |
| 150 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[4].u_odelay_cpt" LOC = "IODELAY_X1Y17"; |
| 151 | |
| 152 | ##Site: AP11 -- Bank 33 |
| 153 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[5].u_oserdes_cpt" LOC = "OLOGIC_X2Y57"; |
| 154 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[5].u_odelay_cpt" LOC = "IODELAY_X2Y57"; |
| 155 | |
| 156 | ##Site: AC13 -- Bank 33 |
| 157 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[6].u_oserdes_cpt" LOC = "OLOGIC_X2Y61"; |
| 158 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[6].u_odelay_cpt" LOC = "IODELAY_X2Y61"; |
| 159 | |
| 160 | ##Site: AD12 -- Bank 33 |
| 161 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[7].u_oserdes_cpt" LOC = "OLOGIC_X2Y59"; |
| 162 | #INST "*/u_phy_read/u_phy_rdclk_gen/gen_ck_cpt[7].u_odelay_cpt" LOC = "IODELAY_X2Y59"; |
| 163 | }}} |
| 164 | |
| 165 | === FPGA Pinout === |
| 166 | |
| 167 | The FPGA pin assignments for the DDR3 SO-DIMM connector are listed in the UCF snippet below. The pins listed as {{{PROHIBIT}}} are unconnected on the WARP v3 board. The MIG DDR3 controller uses clocking logic in these IOBs, precluding use of the actual IO on the board. |
| 168 | {{{ |
| 169 | #!sh |
| 170 | |
| 171 | ###DDR3 SO-DIMM |
| 172 | |
| 173 | #Clocks |
| 174 | NET "SODIMM_CK_N<0>" LOC = "AD15" | IOSTANDARD = "IOSTD"; |
| 175 | NET "SODIMM_CK_P<0>" LOC = "AC15" | IOSTANDARD = "IOSTD"; |
| 176 | NET "SODIMM_CK_N<1>" LOC = "AM15" | IOSTANDARD = "IOSTD"; |
| 177 | NET "SODIMM_CK_P<1>" LOC = "AN15" | IOSTANDARD = "IOSTD"; |
| 178 | |
| 179 | #Address/Control |
| 180 | NET "SODIMM_ADDR<0>" LOC = "AM17" | IOSTANDARD = "IOSTD"; |
| 181 | NET "SODIMM_ADDR<1>" LOC = "AF16" | IOSTANDARD = "IOSTD"; |
| 182 | NET "SODIMM_ADDR<2>" LOC = "AN17" | IOSTANDARD = "IOSTD"; |
| 183 | NET "SODIMM_ADDR<3>" LOC = "AG17" | IOSTANDARD = "IOSTD"; |
| 184 | NET "SODIMM_ADDR<4>" LOC = "AK16" | IOSTANDARD = "IOSTD"; |
| 185 | NET "SODIMM_ADDR<5>" LOC = "AG16" | IOSTANDARD = "IOSTD"; |
| 186 | NET "SODIMM_ADDR<6>" LOC = "AK17" | IOSTANDARD = "IOSTD"; |
| 187 | NET "SODIMM_ADDR<7>" LOC = "AG18" | IOSTANDARD = "IOSTD"; |
| 188 | NET "SODIMM_ADDR<8>" LOC = "AE16" | IOSTANDARD = "IOSTD"; |
| 189 | NET "SODIMM_ADDR<9>" LOC = "AD16" | IOSTANDARD = "IOSTD"; |
| 190 | NET "SODIMM_ADDR<10>" LOC = "AH15" | IOSTANDARD = "IOSTD"; |
| 191 | NET "SODIMM_ADDR<11>" LOC = "AH18" | IOSTANDARD = "IOSTD"; |
| 192 | NET "SODIMM_ADDR<12>" LOC = "AE17" | IOSTANDARD = "IOSTD"; |
| 193 | NET "SODIMM_ADDR<13>" LOC = "AJ16" | IOSTANDARD = "IOSTD"; |
| 194 | NET "SODIMM_ADDR<14>" LOC = "AK18" | IOSTANDARD = "IOSTD"; |
| 195 | NET "SODIMM_ADDR<15>" LOC = "AH19" | IOSTANDARD = "IOSTD"; |
| 196 | |
| 197 | NET "SODIMM_BA<0>" LOC = "AG15" | IOSTANDARD = "IOSTD"; |
| 198 | NET "SODIMM_BA<1>" LOC = "AP16" | IOSTANDARD = "IOSTD"; |
| 199 | NET "SODIMM_BA<2>" LOC = "AD17" | IOSTANDARD = "IOSTD"; |
| 200 | NET "SODIMM_CAS_N" LOC = "AJ17" | IOSTANDARD = "IOSTD"; |
| 201 | NET "SODIMM_CKE<0>" LOC = "AF18" | IOSTANDARD = "IOSTD"; |
| 202 | NET "SODIMM_CKE<1>" LOC = "AJ19" | IOSTANDARD = "IOSTD"; |
| 203 | NET "SODIMM_CS_N<0>" LOC = "AL16" | IOSTANDARD = "IOSTD"; |
| 204 | NET "SODIMM_CS_N<1>" LOC = "AJ15" | IOSTANDARD = "IOSTD"; |
| 205 | NET "SODIMM_EVENT" LOC = "AL14" | IOSTANDARD = "IOSTD"; |
| 206 | NET "SODIMM_ODT<0>" LOC = "AP15" | IOSTANDARD = "IOSTD"; |
| 207 | NET "SODIMM_ODT<1>" LOC = "AL15" | IOSTANDARD = "IOSTD"; |
| 208 | NET "SODIMM_RAS_N" LOC = "AM16" | IOSTANDARD = "IOSTD"; |
| 209 | NET "SODIMM_RESET_N" LOC = "AP17" | IOSTANDARD = "IOSTD"; |
| 210 | NET "SODIMM_WE_N" LOC = "AF15" | IOSTANDARD = "IOSTD"; |
| 211 | |
| 212 | #Data Masks |
| 213 | NET "SODIMM_DM<0>" LOC = "AM30" | IOSTANDARD = "IOSTD"; |
| 214 | NET "SODIMM_DM<1>" LOC = "AL26" | IOSTANDARD = "IOSTD"; |
| 215 | NET "SODIMM_DM<2>" LOC = "AP26" | IOSTANDARD = "IOSTD"; |
| 216 | NET "SODIMM_DM<3>" LOC = "AJ22" | IOSTANDARD = "IOSTD"; |
| 217 | NET "SODIMM_DM<4>" LOC = "AN20" | IOSTANDARD = "IOSTD"; |
| 218 | NET "SODIMM_DM<5>" LOC = "AH14" | IOSTANDARD = "IOSTD"; |
| 219 | NET "SODIMM_DM<6>" LOC = "AM10" | IOSTANDARD = "IOSTD"; |
| 220 | NET "SODIMM_DM<7>" LOC = "AG11" | IOSTANDARD = "IOSTD"; |
| 221 | |
| 222 | #DQ |
| 223 | NET "SODIMM_DQ<0>" LOC = "AK29" | IOSTANDARD = "IOSTD"; |
| 224 | NET "SODIMM_DQ<1>" LOC = "AN30" | IOSTANDARD = "IOSTD"; |
| 225 | NET "SODIMM_DQ<2>" LOC = "AL29" | IOSTANDARD = "IOSTD"; |
| 226 | NET "SODIMM_DQ<3>" LOC = "AN29" | IOSTANDARD = "IOSTD"; |
| 227 | NET "SODIMM_DQ<4>" LOC = "AP31" | IOSTANDARD = "IOSTD"; |
| 228 | NET "SODIMM_DQ<5>" LOC = "AP30" | IOSTANDARD = "IOSTD"; |
| 229 | NET "SODIMM_DQ<6>" LOC = "AH28" | IOSTANDARD = "IOSTD"; |
| 230 | NET "SODIMM_DQ<7>" LOC = "AH27" | IOSTANDARD = "IOSTD"; |
| 231 | NET "SODIMM_DQ<8>" LOC = "AK28" | IOSTANDARD = "IOSTD"; |
| 232 | NET "SODIMM_DQ<9>" LOC = "AL28" | IOSTANDARD = "IOSTD"; |
| 233 | NET "SODIMM_DQ<10>" LOC = "AJ27" | IOSTANDARD = "IOSTD"; |
| 234 | NET "SODIMM_DQ<11>" LOC = "AH25" | IOSTANDARD = "IOSTD"; |
| 235 | NET "SODIMM_DQ<12>" LOC = "AP29" | IOSTANDARD = "IOSTD"; |
| 236 | NET "SODIMM_DQ<13>" LOC = "AM27" | IOSTANDARD = "IOSTD"; |
| 237 | NET "SODIMM_DQ<14>" LOC = "AJ25" | IOSTANDARD = "IOSTD"; |
| 238 | NET "SODIMM_DQ<15>" LOC = "AH24" | IOSTANDARD = "IOSTD"; |
| 239 | NET "SODIMM_DQ<16>" LOC = "AJ24" | IOSTANDARD = "IOSTD"; |
| 240 | NET "SODIMM_DQ<17>" LOC = "AK24" | IOSTANDARD = "IOSTD"; |
| 241 | NET "SODIMM_DQ<18>" LOC = "AL24" | IOSTANDARD = "IOSTD"; |
| 242 | NET "SODIMM_DQ<19>" LOC = "AK23" | IOSTANDARD = "IOSTD"; |
| 243 | NET "SODIMM_DQ<20>" LOC = "AP27" | IOSTANDARD = "IOSTD"; |
| 244 | NET "SODIMM_DQ<21>" LOC = "AM26" | IOSTANDARD = "IOSTD"; |
| 245 | NET "SODIMM_DQ<22>" LOC = "AN25" | IOSTANDARD = "IOSTD"; |
| 246 | NET "SODIMM_DQ<23>" LOC = "AN24" | IOSTANDARD = "IOSTD"; |
| 247 | NET "SODIMM_DQ<24>" LOC = "AD21" | IOSTANDARD = "IOSTD"; |
| 248 | NET "SODIMM_DQ<25>" LOC = "AE21" | IOSTANDARD = "IOSTD"; |
| 249 | NET "SODIMM_DQ<26>" LOC = "AK22" | IOSTANDARD = "IOSTD"; |
| 250 | NET "SODIMM_DQ<27>" LOC = "AL18" | IOSTANDARD = "IOSTD"; |
| 251 | NET "SODIMM_DQ<28>" LOC = "AN19" | IOSTANDARD = "IOSTD"; |
| 252 | NET "SODIMM_DQ<29>" LOC = "AP19" | IOSTANDARD = "IOSTD"; |
| 253 | NET "SODIMM_DQ<30>" LOC = "AM18" | IOSTANDARD = "IOSTD"; |
| 254 | NET "SODIMM_DQ<31>" LOC = "AN18" | IOSTANDARD = "IOSTD"; |
| 255 | NET "SODIMM_DQ<32>" LOC = "AF21" | IOSTANDARD = "IOSTD"; |
| 256 | NET "SODIMM_DQ<33>" LOC = "AC20" | IOSTANDARD = "IOSTD"; |
| 257 | NET "SODIMM_DQ<34>" LOC = "AD20" | IOSTANDARD = "IOSTD"; |
| 258 | NET "SODIMM_DQ<35>" LOC = "AE19" | IOSTANDARD = "IOSTD"; |
| 259 | NET "SODIMM_DQ<36>" LOC = "AP21" | IOSTANDARD = "IOSTD"; |
| 260 | NET "SODIMM_DQ<37>" LOC = "AJ20" | IOSTANDARD = "IOSTD"; |
| 261 | NET "SODIMM_DQ<38>" LOC = "AL19" | IOSTANDARD = "IOSTD"; |
| 262 | NET "SODIMM_DQ<39>" LOC = "AK19" | IOSTANDARD = "IOSTD"; |
| 263 | NET "SODIMM_DQ<40>" LOC = "AF14" | IOSTANDARD = "IOSTD"; |
| 264 | NET "SODIMM_DQ<41>" LOC = "AG12" | IOSTANDARD = "IOSTD"; |
| 265 | NET "SODIMM_DQ<42>" LOC = "AK13" | IOSTANDARD = "IOSTD"; |
| 266 | NET "SODIMM_DQ<43>" LOC = "AH12" | IOSTANDARD = "IOSTD"; |
| 267 | NET "SODIMM_DQ<44>" LOC = "AN14" | IOSTANDARD = "IOSTD"; |
| 268 | NET "SODIMM_DQ<45>" LOC = "AP14" | IOSTANDARD = "IOSTD"; |
| 269 | NET "SODIMM_DQ<46>" LOC = "AL13" | IOSTANDARD = "IOSTD"; |
| 270 | NET "SODIMM_DQ<47>" LOC = "AN12" | IOSTANDARD = "IOSTD"; |
| 271 | NET "SODIMM_DQ<48>" LOC = "AF11" | IOSTANDARD = "IOSTD"; |
| 272 | NET "SODIMM_DQ<49>" LOC = "AE11" | IOSTANDARD = "IOSTD"; |
| 273 | NET "SODIMM_DQ<50>" LOC = "AE13" | IOSTANDARD = "IOSTD"; |
| 274 | NET "SODIMM_DQ<51>" LOC = "AE12" | IOSTANDARD = "IOSTD"; |
| 275 | NET "SODIMM_DQ<52>" LOC = "AK12" | IOSTANDARD = "IOSTD"; |
| 276 | NET "SODIMM_DQ<53>" LOC = "AJ12" | IOSTANDARD = "IOSTD"; |
| 277 | NET "SODIMM_DQ<54>" LOC = "AK11" | IOSTANDARD = "IOSTD"; |
| 278 | NET "SODIMM_DQ<55>" LOC = "AJ11" | IOSTANDARD = "IOSTD"; |
| 279 | NET "SODIMM_DQ<56>" LOC = "AC12" | IOSTANDARD = "IOSTD"; |
| 280 | NET "SODIMM_DQ<57>" LOC = "AH10" | IOSTANDARD = "IOSTD"; |
| 281 | NET "SODIMM_DQ<58>" LOC = "AD11" | IOSTANDARD = "IOSTD"; |
| 282 | NET "SODIMM_DQ<59>" LOC = "AG10" | IOSTANDARD = "IOSTD"; |
| 283 | NET "SODIMM_DQ<60>" LOC = "AP12" | IOSTANDARD = "IOSTD"; |
| 284 | NET "SODIMM_DQ<61>" LOC = "AM12" | IOSTANDARD = "IOSTD"; |
| 285 | NET "SODIMM_DQ<62>" LOC = "AL10" | IOSTANDARD = "IOSTD"; |
| 286 | NET "SODIMM_DQ<63>" LOC = "AJ10" | IOSTANDARD = "IOSTD"; |
| 287 | |
| 288 | #DQS |
| 289 | NET "SODIMM_DQS0_N" LOC = "AG26" | IOSTANDARD = "IOSTD"; |
| 290 | NET "SODIMM_DQS0_P" LOC = "AG25" | IOSTANDARD = "IOSTD"; |
| 291 | NET "SODIMM_DQS1_N" LOC = "AM28" | IOSTANDARD = "IOSTD"; |
| 292 | NET "SODIMM_DQS1_P" LOC = "AN28" | IOSTANDARD = "IOSTD"; |
| 293 | NET "SODIMM_DQS2_N" LOC = "AL25" | IOSTANDARD = "IOSTD"; |
| 294 | NET "SODIMM_DQS2_P" LOC = "AM25" | IOSTANDARD = "IOSTD"; |
| 295 | NET "SODIMM_DQS3_N" LOC = "AH22" | IOSTANDARD = "IOSTD"; |
| 296 | NET "SODIMM_DQS3_P" LOC = "AG22" | IOSTANDARD = "IOSTD"; |
| 297 | NET "SODIMM_DQS4_N" LOC = "AL20" | IOSTANDARD = "IOSTD"; |
| 298 | NET "SODIMM_DQS4_P" LOC = "AM20" | IOSTANDARD = "IOSTD"; |
| 299 | NET "SODIMM_DQS5_N" LOC = "AM13" | IOSTANDARD = "IOSTD"; |
| 300 | NET "SODIMM_DQS5_P" LOC = "AN13" | IOSTANDARD = "IOSTD"; |
| 301 | NET "SODIMM_DQS6_N" LOC = "AC14" | IOSTANDARD = "IOSTD"; |
| 302 | NET "SODIMM_DQS6_P" LOC = "AD14" | IOSTANDARD = "IOSTD"; |
| 303 | NET "SODIMM_DQS7_N" LOC = "AM11" | IOSTANDARD = "IOSTD"; |
| 304 | NET "SODIMM_DQS7_P" LOC = "AL11" | IOSTANDARD = "IOSTD"; |
| 305 | |
| 306 | #SO-DIMM reserved pins when using DDR3 controller based on the Xilinx MIG |
| 307 | # (IOB clock logic used internally; must be unconnected on PCB and in FPGA designs) |
| 308 | |
| 309 | #Bank 22 |
| 310 | CONFIG PROHIBIT = AF20, AP20, AF19; |
| 311 | |
| 312 | #Bank 23 |
| 313 | CONFIG PROHIBIT = AH23, AK27, AN27; |
| 314 | |
| 315 | #Bank 32 |
| 316 | CONFIG PROHIBIT = AH17; |
| 317 | |
| 318 | #Bank 33 |
| 319 | CONFIG PROHIBIT = AP11, AD12, AC13; |
| 320 | }}} |