首页 > 其他分享 >从零开始讲DDR(2)——DDR的核心技术

从零开始讲DDR(2)——DDR的核心技术

时间:2024-09-19 21:49:22浏览次数:10  
标签:DQS 核心技术 DDR 传输 从零开始 内存 预取 时钟

        我们知道DDR区分于之前的SDRAM最大的点就在于它可以做到“在时钟周期的上升沿和下降沿都能传输数据,这样它的传输速率就比SDRAM快了一倍”。其实要做到这点,背后需要的技术突破体现在很多层面:


一、双边沿触发技术(Double Data Rate)

        DDR 内存利用时钟信号的上升沿和下降沿,分别触发数据传输。这不同于传统的 SDRAM 只在时钟信号的上升沿传输数据。通过这一设计,DDR 在相同的时钟频率下,能够每个周期传输两倍的数据。

        这项技术从诞生到现在也经历了很长时间演变,首先DDR作为最早的双边沿触发内存技术,时钟频率较低,但实现了数据传输速率的翻倍。之后的DDR2、DDR3、DDR4、DDR5,随着内存技术的发展,双边沿触发技术被保留下来并持续改进。这些技术在进一步提升时钟频率的同时,依然使用双边沿触发技术,使得数据传输速率越来越高。例如:DDR3 的时钟频率为 800 MHz,但由于双边沿触发,其数据传输速率可达到 1600 MT/s。DDR5 在时钟频率为 3200 MHz 时,能够实现 6400 MT/s 的数据传输速率。

二、数据选通(Data Strobe, DQS)信号

        但是,双边沿触发技术的引入在带来效率提高的同时,也引入了一部分挑战。首先就是信号完整性方面的考虑,在高频传输中,确保时钟和数据的同步非常重要,双边沿触发需要比单边沿更精确的时钟管理机制。DQS(数据选通信号)的引入可以确保在每个时钟周期的上升沿和下降沿准确采样数据。

        它的主要作用是帮助内存控制器在读写操作时,正确采样数据,确保数据在高频率下能够稳定传输。DQS 信号的工作机制与 DDR 的读写操作紧密相关。

        我们知道DDR之前的SDRAM就是使用clock来同步的,因此理论上,DQ的读写时序完全可以由clock来同步。但是,由于速度提高之后,可用的时序余量越来越小,而引入DQS是为了降低系统设计的难度和可靠性,也就是可以不用考虑DQ和clock之间的直接关系,只用分组考虑DQ和DQS之间的关系,由于 DQS 和 DQ 是分组同步的,因此可以将同一组 DQ 数据线和 DQS 信号放在电路板上的同一层来走线。这有助于保持信号的时序一致性,减少信号传播中的延迟差异和误差。

        DQ和DQS只是组成了源同步时序的传输关系,可以保证数据在接收端被正确的所存,但是IC工作时,内部真正的同步时钟是clock而不是DQS,数据要在IC内部传输存储同样需要和clock(内部时钟比外部时钟慢)去同步,所以就要求所有的DQ信号还是同步的,而且和clock保持一定的关系,所以就要控制DQS和clock之间的延时了。在写入时,以DQS的高/低电平期中部为数据周期分割点,而不是上/下沿,但数据的接收触发仍为DQS的上/下沿。

2.1 DQS 在读操作中的作用

        当 DDR 内存执行读操作时,DQS 信号与内存发送的读数据(DQ)同步。DQS 与读数据边沿对齐,这样内存控制器可以准确地在时钟周期的上升沿和下降沿采集到内存传输的有效数据。

        DQS 边沿对齐:意味着 DQS 信号的上升沿和下降沿与数据的变化点一致。控制器通过检测 DQS 信号的边沿来决定何时进行数据采样。每一颗芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由芯片发来的DQS信号,读取时,则由内存生成DQS向芯片发送。因此可以认为DQS就是数据的同步信号。

2.2 DQS 在写操作中的作用

        在写操作时,数据是由控制器发送给内存的。在这种情况下,DQS 信号会由内存控制器产生,并与写数据(DQ) 中心对齐,帮助内存模块在正确的时机接收写入的数据。

        DQS 中心对齐:DQS 的上升沿和下降沿分别位于两个数据比特之间,确保内存能够在时钟周期的中间采样数据。由于时钟周期的中间区域波动最小,中心对齐可以提高写操作的稳定性。

2.3 DQS 与 DDR 的突发传输

        DDR 内存采用突发传输模式,数据在短时间内连续传输多个比特。DQS 信号在突发传输中扮演着同步器的角色,确保每个时钟周期的数据都能准确传输与接收。DQS 在突发模式下,帮助控制器和内存模块保持数据的传输节奏一致,从而提高了 DDR 的数据吞吐量。

三、低电压差分信号传输(LVDS)

        除了信号完整性方面的挑战,双边沿触发技术的引入还带来了数据传输延迟和误差控制方面的挑战。由于时钟频率较高,信号传输过程中可能会出现延迟和抖动,DDR 内存使用了差分信号传输等技术来减小噪声干扰,保持数据传输的稳定性。这种信号传输技术可以减小电压摆幅,降低电磁干扰(EMI),并提高信号的抗噪声能力,从而保证在高频下的稳定性。

四、突发传输模式(Burst Mode)

        DDR 内存采用了突发传输技术。一次内存访问会触发一系列连续的数据传输(突发传输),大幅减少了时钟周期的开销。这样不仅提高了数据传输效率,还在双边沿传输下最大化利用了每个时钟周期。

4.1 什么是突发传输(Burst Mode)

        突发传输是一种优化的数据传输方式,当 DDR 内存接收到一次读取或写入命令时,它不仅仅传输一个数据块,而是传输一系列连续的数据块。这使得内存可以更高效地利用时钟周期,减少了频繁的命令开销。每次突发传输的长度通常是 4 或 8,也就是一次突发操作传输 4 个或 8 个数据块(单位通常为字节或位)。

4.2 突发传输的工作方式

        当内存控制器向 DDR 发送读/写命令时,内存模块会根据预设的突发长度,在每个时钟周期的上升沿和下降沿连续传输多个数据块,而不是逐个周期发出一个数据传输请求。例如,如果设定了突发长度为 8(BL8),那么 DDR 内存会在一个命令下连续传输 8 个数据块,而不需要为每个数据块单独发送命令。

        双边沿传输(Double Data Rate, DDR) 是 DDR 内存的一大特点,即数据在时钟的上升沿和下降沿都可以传输。结合突发传输技术,DDR 内存能够在每个时钟周期的上升沿和下降沿连续传输多个数据块,最大限度地利用每个时钟周期。这种双边沿与突发传输的结合,显著提高了内存的数据吞吐量和传输效率。

        从DDR的原理图中,我们可以注意到Column Address的A2,A1,A0被单独预留了出来。

         这就是为了用于Burst Order功能,并且A3也被用于Burst Type功能。由于一般情况,我们采用的都是顺序读写模式(即{A2,A1,A0}={0,0,0}),所以此时的A3的取值并无直接影响。

4.3 突发长度的灵活性

        不同的 DDR 版本可以支持不同的突发长度,比如常见的 BL4 和 BL8,即每次传输 4 个或 8 个数据块。在一些高级的 DDR 版本中,突发长度可以动态调整,甚至支持按需截断(Burst Chop),从而在需要时截断突发传输长度以适应不同的应用需求。

五、多Bank并行处理

        DDR 内存内部分为多个独立的Bank,这些 Bank 可以并行处理多个操作。这种架构在双边沿触发技术下,进一步提高了内存的并发处理能力,提升了数据的吞吐量。

六、内部数据预取(Prefetch Buffer)

        DDR 内存使用了预取技术,内部数据预取(Prefetch Buffer) 是 DDR 内存中的一个关键组件,用于优化数据传输效率。它的作用是在时钟周期内一次性预取多个数据块,然后在后续时钟周期内逐步输出,从而减少内存访问延迟和提高数据带宽。下面是对 Prefetch Buffer 详细的解释:

6.1 Prefetch Buffer 的基本原理

        预取的意思是内存控制器一次性从内存阵列中读取多个数据块,并将这些数据暂时存储在 Prefetch Buffer 中,而不是每次只读取一个数据块。这些预取的数据将被存储在一个缓冲区中,等待传输。在随后的时钟周期内,内存可以通过双边沿传输技术,将这些预取的数据块逐一传输给控制器,从而提高内存的吞吐量。

6.2 Prefetch Buffer 的工作机制

        在 DDR 内存中,预取技术通常与突发传输相结合。每次数据请求时,DDR 内存通过预取缓冲区一次性从内存阵列中读取多个数据块。预取数据存储在 Prefetch Buffer 中,控制器通过 DQS(数据选通信号)在每个时钟周期的上升沿和下降沿读取这些数据。

6.3 预取深度(Prefetch Depth)

        不同的 DDR 内存有不同的预取深度,这决定了每次内存访问可以预取多少数据:DDR1 使用的是 2n 预取,即每次预取 2 个数据块。DDR2 和 DDR3 使用的是 4n 或 8n 预取,可以一次性预取 4 或 8 个数据块。DDR4 通常使用 8n 预取,即每次预取 8 个数据块。DDR5 提升至 16n 预取,一次预取 16 个数据块。预取深度越大,意味着内存能够在一次读取中获取更多的数据,这对于提升高频率下的内存效率非常重要。

        显然,通过使用Prefetch架构可以解决存储单元内部数据总线频率(核心频率)较低的瓶颈。8n预取,正是DDR3提升带宽的关键技术。同样的核心频率,DDR3能提供两倍于DDR2的带宽。总结: DDR SDRAM内部存储单元的核心频率提高比较困难且成本较高,为了解决外部数据传输率和核心速度之间的矛盾,DDR3引进了8n Prefetch(数据预取架构)技术,它能够提供比DDR2更高的数据传输率。

6.4 Prefetch Buffer 与时钟频率的关系

        DDR的频率的频率可以分为:

  • 核心频率
  • 时钟频率(I/O频率)
  • 数据传输频率

        核心频率就是内存的工作频率;DDR1内存的核心频率是和时钟频率相同的,到了DDR2和DDR3时才有了时钟频率的概念,就是将核心频率通过倍频技术得到的一个频率。数据传输频率就是传输数据的频率。DDR1预读取是2位,DDR2预读取是4位,DDR3预读取是8位…

        随着 DDR 内存时钟频率的不断提升,直接从内存阵列中读取数据的速度很难跟上外部数据总线的需求。预取缓冲区通过提前从内存阵列中获取数据,能够在时钟频率较高的情况下,保持较高的带宽和数据吞吐量。通过这种机制,即便内存阵列访问速度相对较慢,DDR 内存仍然可以通过预取技术保持较高的外部数据传输速率。

6.5 总结

        内部数据预取(Prefetch Buffer) 是 DDR 内存提高数据传输效率的重要技术之一。通过在每次内存访问时预取多个数据块,DDR 内存可以减少内存访问延迟,提升数据传输带宽。预取技术结合突发传输和双边沿传输,使得 DDR 内存在高频率下仍然能够保持高效的传输能力,并通过不同的预取深度适应各种高性能应用场景。

标签:DQS,核心技术,DDR,传输,从零开始,内存,预取,时钟
From: https://blog.csdn.net/apple_53311083/article/details/142368557

相关文章

  • 从零开始开发AI无人直播插件!
    AI无人直播插件应运而生,它利用人工智能技术,实现了直播内容的自动化生成与播放,极大地降低了直播的人力成本和时间成本,本文将带你从零开始,探索如何制作一个AI无人直播插件,并分享五段关键的源代码。AI无人直播插件的核心在于利用机器学习算法对大量数据进行训练,以生成符合特定需求的直......
  • 从零开始掌握 Kubernetes:Pod 和 Deployment 的幕后故事
     1.引言在如今的技术世界中,随着微服务架构的广泛应用和云原生理念的兴起,应用程序的开发、部署和管理发生了翻天覆地的变化。容器技术的出现使得开发者可以轻松地将应用及其所有依赖打包在一个轻量级、可移植的容器中,这种方式大大提升了应用的部署效率和一致性。然而,随着应......
  • 从零开始搭建自己的个人博客——前端篇之前端“三剑客”(html、css和js)的介绍
    第一章前言    我们总听大佬们常说编程有前端和后端之分,但是关于前端和后端我们总是一知半解,而我们想要搭建自己的个人博客,那么必然避免不了对前端网页的接触。本篇文章就是对前端进行介绍,你可以了解到什么是前端“三剑客”,它们都有什么作用。    不过,关于......
  • 探秘Python中的链表:从零开始的奇妙之旅
    引言链表之所以重要,是因为它提供了一种灵活的方式来存储和操作数据集合。不同于数组,链表允许我们在无需重新分配内存的情况下动态地添加或删除元素。这使得它成为处理不确定大小数据集的理想选择。此外,在某些特定场景下(如实现缓存机制),链表可以比其他数据结构表现得更加出色......
  • 探秘Python中的链表:从零开始的奇妙之旅
    引言链表之所以重要,是因为它提供了一种灵活的方式来存储和操作数据集合。不同于数组,链表允许我们在无需重新分配内存的情况下动态地添加或删除元素。这使得它成为处理不确定大小数据集的理想选择。此外,在某些特定场景下(如实现缓存机制),链表可以比其他数据结构表现得更加出色。基础......
  • 从零开始学PostgreSQL (十四):高级功能
    目录1.简介2.视图3.外键4.事务5.窗口函数6.继承7.结论简介PostgreSQL是一个强大且开源的关系型数据库管理系统,以其稳定性、功能丰富性和对SQL标准的广泛支持而闻名。它不仅提供了传统的关系型数据库功能,如事务处理、外键约束和视图,还引入了许多高级特性,如窗口函数、事务和复......
  • 深入理解 dladdr:符号信息查询与应用场景详解
    dladdr是一个用于获取与特定地址相关的符号信息的函数,它在Linux和类UNIX系统中非常有用,尤其是在进行调试或诊断时。以下是详细的介绍和一些使用示例:1.基本概念dladdr函数通常用于获取共享库中的符号信息。它可以根据给定的地址,返回该地址对应的符号信息,例如函数名称、所在的......
  • 图形学系列教程,带你从零开始入门图形学(包含配套代码)—— 透明度和深度
    图形学系列专栏序章初探图形编程第1章你的第一个三角形第2章变换顶点变换视图矩阵&帧速率第3章纹理映射第4章透明度和深度第5章裁剪区域和模板缓冲区第6章场景图第7章场景管理第8章索引缓冲区第9章骨骼动画第10章后处理第11章实时光照(一)第12章实时光照(二)第13章立......
  • 全面掌握 Jest:从零开始的测试指南(下篇)
    在上一篇测试指南中,我们介绍了Jest的背景、如何初始化项目、常用的匹配器语法以及钩子函数的使用。这一篇篇将继续深入探讨Jest的高级特性,包括Mock函数、异步请求的处理、Mock请求的模拟、类的模拟以及定时器的模拟、snapshot的使用。通过这些技术,我们将能够更高效地编写和......
  • 使用Addressables+SpriteAtlas打包产生冗余
    1)使用Addressables+SpriteAtlas打包产生冗余2)使用SBP打AssetBundle脚本引用丢失3)Unity构建后处理(IPostprocessBuildWithReport等接口)抛出异常后,构建不会停止4)Unity2022.3.0版本使用Occlusion,PC运行良好但是安卓手机无效这是第400篇UWA技术知识分享的推送,精选了UWA社区的热门话......