在Vivado控制器的生成步骤选择了DDR3选项之后,就进入与DDR3 SDRAM相关的参数配置阶段,如图1所示。
1. DDR控制器与DDR3相关的参数配置
-
- DDR3相关的参数配置
- 输入时钟周期2500PS(400MHz),对于ARTIX系列最高可以为400HZ,但是向下兼容。
- 控制器与PHY(物理层)的时钟比例4:1,是指FPGA提供给DDR3的时钟频率与控制器时钟频率的比率。这个比率只能选择4:1或2:1。这个选择对于控制器与APP接口数据宽度有很大的关系,如图2,图3所示。
- VCCAUX的电压设为1.8V,对于Kintex系列,如果FPGA使用HP BANK(如BANK32,BANK33等),VCCAUX设为2.0V 可以提高控制器的读写性能,如可以设置CK时钟为800M或更高。
- Memory的类型选择DDR3芯片( Components)或内存条RDIMMS,LRDIMMS,UDIMMS,SODIMMS等。这里选择芯片(component)。并在下拉框中选择合适的器件,如果找不到对应的器件,则需要创建一个新器件。
- DDR3电压1.5V,如果使用DDR2应为1.8V。
- ECC (disable),只有72数据口线宽度才支持ECC,其中数据64位,ECC为8位。
- Data Mask, 是否产生DDR3 DM 控制脚。如果不用DM,可以节省FPGA的管脚。
- BANK Mechine数量, 选择 -4或选择-8等,选择范围2–8。数量越大,耗费FPGA资源越多,但效率越高。主要的原因是在连续读写时,在对一个DDR3 bank读写时可以同时打开其它的DDR3 bank,可以节省由于BANK切换时的预充电(Precharge )及激活(Activating)时间。
- ORDERING 命令执行顺序 有Normal和Strict 两种。Strick严格按照给定的顺序执行。Normal模式下,DDR控制器可以重新调整执行顺序以达到更高的读写效率。
- DDR3相关的参数配置

图1

图2 Ratio2:1 时的口线宽度
图3 Ratio 4:1时的口线宽度
思考题: 如何根据RATIO确定 APP侧DATA_APP数据线的位宽?
2. 创建定制化的器件
由于我们提供的开发板中使用MT41J256M16XX-125, 在图1 Memory Part的下拉列表中找不到对应的选项,因此需要自己创建一个新的部件。操作步骤如下:
- 在Memory Part的下拉列表中找到最接近的器件,如MT41J128M16XX-125,选择数据宽度为16,见图4.

图4
- 点击Create Custom Part,弹出的对话框如图5,

图5
图5中显示了许多与时间相关的参数,这些参数都是从BASE PART导入的,因此选好Base Part(MT41J128M16xx-125)很重要。
- 修改地址和BANK参数,点击Save 按钮。
- 创建完成后会返回图6所示的界面,此时在Memory Part兰中就会出现MT41J256M6X-125

图6
- 点击Next,继续其它参数设置,如图7
3. DDR控制器其它参数设置
- 输入频率,参照图3或图4设置合适的输入频率,这里使用100MHz.
- 突发类型(Burst Type):选择Sequential
- 输出强度(ODI):可以选择RZQ/6 (40欧姆)或RZQ/7(34欧姆)。
- 片选(CS#): 在多个RANK时使用CS#,选择Enable。单个RANK时可以选择Disable,可以节省FPGA管脚。
- RTT(ODT),选择RZQ/4(60欧姆)或RZQ/6(40欧姆)。
- 地址映射顺序,选择ROW+BANK+COLLUM

图7
- 点击Next,如图8. 在图8中设置如下:
- System Clock: DDR 控制器输入时钟设置,可以外接到FPGA管脚的输入时钟,此时可以选择差分(Differential ), 单端(Single End)。如果选择FPGA内部PLL的输出作为DDR控制器的输入管脚,此时应该选择No Buffer,因为PLL的输出已经有全局时钟驱动。
- 参考时钟(Reference Clock),该时钟主要用来调整与DDR相连的FPGA管脚的输入模块延时的矫正,一般为200MHz,细节可以参考FPGA输入延时相关的文章。由于参考时钟也是 来自FPGA内部PLL,因此选择No Buffer。
- 复位脚极性,根据DDR3资料,DDR3的复位脚低电平有效,因此选择Active Low。
- 调试选项,这里选择OFF。
- 内部参考电压(Internal Ref),这个选项是指FPGA对应BANK参考电压选项,可以使用内部的参考电压生成器,也可以使用外部参考电压。当DDR时钟超过400MHz,一定要选择外部提供的参考时钟,以降低参考时钟的噪声。本例恰好400Mhz,因此选择内部参考时钟。
- IO功耗降低,选择该项为“ON”可以IO的功耗。就是在非读期间关闭DQ/DQS的输入Buffer,以及FPGA端的终端匹配电阻(RTT)。
- XADC, FPGA 内部的ADC,可以使能或非使能。

图8
- 点击Next,如图9

图9
- 图9中选择FPGA HR(high range)BANK的终端匹配电阻(FPGARTT)。
后面部分是FPGA管脚的设置,将在下一节中讲解。
老师您好,在学习DDR文章时遇到一些问题,请老师解答:
1、文中关于创建定制化器件部分的讲解中提到所用DDR3芯片的型号“MT41J256M16XX-125”,根据原理图发现DDR3芯片型号应该为“MT41J128M16HA-125”,但是,考虑到本文重点在于讲解如何创建定制化器件,可以稍作注解即可。
2、文中提到的Vccaux_io默认设置为1.8V,请问老师这里的1.8V是由谁提供呢?似乎在电路原理图中仅仅看到了DDR芯片的IO电压1.5V和参考电压0.75V。
1)
A: xilinx IP 核的表示是这个系列的fpga 都可以使用相同的配置参数,当然 “MT41J128M16HA-125 属于 MT41J256M16XX-125这一挡中。
2)
A:由于IP核在配置的时候,选择的是 internal Vref 这个选项, 所以1.8v 有fpga 内部自动提供。 如果采用xilinx 高端的芯片,如果kintex, Virtex 等, 就会有一个专门的fpga PIN 用来外部提供1.8v 或者 2.0v 的电压
老师,我看我们100T的 只有一个MT41J128M16HA-125,没有MT41J256M16X-125呢
老师不用回复了,看到其他同学问了