1. 简介
1.1 DDR4 SDRAM 控制器主要特点
- 支持8到80位接口宽度的组件(支持 RDIMM、LRDIMM、UDIMM 和 SODIMM)
- 最大组件限制为9,此限制仅适用于组件,不适用于 DIMM。
- 密度支持
- 最高支持 32 GB 的组件密度,64 GB 的 LRDIMM,128 GB 的 RDIMM,16 GB 的 SODIMM 和16 GB 的 UDIMM。
- 其他内存设备支持的密度可通过自定义部件选择获得支持。
- AXI4从属接口
- 注意:基于 x4 的组件接口不支持 AXI4,而基于 x4 的 RDIMM 和 LRDIMM 支持 AXI4。
- 支持 x4、x8 和 x16 组件
- DDR4 RDIMM、SODIMM、LRDIMM 和 UDIMM 的双槽支持
- 8字节突发支持
- 支持9到24个列地址脉冲(CAS)延迟(CL)
- ODT支持
- 3DS RDIMM 和 LRDIMM 支持
- 3DS 组件支持
- 支持9到18个 CAS 写延迟周期
- Verilog 源代码交付
- 4:1 内存到 FPGA 逻辑接口时钟比率
- 开放、封闭和基于事务的预充电控制器策略
- 通过Vivado硬件管理器提供接口校准和训练信息
- 非 AXI4 72位接口的可选纠错码(ECC)支持
- 不支持写操作的 CRC
- 不支持地址/命令总线的2T定时
1.1.1 RDIMM, LRDIMM, UDIMM, SODIMM
DIMM(Dual In-line Memory Module)
DIMM,双列直插内存模块,一种常见的计算机内存模块。它是一块小型电路板,上面装有多个 DDR 芯片。DIMM 插入计算机主板上的相应插槽中,允许根据需要更改计算机的内存配置。与早期的 SIMM(Single In-line Memory Module,单列直插内存模块)不同,DIMM 的两侧有独立的电气接触点,能够提供更宽的数据通道(64 位),从而提高了数据传输效率。
RDIMM(Registered DIMM)
Registered DIMM 是一种带有寄存器的双列直插内存模块。寄存器位于 CPU 和 DRAM 芯片之间,用于缓冲数据传输信号,从而提高传输效率和稳定性。通常用于需要高稳定性和大容量内存的企业级服务器和高端计算机系统。
LRDIMM(Load-Reduced DIMM)
Load-Reduced DIMM 是一种降低负载的双列直插内存模块。与 RDIMM 不同,LRDIMM 使用内存缓冲芯片而不是寄存器来减少主板上的电力负载,这允许系统安装更多的内存模块,从而增加总内存容量,同时还能保持较高的数据传输速率。LRDIMM 非常适合需要极大内存容量的应用,如大型数据库、数据分析和高性能计算。
UDIMM(Unbuffered DIMM)
Unbuffered DIMM 是一种不带缓冲的双列直插内存模块。UDIMM 直接与系统的内存控制器交互,通常用于台式机和笔记本电脑。由于没有缓冲,UDIMM 的延迟较低,但支持的内存容量较小。
SODIMM (Small Outline DIMM)
Small Outline DIMM 是一种小型双列直插内存模块,主要用于笔记本电脑和其他空间有限的设备。SODIMM 的体积约为常规 DIMM 的一半,但性能和容量与全尺寸 DIMM 相似。
1.1.2 组件(Component)
组件(Component)指的是单个 DRAM 芯片。这些芯片是构成内存模块(如 DIMM)的基本单元。每个组件都有特定的容量和特性,它们共同决定了整个内存模块的性能和容量。
以下是一些关键点:
1)容量(Density)
- 组件的容量通常以千兆位(Gb)为单位。例如,一个 8Gb 的 DRAM 组件可以存储 8 千兆位的数据。
2)位宽(Width)
- 组件的位宽决定了每次数据传输的位数。常见的位宽有 x4、x8 和 x16,他们每次传输 4 位、8 位或 16 位数据。
3)组织(Organization)
- 组件的组织方式描述了其内部结构,例如 8Gb x8 组件表示这个组件有 8Gb 的容量,每次传输 8 位数据。
4)速度(Speed)
- 组件的速度通常以数据传输率(如 3200 MT/s)表示,决定了数据传输的快慢。
5)电压(Voltage)
- 不同代的 DDR 组件工作在不同的电压下,DDR4 通常工作在 1.2V,而 DDR3 工作在 1.5V。
1.1.3 Bank / Rank
如果控制器数据位宽为 64bits,那么 CPU 每次操作内存数据为 64bits,如果组件是 8bits,那么就需要 8 个组件凑在一起,他们组成一组,称为一个 Rank。
1.1.4 模式寄存器
1.1.5 其他
DDR Bus Efficiency
指的是数据总线在传输数据时的效率。它衡量的是在给定时间内,数据总线实际传输的数据量与其理论最大传输能力的比率。高效的DDR总线意味着在最少的总线转换操作下,能够保持最高的数据传输效率。
内存控制器
内存控制器(MC)旨在从用户界面(UI)块接收读取、写入和读取-修改-写入事务,并以低延迟高效地将它们发送到内存,满足所有DRAM协议和时序要求,同时使用最少的FPGA资源。该控制器使用DRAM到系统时钟比率为4:1运行,每个系统时钟周期可以发出一个激活(Activate)、一个列地址选择(CAS)和一个预充电(Precharge)命令。
该控制器支持开放页策略,并且可以在具有高空间局部性的工作负载中实现非常高的效率。该控制器还支持封闭页策略,并具有重新排序事务以有效调度具有更随机地址模式的工作负载的能力。该控制器还允许通过UI控制信号对低级功能进行一定程度的控制,例如按事务基础上的自动预充电(AutoPrecharge),以及可以用于确定何时发出DRAM刷新命令的信号。
内存初始化和校准序列
在系统复位取消后,PHY首先执行一些必要的内部校准步骤。
PHY运行内置自检(BISC)。BISC用于在校准完成后计算用于电压和温度跟踪的内部偏移。
在完成BISC后,校准逻辑执行内存所需的上电初始化序列。
随后进行写入和读取数据路径的多个阶段的时序校准。
校准完成后,PHY计算内部偏移,用于电压和温度跟踪。
PHY指示校准已完成,控制器开始向内存发出命令。
1.2 DDR4 主要参数解释
1.2.1 VDD / VPP
2. 配置界面
2.1 Memory Part
MT40A512M16HA-075E, 8Gb, Row=16, Column=10, Bank=2, Bank Group=1, Ranks=1, StackHeight=1
重要提示:
应该使用DBI,通过将所有DQ总线上的“0”重复单个突发长度= 8(BL8)读取访问,并在每个BL8读取突发之间插入空闲(NOP/DESELECT),如图1-2所示。启用DBI功能有效地减轻过多的电源噪音。如果DBI不可用,则在数据到达内存控制器之前,在应用中对数据进行编码以消除所有“0”突发,也是减轻电源噪音的同样有效方法。对于缺少DM/DBI引脚的基于x4的RDIMM/LRDIMM接口,通过用于这些拓扑结构的ODT设置来减轻电源噪音。对于比16位更宽的基于x4的组件接口,建议使用数据编码方法。
区分数据总线宽度和突发长度的概念:
数据总线宽度:这是指存储器接口一次能并行传输数据的位数。例如,64位宽的数据总线每个传输周期可以传输64位(或8字节)数据。
突发长度:这指的是在一次突发操作中连续传输的数据块的大小,通常以字节为单位。突发长度可以是任何数值,但通常是内存接口宽度的整数倍。
对于64位宽的存储器接口,如果支持8字节突发,那么在理论上,每个传输周期可以完成一次完整的突发传输。
综上所述,8字节突发对于64位宽的存储器接口而言,确实是基本的操作单位,每个周期可以完成一次突发传输。但在不同的设计和应用需求下,可能会有不同的突发长度设置来优化性能。
4. 总结
5. 参考资料
- 《UltraScale Architecture-Based FPGAs Memory IP Product Guide (PG150)》