目录

1、物理Bank

2、SDRAM、SIMM、DIMM、pin的含义

3、芯片位宽

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

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

6、内存寻址的步骤

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

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

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

10、结合韦东山老师的第12课——内存控制器与SDRAM——SDRAM的设置

11、总结


1、物理Bank

传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。当时控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据。总线的位宽,而这个位宽就称之为物理Bank(Physical Bank.简称P-Bank)的位宽。
    
结合韦东山老师讲的 不同位宽设备的连接:
       接到芯片上的引脚用来确定读取芯片上的哪一个单元的数据,把这个单元的数据返回给内存控制器,内存控制器会根据没有连接芯片的引脚,来确定返回哪一个字节的数据给CPU,最终的地址线终将都会用到。

SDRAM-高手进阶,终极内存技术指南----学习笔记


2、SDRAM、SIMM、DIMM、pin的含义

1. SDRAM:

Synchronous Dynamic Random Access Memory,同步动态随机存储器。同步是指其时钟频率与CPU前满总线的系统时钟频率相同, 并且内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写。

2. pin:

楼组或芯片与外部电路联接用的金属引脚,而模组的pin就是常说的“金手指”。

3. SIMM:

Single In-line Memory Module,单列内存模组。内存模组就是我们常说的内存条,所谓单列是指模组电路板与主板插槽的接口只有一列引脚(虽然两侧都有金手指)。
        
4. DIMM:

Double In-line Memory Module,双列内存模组。所谓双列是指楼组电路板与主板插槽的接口有两列引脚,模组电路板两侧的金手指对应一列引脚,DIMM是SDRAM集合形式的最终体现。 

3、芯片位宽

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

提示:内存芯片与颗粒

很多时候,经常听人们说到“内存颗粒”,其实这是港台地区对内存芯片的一种称呼(仅对内存,其他的芯片,港台则            称 为“晶片”),两者的意思是一样的。具体怎么说,就看个人喜好了,就笔者而言,而倾向于用“内存芯片”来表                    述。

 DIMM是SDRAM集合形式的最终体现,每个DIMM至少包含一个P-Bank的芯片集合。在目前的DIMM标准中,每个模组最多可以包含两个P-Bank的内存芯片集合,理论上可以在一个DIMM上支持多个P-Bank,比如SDRAMDIMM就有4个芯片选择信号(Chip Select简称片选或CS),理论上可以控制4个P-Bank的芯片集合。由于难度原因没有这么去做。

DIMM的面数与P-Bank数量的关系,面数P ≠ Bank数,只有在知道芯片位宽的情况下,才能确定P-Bank的数量,大度256MB内存就是明显一例,而这种情况在Registered模组中非常普遍。内存模组的设计,将在后面的相关内容中继续探讨。

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

1.逻辑Bank与芯片位宽

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

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

SDRAM-高手进阶,终极内存技术指南----学习笔记
   L-Bank存储阵列示意图

  

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

这样,在进行寻址时:

①先确定是哪个L-Bank,

②再在这个选定的L-Bank中选择相应的行与列进行寻址。

可见对内存的访问,一次只能是一而每个L-Bank工作,次与北桥交换的数据就是L-Bank存储阵列中一个“存储单元”的容量。在某些厂商的表述中,将L-Bank中的存储单元称为Word(此处代表位的集合而不是字节的集合)。 

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

DRAM的存储原理

L-Bank中的存储单元是基本的存储单位,它的容量是若干Bit(对于SDRAM而言,就是芯片的位宽),而每个Bit则是存放于一个单独的存储体中。这些存储体就是内存中最小的存储单元。你可以用硬盘操作中的扇区的关系来理解内存中的存储形式。扇区是硬盘中的最小存储单元(相当于内存中的存储体),而每个簇则包含有多个扇区(相当于L-Bank中的存储单元),数据的交换都是一个簇为单位进行(一次传输一个存储单元的数据)。

SDRAM-高手进阶,终极内存技术指南----学习笔记
DRAM的存储原理示意图:行选与列选信号将使存储电容与外界间的传输电路导通,从而可进行放电(读取)与充电(写入)。另外,图中刷新放大器的设计并不固定,目前这一功能被并入读出放大器(Sense Amplifier,简称S-AMP)

2.内存芯片的容量

已经清楚了内存芯片的基本组织结构。那么内存的容量怎么计算呢?显然,内存芯片的容量就是所有L-Bank中的存储单元的容量总合。计算有多少个存储单元和计算表格中的单元数量的方法一样:

存储单元数量=行数×列数(得到一个L-Bank的存储单元数量)xL-Bank的数量在很多内存产品介绍文档中,都会用MxW的方式来表示芯片的容量(或者说是芯片的规格/组织结构)。

M是该芯片中存储单元的总数,单位是兆(英文简写M,精确值是1048576,而不是1000000)

W代表每个存储单元的容量,也就是SDRAM芯片的位宽(Width),单位是bit。

计算出来的芯片容量也是以bit为单位,但用户可以采用除以8的方法换算为字节(Byte)。比如8M×8,这是一个8bit位宽芯片,有8M个存储单元,总容量是64Mbit(8MB)。

提示:bit、Byte、Word的关系

bit:位。二进制数中,一个0或1就是一个bit。

Byte:字节。8个bit 为一个字节,这与ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)的规定有关,ASCII用8位二进制数来表示256个信息代码,所以8个bit定义为一个字节。

Word:字:两个字节为一个字,这里的Word不是指L-Bank中存储单元,此外还有双字(DWords,Double Words,4个字节)和四字(QWord,Quad Words,8个字节)的表示法。目前一个P-Bank的位宽就是QWord,这在很多CPU与芯片组的介绍中经常用到。

MxW是最简单的表示方法。下图则是某公司对自己内存芯片的容量表示方法,这可以说是最正规的形式之一。

SDRAM-高手进阶,终极内存技术指南----学习笔记
业界正规的内存芯片容量表示方法

以上三个规格的容量都是128Mbits,由于位宽的变化引起了存储单元的数量变化。我们可以知道,在相同的总容量下,位宽可以采用多种不同的设计。

134,217,728 = 128M/1024/1024/4/16  4 Bank     16 bit 

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

相同的总容量下,位宽有多种不同的设计主要是为了满足不同领域的需要。道P-Bank的位宽是固定的,也就是说当芯片位宽确定下后,一个P-Bank中芯片的个数也就自然确定了,前面讲过P-Bank对芯片集合的位宽有要求,对芯片集合的容量则没有任何限制。

高位宽的芯片可以让DIMM的设计简单一些(因为所用的芯片少),但在芯片容量相同时,这种DIMM的容量就肯定比不上采用低位宽芯片的模组,因为后者在一个P-Bank中可以容纳更多的芯片。上面内存芯片容量标识图,容量都是128Mbit,合16MB。如果DIMM采用双P-Bank+16bit芯片设计,那么只能容纳8颗芯片,计128MB。但如果采用4bit位宽芯片,则可容纳32颗芯片,计512MB。

DIMM容量前后相差出4倍,可见芯片位宽对DIMM设计的重要性。因此,8bit位宽芯片是桌面台式机上容量与成本之间平衡性较好的选择,所以在市场上也最为普及,而高于16bit位宽的芯片一般用在需要更大位宽的场合,如显卡等,至于4bit位宽芯片很明显非常适用于大容量内存应用领域,基本不会在标准的Unbuffered模组设计中出现。

因为引脚和封装暂时对我的下一步学习没什么作用,这里就不展开了。

6、内存寻址的步骤

  1. 首先,我们知道内存控制器要先确定一个P-Bank的芯片集合,然后才对这集合中的芯片进行寻址操作。因此要有一个片选的信号,它一次选择一个P-Bank的芯片集(根据位宽的不同,数量也不同)。被选中的芯片将同时接收或读取数据,所以要有一个片选信号。
  2. 接下来是对所有被选中的芯片进行统一的L-Bank的寻址,目前SDRAM中L-Bank的数量最高为4个,所以需要两个L-Bank地址信号(2^2=4)。
  3. 最后就是对被选中的芯片进行统一的行/列(存储单元)寻址。地址线数量要根据芯片的组织结构分别设计了。但在相同容量下,行数不变,只有列数会根据位宽的而变化,位宽越大,列数越少,因为所需的存储单元减少了。
  4. 找到了存储单元后,被选中的芯片就要进行统一的数据传输,那么肯定要有与位宽相同数量的数据I/O通道才行,所以肯定要有相应数量的数据线引脚。

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

CLK CKE CS# RAS# CAS# WE# A0-A11 L-Bank地址线 CL BL tRP tACk tWR
 时钟CLK 时钟有效CKE 芯片选择CS# 行地址选RAS# 列地址选CAS# 写允WE# 地址线A0-A11  BAO,BA1 读取潜伏期 突发长度 发送列读写命令与行有效命令时间间隔 时钟触发后的访问时间 写回周期

首先,我们先认识一下SDRAM的内部结构,然后再开始具体的讲述。

SDRAM-高手进阶,终极内存技术指南----学习笔记
128Mbit(32M×4)SDRAM内部结构图

1. 芯片初始化

在SDRAM芯片内部还有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时SDRAM都要先对这个控制逻辑核心进行初始化。有关预充电和刷新的含义在下文有讲述,关键的阶段就在于模式寄存器(MR,Mode Register)的设置,简称MRS(MR Set),这一工作由北桥芯片在BIOS的控制下进行,寄存器的信息由地址线来提供。

 

SDRAM-高手进阶,终极内存技术指南----学习笔记
SDRAM在开机时的初始化过程

 

 

SDRAM-高手进阶,终极内存技术指南----学习笔记
SDRAM模式寄存器所控制的操作参数:地址线提供不同的0/1信号来获得不同的参数。在设置到MR之后,就开始了进入正常的工作状态,图中相关参数将结合下文具体讲述

 

2. 行有效

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

 

SDRAM-高手进阶,终极内存技术指南----学习笔记
行有效时序图

 

从图中可以看出,在CS#、L-Bank定址的同时,RAS(Row Address Stro be,行地址选通脉冲)也处于有效状态。此时An地址线则发送具体的行地址。

如图中是AO-A11,共有12个地址线,由于是二进制表示法,所以共有4096个行(212=4096),AO-A11的不同数值就确定了具体的行地址。由于行有效的同时也是相应L-Bank有效,所以行有效也可称为L-Bank有效。 

韦东山老师的视频讲解中:

怎样确定芯片的访问地址: 

1. 根据片选信号确定基地址, 

2. 根据芯片所接地址线确定范围

实例: 

Nor Flash 使用的是片选0(nGCS0),基地址为0,用到A20,A19……A1,A0共21条地址线,所以地址范围为0x00000000 ~ 0x1FFFFF也就是2M的空间大小。 

网卡(Net)使用的是片选4(nGCS4),基地址为0x20000000,用到A2,A0共2根地址线,所以地址范围为0x20000000 ~ 0x20000005。 

SDRAM使用的是片选6(nGCS6),基地址为0x30000000。

- Nor Flash Net SDRAM
基地址(base) 0x00000000 0x20000000 0x30000000
取址范围 0x00000000~0x1FFFFF 0x20000000~0x20000005 比较特殊


 

2. 列读写 

行地址确定之后,就要对列地址进行寻址了。但是,地址线仍然是行地址所用的AO-A11(本例)。

在SDRAM中,行地址与列地址线是共用的。不过,读/写的命令是怎么发出的呢?其实没有一个信号是发送读或写的明确命令的,而是通过芯片的可写状态的控制来达到读/写的目的。显然WE#信号就是一个关键。WE#无效时,当然就是读取命令。

SDRAM-高手进阶,终极内存技术指南----学习笔记
SDRAM基本操作命令,通过各种控制/地址信号的组合来完成(H代表高电平,L代表低电平,X表示高低电平均没有影响)。此表中,除了自刷新命令外,所有命令都是默认CKE有效。对于自刷新命令,下文有详解

 

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

 

SDRAM-高手进阶,终极内存技术指南----学习笔记
读写操作示意图,读取命令与列地址一块发出(当WE#为低电平是即为写命令)

然而,发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),大家也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。tRCD是SDRAM的一个重要时序参数,可以通过主板BIOS经过北桥芯片进行调整,但不能超过厂商的预定范围。

广义的t RCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC 100 SDRAM,tRCD=2,代表20ns的延迟,对于PC133则为15ns。

提示:时钟频率、时钟周期及数据传输频率之间的关系

时钟频率以赫兹(Hz)为单位,如PC 100 SDRAM的时钟频率为100MHz(这里的M=1000000),时钟周期以秒(s)为单位,两者间的换算公式为:时钟周期=1时钟频率。如果PC 100 SDRAM,时钟频率为1/100000000s,合10ns(纳秒)。

至于数据传输频率,是指每秒钟传输数据的次数,它不一定等于时钟频率,但肯定以它为基准。比如DDR内存,数据传输频率就是时钟频率的两倍。 

SDRAM-高手进阶,终极内存技术指南----学习笔记
tRCD=3的时序图

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

1. 数据输出(读)

在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)。
CL的单位与tRCD一样,为时钟周期数,具体耗时由时钟频率决定。

不过,CAS并不是在经过CL周期之后才送达存储单元。实际上CAS与RAS一样是瞬间到达的,但CAS的响应时间要更快一些。为什么呢?假设芯片位宽为n个bit,列数为c,那么一个行地址要选通nxc个存储体,而一个列地址只需选通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。

SDRAM-高手进阶,终极内存技术指南----学习笔记
CL=2与tAC示意图

 提示:潜伏期≠延迟

从表面上看CL造成了读取数据的滞后,但就CAS而言并没有延迟,因为延迟与潜伏期有着根本的不同定义(否则规范制定者也不会特意用Latency与Delay来区分)。

延迟是指一个信息或一个事件被推迟的时间量,潜伏期则是指已经发生,但没有达到一定的水平,就如病毒的潜伏期一样,可能病菌早以入驻你的身体,只是产生的反应还不足以引起你的注意。我们可以说CL造成了输出延迟,但不能因此认为CL=CD(CASDelay),后者更接近于RCD的含义。

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

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

2.  数据输入(写)

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

SDRAM-高手进阶,终极内存技术指南----学习笔记
数据写入的时序图

从图中可见,由于数据信号由控制端发出,输入时芯片无需做任何调校,只需直接传到数据输入寄存器中,然后再由写入驱动器进行对存储电容的充电操作,因此数据可以与CAS同时发送,也就是说写入延迟为0。不过,数据并不是即时地写入存储电容,因为选通三极管(就如读取时一样)与电容的充电必须要有一段时间,所以数据的真正写入需要一定的周期。

为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多),有关它的影响将在下文进一步讲述。 

3. 突发长度

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

在目前,由于内存控制器一次读/写P-Bank位宽的数据,也就是8个字节,但是在现实中小于8个字节的数据很少见,所以一般都要经过多个周期进行数据的传输上文讲到的读/写操作,都是一次对一个存储单元进行寻址,如果要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。虽然由于读/写延迟相同可以让数据的传输在I/O端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低(早期的FPE/EDO内存就是以这种方式进行连续的数据传输)。

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

SDRAM-高手进阶,终极内存技术指南----学习笔记
非突发连续读取模式:不采用突发传输而是依次单独寻址,此时可等效于BL=1。虽然可以让数据是连续的传输,但每次都要发送列地址与命令信息,控制资源占用极大

 

SDRAM-高手进阶,终极内存技术指南----学习笔记
突发连续读取模式:只要指定起始列地址与突发长度,寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输

 

至于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。

 提示与误区:Full Page与Page的含义

Ful Page(全页)突发传输是指L-Bank(逻辑Bank)里的一行中所有存储单元从头至尾进行连续传输,至于具体的突发长度(一行中的存储单元数量)则要看内存芯片的具体设计。

不过这种针对芯片的页定义是狭义的。我们常用的则是广义上的页,文章中已经讲到,内存系统的每次传输都是以一个P-Bank位宽为单位的,需要多颗芯片集体工作。在每次寻址时,P-Bank内每个芯片所得到的L-Bank地址与行地址都是相同的。

这样在全页操作中,就等于对P-Bank所包含的每个芯片内同一L-Bank里同一行的所有存储单元读写,而这些存储单元的总和就是相对于整体系统而言的页,本文中所指的页就是指这种广义上的页。

在一些文章中,把这种广义上的页说成是DIMM上所有相同行地址的行集合,显然是不对的,它没有P-Bank的划分也没有L-Bank的界定,因为不同的P-Bank或不同的L-Bank中也有相同的行地址,而一次寻址只能以P-Bank--L-Bank-Row的步骤进行,所以不同P-Bank或不同L-Bank 内即使地址相同的行也不能同时工作,页也就无从谈起了。

Intel845芯片组MCH的资料:它可以支持2、4、8、16KB的页容量上图就是845有关页容量的支持范围,这个容量就是一页中所有存储单元的容量总合。至于页容量具体是多少则要看DIMM的设计。但页容量的计算公式通过上面的讲解就很容易得出:L-Bank中一行的存储单元数×存储单元的容量×组成P-Bank 所需要的芯片数。

以前文那张结构图的规格为例。一行共有2048个存储单元(列地址为2^11),每个单元容量是4bit(×4)。要组成一个P-Bank,需要16颗这样的芯片,那么此这种规格芯片生产的DIMM所能提供的页容量就是:2048×4bit×16=16KB。

 另外,在MRS阶段除了要设定BL数值之外,还要具体确定读/写操作的模式以及突发传输的模式。突发读/突发写,表示读与写操作都是突发传输的,每次读/写操作持续BL所设定的长度,这也是常规的设定。突发读/单一写,表示读操作是突发传输,写操作则只是一个个单独进行。

突发传输模式代表着突发周期内所涉及到的存储单元的传输顺序。顺序传输是指从起始单元开始顺序读取。假如BL=4,起始单元编号是n,顺序就是n、n+1、n+2、n+3。交错传输就是打乱正常的顺序进行数据传输(比如第一个进行传输的单元是n,而第二个进行传输的单元是n+2而不是n+1),至于交错的规则在SDRAM规范中有详细的定义表,但在这此出于必要性与篇幅的考虑就不列出了。

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

1.  预充电:

由于SDRAM的寻址具体独占性,所以在进行完读写操作后,如果要对同一L-Bank(逻辑 Bank)的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)

预充电两种控制方式:命令控制、辅助设定让芯片在每次读写操作之后自动进行预充电。

实际上,预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位,同时释放S-AMP(重新加入比较电压,一般是电容电压的1/2,以帮助判断读取数据的逻辑电平,因为S-AMP是通过一个参考电压与存储体位线电压的比较来判断逻辑值的),以准备新行的工作。

具体而言,就是将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的单位也是时钟周期数,具体值视时钟频率而定。

SDRAM-高手进阶,终极内存技术指南----学习笔记
读取时预充电时序图:图中设定:CL=2、BL=4、tRP=2。自动预充电时的开始时间与此图一样,只是没有了单独的预充电命令,并在发出读取命令时,A10地址线要设为高电平(允许自动预充电)。可见控制好预充电启动时间很重要,它可以在读取操作结束后立刻进入新行的寻址,保证运行效率。

 

 

误区:读写情况下都要考虑写回延迟

有些文章强调由于写回操作而使读/写操作后都有一定的延迟,但从本文的介绍中写可以看出,即使是读后立即重写的设计,由于是与数据输出同步进行,并不存在延迟。只有在写操作后进行其他的操作时,才会有这方面的影响。写操作虽然是0延迟进行,但每笔数据的真正写入则需要一个足够的周期来保证,这段时间就是写回周期(tWR)。所以预充电不能与写操作同时进行,必须要在tWR之后才能发出预充电命令,以确保数据的可靠写入,否则重写的数据可能是错的,这就造成了写回延迟。

SDRAM-高手进阶,终极内存技术指南----学习笔记
数据写入时预充电操作时序图(可点击放大):注意其中的tWR参数,由于它的存在,使预充电操作延后,从而造成写回延迟

 

 

2. 刷新:

之所以称为DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。

刷新操作与预充电中重写的操作一样,都是用S-AMP先读再写。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有L-Bank 预充电不同的是,这里的行是指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不是一定是相同的。

那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到4096Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625us(微秒,1/1000毫秒),8192行时就为7.8125u5.

刷新操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。

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

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

3. 数据掩码

在讲述读/写操作时,我们谈到了突发长度。如果BL=4,那么也就是说一次就传送4×64bit的数据。但是,如果其中的第二笔数据是不需要的,怎么办?还都传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元"处被屏蔽。DQM由北桥控制,为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个芯片共用一个DQM信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于16bit位宽芯片,则需要两个DQM引脚。

SDRAM 官方规定,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即成效。

SDRAM-高手进阶,终极内存技术指南----学习笔记
读取时数据掩码操作,DQM在两个周期后生效,突发周期的第二笔数据被取消

 

 

SDRAM-高手进阶,终极内存技术指南----学习笔记
写入时数据掩码操作,DQM立即生效,突发周期的第二笔数据被取消

 


 

10、结合韦东山老师的第12课——内存控制器与SDRAM——SDRAM的设置

SDRAM-高手进阶,终极内存技术指南----学习笔记

 

SDRAM总共有4个块(Banks),可以认为每个块就是一个表格,里面的每个格子表示的是16bit数据。

  • 问题1:怎样访问里面的某个格子呢?

1. 首先发出一个片选信号,选中整个芯片;

2. 发出Bank地址,选择是哪一个Bank(块,即表格);

3. 发出行地址;

4. 最后发出列地址,才能选中是个格子;

  • 问题2:那么多的信号有谁发出呢?  

由内存控制器发出,所以我们需要设置内存控制器,CPU只是简单的执行读写内存的命令,其他的都交给内存控制起来处理。 
例如

LDR R0,=0x30000000 
LDR R1,[R0]

CPU把0x30000000这个地址发给内存控制器,内存控制器根据这个地址,判断属于哪个范围,然后发出相应的片选信号。

根据类型(比如SDRAM)拆分成三部分:发出Bank地址、发出行地址、发出列地址。

        

  • 对于上面的三个,怎样拆分呢?

行地址线有几条,列地址线有几条,都要设置内存控制器里面相关寄存器。

  1. 读数据

综上所述:对SDRAM的访问可以分为如下步:

  1. CPU发出的片选信号nSCS6有效,它选中SDRAM芯片。
  2. SDRAM中有4个L-Bank,需要两根地址信号来选中其中之一,根据原理图,可知使用ADDR24,ADDR25作为L-Bank的选择信号。
  3. 对被选中的芯片进行统一的行/列(存储单元)寻址。

根据SDRAM芯片的列地址线数目设置CPU的相关寄存器后,CPU就会从32位的地址中自动分出L_Bank片选信号,行地址信号,列地址信号,然后先后发出行地址信号,列地址信号。L_Bank选择信号在发出行地址信号的同时发出,并维持到列地址信号结束。


11、总结

数据读出(读)

行列选择时,行选通周期——tRCD

  • 发送列读写命令时与行有效命令的时间间隔

读取潜伏期——CL

  • 列地址选通后,仍要经过一段时间才会有数据输出==>具体的耗时由时钟频率决定

时钟触发后的访问时间——tAC 

  • 从数据I/O总线上有数据输出之前的一个时钟上升沿开始,数据即已传向S-AMP,也就说此时数据已经被触发,经过一定的驱动时间最终传向数据I/O总线进行输出

数据输入(写)

也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中),只是在列寻址时,WE#为有效状态。

写入/校正时间 —— tWR、写回操作

  • 为了保证数据的可靠写入,都会流出足够的写入、校正时间

预充电时间

预充电有效周期——tRP

发出预充电命令后,要经过一段时间,才允许发送RAS行有效命令打开新的工作行

几个周期时间的概括

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,以达到提高内存工作效率的目的。

 


参考韦东山老师:https://blog.csdn.net/thisway_diy/article/details/79389530 
参考文章:https://wenku.baidu.com/view/c82837ee81c758f5f71f6704.html?pn=1
        
        
        
        
        
        
        
        
        

相关文章: