艾巴生活网

您现在的位置是:主页>科技 >内容

科技

prefetch和preload(关于Prefetch和Burst相关的内容)

2024-02-16 17:32:01科技帅气的蚂蚁
研究DDR有一段时间了,期间看了很多资料(一些公司的培训资料,几十篇博文,美光数据手册、JESD79规格等。) 但是有一个问题,我想了很久(很

prefetch和preload(关于Prefetch和Burst相关的内容)

研究DDR有一段时间了,期间看了很多资料(一些公司的培训资料,几十篇博文,美光数据手册、JESD79规格等。).但是有一个问题,我想了很久(很多信息没有解释清楚),到目前为止才想通,所以写一篇文章和大家分享。

比如接下来讨论的主要是预取和突发。

1、预取简介

首先简单介绍一下预取技术。所谓预取就是预加载,是DDR时代提出的技术。在SDR中,没有这样的技术,所以每个单元的存储容量等于DQ的宽度(芯片数据IO位宽)。【关于什么是cell(存储单元,可以看看,我之前的博文:http://blog . China aet . com/just xy/p/5100051913)】

进入DDR时代后,有了预取技术。DDR是2位预取,有些公司形象地称之为2-n预取(n代表芯片位宽)。DDR2是4位预取,DDR3和DDR4都是8位预取。8位预取可以使核心时钟达到DDR时钟的四分之一,这是预取的根本意义。

注意:芯片位宽的另一个术语是配置。DDR3时代一般有x4,x8,x16。

以DDR3为例,下图是读预取的简单示意图,写可以看作是一个逆向过程。

DDR3为x8配置时,一个单元的容量为8x8bits,即8个字节。换句话说,在指定存储体、行和列地址之后,可以将8个字节写入(或读取)该地址。

2、如何计算DDR3 SDRAM的容量

以Mircon的某型号DDR3 SDRAM为例:

以图中红色部分的内容为分析案例(8个存储体的配置,x8):

计算方法1(错误):

64K*8*1K*8(行寻址*库寻址*列寻址* x8配置)=4Gb(512兆x8)。

大部分资料给出了这种错误的计算方法,误导了很多初学者。这种计算方法乍一看似乎是对的。但是仔细检查可以发现,按照第一种计算方法的逻辑,每个单元的容量是18bit*8(x8配置),也就是8bit。这与我们在第一部分中讨论的结果不一致(在x8配置中,单元的容量是64位)。

当然,从某种角度来说,第一种计算方法也是正确的,因为分隔的列地址的位数实际上对应的是预取。例如,DDR3 8位预取对应3位列地址,DDR2 4位预取对应2位列地址。如果直接按照计算方法计算,第一次理解DDR很难,这也是我写这篇博文的原因。

下面给出正确的计算方法,并说明原因。

计算方法2(正确):

64K*8*(1K/8)*8*8(行寻址*库寻址*(列寻址/8) * x8配置*8位预取)=4Gb(512兆x8).

很多人会问,为什么要把列寻址除以8?似乎第二种计算方法看起来更不合理。接下来,让我们先来回顾一下DDR3 SDRAM的结构框图(或者以Mircon的某型号为例):

也许你可以我看不清这幅画。以下是一些特写:

那没错!你没有看错!1位列地址的寻址能力只有128!它仅仅差了8倍(那这就是为什么在计算方法2中我们将列寻址除以8)!

那么问题又来了。为什么列地址的寻址能力只有128?唐别急,请继续看下图:

在上图中可以清楚的发现,10位列地址中只有7位用于列地址解码!0,1,2列没用!

那么,问题又来了!……

第0,1,2列,这3位是做什么用的?还是Mircon的设计者脑残,故意浪费这三位?显然不是。

JESD79-3规范中有以下表格:

可以发现,列地址的A2、A1、A0用于突发顺序函数,A3也用于突发类型函数。一般我们采用的是顺序读写模式(即{A2,A1,A0}={0,0,0}),所以此时A3的值没有直接影响。

那么,问题又来了!……

爆裂是什么鬼?看看第三部分。

3、DDR中的DDR突发长度

突发长度,简称为BL,指的是突发长度。突发是指同一行相邻存储单元连续传输数据的方式。连续传输涉及的存储单元(列)数为突发长度(SDRAM),指DDR SDRAM中连续传输的周期数。前面提到的突发类型和突发顺序,其实就是突发长度读写顺序的配置。

在DDR3 SDRAM时代,内部配置采用8n预取(prefetch)实现高速读写,这也导致DDR3的突发长度一般为8。当然,还有Bursth ength为4 (BC4)的设置,这意味着其他四条数据没有被传输或被视为无效。

在DDR2时代,内部配置采用4n预取,突发长度有4和8两种。对于BL=8的读写操作,4n预取将发生两次。

上图是JESD79-3规范中给出的DDR3 SDRAM的命令真值表。如您所见,有三种基本的读写模式(固定BL8或BC4、BC4动态、BL8动态)。这部分的内容,我之前的博文里提到过,这里就不详细描述了。