本文转自:浅谈电路设计中应用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处理缓存问题的更多相关文章

  1. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  2. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

  3. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  4. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  5. 转【】浅谈sql中的in与not in,exists与not exists的区别_

    浅谈sql中的in与not in,exists与not exists的区别   1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...

  6. 浅谈iOS中的userAgent

    浅谈iOS中的userAgent   User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...

  7. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  8. 浅谈sql中的in与not in,exists与not exists的区别

    转 浅谈sql中的in与not in,exists与not exists的区别   12月12日北京OSC源创会 —— 开源技术的年终盛典 »   sql exists in 1.in和exists ...

  9. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

随机推荐

  1. vue开发流程

    在安装node.js 测试安装  在cmd 下输入node   如查能正确输出命令提示符,表明安装好node 测试安装npm -v   如果能成功出现版本信息表示安装好npm 安装配置 G码云   或 ...

  2. CodeForce-803B Distances to Zero(贪心DP)

    Distances to Zero CodeForces - 803B 题意:给定一个数列 a0, a1, ..., an - 1.对于数列中的每一项都要求出与该项最近的0与该项的距离.保证数列中有至 ...

  3. 【PHP数据结构】链表的相关逻辑操作

    链表的操作相对顺序表(数组)来说就复杂了许多.因为 PHP 确实已经为我们解决了很多数组操作上的问题,所以我们可以很方便的操作数组,也就不用为数组定义很多的逻辑操作.比如在 C 中,数组是有长度限制的 ...

  4. Jmeter扩展组件开发(10) - 自定义扩展函数助手的开发

    CODE package com.functions;import org.apache.jmeter.engine.util.CompoundVariable;import org.apache.j ...

  5. php 实现字符串最大子串长度

    求字符串最大子串长度<?php class zif { public function sz($str) { $strsz = str_split($str); $zi = []; $len = ...

  6. P4292-[WC2010]重建计划【长链剖分,线段树,0/1分数规划】

    正题 题目链接:https://www.luogu.com.cn/problem/P4292 题目大意 给出\(n\)个点的一棵树,然后求长度在\([L,U]\)之间的一条路径的平均权值最大. 解题思 ...

  7. Java8通过Function获取字段名(获取实体类的字段名称)

    看似很鸡肋其实在某些特殊场景还是比较有用的.比如你将实体类转Map或者拿到一个Map结果的时候,你是怎么获取某个map的key和value.方法一:声明 String key1="name& ...

  8. 10-Java中共享内存可见性以及synchronized和volatile关键字

    Java中共享变量的内存可见性 我们首先来看一下在多线程下处理共享变量时Java的内存模型,如图所示 Java内存模型规定,将所有的变量都存放在主存中,当线程使用变量的时候,会把主内存里面的变量赋值到 ...

  9. WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)

    问题: 线上正式环境调用WCF服务正常,但是每次使用本地测试环境调用WCF服务时长就是出现:套接字连接已中止.这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的.本地套接字超 ...

  10. 修改MySql Root密码(包含忘记密码的方式)

    曾几何时,我也是记得MySQL root密码的人,想要修改root密码还不是轻而易举的事?下面前三种修改改方式都是在记得密码的情况下进行修改,如果你忘记了原本的root,请直接跳至 终极 第一种: 在 ...