我们从内存颗粒、 内存槽位接口、 主板和内存之间的信号、接口几个方面来详细阐述SDRAM内存条和主板内存系统的设计思路...
虽然目前SDRAM内存条价格已经接底线,内存开始向DDR和Rambus内存过渡。但是由于DDR内存是在SDRAM基础上发展起来的,所以详细了解SDRAM内存的接口和主板设计方法对于设计基于DDR内存的主板不无裨益。下面我们就从内存颗粒、内存槽位接口、主板和内存之间的信号接口几个方面来详细阐述SDRAM内存条和主板内存系统的设计思路。
内存颗粒介绍
对于DRAM(Dynamic Random Access Memory)内存我想凡是对于计算机有所了解的读者都不会陌生。这种类型的内存都是以一个电容是否充有电荷来作为存储状态的标志,电容冲有电荷为状态1,电容没有电荷为状态0。其最大优点是集成度高,容量大,但是其速度相对于SRAM (Static Random Access Memory) 内存来说慢了许多。目前的内存颗粒封装方式有许多种,本文仅仅以大家常见的TSSOP封装的内存颗粒为例子。
其各个管脚的信号定义和我们所使用的DIMM插槽的定义是相同的,对于不同容量的内存,地址信号的位数有所不同。另外一个需要注意的地方就是其供电电路。Vcc和Vss是为内存颗粒中的存储队列供电,而VccQ和VssQ是为内存颗粒中的地址和数据缓冲区供电。两者的作用不同。
我们对内存颗粒关心的问题主要是其颗粒的数据宽度(数据位数)和容量(寻址空间大小)。而对于颗粒自检、颗粒自刷新等等逻辑并不需要特别深入的研究,所以对此我仅仅是一笔带过,如果读者有兴趣的读者可以详细研究内存颗粒的数据手册。虽然内存颗粒有这么多的逻辑命令方式,但是由于目前北桥芯片和内存颗粒的集成度非常高,只要在布线和元器件的选择上严格按照内存规范来设计和制造,需要使用逻辑分析仪来调试电路上的差错的情况比较少,并且在设计过程中尽量避免出现这种情况。
168线DIMM内存插槽的信号定义
我们目前PC和Server使用的内存大都是168 Pins的SDRAM,区别只是其工作频率有的可能是100MHz频率,有的可能是133MHz频率的。但是只要是SDRAM,其DIMM插槽的信号定义是一样的。而这些引脚得定义就是设计内存条和主板所必须遵从的规范。
内存引脚主要分为如下几类:地址引脚、数据引脚(包含校验位引脚)、片选等控制信号、时钟信号。整个内存时序系统就是这些引脚上的信号配合产生。下面的表中就是内存插槽的引脚数量和引脚定义,对于一些没有定义或者是保留以后使用的信号就没有列出来。
符号 功能 详细描述
DQ [0-63] I/O 数据输入/输出
CB [0-7] I/O ECC内存的ECC校验输入/输出
A [0-13] I/O 地址选择
BA [0-1] Control Bank选择
CS [0-3] Control 片选信号
RAS Control 行地址选择信号
CAS Control 列地址选择信号
DQMB [0-7] Control 数据掩码控制(DQ Mask)高有效*
WE Control 写允许信号
CK [0-3] Clock 时钟信号
CKE [0-1] Clock 时钟允许信号**
REGE Control 寄存器 (Registered) 允许信号
SA [0-2] I/O SPD地址输入
SDA I/O SPD数据输入/输出
SCL Clock SPD时钟输入
WP Control 写保护
Vss Power 电源线
Vdd Power 地线
注:
SPD Serial Presence Detect 内存序列存储芯片
RAS Row Address Strobe 行地址选择
CAS Column Address Strobe 列地址选择
* 在读模式时,控制芯片颗粒的Buffers数据输出
在写模式时,将芯片颗粒的Buffers中的数据写入芯片颗粒中的内存队列中
** 当该信号为高时,时钟信号有
当该信号为低时,时钟信号无效,并且该信号会触发内存颗粒的低功耗模式、自刷新模式或者挂起模式。
我们从DIMM插槽的引脚定义就可以计算出来,每个DIMM槽位最大支持的内存数值。该数值实际上是寻址空间乘上数据宽度,所以每个DIMM槽位支持最大容量为4GB = 214 x 214 x 8 Byte。但是由于内存芯片颗粒的制造局限性,所以目前能够使用的DIMM条的内存都达不到这个容量,其容量最大的内存条为1GB。
在设计和制造内存条的时候,所有的内存条都是按照插槽的规范来布线和生产,所以对于内存地址空间,所有生产出来的内存条都是相同的地址空间,例如一条128MB内存,他就是用了地址线A0-A13,当我们在一台计算机上安装多个内存时,如何分配每个内存内存条的地址空间呢?这个工作就需要北桥芯片和主板来配合了。
SPD信号定义
内存中使用的SPD都是一片8针TSSOP(Plastic Thin Small Outline Package)封装的串行存储EEPROM,其容量是2048bit。每个DIMM的SPD数据读写时钟线SCL和数据线SDA都是共享在一条总线上,所以当我们在一台机器上会安装多条内存时,其SPD的片选信号就需要事先确定。该片选信号是由SA0,SA1,SA2三条数据线来确定,该数据线的状态由主板设计厂商在设计主板的时候固定下来。在每次读写该EEPROM的时候,北桥芯片会按照EEPROM的读写规格首先向该芯片发送3位片选信号和8位地址信息,每个芯片都会读入该3位片选信号和8位地址信号。当3位片选信号和主板上固化的3?
醯刂废撸⊿A0,SA1,SA2)的状态一致的时候该内存条上的SPD芯片就被选中,其信息会记录在北桥控制器的寄存器中(Register)。
SPD读写逻辑中的片选必须满足下图的时序逻辑。在此主要介绍地址选择逻辑,对于数据如何读写的时序,有兴趣的读者可以查阅 Atemel 24C02A 的数据手册(许多内存厂商都选用该芯片作为SPD)。在这个时序中,硬件上仅仅需要满足其Device Address 地址信息。该地址信息是一个 8bit 的数据,它的格式如下
地址位 0 1 2 3 4 5 6 7
数据 1 0 1 0 A2 A1 A0 R/W
该数据通过SCL提供的时钟同步,0-3 位是固定的信息,4-6 位是片选地址,7位是判断该,命令是读还是写。在芯片内部会对4-6位的数据和硬件电路上的状态进行比较,相符的话,该芯片被选中,否则不进行下面的操作。从该时序逻辑可以得知,一个SPD通道(仅仅只有一对SCL和SDA信号线)只支持8条内存。至于SPD的读写和SPD内容的含义在此就不做进一步说明。
注:SPD涉及到的缩写
SA 0-2 Serial Presence Detect Address Inputs
SDA Serial Presence Detect Address Input/Output
SCL Serial Presence Detect Clock Input
WP Write Protect for SPD on DIMM
内存条的设计
我们已经知道了内存颗粒、SPD的接口信息,下面就可以开始设计内存了。内存条的逻辑功能图差别不是非常大,对于不同容量的颗粒,只是在数量上有所改变。
上面的逻辑功能图就是一个带ECC功能72bit 内存条的逻辑功能图。采用的是16bit数据宽度的内存颗粒。由于内存条每次读写必须满足64bits(非ECC)或者72bit(ECC),所以在设计的时候颗粒数量是固定的。上面的内存条仅仅只有一个Bank,所以没有使用BA信号。如果该内存条设计的时候是两个Bank,其功能图中就多出了BA选择信号,并且其容量也会随之增加1倍。剩下的工作就是布线,在一个6层电路板上布下所有的信号线。
但是随着目前服务器内存的增大,内存插槽数量的增多,服务器内存系统各个引脚间的引线长度会产生较大差别,导致信号时序会产生错位。并且控制器的信号控制这么多的内存,有限的驱动能力会不堪重负。针对这种情况,服务器中的内存主要采用的是Registered内存,在内存上添加锁相环电路和几个寄存器,这样每个控制信号仅仅针对数量很少的寄存器,不用针对内存条上的每个内存颗粒来输出信号,可以很大程度上降低控制芯片的负载,提高信号的质量。同时锁相环电路大大减少了内存系统的时间延迟,保证了数据的同步。
下面就是寄存器的功能图
寄存器仅仅寄存了每个内存条上的控制信号,对于数据信号没有进行任何操作。因为控制信号例如S0、CKE0等等信号都是控制多个内存颗粒的信号,所以当服务器上安装8到16条内存的时候,仅仅靠主板上的控制芯片来控制肯定是力不从心。
上面的逻辑图就很好的说明了Registered内存中锁相环电路的作用。该电路时时保证和主板上的时钟电路所属出的时钟频率保持同步,使用这个时钟信号驱动寄存器和内存芯片颗粒就不会产生时钟的漂移。所以目前的服务器内存都采用的是Registered内存条。
主板上内存系统的设计
主板上对于内存的访问主要是由北桥芯片来控制。32位CPU能够访问的内存容量是64GB。这是由CPU寻址空间和数据带宽固定的。但是在实际使用中,我们的北桥芯片能够寻址的空间却十分有限。一般PC是2GB,高端PC可能达到4GB,高端服务器可以达到32GB的内存容量。这一部分和各个系统内存控制芯片的设计有关。在此我以Intel 815E芯片组为例说明一下主板上内存系统的设计。
Intel 815E北桥控制芯片的内存控制电路的逻辑图如下:
每种信号引脚的功能如下表:
符号 功能 详细描述
SMD [0-63] I/O 数据输入/输出
SMAA [0-12] I/O 地址选择
SMAB [4-7] I/O 地址选择
SMAC [4-7] I/O 地址选择
SBS [0-1] Control Bank选择
SCSA [0-5] Control 片选信号
SCSB [0-5] Control 片选信号
SRAS Control 行地址选择信号
SCAS Control 列地址选择信号
SDQM [0-7] Control 数据掩码控制
SWE Control 写允许信号
SCKE [0-5] Clock 时钟允许信号
SRCOMP Control 用来校准系统内存的I/O缓冲。一般在主板上固定设置为高
该芯片组的内存兼容性和管理特性主要有下面几点:
Intel 815E支持64bits的内存。
从芯片引脚信号图可以看出,该芯片组只有64bits的数据带宽,没有8bits的ECC校验。
北桥芯片没有SPD监测电路。
该信息必须通过南桥芯片上的服务器系统管理总线SM_Bus总线来读出SPD的信息,然后传送到北桥芯片的寄存器中。
该芯片组不支持Registered内存。
可以支持3个DIMM插槽。每个槽位最大支持512MB。
计算方法:采用SMAA,总共使用数据带宽为64bits。
容量为512MB=213 x 213 x 8
我们根据Intel 815E芯片的特性,就可以设计出主板上的DIMM插槽的电路连接逻辑示意图了(注:该图中没有标出SPD的地址分配信息):
每个DIMM槽的SDQM、SMD、SMB_CLK(管理总线_时钟信号线)、SMB_DATA(管理总线_数据信号线)、SCAS、SRAS、SWE、SBS是共享的。那么如何区别每个DIMM槽上的内存呢?每个DIMM槽上的内存颗粒通过SMAA,SMAB,SMAC三个地址来区分其不同的地址段,而12条片选信号则在每个DIMM槽上分配4条,分别选择不同的芯片颗粒。这样同种的内存条插在不同的插槽上就被分配了不同的内存地址段。
至此,我们的内存系统从颗粒到主板的整个地址和数据组织管理模式就清晰的摆在读者面前了。
|