[转]浅谈电路设计中应用DDR3处理缓存问题
本文转自:浅谈电路设计中应用DDR3处理缓存问题_若海人生的专栏-CSDN博客
DDR系列SDRAM存储芯片的高速率、高集成度和低成本使其理所当然成为存储芯片中的一霸。在PC和消费电子领域自是如此,它被称为“主存”。其实,随着通信设备价格战愈演愈烈,在看起来水有点深的通信设备上,DDR系列存储芯片(当前主流是DDR3 SDRAM)也成为首选。很多网络处理芯片都需要配套的存储芯片来进行数据的缓存。比如流量管理芯片(Traffic Management)在决定允许哪个数据包通过时,数据包的内容是被缓存着的。或者路由转发芯片要根据IP地址查找路由表决定一个数据包的去向,这个路由表也需要缓存。因为前面说的优点,DDR系列成为这些缓存的首选。
然而解决DDR的效率问题属难题,其中DDR存储控制器的设计就是之一。先看看影响DDR效率的参数都有哪些:
1. tRCD - ACTIVE to internal READ/WRITE激活命令到内部读写命令之间的延迟。每一次对DDR3读写操作前必须确保是处于Active状态的。
2. tRC – 同一bank内2次ACTIVE命令间的最小延迟,就是说,我们不能过于频繁的激活同一bank的同一行或不同行。
3. tRAS – ACTIVE to Precharge command period. ACTIVE命令到PRECHARGE命令之间的最小时间。
4. tRP – PRECHARGE command period. PERCHARG命令的处理周期,在此周期内不能对正在进行precharge的bank作任何操作。
5. tFAW – No more than 4 bank ACTIVE commands may be issued in tFAW. 这意味着我们不能以太小的时间间隔连续发ACTIVE命令。提高访问效率一个很有效的手段就是循环访问不同bank,每个bank一次只访问不太长的时间。但是这个参数限制了我们轮询bank不可过快。
6. tRRD – The minimum time interval between successive ACTIVE command to different banks. 不同bank的ACTIVE命令间的最小延迟。
7. tRFC – REFRESH to ACTIVE or REFRESH command period. REFRESH 命令的周期,发起refresh命令后这么长时间不可再次激活。
8. tEFI – Maximum average periodic refresh(7.8us/3.9us). 最大的平均刷新间隔时间,在高温下需要更频繁的刷新以保证DRAM ‘hold’ 住数据。
9. tWR – write recovery time. 它定义了最后一次写突发到向同一bank发起PRECHARGE命令的最小时间。
10. tWTR – Delay from start of internal write transaction to internal READ command. 写切换到读的延迟。
11. tRTP – READ to PRECHARGE time. 读命令到“预充电”命令间的延迟,它从READ命令AL个时钟周期后开始计算。
12. tCCD – any READ to READ command delay or WRITE to WRITE command delay. 任何读与读之间或写与写之间的延迟。
13. tDAL – Auto precharge write recovery + precharge time. Auto-precharge模式下写恢复和预充电时间的和。
从零开始设计一个DDR3存储器控制器是非常困难的。需要考虑许多特性之间的权衡和互相影响。使用一个经验证的IP核可以省去了大量的开发、测试和调试时间,否则就需要花费许多时间来进行in-house设计开发。一个经验证的IP核还可以减少后续支持的负担,因为这将由专门的开发人员来支持。最重要的是,使用一个经验证的IP核可以使设计师将精力集中在其设计的独特特性上,从而向最终客户交付高价值的产品设计。例如Xilinx V6 DDR3存储控制器IP核已经通过了一个第三方验证套件的验证。在EDK中该IP核通过XPS作为 axi_v6_ddrx IP给DDR2、DDR3 SDRAM的架构提供一个静态的AXI4。其相关的文档介绍可参考UG406_01_43_031609。
DDR3存储器控制器应支持广泛的存储器速率和配置,以满足各种应用需求。例如, ECP3 DDR3存储器控制器支持高达800Mb/s的DDR3器件速率,8至64位的存储器数据通道(带有x8或x16 DDR3器件),并且同时支持双列直插式存储器块(Dual Inline Memory Modules,DIMM)和单个存储器的器件。
DDR3存储器控制器必须为各种存储器访问实现不同的时序要求。一些要求对于我们的目标应用来说非常重要,包括以下几个方面:
DDR3存储器使用“类似cache”的bank进行组织,每个器件带有8个bank。访问最近工作(打开)的bank比访问未工作的(关闭)的bank速度快。 可使用4位、8位或交叉存取方式进行突发(burst)模式读访问。 根据存储器速率和用户设置,CAS和写延迟都是可变的。从读请求转换为写请求需要额外的延迟时间,因为双向的数据总线必须改变传输方向。
最近在研究使用Xilinx V6板子上的DDR3 SDRAM存储器,想用其来实现网络数据的缓存,仔细阅览过一遍官网提供的文档UG406_01_43_031609。其实DDR3相较于前面的DDR系列,基础架构并没什么大的区别,它是为了解决DDR2发展所面临的限制而催生的产物。从更高的外部数据传输率,更先进的地址/命令与控制总线的拓扑结构,保证性能时进一步降低功耗这主要的三个方面的需求来作为设计目标的。本文档中提及的write leveling和read leveling均是以前未曾遇过的。Wrtie leveling是一个完全自动的过程,只要控制器支持write leveling,上电后就可以进行。Write leveling主要解决模块中每个存储器设备的选通脉冲(DQS)和时钟(CK)产生时钟歪斜
[转]浅谈电路设计中应用DDR3处理缓存问题的更多相关文章
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Linux中的信号处理机制(二)
首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 转【】浅谈sql中的in与not in,exists与not exists的区别_
浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...
- 浅谈iOS中的userAgent
浅谈iOS中的userAgent User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- 浅谈sql中的in与not in,exists与not exists的区别
转 浅谈sql中的in与not in,exists与not exists的区别 12月12日北京OSC源创会 —— 开源技术的年终盛典 » sql exists in 1.in和exists ...
- 浅谈Java中的深拷贝和浅拷贝(转载)
浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...
随机推荐
- Excel怎么把两个单元格中的文字合并到一个单元格中
使用&符号,可以将字符串和单元格中的内容拼接起来
- Java实现导出Excel
项目中实现的代码: 一.//controller @RequestMapping(value = "/exportAccountManager") public void expo ...
- webpack4 使用babel处理ES6语法的一些简单配置
一,安装包 npm install --save-dev babel-loader @babel/corenpm install @babel/preset-env --save-devnpm ins ...
- 探究java的intern方法
本文主要解释java的intern方法的作用和原理,同时会解释一下经常问的String面试题. 首先先说一下结论,后面会实际操作,验证一下结论.intern方法在不同的Java版本中的实现是不一样的. ...
- ubuntu系统安装docker
系统版本:Ubuntu 18.04 # 更新apt update # 安装依赖apt install apt-transport-https ca-certificates curl software ...
- 写SQL的套路
定义问题 转化问题 如要解决的问题是:查出每门课程成绩都大于80分学生的姓名,可以转化为:只要学生最小分数的课程大于80分,就是所有课程成绩都大于80分. 查询同名同姓学生名单并统计同名人数--> ...
- 判断javaScript变量是Ojbect类型还是Array类型
JavaScript是弱类型的语言,所以对变量的类型并没有强制控制类型.所以声明的变量可能会成为其他类型的变量, 所以在使用中经常会去判断变量的实际类型. 对于一般的变量我们会使用typeof来判 ...
- Serverless 如何在阿里巴巴实现规模化落地?
作者 | 赵庆杰(卢令) 来源 | Serverless 公众号 一.Serverless 规模化落地集团的成果 2020 年,我们在 Serverless 底层基建上做了非常大的升级,比如计算升级到 ...
- 利用PATH环境变量 - 提升linux权限~👻
利用PATH提升linux权限 参考地址:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/ ...
- 市区择房分析(ArcPy实现)
1, 背景 如何找到环境好.购物方便.小孩上学方便的居住区地段是购房者最关心的问题.因此购房者就需要从总体上对商品房的信息进行研究分析,选择最适宜的购房地段. 2,目的 学会利用缓冲区分析和叠置分析解 ...