
什么是DDR4 SDRAM Bank GroupDDR4 SDRAM 中使用的存储体分组bank groups功能借鉴自 GDDR5 图形内存。为了理解存储体分组的必要性必须先理解 DDR SDRAM 预取的概念。预取是指每次使用 DDR 内存执行列命令时会预取多少个数据字。由于 DRAM 核心的速度远低于接口因此通过并行访问信息然后将其串行化输出到接口来弥补速度差异。例如DDR3 预取 8 个数据字这意味着每次执行读取或写入操作时都会对 8 个数据字进行操作并在时钟周期的两个边沿之间连续四个时钟周期内从 SDRAM 中突发出入总共进行 8 次连续操作。从根本上讲对于 DDR3 的 8 个预取量可以理解为接口的速度是 DRAM 核心速度的 8 倍。预取的缺点在于它实际上决定了SDRAM的最小突发长度。例如DDR3的预取长度为8个字因此很难实现4个字的高效突发长度。而存储体分组功能允许设计人员在保持较小预取长度的同时提升性能如同预取长度更大一样。由于DRAM的核心速度在每一代产品中变化不大因此DDR的预取量随着每一代产品的推出而增加从而提升了SDRAM接口的速度。然而如果DDR4也延续这一趋势则需要采用16字的预取量。这将导致DRAM体积大幅增大因为需要集成更多的线路。这将使DRAM成本过高因此设计人员为了节省成本没有采用16字的预取量。更重要的是16字的预取量与当今计算机中常见的64字节缓存行大小不匹配。在典型的计算环境中使用64位或72位接口和64字节缓存行时8字的预取量和8字的突发长度更为合适。缓存行大小和突发长度的任何不匹配都可能对嵌入式系统的性能产生负面影响。DDR4 预取和性能为了理解预取如何影响性能回顾 SDRAM 的发展历程很有帮助。图 1 展示了每一代 SDRAM 的最大数据速率与最大列周期的对比。图 1 显示核心速度相当慢且随时间变化不大而接口速度却显著提升。SDRAM 核心速度并未随时间推移而提升这主要是因为更小的制程带来的优势被更大的 SDRAM 容量所抵消。设计人员最终不得不应对容量的增加而制程的小型化又加剧了这一问题。然而每一代 SDRAM 的 I/O 速度却始终保持增长。这是如何实现的呢这就需要用到预取技术了。最初的SDR单数据速率SDRAM问世时无需预取。每次执行列周期时它都会访问一个字的数据并将其从SDRAM中推送出去。虽然SDRAM实际上存在所谓的2N规则允许预取2但2N被视为规范中的限制性条款最终所有成为通用器件的SDRAM设备都采用预取1的策略。然而DDR SDRAM问世后内核无法再满足SDRAM所需的带宽。如图2所示这标志着引脚上的最大数据速率与内部列周期之间开始出现分离。随着时间的推移这种差异越来越大。DDR2 的预取容量为 4DDR3 的预取容量为 8这种差异进一步扩大。DDR4 仍然使用 8 个预取容量但引入了内存组的概念以避免更大的预取容量带来的负面影响。图 3 展示了预取机制在四代 SDRAM从 SDR SDRAM 到 DDR3 SDRAM中的演变过程。对于任何单列操作例如读取或写入一次访问的字数由内存阵列的数量表示同时还显示了将这些字从 SDRAM 核心取出或放入核心所需的大致周期时间MHz。顶行显示的是 SDR SDRAM。早在 20 世纪 90 年代中期内存阵列的速度与 I/O 速度相匹配。不久之后DDR也适用于 LPDDR引入了 2 字预取或称 2N 预取以实现比 SDRAM 内核更高的数据速率。图中所示的多路复用器可以访问这两个字然后在时钟的一个上升沿和一个下降沿通过接口进行复用输出。这种模式一直延续到 DDR3/LPDDR3 的 8N 预取。DDR4 和bank group问题在于这如何应用于DDR4及其8N预取如果DDR4也遵循图3所示的趋势那么DDR4的预取量将为16但我们已经看到这并非理想情况。DDR4通过引入存储体组bank group的概念来避免这个问题。利用存储体组可以在一个存储体组中执行8的预取而在另一个独立的存储体组中执行另一个8的预取。存储体组是独立的实体因此它们允许一个存储体组内完成一个列周期但该列周期不会影响另一个存储体组中正在发生的事情。实际上DDR4 SDRAM可以对其内部存储体组进行时分复用从而掩盖内部SDRAM内核周期时间比接口上8的突发传输所需时间更长的事实。图4展示了具有两个存储体组的x16 DDR4 SDRAM的这一过程这种存储体组通常用于嵌入式应用。bank group规范DDR4引入了内存组的概念并带来了新的规范。其中两个关键规范是tCCD_S和tCCD_L。“CCD”代表“列间延迟”或者说列侧的“命令间延迟”。“_S”代表“短延迟”“_L”代表“长延迟”。当一个内存组启动一个带有 8N 预取的指令时预取必须完成这需要该内存组的整个时钟周期。从一个内存组跳转到另一个内存组不受这些规范的限制。使用 tCCD_S 规范也是如此它在四个时钟周期内没有限制类似于 DDR3。然而这里有个关键点。在同一内存组内执行不同命令时需要注意DDR4新的tCCD_L规范其时间通常大于四个时钟周期。这种情况会影响设计的性能这在嵌入式应用中尤为重要。图5突出了tCCD_S和tCCD_L之间的区别。tCCD规格影响巨大如图 6 所示使用 DDR4 内存时不同存储体组之间的数据切换需要四个时钟周期的延迟。四个时钟周期对应一个八段突发长度。由于四个时钟周期包含八个时钟边沿上升沿和下降沿因此八段突发长度可以非常高效地在四个时钟周期内的每个时钟边沿输出或接收数据。在这种情况下总线带宽不会被浪费。一个命令可以紧接着另一个命令执行而不会在总线上浪费任何时钟周期。然而当速率从 1600 Mbps 开始在同一存储组内传输数据时tCCD_L 规范需要超过四个时钟周期。速率达到 1600 Mbps 和 1866 Mbps 时需要五个时钟周期而速率达到 2133 Mbps 时则需要六个时钟周期。图 6 表格下方的时序图显示在不同的存储组之间切换时接入点之间可能需要四个时钟周期。例如在同一存储组内以 2133 Mbps 的速率传输数据时列命令之间需要六个时钟周期。然而传输数据本身只需要四个时钟周期。剩余的两个时钟周期即总线带宽的 33%就无法使用了。为提高bank group的使用效率而安排流量图 7 中的时序图展示了 DDR4 内存库组在 1600 Mbps 数据速率示例中的影响。tCCD_L 的长规范值为 5这意味着同一内存库组内两次列命令之间需要五个时钟周期。图中高亮区域显示了最终结果当使用五个时钟周期时会有一个时钟周期被浪费因为没有数据流入或流出设备。在更高的数据速率下这个问题会变得更加严重因为此时 tCCD_L 会变为六个、七个甚至八个时钟周期。当 tCCD_L 为八个时钟周期时试图保持在同一内存库组内实际上会损失一半的带宽。图 7列命令之间可能浪费的时钟周期¹引用自DDR4 Bank Groups in Embedded System Applications | Synopsys IP