[转]浅谈电路设计中应用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 假如说你想复制一个简单变量.很简单: ...
随机推荐
- 6步快速配置Tomcat环境变量(Win10)
一.配置 tomcat环境变量之前先安装jdk和配置jdk的环境变量 1.首先右击我的电脑(此电脑),点击属性,或者也可以从控制面板上打开,如下图,找到系统点击高级系统设置: 2.然后进入系统属性界面 ...
- apachectl命令
Linux apachectl命令可用来控制Apache HTTP服务器的程序. apachectl是slackware内附Apache HTTP服务器的script文件,可供管理员控制服务器,但在其 ...
- 内部类访问外部类成员变量,使用外部类名.this.成员变量
public class Outer { private int age = 12; class Inner { private int age = 13; public void print() { ...
- java中链表和数组的区别?
综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...
- Shell系列(32)- 双分支if语句判断Apache服务是否启动
#!/bin/bash #截取httped进程,并把结果赋予变量test test=$(ps -aux | grep "httpd" | grep -v "grep&qu ...
- ☕【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了!
JPA的介绍分析 Java持久化API (JPA) 显著简化了Java Bean的持久性并提供了一个对象关系映射方法,该方法使您可以采用声明方式定义如何通过一种标准的可移植方式,将Java 对象映射到 ...
- P3309-[SDOI2014]向量集【线段树,凸壳】
正题 题目链接:https://www.luogu.com.cn/problem/P3309 题目大意 \(n\)个操作 在序列末尾加入一个向量\((x,y)\) 询问加入的第\(l\sim r\)个 ...
- WinForm事件与消息
WinForm事件与消息 消息概述以及在C#下的封装 Windows下应用程序的执行是通过消息驱动的.所有的外部事件,如键盘输入.鼠标移动.按动鼠标都由OS系统转换成相应的"消息" ...
- 找出某名珍贵药材的生长区域(ArcPy实现)
一.背景 某种珍贵药材生长于山区,通过研究了解到这种药材生长具有严格的生长条件.为了能更好地保护该药材的生长环境,现在需要使用GIS空间分析方法,将药材适合生长区域找出来,以便为该物种保护提供依据. ...
- storm卡顿修改
最近的webstorm越来越卡了,有时候甚至会弹出 Out of memory的窗口,提示要设置 xmx的值, 8G内存跑你这小软件还会不够用???要内存?给你,看你还会不会卡成翔! 于是果断给x ...