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://www.mzph.cn/news/750239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3GUI--qt仿暴风影音视频播放器By:PyQt5(附下载地址)

文章目录 一.前言二.环境1.开发环境2.打包环境3.运行环境 三.软件截图1.启动页2.视频播放3.音频播放4.其他1.托盘2.对话框 四.功能总览五.代码展示&心得1.UI设计2.如何防止卡顿3.如何自定义组件 五.思考…

VLC抓取m3u8视频

前言 最近想看一些网络视频,但是很多时候网页上是m3u8推流的,如果在线看,速度又慢,所以就想下载下来,就想到了VLC的推流,转换能力,查阅资料,加上实践,总结心得。 设置中…

RabbitMQ进阶

1.消息可靠性 消息从发送,到消费者接收,会经历多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: - 发送时丢失: - 生产者发送的消息未送达exchange - 消息到达exchange后未到达queue - MQ宕机,queue将消息丢失 - consumer接收到消息后未消费就宕机 …

【C语言】浮点型在内存中的存储

文章目录 例题引入剖析原因浮点型的二进制转换(M)正负号之分(S)科学记数法(E)关于 S E M 在内存中的存储存取浮点型时的情况讨论 例题解析整形存储为浮点型并输出浮点型存储为整形并输出 在我的上一篇博客中…

接雨水-热题 100?-Lua 中文代码解题第4题

接雨水-热题 100?-Lua 中文代码解题第4题 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释…

算法——前缀和之除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和

这几道题对于我们前面讲过的一维、二维前缀和进行了运用,包含了面对特殊情况的反操作 目录 4.除自身以外数组的乘积 4.1解析 4.2题解 5.和为K的子数组 5.1解析 5.2题解 6.和可被K整除的子数组 6.1解析 6.2题解 7.连续数组 7.1题解 7.2题解 8.矩阵区域和 8.1解析 …

GET和POST方法的区别

GET和POST的区别 在我们开发项目的时候常常会在Controller层使用到POST方法或者GET方法,犹豫到底将接口定义为GET方法还是POST方法?那这两者之间有什么区别呢? 看一下官方定义: GET 和 POST 是 HTTP 协议中最常用的两种请求方法…

爬虫学习 Scrapy中间件代理UA随机selenium使用

目录 中间件UA、代理处理---process_requestUA随机 代理处理seleniumscrapy 中间件 控制台操作 (百度只起个名 scrapy startproject mid scrapy genspider baidu baidu.com setting.py内 ROBOTSTXT_OBEY FalseLOG_LEVEL "WARNING"运行 scrapy crawl baidu middle…

ArcGIS分享图层数据的最佳方法

在工作中,经常需要将图层数据分享给其他人。 如下图所示,需要分享的是【CJDCQ】和【GHDLTB】,图层带有符号系统: 一、分享gdb数据库及lyr文件 分享数据自然要找到源数据: 但是,gdb数据是不带符号系统的&a…

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

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

springboot基于spring boot的在线答题微信小程序

摘 要 在线答题微信小程序是考试中重要的一环,在线答题是学生获取任务信息的主要渠道。为了方便学生能够在网站上查看任务信息、考试,于是开发了基于 springboot框架设计与实现了一款简洁、轻便的在线答题微信小程序。本微信小程序解决了在线答题事务中的…

2.3 HTML5新增的常用标签

2.3.1 HTML5新增文档结构标签 在HTML5版本之前通常直接使用<div>标签进行网页整体布局&#xff0c;常见布局包括页眉、页脚、导航菜单和正文部分。为了区分文档结构中不同的<div>内容&#xff0c;一般会为其配上不同的id名称。例如&#xff1a; <div id"h…

FFmpeg转码参数说明及视频转码示例

-b : 设置音频或者视频的转码码率 -b:v 只设置视频码率 -b:a 只设置音频码率 -ab: 只设置音频码率, 默认码率大小为: 128k bit/s -g: 设置视频GOP大小,表示I帧之间的间隔,默认为12 -ar: 设置音频采样率,默认0 -ac: 设置音频通道数量 默认0 -bf: 设置连…

CTFHUB-web-信息泄漏

题目所在位置&#xff1a;技能树->web->信息泄漏 目录遍历 打开题目&#xff0c;我们进入的是这个页面 翻译过来就是 得到的信息就是&#xff1a;flag要在这些目录里面寻找&#xff0c;我们直接一个一个点开查看就行 发现得到一个flag.txt&#xff0c;点击打开得到flag …

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:UIExtensionComponent (系统接口))

UIExtensionComponent用于支持在本页面内嵌入其他应用提供的UI。展示的内容在另外一个进程中运行&#xff0c;本应用并不参与其中的布局和渲染。 通常用于有进程隔离诉求的模块化开发场景。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0…

【Java】List, Set, Queue, Map 区别?

目录 List, Set, Queue, Map 区别&#xff1f; Collection和Collections List ArrayList 和 Array区别&#xff1f; ArrayList与LinkedList区别? ArrayList 能添加null吗&#xff1f; ArrayList 插入和删除时间复杂度&#xff1f; LinkedList 插入和删除时间复杂度&…

计算机网络-数据链路层

一、认识以太网 "以太网" 不是⼀种具体的网络&#xff0c;而是一种技术标准; 既包含了数据链路层的内容, 也包含了⼀些物理 层的内容。 例如&#xff1a;规定了网络拓扑结构&#xff0c;访问控制方式&#xff0c;传输速率等; 例如&#xff1a;以太网中的网线必须使用…

vxe-table表格组件的使用已经query函数扩展

最近新项目使用vue3typescript开发后台管理系统&#xff0c;基本上展示内容一致表格的方式展示&#xff0c;所以使用vxe-table组件来开发&#xff0c;主要是为了方便使用工具栏&#xff0c;以及其他表格操作。 vxe-table 开发文档&#xff1a;https://vxetable.cn/#/table/sta…

免费开源多层级多标签文本分类|文本分类接口|文本自动分类

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

火车订票管理系统|基于springboot框架+ Mysql+Java+B/S结构的火车订票管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能模块 系统功能设计 数据库E-R图设计 lunwen…