本文转自:浅谈电路设计中应用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. Jmeter系列(13)- 数据库操作之JDBC Connection Configuration配置元件、JDBC Request取样器

    Jmeter常见操作数据库场景 准备.制造测试数据 获取.查询测试数据 数据库数据作为参数引用 清理测试环境.删除过程数据 数据库压测 Jmeter操作数据库环境准备 已经安装好的数据库,比如MySq ...

  2. requests接口自动化-列表与字典参数化

    def server_ip(): # 配置文件,通过修改配置,在不同环境进行测试 # dev_ip='https://www.baidu.com/' # sit_ip='https://cn.bing ...

  3. 鸿蒙内核源码分析(挂载目录篇) | 为何文件系统需要挂载 | 百篇博客分析OpenHarmony源码 | v65.01

    百篇博客系列篇.本篇为: v65.xx 鸿蒙内核源码分析(挂载目录篇) | 为何文件系统需要挂载 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...

  4. P4783-[模板]矩阵求逆

    正题 题目链接:https://www.luogu.com.cn/problem/P4783 题目大意 给出一个矩阵,求它的逆矩阵. \(1\leq n\leq 400\) 解题思路 记给出矩阵\(P ...

  5. P3352-[ZJOI2016]线段树【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3352 题目大意 \(n\)个数字的一个序列,每次随机选择一个区间让这个区间所有数等于这个区间的最大值,重复\(q ...

  6. P5212-SubString【LCT,SAM】

    正题 题目链接:https://www.luogu.com.cn/problem/P5212 题目大意 开始一个字符串\(S\),有\(n\)次操作 在\(S\)末尾加入一个字符串 询问一个串在\(S ...

  7. Redis核心原理与实践--散列类型与字典结构实现原理

    Redis散列类型可以存储一组无序的键值对,它特别适用于存储一个对象数据. > HSET fruit name apple price 7.6 origin china 3 > HGET ...

  8. 一个故事看懂CPU的TLB

    Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了- 我所在的CPU是一个八核CPU,就有八个工作车间,那运行起来速度杠杆的- 虚拟地址翻译 一大早,我们一号车间MMU(内存管理单元)部门的小 ...

  9. strategy策略模式个人理解

    首先了解策略模式的主要作用:能够把算法进行封装和动态传递: 可能听上去很抽象,我们引入一个方便理解的案例来解释: 给定一个数组 int[] array = {32,12,42,26,-23,0,-2, ...

  10. 智汀家庭云-开发指南Golang:设备场景

    场景是指通过SA实现设备联动.例如,自动检测今天的天气情况,今天无雨,定时智能音箱播放浇花提醒,并且播报今天的天气情况. 根据自身需求,把多种控制并发的事情编辑成一个场景,并命名,可以通过场景控制很多 ...