02.内存指南

SDRAM内存模组的物理Bank与芯片位宽

即使是RDRAM,在很多方面也是与SDRAM相似的,而至于DDR与DDR-Ⅱ、QBM等形式的内存更是与SDRAM有着紧密的联系。

SDRAM内存模组与基本结构

我们平时看到的SDRAM都是以模组形式出现,为什么要做成这种形式呢?这首先要接触到两个概念:物理Bank与芯片位宽。

PC133时代的168pin SDRAM DIMM

1、 物理Bank

传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线 的位宽,单位是bit(位)。当时控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,而这个位宽就称之为物理Bank(Physical Bank,下文简称P-Bank)的位宽。所以,那时的内存必须要组织成P-Bank来与CPU打交道。资格稍老的玩家应该还记得Pentium刚上市 时,需要两条72pin的SIMM才能启动,因为一条72pin -SIMM只能提供32bit的位宽,不能满足Pentium的64bit数据总线的需要。直到168pin-SDRAM DIMM上市后,才可以使用一条内存开机。下面将通过芯片位宽的讲述来进一步解释P-Bank的概念。

不过要强调一点,P-Bank是SDRAM及以前传统内存家族的特有概念,在RDRAM中将以通道(Channel)取代,而对于像Intel E7500那样的并发式多通道DDR系统,传统的P-Bank概念也不适用。

2、 芯片位宽

上文已经讲到SDRAM内存系统必须要组成一个P-Bank的位宽,才能使CPU正常工作,那么这个P-Bank位宽怎么得到呢?这就涉及到了内存芯片的结构。

每个内存芯片也有自己的位宽,即每个传输周期能提供的数据量。理论上,完全可以做出一个位宽为64bit的芯片来满足P-Bank的需要,但这对技术的要求很高,在成本和实用性方面也都处于劣势。所以芯片的位宽一般都较小。台式机市场所用的SDRAM芯片位宽最高也就是16bit,常见的则是8bit。这 样,为了组成P-Bank所需的位宽,就需要多颗芯片并联工作。对于16bit芯片,需要4颗(4×16bit=64bit)。对于8bit芯片,则就需 要8颗了。

以上就是芯片位宽、芯片数量与P-Bank的关系。P-Bank其实就是一组内存芯片的集合,这个集合的容量不限,但这个集合的总位宽必须与CPU数据位宽相符。随着计算机应用的发展,一个系统只有一个P-Bank已经不能满足容量的需要。所以,芯片组开始可以支持多个P-Bank,一次选择一个P-Bank工作,这就有了芯片组支持多少(物理)Bank的说法。而在Intel的定义中,则称P-Bank为行(Row),比如845G芯片组支持4个行,也就是说它支持4个P-Bank。另外,在一些文档中,也把P-Bank称为Rank(列)。

DIMM是SDRAM集合形式的最终体现,每个DIMM至少包含一个P-Bank的芯片集合。在目前的DIMM标准中,每个模组最多可以包含两个P-Bank的内存芯片集合,虽然理论上完全可以在一个DIMM上支持多个P-Bank,比如SDRAM DIMM就有4个芯片选择信号(Chip Select,简称片选或CS),理论上可以控制4个P-Bank的芯片集合。只是由于某种原因而没有这么去做。比如设计难度、制造成本、芯片组的配合等。至于DIMM的面数与P-Bank数量的关系,在2001年2月的专题中已经明确了,面数≠P-Bank数,只有在知道芯片位宽的情况下,才能确定P -Bank的数量,大度256MB内存就是明显一例,而这种情况在Registered模组中非常普遍。有关内存模组的设计,将在后面的相关章节中继续探讨。

 

SDRAM的逻辑Bank与芯片容量表示方法

1、逻辑Bank与芯片位宽

讲完SDRAM的外在形式,就该深入了解SDRAM的内部结构了。这里主要的概念就是逻辑Bank。简单地说,SDRAM的内部是一个存储阵列。因为如果是管道式存储(就如排队买票),就很难做到随机访问了。

阵列如同表格,将数据“填”进去。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元。这个表格(存储阵列),它就是逻辑 Bank(Logical Bank,下文简称L-Bank)。

L-Bank存储阵列示意图


由于技术、成本等原因,不可能只做一个全容量的L-Bank。由于SDRAM的工作原理限制,单一的L-Bank将会造成非常严重的寻址冲突,大幅降低内存效率。所以将SDRAM内部分割成多个L-Bank。较早以前是两个,目前基本都是4个,这也是SDRAM 规范中的最高L-Bank数量。到了RDRAM则最多达到了32个,DDR-Ⅱ的标准中,L-Bank的数量是8个。

所以寻址时要先确定是哪个L-Bank,然后再在这个选定的L-Bank中选择相应的行与列进行寻址。内存访问,一次只能是一个L- Bank工作,而每次与北桥交换的数据就是L-Bank存储阵列中一个“存储单元”的容量。某些厂商将L-Bank中的存储单元称为Word (此处代表位的集合而不是字节的集合)。

SDRAM内存芯片一次传输率的数据量就是芯片位宽,那么这个存储单元的容量就是芯片的位宽(也是L-Bank的位宽),但要注意,这种关系也仅对SDRAM有效。

2、内存芯片的容量

内存芯片的容量就是所有L-Bank中的存储单元的容量总合。计算有多少个存储单元和计算表格中的单元数量的方法一样:存储单元数量=行数×列数(得到一个L-Bank的存储单元数量)×L-Bank的数量

在很多内存产品介绍文档中,都会用M×W的方式来表示芯片的容量(或者说是芯片的规格/组织结构)。M是该芯片中存储单元的总数,单位是兆(英文简写M, 精确值是1048576,而不是1000000),W代表每个存储单元的容量,也就是SDRAM芯片的位宽(Width),单位是bit。计算出来的芯片容量也是以bit为单位,但用户可以采用除以8的方法换算为字节(Byte)。比如8M×8,这是一个8bit位宽芯片,有8M个存储单元,总容量是 64Mbit(8MB)。

M×W是最简单的表示方法。但是最正规的形式之一是上图  

我们可以计算一下,结果可以发现这三个规格的容量都是128Mbits(16MB),只是由于位宽的变化引起了存储单元的数量变化。从这个例子就也可以看出,在相同的总容量下,位宽可以采用多种不同的设计。

3、与芯片位宽相关的DIMM设计

总容量相同位宽不同的设计,主要是满足不同领域的需要。P-Bank的位宽是固定的(芯片位宽确定),一个P-Bank中的芯片个数也就确定了。而P-Bank对芯片集合的位宽有要求,容量没有。高位宽的芯片可以让DIMM的设计简单些(使用芯片少),但在芯片容量相同时,这种DIMM的容量比不上采用低位宽芯片的模组,因为低位宽芯片的模组在一个P- Bank中可以容纳更多的芯片。比如上文中的内存芯片容量都相同。如果DIMM采用双P-Bank+16bit芯片设计,那么只能容纳8颗芯片,计128MB。但是可以容纳32颗4bit位宽的芯片,计512MB。DIMM容量前后相差出4倍,可见芯片位宽对DIMM设计的重要性。因此,8bit位宽芯片是台式机上容量与成本之间平衡性较好的选择。而高于16bit位宽的芯片一般用在需要更大位宽的场合,如显卡等,至于4bit位宽芯片很明显非常适用于大容量内存应用领域,基本不会在标准的Unbuffered 模组设计中出现。

 

SDRAM的引脚与封装

内存芯片要想工作,必须要与内存控制器有所联系,同时供电也是必不可少的,而且数据的传输要有一个时钟作为触发参考。SDRAM在封装时就留出相应的引脚。

我们从内存寻址的步骤缕下来就基本明白了,从中我们也就能了解内存工作的大体情况。SDRAM与DIMM一样,有自己的业界设计规范。在一个容量标准下,SDRAM的引脚/信号标准,要顾及多种位宽,然后尽量给出一个通用标准,小位宽的芯片也许会空出一些引脚,但高位宽的芯片可能就全部用上了。不过容量不同设计标准也会不同。一般的容量越小的芯片所需要的引脚也就越小。

1、内存控制器要先确定P-Bank的芯片集合,然后才对这集合中的芯片寻址。要有一个片选信号,它一次选择一个P-Bank的芯片集(根据位宽的不同,数量也不同)。被选中的芯片将同时接收或读取数据,所以要有一个片选信号。

2、对所有被选中的芯片统一进行L-Bank寻址。目前SDRAM中L-Bank的数量最高为4个,所以需要两个L-Bank地址信号(22=4)。

3、对被选中的芯片统一 行/列(存储单元)寻址。根据芯片组织结构分别设计地址线数量。相同容量下,行数不变,列数根据位宽不同来变化。位宽越大列数越少,因为所需的存储单元减少了。

4、通过与位宽相同数量的数据I/O通道,对被选中的芯片统一传输数据。(要有相应数量的数据线引脚)。


台式机上SDRAM在不同容量下的各种位宽封装标准


SDRAM芯片初始化、行有效、列读写时序


1. 芯片初始化

在SDRAM芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。每次开机时SDRAM要先初始化控制逻辑核心。关键阶段是设置模式寄存器(MR,Mode Register),即MRS(MR

Set)。MRS由BIOS控制的北桥芯片执行,寄存器的信息由地址线来提供。预充电和刷新在下文讲述。

SDRAM在开机时的初始化


2. 行有效

初始化完成后,要对一个L-Bank中的阵列进行寻址,首先要确定行(Row),使之处于活动状态(Active),然后再确定列。行有效可以与片选和L-Bank的定址(之前的操作)同时进行。

从图中可以看出,在CS#、L-Bank定址的同时,RAS(Row Address Strobe)行地址选通脉冲也处于有效状态。此时An地址线则发送具体的行地址。图中A0-A11,共有12个地址线共有4096个行(212=4096)。A0-A11的不同数值就确定了具体的行地址。由于行有效的同时也是相应L-Bank有效,所以行有效也可称为L -Bank有效。

3. 列读写

行地址确定之后要对列地址进行寻址。但地址线仍然是行地址所用的A0-A11(本例)。SDRAM中共用行地址与列地址。通过控制芯片的可写状态,来达到读/写的目的。显然WE#信号就是一个关键。WE#无效时,当然就是读取命令。

寻址信号与读写命令同时发出。虽然地址线与行寻址共用,但CAS(Column Address Strobe)列地址选通脉冲信号可以区分行与列寻址的不同,配合A0-A9,A11(本例)确定具体的列地址。

在发送读写命令时,必须与行有效命令间隔(tRCD),即RAS to CAS delay,即行选通周期。这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。tRCD是SDRAM的一个重要时序参数,可以通过主板BIOS经过北桥芯片进行调整,但不能超过厂商的预定范围。广义的tRCD以时钟周期(tCK,Clock Time)数为单位。tRCD=2代表延迟周期为两个时钟周期。确切的时间要根据时钟频率而定,对于PC100 SDRAM,tRCD=2代表20ns的延迟,PC133则为15ns。

SDRAM的读/写时序与突发长度

4. 数据输出(读)

选址确定存储单元后,数据通过数据I/O通道(DQ)输出到内存总线上。但CAS发出之后仍要过一定时间才有数据输出,从发出CAS与读取命令,到第一笔数据输出的这段时间,定义为CL(CAS Latency,CAS潜伏期)。CL又被称为读取潜伏期(RL,Read

Latency),只在读取时出现。CL的单位与tRCD一样,为时钟周期数,具体耗时由时钟频率决定。

CAS并不是在经过CL周期之后才送达存储单元的。CAS与RAS一样是瞬间到达的,而且CAS的响应时间要更快。假设芯片位宽为n bit,列数为c。一个行地址要选通n×c个存储体,而列地址只需选通n个存储体。但存储体中晶体管的反应时间仍会造成数据不可能与CAS在同一上升沿触发,要延后至少一个时钟周期。

芯片体积决定了存储单元中的电容容量很小。要经过信号放大来保证其有效的识别性。放大/驱动工作由S-AMP负责,一个存储体对应一个S-AMP通道。但它要有一个准备时间才能保证信号的发送强度(事前还要进行电压比较以进行逻辑电平的判断):即从数据I/O总线上有数据输出之前的一个时钟上升沿开始,数据已传向S-AMP,即此时数据已经被触发,经过一定的驱动时间最终传向数据I/O总线进行输出。这段时间我们称之为tAC (Access Time from CLK,时钟触发后的访问时间即放大时间)。tAC的单位是ns,不同的频率有不同的规定,但必须小于一个时钟周期,否则访问时过长导致效率降低。比如PC133的时钟周期为7.5ns,tAC则是5.4ns。每个数据在读取时都有tAC(包括在连续读取中),只是连续读取是在进行第一个数据传输的同时就开始了第二个数据的tAC。

CL的数值不能超出芯片的设计规范,否则会导致内存不稳定,甚至开不了机(超频玩家应该有体会),它也不能在数据读取前临时更改。CL周期在开机初始化过程中的MRS阶段进行设置,在BIOS中一般允许用户调整,然后BIOS控制北桥芯片在开机时通过A4-A6地址线对MR中CL寄存器的信息进行更改。

从存储体结构图上可以看出,原本逻辑状态为1的电容在读取操作后,会因放电而变为逻辑0。以前的DRAM为了在关闭当前行时保证数据可靠性,要对存储体中原有信息进行重写,这个任务由数据所经过的刷新放大器完成。它根据逻辑电平状态,将数据重写(逻辑0时不重写)。这个操作与数据的输出同步进行互不冲突,所以不会产生新的重写延迟。技术改良后由S-AMP取代了刷新放大器,因为在读取时它会保持数据的逻辑状态,起到了一个Cache的作用,再次读取时由它直接发送即可,不用再进行新的寻址输出,此时数据重写操作则可在预充电阶段完成。

5. 数据输入(写)

数据写入也是在tRCD之后,但此时没有了CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。

控制端发出数据信号输入芯片。数据无需做任何调校直接传到数据输入寄存器中,写入驱动器再对存储电容充电。因此数据可以与CAS同时发送(即写入延迟为0)。因为选通三极管(就如读取时一样)与电容的充电须要时间,所以数据的真正写入需要一定的周期。需要留出足够的写入/校正时间(tWR,Write Recovery Time)来保证数据的可靠写入,即写回(Write

Back)。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多)。

6. 突发(Burst)长度

突发指在同一行中相邻的存储单元连续进行数据传输的方式。连续传输涉及到存储单元(列)的数量就是突发长度(Burst

Lengths,简称BL)。目前内存控制器一次读/写P-Bank(8个字节)位宽的数据。但现实中小于数据一般都大于8个字节,所以一般要经过多个周期传输数据。读/写操作一次对一个存储单元进行寻址,如果要连续读/写,还要对当前存储单元的下一个单元进行寻址,即要不断发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。

读/写延迟相同可以让数据的传输在I/O端是连续的,但它占用了大量内存控制资源,连续传输数据时无法输入新命令,效率很低(早期FPE/EDO内存就是以这种方式连续传输数据)。

而突发传输技术只要指定起始列地址与突发长度,内存就会依次对后面相应数量的存储单元进行读/写操作,不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。很多北桥芯片介绍中都有类似X-1-1-1的字样,其中的X代表就代表第一笔数据所用的周期数。

BL(连续传输涉及到存储单元(列)的数量)不能随便设或在数据进行传输前临时决定。要在初始化过程中的MRS阶段设置BL。目前可用的选项是1、2、4、8、全页(Full Page),一般是4和8。BL能否更改与北桥芯片的设计有很关,不是每个北桥都能像调整CL那样来调整BL。某些芯片组的BL是定死的,比如Intel芯片组BL基本都为4,在相应主板的BIOS中没有BL的设置选项。目前的SDRAM系统以64bit/周期进行数据传输,所以有些BIOS把BL用QWord(4字,即64bit)表示。如4QWord就是BL=4。

在MRS(设置模式寄存器)阶段除了要设定BL数值之外,还要具体确定读/写操作的模式以及突发传输的模式。

[if !supportLists]·      [endif]突发读/突发写:读与写都是突发传输的,每次读/写持续BL设定的长度。

[if !supportLists]·      [endif]突发读/单一写:读是突发传输,写只是一个个单独进行。

[if !supportLists]·      [endif]突发传输模式:突发周期内存储单元的传输顺序。顺序传输指从起始单元开始顺序读取。假如BL=4,起始单元编号是n,顺序就是n、n+1、n+2、n+3。交错传输指打乱正常的顺序进行数据传输(比如第一个进行传输的单元是n,而第二个进行传输的单元是n+2而不是n+1)。交错的规则在SDRAM规范中有详细的定义表。

SDRAM芯片的预充电与刷新操作

7. 预充电

SDRAM寻址具体独占性。如果要在读写操作后对同一L-Bank的另一行进行寻址,就要关闭原来有效(工作)的行,重新发送行/列地址。预充电(Precharge)就是L-Bank关闭现有工作行,准备打开新行的操作。预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写后自动进行。它对工作行中所有存储体数据重写,并对行地址复位,同时释放S-AMP(将S-AMP中的数据回写)即重新加入比较电压(一般是电容电压的1/2)以帮助判断读取数据的逻辑电平。S-AMP通过一个参考电压与存储体位线电压的比较,来判断逻辑值。即使存储体没有工作过,也会因行选通而使存储电容受到干扰,所以也要S-AMP进行读后重写。此时根据电容电量(或者说其产生的电压)来判断逻辑状态(读取时也需要),为此要设定一个临界值(一般为电容电量的1/2),超过它的为逻辑1,进行重写,否则为逻辑0,不重写(等于放电)。现在基本都将电容另一端接入一个指定的电压(即1/2电容电压),而不是接地,以帮助重写时的比较与判断。

对比之前的读写操作时的命令时序图,地址线A10控制是否自动进行预充电(读写之后的当前同一个L-Bank),即“辅助设定”。在单独的预充电命令中,A10则控制着是对指定的L-Bank预充电(需要提供L-Bank的地址),还是所有的L-Bank(当有多个L-Bank处于有效/活动状态时)预充电(只需将A10信号置于高电平)。

发出预充电命令后要经过一段时间,才能允许发送RAS行有效命令来打开新的工作行,这个间隔用tRP(Precharge command Period,预充电有效周期)表示。和tRCD、CL一样,tRP的单位也是时钟周期数,具体值视时钟频率而定。

8. 刷新

DRAM要不断刷新(Refresh)才能保留住数据。它与预充电中重写的操作一样,都是用S-AMP先读再写。预充电是对一个或所有L-Bank中的工作行操作,并且是不定期的。刷新有固定周期,依次对所有行操作,来保留长时间没有重写的存储体中的数据。与所有L-Bank预充电不同的是,刷新的行指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不一定相同。

公认标准中,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),即每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。内存规格中会有4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,4096与8192代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs。

刷新有两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)。刷新不需要外部提供行地址信息,它是内部的自动操作。

[if !supportLists]·      [endif]自动刷新(AR):用SDRAM内部有的行地址生成器(也称刷新计数器)依次生成行地址。对一行中的所有存储体进行,无需列寻址,或者说CAS(列地址选通脉冲)在RAS(行地址选通脉冲)之前有效。AR又称CBR式刷新(CAS Before RAS,列提前于行定位)。刷新过程中所有L-Bank停止工作(因为刷新涉及到所有L-Bank),每次刷新占用的时间为9个时钟周期(PC133标准),之后就可以进入正常工作状态。即在这9个时钟期间内,所有工作指令只能等待而无法执行。64ms后再对同一行刷新,如此循环。刷新会对SDRAM性能造成影响,这是DRAM相对SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时付出的代价。

[if !supportLists]·      [endif]自刷新(SR):主要用于休眠模式低功耗状态下的数据保存。这方面最著名的应用就是STR(Suspend to RAM,休眠挂起于内存)。发出AR命令时,将CKE(时钟有效脚)置于无效状态,从而进入SR模式。此时根据内部的时钟进行刷新操作,不再依靠系统时钟工作。在 SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态。

9. 数据掩码

在讲述读/写操作时,我们谈到了。BL=4时(突发长度4,4x64bit),采用数据掩码(Data I/O Mask,简称DQM)屏蔽不需要的数据。内存通过DQM,控制I/O端口取消特定数据的输出或输入。被屏蔽的数据在读取时仍会从存储体传出,但会在“掩码逻辑单元”处被屏蔽。DQM由北桥控制,为精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM信号线,每个信号针对一个字节。两个4bit位宽芯片共用一个DQM信号线,一个8bit位宽芯片占用一个DQM信号,两个DQM引脚对应一个16bit位宽芯片。SDRAM官方规定,在读取时DQM在发出两个时钟周期后生效,写入时DQM与写入命令一样立即生效。


图解SDRAM工作流程:仓库物语

货物基地(主板)连接着物资(数据)的供求方。基地的货物调度厂房(北桥芯片)掌管着若干个用于临时供货/生产与存储的仓库基地(P-Bank),它们通 常隶属于某一仓储集团(DIMM),这种基地与调度厂房之间必须由64条传送带联系着(P-Bank位宽),每条传送带一次只能运送一个标准的货物 (1bit数据),而且一次至少要传送64个标准货物,这是它们之间的约定,仓库基地必须满足。

上图是一个仓库基地(P-Bank),由4个大仓库(内存芯片)组成。每个大仓库为基地提供16条传送带(芯片位宽16bit),加起来刚好64条。每个大仓库里都有四个规模和结构相同的子仓库(L-Bank),它们都被统一编了号。而子仓库中有很多层(行),每层又有很多储藏间(列),每个储藏间可以放16个标准货物,虽然子仓库的规模很大,但每一层和每一个房间都是编好了号,而且每一层都有 一个搬运工在值班。

为方便联系外界,仓储集团与调度室设置了专线电话,和国家一样,每个仓库基地有一个区号(片选),另外还有四个子仓库号码(L-Bank地址),是所有大仓库共享的,一个号码对应所有大仓库中编号相同的子仓库。而专线电话的数量也是四个,这样可保证与某个子仓库通话时不会妨碍给其他子仓库打电话。每层子仓库则设立分机给搬运工使用。子仓库的楼下就是传送带,找到货物就扔到上面。但每个大仓库只有一个传送带,也就是说同一时间内只能有一个子仓库在工作。每个子仓库都有一个自己的生产车间(读出放大器)负责指定货物的生产,并且每个大仓库都有一个外运站(数据输出寄存器)和寄存托运处(数据输入 寄存器与写入驱动器)与传送带相连。外运站负责货物的输出中转,寄存托负责所接受货物并寄存然后帮助搬运工运送到指定储藏间。那么它是如何与调度厂房协同工作的呢?

1、需求方有货物请求了,这个请求发送到调度厂房,调度人员开根据货主的要求给指定的子仓库打电话,电话号码是:区号+子仓库号码+楼层分机(片选+L-Bank寻址+行有效/选通)。那一层的搬运工接到电话后就开始准备工作。

2、当搬运工点亮所有储藏间的门牌(tRCD)之后,调度人员会告诉搬运工,货物放在哪个储藏间里(列寻址),如果货物很多并且连续存放,调度员会通知搬运工:“一会儿要搬的时候,从起始房间开始连续将后面的n个房间的货物都搬出来,我就不再重复了”(突发传输)。但他告诉搬运工要等一下,要求 所有大仓库的人员统一行动,先别出货。

3、根据事先的规定,搬运工经过指定时间后将货物扔到传送带上,传送带开始运转并将货物送到生产车间,由它来复制出全新的货物,然后再送到传送带上通过外运站向调度厂房运去。人们通常把从搬运工找到具体储藏间开始,到货物真正出现在送往调度厂房的传送带上的这段时间称之为“输出潜伏期”(CL),而从值班人把货物扔到传送带到货物开始传向调度厂房的这段时间,被称为“货物输出延迟”(tAC),它体现了值班人员的反应时间和生产车间的效率,也影响着仓库基地所在集团(DIMM)的名声。

4、在这个搬运工工作的同时,由于电话对于编号相同的子仓库是并联的,所以其他子仓库相同楼层的搬运工也收到相同的命令,从相同编号的房间搬出货物,运向各自的生产车间。此时,同一批货物同时出现在各自的16条传送带上,并整齐地向调度厂房运去。

5、当货物传送完后,原始货物还要送回储藏间保管,但如果没有要求,货物可以一直保留在生产车间,如果再有需要就再生产,而不用再麻烦搬运工了(读出放大器相当于一个Cache)。调度人员接着会进行下一批货物的调度,当他发现下一批货物在上次操作的子仓库中,但不在刚才通话的那一层,只能再 重新拨电话。这时,他通知各子仓库货物翻新运回,清理生产车间,之后挂断电话(预充电命令),这一切必须要在指定时间里(tRP)完成,然后才能给新的楼层打电话。搬运员接到通知后,就将这一层中所有房间的货物都拿到生产车间进行翻新(没有货物的就不用翻新),然后再搬回储藏间。干完这一切之后,搬运工挂了电话(关闭行)就可以休息了,他们称 这种工作为“货物清理返运”(预充电)。这个工作的速度也要快,否则同样会影响集团名声。这个工作可以让搬运工自动完成(自动预充电),只需调度员在当初下搬运指令时提醒一他:“货物运送完了,就进行货物清理返运吧,我不管了”(用A10地址线)。

6、当有货物要运来存储时,调度员在向子仓库发送货物的同时就给指定的楼层打电话,让他们准备好房间,此时货物已经到了寄存托运处,没有任何的运送延迟 (写入延迟=0),搬运工在托运间的帮助下,向指定的储藏间运送货物,这可需要一定的时间了,他们称之为货物堆放时间(tWR),必须给足搬运工们这一时间,不能在这期间里让他们干其他的工作,否则他们会令货物丢失并罢工。

SDRAM的结构、时序与性能的关系(上)

SDRAM的时序与性能间有特定的关系,它不在局限于芯片本身,而是从整体的内存系统去分析。比如CL值对性能的影响有多大。对于内存系统整体而言,一次内存访问就是对一个页的访问,这个页的定义已经在解释Full Page含义时讲明了。因为P-Bank中每个芯片的寻址都一样,所以页访问可以等效为对每芯片中指定行的访问。 但为了与官方标准统一,在下文中会经常用页来描述相关的内容。

一、影响性能的主要时序参数

影响性能并不是指SDRAM的带宽。频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。这些操作占用的时间越短,内存工作的效率越高,性能越好。

非数据传输时间的主要组成部分是各种延迟与潜伏期。三个参数对内存的性能影响至关重要:tRCD(行选通周期)、CL(读取潜伏期)和tRP(预充电有效周期)。每条正规的内存模组都会在标识上注明这三个参数值。

以内存读取为例。tRCD决定了行寻址(有效)至列寻址(读/写命令)之间的间隔,CL决定了列寻址到数据进行真正被读取所花费的时间, tRP决定了相同L-Bank中不同工作行转换的速度。下面是读取时可能遇到的情况(分析写入操作时不用考虑CL即可):

1、要寻址的行与L-Bank是空闲的。也就是说该L-Bank的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为tRCD+CL,这种情况我们称之为页命中(PH,Page Hit)。

2、要寻址的行正好是前一个操作的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据读取前的总耗时仅为CL,这就是所谓 的背靠背(Back to Back)寻址,我们称之为页快速命中(PFH,Page Fast Hit)或页直接命中(PDH,Page Direct Hit)。

3、要寻址的行所在的L-Bank中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时必须进行预充电来关闭工作行,再对新行发送行有效命令。总耗时就是tRP+tRCD+CL,这种情况我们称之为页错失(PM,Page Miss)。

PFH是最理想的寻址情况,PM则最糟。上述三种情况发生的机率各自简称为PHR——PH Rate、PFDR——PFH Rate、PMR——PM Rate。系统设计人员(包括内存与北桥芯片)都尽量想提高PHR与PFHR,同时减少PMR,来提高内存工作效率的目的。

二、增加PHR的方法

这与预充电管理策略有着直接的关系,目前有两种方法来尽量提高PHR。

[if !supportLists]·      [endif]自动预充电技术:它自动的在每次行操作之后进行预充电,减少日后对同一L-Bank不同行寻址时发生冲突的可能性。但如果要在当前行工作完成后马上打开同一L-Bank的另一行工作时,仍存在tRP延迟。

[if !supportLists]·      [endif]L-Bank交错预充电:VIA的4路交错式内存控制就是在一个L-Bank工作时,对下一个要工作的L-Bank进行预充电。预充电与数据的传输交错执行,当访问下一个L -Bank时,tRP已过,就可以直接进入行有效状态了。目前VIA声称可以跨P-Bank进行16路内存交错,并以LRU算法进行预充电管理。


三、增加PFHR的方法

自动预充电或者交错工作的方法都无法消除tRCD带来的延迟。所以要尽量让一个工作行,在预充电前尽可能多的接收多个工作命令,以达到背靠背的效果,此时就只剩下CL所造成的读取延迟了(写入时没有延迟)。

这由北桥芯片负责。在上文时序图中的参数tRAS(Active to Precharge Command,行有效至预充电命令间隔周期)有一个范围,一般是预充电命令至少要在行有效命令5个时钟周期后发出(PC133标准),最长间隔视芯片而异(基本在120000ns左右),否则可能使工作行的数据丢失。所以一个工作行从有效(选通)开始,可以有120000ns的持续工作时间而不用预充电。只要北桥芯片不发出预充电(包括允许自动预充电)命令,行打开的状态就会一直保持。在此期间,对该行的任何读写也不会有tRCD的延迟。如果北桥芯片同时打开的行(页)越多,则PFHR越大。同时打开不是指对多行同时寻址(那是不可能的),而是多行同时处于选通状态。一些SDRAM芯片组的资料中会有,可以同时打开多少个页的指标,这可是决定其内存性能的一个重要因素。

可同时打开的页数也存在限制。根据SDRAM的寻址原理,同一L-Bank中只能有一个打开的行(S-AMP只能为一行服务),这限制了可同时打开的页面总数。以SDRAM有4个L-Bank,北桥最多支持8个P-Bank为例,最多只能有32个页面能同时打开。如果只有一个P-Bank,就只剩下4个页面,有几个L-Bank才能有同时打开几个行而互不干扰。Intel 845的MHC虽然可以支持24个打开的页面,那也是指6个P-Bank的情况下(845MCH只支持6个P-Bank)。845已经发挥到了极致。

同时打开页数多了,也对存取策略提出了一定的要求。要尽量使用已打开的页保证最短的延迟周期,只有在数据不存在(读取时)或页存满了(写入时)才考虑打开新的指定页,这也就是变向的连续读/写。而打开新页时就必须要关闭一个打开的页,如果此时打开的页面已是北桥所支持的最大值但还不到理论极限,就需要一个替换策略,一般都是用LRU算法,这与VIA的交错控制大同小异。

SDRAM的结构、时序与性能的关系(下)

四、内存结构对PHR的影响

这是结构设计上的问题,所以单独来说。在介绍L-Bank时曾提到,单一L-Bank会有严重的寻址冲突。如果只有一个L-Bank,那么除非是背靠背式的操作(PFH),否则tRP、tRCD、CL(读取时)一个也少不了。内存交错之所以能实现就是因为有多个L-Bank, L-Bank数量与页命中率的关系(PHR基本上可以等于“(L-Bank数-1)/L-Bank数”。

SDRAM有4个L-Bank,页命中率就是75%,DDR-Ⅱ SDRAM最多有8个L-Bank,PHR最高为87.5%。RDRAM则最多有32个L-Bank,PHR到了惊人的96.875%,这也是当时RDRAM攻击SDRAM的一主要方面。

但L-Bank多了,相应外围辅助的元件也要增加,比如S-AMP,L-Bank地址线等等。在RDRAM的介绍中,我会讲到L-Bank数量增多后所带来的一些新问题。

五、读/写延迟不同对性能所造成的影响

读取SDRAM时会有CL造成的延迟,而在写入时则是0延迟。在读之后马上进行写的话,由于没有写延迟,数据线不会出现空闲期,保证了数据总线的利用率。但若在写之后马上进行读的话,即使是背靠背式进行,仍然会由于tWR与CL造成间隔,这期间数据总线的空闲影响到了利用率受。

先写后读,由于保证写入的可靠性,读取命令在tWR之后发出,并再经过CL才能输出数据,本例中CL=3,造成了两个时钟周期的总线空闲。

在突发读取过程中,想立刻中断并进行新的读操作,和读后读模式(见“突发连续读取模式图”)一样,只是新的读命令根据需要提前若干个周期发出,经过CL后就会自动传输新的数据。但若想中断读后立即写,就需要数据掩码(DQM)来屏蔽写入命令发出时的数据输出,避免总线冲突。根据芯片设计不同,有时可能会浪费一个周期进行总线I/O的调转,此时一个周期的总线空闲也是不可避免的。

突发读后写时的操作,以本图为例,在最后一个所需数据(本例为第一笔数据)输出前一个周期使DQM有效,屏蔽第二笔数据的输出;2、发出写入命令,此时所读取的第二笔数据被屏蔽。3、继续 DQM以屏蔽第三笔数据的输出。其中tHZ表示输出数据与外部电路的连接周期,tDS表示数据输入准备时间,如果tHZ+tDS>tCK,那么写入 操作就要延后一个周期,这要视芯片的具体设计而定(上图可点击放大)

六、BL对性能的影响

从读/写之间的中断操作我们又引出了BL(突发长度)对性能影响的话题。BL的长短与其应用的领域有着很大关系,下表就是目前三个主要的内存应用领域所使用的BL,这是厂商们经过多年的实践总结出来的。

BL越长,对于连续的大数据量传输很有好处,但是对零散的数据,BL太长反而会造成总线周期的浪费。以P-Bank位宽64bit为例,BL=4时,一个突发操作能传输32字节的数据,但如果只需要前16个字节,后两个周期是无效的。如果需要40字节,需要再多进行一次突发传输,但实际只需要一个传输周期 就够了,从而浪费了三个传输周期。而对于2KB的数据,BL=4的设置意味着要每隔4个周期发送新的列地址,并重复63次。而对于BL=256,一次突发就可完成,并且不需要中途再进行控制。不少人都因此表示了BL设定对性能影响的担心。

所以可以通过写命令、DQM、读命令的配合/操作,完全可以任意地中断突发周期开始新的操作,而且DQM还可以帮我们在BL中选择有用的数据,从而最大限度降低突发传输对性能带来的影响。另外,预充电命令与专用的突发传输终止命令都可以用来中断BL,前者在中断后进行预充电,后者在中断后不进行其他读/写操作。

专用的突发停止命令可用来中断突发读取,其生效潜伏期与CL相同。对于写入则立即有效(上图可点击放大)

用预充电命令来中断突发读取,生效潜伏期与CL相同,要小于或等于tRP。写入时预充电在最后一个有效写入周期完成,并经过tWR之后发出,同时立即中断突发传输

所以,突发周期的中断并不难,但用短BL应付大数据量存取需要不断的指令与列寻址配合,而为了取消不需要的传输周期,由于需要运用额外的控制,也将占用不 少的控制资源。所以BL针对不同应用领域有不同设计的主要目的,就是在保证性能的同时,系统控制资源也能得到合理的运用。

 

 https://wenku.baidu.com/view/acfdfed733d4b14e8524687f.html?pn=50

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容