DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器)

DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器)

一、DDR基本功能

DDR基本功能主要包括:

  1. 8-bit prefetch预取——8-bit,是指8位数据,即8倍芯片位宽的数据。由于DDR内部数据传输是32bit,外部pin口DQ位宽4bit(存储单元数据位宽),在发起读数据(写同理)操作时,会先从bank中取出32bit数据存入寄存器中,然后再将32bit数据由并转串发出去,完成读数据操作;相当于一次性从bank中获取了8倍的DDR数据接口位宽的数据放入寄存器中,这种存取数方式即为8bit prefecth预取。实际上DDR内部一次性获取了大量数据,而只是将DDR接口处时钟进行倍频以便做并转串或串转并操作,从而达到高速访问的效果。
  2. 双沿采样——DDR接口处时钟会在上下边沿进行采样,一个时钟周期内会采到两倍于DDR接口位宽的数据。
  3. Burst传输——可以是常规的burst length为8bit的传输,也可以是burst chop length=4bit的传输。
  4. 必须先Power up和初始化操作——在对DDR进行操作之前,需要先对其中的目标颗粒进行ACTIVE(激活)操作,在激活颗粒之前必须先对颗粒进行上电初始化,才可进行正常访问。

——————————————————————————————————————————————————————————————

1.1、什么是Prefetch?

DDR核心技术点就在于(1)双沿传输。(2)预取prefetch。

实际上,Prefetch并不是什么新技术,在DDR1就开始应用了,我们以前经常能看到这样描述DDR,“在时钟周期的上沿和下沿都能传输数据,所以传输率比SDRAM快了一倍”,这就说上沿传输一位数据,下沿传输一位数据,在一个时钟周期内一共传输两位数据(2-bit),但这2-bit数据得先从存储单元预取出来才行(一个时间周期)。换句话说,一次读2-bit的数据,然后在I/O时钟上升沿和下降沿传输出去,这就是2-bit Prefetch技术。当然这只是表面的解释,实际情况要比这复杂得多,要注意是,这儿的2-bit,是指2位数据,即2倍芯片位宽的数据

在DDR2时代,使用了4-bit预取技术,一次从存储单元预取4-bit的数据,然后在I/O时钟上升沿和下降沿传输出去,由于4-bit需要2个时钟周期才能完成传输,这就是为什么DDR2的I/O时钟频率为存储单元频率两倍的原因。

到了DDR3,8-bit预取技术也自然水到渠成,**一次从存储单元预取8-bit的数据,在I/O端口处上下沿触发传输,8-bit需要4个时钟周期完成,所以DDR3的I/O时钟频率是存储单元核心频率的4倍,由于是上下沿都在传输数据,所以实际有效的数据传输频率达到了核心频率的8倍。**比如,核心频率为200MHz的DDR3-1600,其I/O时钟频率为800MHz,有效数据传输频率为1600MHz。

显然,通过使用Prefetch架构可以解决存储单元内部数据总线频率(核心频率)较低的瓶颈。8-bit预取,正是DDR3提升带宽的关键技术。同样的核心频率,DDR3能提供两倍于DDR2的带宽。

总结DDR SDRAM内部存储单元的核心频率提高比较困难且成本较高,为了解决外部数据传输率和核心速度之间的矛盾,DDR3引进了8-bit Prefetch(数据预取架构)技术,它能够提供比DDR2更高的数据传输率。

1.2、时钟频率关系

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

image

  1. 表中的I/O频率即为时钟频率,如下图所示;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二、DDR状态转换流程

DDR的状态转换基本流程如下图所示,包括从“上电复位 —> 初始化 —>…—>数据读写访问”整个流程。(仅供学习参考)

image
  在实际的DDR访问过程中,考虑到DDR的效率,一般并不会按照上图流程进行访问,而是会预先在DDR Controller中规划好Bank的访问流程,从而实现更为高效的DDR mem颗粒访问

DDR状态转换过程中的刷新:

  1. DRAM之所以称为动态随机存取存储器,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。
  2. DDR的刷新操作分为两种:自动刷新(Auto Refresh,简称ASR)与自刷新(Self Refresh,简称SR)。

对于ASR, SDRAM内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者 说CAS在RAS之前有效。所以,ASR又称CBR(CAS Before RAS,列提前于行定位)式刷新。由于刷新涉及到所有L-Bank,因此在刷新过程中,所有L-Bank都停止工 作,而每次刷新所占用的时间为9个时钟周期(PC133标准),之后就可进入正常的工作状态,也就是说在这9个时钟期间内,所有工作指令只能等待而无法执行。 一段时间之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对SDRAM的性能造成影响,但这是没办法的事情,也是DRAM相对于 SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。 SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR(Suspend to RAM,休眠挂起于内存)。在发出AR命令时,将CKE置于无效 状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新 指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态。

三、DDR的初始化

DDR的初始化分为上电Power up初始化和复位Reset初始化两种,二者过程基本相同。不同之处在于:电压VDD稳定后,Reset#信号拉低所持续的时间,DDR3要求上电初始化过程的Reset#至少持续200us,而复位初始化要求Reset#至少持续100us。
  实际上真正的DDR初始化过程就是对MR寄存器按照特定顺序进行配置的过程,DDR3要求MR寄存器的配置顺序为:MR2 -> MR3 -> MR1 -> MR0

3.1、Power up initialization

image

  • tXPR: DDR上电复位后,从CKE拉高到发出第一个有效的命令MRS之间的最小时间间隔;
  • tMRD:DDR初始化过程中,两个连续的MRS命令之间持续的最小时间间隔;
  • tMOD:MRS命令发送完毕后,让所有寄存器生效需要等待的时间;
  • ZQCL:上电初始化之后,对DDR内部的ODT打开进行信号校准操作,属于长延时的操作;
  • tZQinit:等待ZQCL校准完成的时间,至少需要512个clock;
  • tDLLK:在MR0配置时,同时需要使能DLL,让颗粒中的DLL开始工作,而使能DLL至少需要保持的时间即为tDLLK.

3.2、Reset initialization

复位初始化可以在任意状态执行,之后可以继续进行状态跳转。需要说明的是,复位初始化并不会改变mem颗粒的中的数据内容,而只是改变和初始化相关的寄存器值,但这并不代表复位完后寄存器的值和原来一样,这是由于复位需求的时间较长,可能由于没有及时刷新而导致原来的寄存器值被丢弃。所以复位完后依然需要进行正常的状态跳转,而不能认为复位后原来的寄存器中的值任然被保存。

image

四、MR寄存器

DDR3 SDRAM共有4个模式寄存器,分别为:MR2、MR3、MR1、MR0
  上述的Mode Register不存在default value,因此在DDR初始化过程中必须对MR寄存器进行配置,其每一bit都有其特定的作用。这些MR寄存器除了在DDR初始化过程中进行配置,在正常访问过程中也可以通过进入DDR的Idle状态进行配置,见第二部分DDR的状态图。

DDR中的MR寄存器的配置不会影响到Mem颗粒中的数据内容,但有可能会影响时序导致DDR mem读写数据不一致。

  • MR2用来存储控制更新的特性, Rtt_WR阻抗,和CAS写长度。
  • MR3用来控制MPR。
  • MR1用来存储是否使能DLL、输出驱动长度、Rtt_Nom、额外长度、写电平使能等。
  • MR0用来存储DDR3的不同操作模式的数据:包括突发长度、读取突发种类、CAS长度、测试模式、DLL复位等。

4.1、MR2/MR3 definition

MR2寄存器信息如下表:(不同厂商提供的DDR MR寄存器表格信息有所不同

image

  • A[2:0]:Partial Array Self Refresh,有目的的选择某一个或者某几个Bank进行自刷新self Refresh,该bit位信号一般直接刷新所有的Bank
  • A[5:3]:CAS Write Latency(CWL), 指从发起写命令到实际写数据进DDR颗粒之间延迟时间;
  • A[6]:Auto Self Refresh,选择DDR的刷新模式,Self Refresh(SR) 和 Auto Self Refresh(ASR);
  • A[7]:Self Refresh Temperature,选择自刷新的温度范围,与A[6]配合使用;
  • A[8]:RFU,空白保留域;
  • A[10:9]:RTT_WR,选择ODT的阻值,不常使用;

MR3寄存器信息如下图:

image

  • A0-A15:寄存器地址信号;在配置MR寄存器时并不是通过DQ来实现而是通过地址来实现相应配置;
  • BA0-BA1:Bank地址用来选择具体配置哪一个MR寄存起,然后通过地址A0-A15来实现该寄存器具体配置
  • A0-A1:MPR地址,Multi-purpose register address. 多用途寄存器的地址;
  • A2:MPR操作模式。MPR的功能是读出一个预先设定的系统时序校准比特序列;当打开MPR模式时,在读取颗粒中的数据时,数据将会从MPR地址处读出预设的pattern而非来自mem阵列

4.2、MR1/MR0 definition

MR1寄存器信息如下图:

image

  • A[0]:DLL Enable,颗粒中存在DLL,若让DDR实现高速访问,则需打开DLL
  • A[4:3]:Additive Latency (AL),命令真正传递到寄存器中存在的延迟时间;
  • A[5,1]:Output Driver Impedance Control (DIC) , 输出驱动阻抗控制,用来调节I/O输出驱动能力;
  • A[7]:Write Leveling Enable,控制写training的功能;
  • A[9, 6, 2]:RTT_NOM,可认为是一个标准的ODT阻值,通常情况下都会用到此ODT,常用60Ω
  • A[11]:TDQS,通常Disable状态;与DM信号互斥,二者只能有一个起作用,
  • A[12]:Qoff(Output Driver), 通常Enable状态,若disable掉则会变成纯输入模式,没有输出负载,一般只在测试时会用到;

MR0寄存器信息如下图:

image

  • A[1:0]:Burst length,可以是固定长度8,固定长度4,也可是动态的切换长度8/4
  • A[3]:Burst Type,通常选择sequential类型;
  • A[6:4, 2]:CAS Read Latency,指从发起读命令被颗粒接收到实际数据从DDR颗粒读出之间延迟时间;具体的选择需要根据不同频率来选择;
  • A[7]:Test mode,厂商自测用,通常置0;
  • A[8]:DLL Reset,初始化的最后一步,需要进行DLL Reset,一般配为1;
  • A[11:9]:Write Recovery for Auto Precharge,写数据之后要进行Auto Precharge,而从发出Auto-precharge命令到真正完成precharge所需的时间需要通过该bit域进行配置;根据不同频率进行配置
  • A[12]:DLL Control for Precharge Power Down,选择Precharge Power Down的退出模式,通常选择Fast exit。

4.3、Burst类型及顺序

image

可以发现,Column Address的**A2,A1,A0三位被用于Burst Order功能,并且A3也被用于Burst Type功能**。由于一般情况,我们采用的都是顺序读写模式(即{A2,A1,A0}={0,0,0}),所以此时的A3的取值并无直接影响。
  CA[2:0]的值决定了一次Burst sequence的读写地址顺序。

比如一次Burst Read的时候如果CA[2:0]=3’b001表示低三位从地址1开始读取,CA3=0的时候按顺序读取1,2,3,0,5,6,7,4,CA3=1的时候交错 读取1,0,3,2,5,4,7,6。 对于Prefetch而言,正好是8-bit Prefetch,对于Burst而言对应BL8。 BC4其实也是一次BL8的操作,只是丢弃了后一半的数据。

参考:https://www.expreview.com/168-5.html
参考:https://www.sohu.com/a/126626646_463982
参考:https://www.cnblogs.com/zhongguo135/p/8483346.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869829.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【python开发】并发编程(上)

并发编程(上) 一、进程和线程(一)多线程(二)多进程(三)GIL锁 二、多线程开发(一)t.start()(二)t.join()(三)t.…

Word粘贴时出现“运行时错误53,文件未找到:MathPage.WLL“的解决方案

在安装完MathType后,打开word复制粘贴时报错“运行时错误53,文件未找到:MathPage.WLL” 首先确定自己电脑的位数(这里默认32位) 右击MathType桌面图标,点击“打开文件所在位置”, 然后分别找到MathPage.W…

第一章:模型从硬盘文件到显示器像素的全过程分析

模型从硬盘文件到显示器像素的全流程分析 引言一、硬盘中的模型文件(1)分离式模型文件(2)模型主文件2.1 顶点几何与索引数据构成模型表面2.2 通过材质或贴图为模型表面着色2.3 通过骨骼动画驱动模型 二、CPU中的模型数据三、GPU中…

【第七章】深度学习思维模式

前言 尽管我们的神经网络表现出令人印象深刻的性能,但这种性能在某种程度上是神秘的。网络中的权重和偏差是自动发现的。这意味着我们并没有立即能够解释网络如何实现其功能。我们能否找到某种方式来理解我们的网络是如何对手写数字进行分类的原则?而且…

高中数学:复杂函数图像的草图画法(较难)

一、三大基本函数图像 1、指数函数图像 2、对数函数图像 3、幂函数图像 二、案例 口诀:上加下减,左加右减 1、指数函数图像变化规律 2、带绝对值的函数图像 情况1:绝对值套住整个函数表达式 画法原则:x轴下方的图像&#xff0…

【计算机组成原理】处理机管理

目录 一、处理机分类 1. MPU 2. MCU 3. DSP 二、CPU的功能 1. 指令控制 2. 操作控制 3. 时间控制 4. 数据加工 三、CPU的组成 (一)控制器 1. 控制器的功能 (1)控制指令执行的顺序 ① 程序中规定的转移类型指令 ② …

Nacos与Eureka的使用与区别

Nacos与Eureka的使用与区别 单体架构:优点缺点 分布式架构需要考虑的问题:微服务企业需求 认识SpringCloud服务的拆分与远程调用微服务调用方式 Eureka提供者和消费者架构搭建Eureka服务注册服务发现 Ribbon负载均衡饥饿加载总结 Nacos注册中心Nacos安装…

前端React篇之React的生命周期有哪些?

目录 React的生命周期有哪些?挂载阶段(Mounting)更新阶段(Updating)卸载阶段(Unmounting)错误处理阶段(Error Handling) React常见的生命周期React主要生命周期 React的生…

【List集合】List接口源码解读一(ArrayList)

目录 前言 1. List接口的基本信息 2. ArrayList 2.1.ArrayList 的基本信息 2.2. ArrayList 的构造方法 2.2.1 ArrayList 的构造方法一 2.2.2 ArrayList 的构造方法二 2.2.3 ArrayList 的构造方法三 2.3 ArrayList 的扩容方式 总结 前言 Java 语言由于其跨平台、社区良…

微信小程序开发系列(三十四)·自定义组件的创建、注册以及使用(数据和方法事件的使用)

目录 1. 分类和简介 2. 公共组件 2.1 创建 2.2 注册 2.3 使用 3. 页面组件 3.1 创建 3.2 注册 3.3 使用 4. 组件的数据和方法的使用 4.1 组件数据的修改 4.2 方法事件的使用 1. 分类和简介 小程序目前已经支持组件化开发,可以将页面中的功能…

Three 材质纹理 (总结三)

THREE.MeshLambertMaterial(网格 Lambert 材质) 该材质使用基于非物理的Lambertian模型来计算反射率。可以用来创建暗淡的并不光亮的表面,该材质非常易用,而且会与场景中的光源产生反应。 MeshLambertMaterial属性 # .color : …

24年上半年英语四六级报名时间25地汇总一览表

目前有25地公布了报名时间,大多集中在3月中下旬,具体时间以学校通知为准。 7个省份官宣 • 贵州(官方):3月18日12:00-3月29日16:00 • 黑龙江(官方):3月18日14:00-3月29日17:00 • 江西(官方):3月19日6:00-3月25日17:0…

05.BOM对象

一、js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。比如:变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型, 定义了一套操作HTML文档的APIBOM 浏览器对象模型,定义了一套操作浏览器窗口的API 二、windo…

deepseek-coder模型量化

1 简介 DeepSeek-Coder在多种编程语言和各种基准测试中取得了开源代码模型中最先进的性能。 为尝试在开发板进行部署,首先利用llama.cpp对其进行量化。 2 llama.cpp安装 git clone之后进入文件夹make即可,再将依赖补全pip install -r requirements.tx…

【Miniconda】基于conda避免运行多个PyTorch项目时发生版本冲突

【Miniconda】基于conda避免运行多个PyTorch项目时发生版本冲突 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到…

原创 《vtk9 book》 官方web版 第四章 - 可视化管线(1 / 2)

在前一章中,我们使用简单的数学模型创建了图形图像,用于光照、视图和几何。光照模型包括环境光、漫反射和镜面效果。视图包括透视和投影的效果。几何被定义为一组静态的图形原语,如点和多边形。为了描述可视化过程,我们需要扩展我…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记12_移动平台(上)

1. 广告 1.1. 广告收入的来源 1.1.1. 向客户推荐广告投放网址 1.1.2. 提供有效提高产品广告点击率的咨询服务 1.1.3. 从合作伙伴的广告收入中捞上一笔 1.2. 对于广告主来讲,他们无意于与各家网站逐一谈判 1.2.1. 这种方式一是成本过高,二是费时费力…

Github 2024-03-17 php开源项目日报 Top9

根据Github Trendings的统计,今日(2024-03-17统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目9Blade项目2Laravel:表达力和优雅的 Web 应用程序框架 创建周期:4631 天开发语言:PHP, BladeStar数量:75969 个Fork数量:24281 次关…

Delphi7应用教程学习1.3【练习题目】:文本及悬停文字的显示

这个例子主要用到了btn的Hint 属性,Hint是提示的意思。 还有Delphi7还是很好用的,改变了的属性是粗体,默认没有改变的属性为细体。

力扣新思路题:字符串轮转

非常简单的思路:将两个字符串s1接起来,并判断s2字符串是否是加长版s1字符串的子串 bool isFlipedString(char* s1, char* s2){if (strlen(s1) ! strlen(s2)) {return false;}int len strlen(s1);int i 0;char* arr (char*)malloc(sizeof(char) * len…