13 | | [[Image(HardwareUsersGuides/FPGABoard_v1.2/Images:FPGA_Board_SRAM.jpg, align=right)]] |
| 14 | In order to use the SO-DIMM, the user FPGA design must include a DDR2 memory controller. Thankfully, Xilinx provides (and maintains) a high performance controller as part of their Multi-Port Memory Controller (MPMC). |
| 15 | |
| 16 | We have verified the MPMC in EDK 10.1.03 and 11.3 using a 2GB SO-DIMM from Crucial (part [http://www.crucial.com/store/partspecs.aspx?imodule=CT25664AC667 CT25664AC667]). Other modules should be compatible, but may require customization of the MPMC parameters. |
| 17 | |
| 18 | There are a large number of pins and parameters involved in instantiating the MPMC in a design. We strongly recommend using Base System builder and our [source:/PlatformSupport/XBD/boards/Rice_University_WARP_FPGA_V4FX100_v22_ClkBoard/data XBD file] to generate MPMC designs. The MHS snippet below is an example instantiation (for EDK 10.1.03). |
| 19 | |
| 20 | {{{ |
| 21 | #!sh |
| 22 | EGIN mpmc |
| 23 | PARAMETER INSTANCE = DDR2_SDRAM_2GB |
| 24 | PARAMETER HW_VER = 4.03.a |
| 25 | PARAMETER C_NUM_PORTS = 2 |
| 26 | PARAMETER C_MEM_PARTNO = MT16HTF25664H-667 |
| 27 | PARAMETER C_MEM_TYPE = DDR2 |
| 28 | PARAMETER C_NUM_IDELAYCTRL = 4 |
| 29 | PARAMETER C_IDELAYCTRL_LOC = IDELAYCTRL_X0Y0-IDELAYCTRL_X0Y1-IDELAYCTRL_X2Y1-IDELAYCTRL_X2Y0 |
| 30 | PARAMETER C_MEM_DQS_WIDTH = 8 |
| 31 | PARAMETER C_MEM_DM_WIDTH = 8 |
| 32 | PARAMETER C_MEM_ADDR_WIDTH = 14 |
| 33 | PARAMETER C_MEM_BANKADDR_WIDTH = 3 |
| 34 | PARAMETER C_PIM0_BASETYPE = 2 |
| 35 | PARAMETER C_PIM1_BASETYPE = 2 |
| 36 | PARAMETER C_MPMC_CLK0_PERIOD_PS = 6250 |
| 37 | PARAMETER C_MPMC_BASEADDR = 0x00000000 |
| 38 | PARAMETER C_MPMC_HIGHADDR = 0x7fffffff |
| 39 | BUS_INTERFACE SPLB0 = ppc405_0_iplb1 |
| 40 | BUS_INTERFACE SPLB1 = ppc405_0_dplb1 |
| 41 | PORT DDR2_Addr = fpga_0_DDR2_SDRAM_2GB_DDR2_Addr |
| 42 | PORT DDR2_BankAddr = fpga_0_DDR2_SDRAM_2GB_DDR2_BankAddr |
| 43 | PORT DDR2_CAS_n = fpga_0_DDR2_SDRAM_2GB_DDR2_CAS_n |
| 44 | PORT DDR2_CE = fpga_0_DDR2_SDRAM_2GB_DDR2_CE |
| 45 | PORT DDR2_CS_n = fpga_0_DDR2_SDRAM_2GB_DDR2_CS_n |
| 46 | PORT DDR2_RAS_n = fpga_0_DDR2_SDRAM_2GB_DDR2_RAS_n |
| 47 | PORT DDR2_WE_n = fpga_0_DDR2_SDRAM_2GB_DDR2_WE_n |
| 48 | PORT DDR2_DM = fpga_0_DDR2_SDRAM_2GB_DDR2_DM |
| 49 | PORT DDR2_DQS = fpga_0_DDR2_SDRAM_2GB_DDR2_DQS |
| 50 | PORT DDR2_DQS_n = fpga_0_DDR2_SDRAM_2GB_DDR2_DQS_n |
| 51 | PORT DDR2_DQ = fpga_0_DDR2_SDRAM_2GB_DDR2_DQ |
| 52 | PORT DDR2_Clk = fpga_0_DDR2_SDRAM_2GB_DDR2_Clk |
| 53 | PORT DDR2_Clk_n = fpga_0_DDR2_SDRAM_2GB_DDR2_Clk_n |
| 54 | PORT DDR2_ODT = fpga_0_DDR2_SDRAM_2GB_DDR2_ODT |
| 55 | PORT MPMC_Clk0 = proc_clk_s |
| 56 | PORT MPMC_Clk90 = DDR2_SDRAM_2GB_mpmc_clk_90_s |
| 57 | PORT MPMC_Clk_200MHz = clk_200mhz_s |
| 58 | PORT MPMC_Rst = sys_periph_reset |
| 59 | END |
| 60 | }}} |
| 61 | |
| 62 | |