第3章 存 储 系 统   存储系统由赋予计算机记忆能力的部件组成。随着以存储器为中心的系统结构的建立,尤其是共享主存储器的多处理机的出现,存储系统的特性,已经成为影响整个系统最大吞吐量的决定性因素。 3.1 主存储器原理   现代主存储器一般被分为只读存储器(read only memory,ROM)和随机存储器(random access memory,RAM)两部分。如图3.1所示,ROM和RAM还可以有不同的类型。 图3.1 主存储器的基本分类 3.1.1 只读存储器原理   只读存储器是一种在机器运行过程中只能读出、不能写入信息的无源存储器,由非易失性器件组成,主要用于存储经常要用的一些固定信息,如基本输入输出系统(basic input/output system,BIOS)。   1. 掩膜式只读存储器   掩膜式只读存储器(mask read only memory,MROM)采用由生产商进行编程的ROM元件,用户只能将自己的要求提供给生产商进行制作,自己无能为力。其优点是可靠性高、集成度高,可以在生产线上生产,大批量应用价格便宜;缺点是少量应用成本很高。   2. 可编程只读存储器   可编程只读存储器(programmable read only memory,PROM)在出厂时内部并没有存储任何数据,用户可以用专用编程器将自己的数据写入,但是这种机会只有一次,一旦写入也无法修改,若是出了错误,已写入的芯片只能报废。PROM元件有多种形式,其中一种是熔丝型的,其原理如图3.2所示。它在出厂时各处熔丝都是完好的,用户在使用前可以将要存0的位用大电流将熔丝烧断,没有烧断的位就表示1。这种元件,一经写好,存0的位便不可再改为1。读出时,选中W0(简单地认为其为高电平),则在位线b0b1b2上分别输出100;选中W1,则在位线b0b1b2上分别输出011。   3. 可擦可编程只读存储器   可擦可编程只读存储器(erasable programmable read only memory,EPROM)的特点是可以改写。它们在出厂时,全写为1,用户可以根据自己的需要将某些位改写为0。当需要变更时,还可以将每位都擦除——恢复全1,重新写入新内容。按照擦除方式,EPROM可以分为两种:紫外线可擦可编程只读存储器(UVEPROM)和电可擦可编程只读存储器(EEPROM)。   UVEPROM的存储单元由金属-氧化物-半导体场效应晶体管(metal-oxide-semiconductor field effect,MOSFET)构成。如图3.3所示,它在控制栅G2和N沟道间有一个称为浮空栅G1。浮空栅利用氧化膜使栅极与基板绝缘,可以使存储于此处的电荷不能被轻易释放,以持续保存记忆。通常,浮空栅中未存储电荷时,为高电平状态;有存储电荷时,为低电平状态。 G1—浮空栅;G2—控制栅;D—漏极;S—源极 图3.3 浮空栅雪崩注入型EPROM   若需要对芯片内容进行改写,首先要将已存的内容擦除。如图3.4(a)所示,在UVEPROM芯片正面的陶瓷封装上,开有一个玻璃窗口,即石英窗,透过该窗口可以看到其内部的集成电路。如图3.4(b)所示,当40W紫外线透过该孔照射到内部芯片中的G1几分钟,G1中的电子即可获得能量,穿过氧化层回到衬底中。G1电荷的消失,相当于抹去信息,源极与漏极之间导通,存储器中又都成为存1状态。鉴此,UVEPROM芯片在写入数据后,要以不透光贴纸或胶布把窗口封住,以免受到意外紫外线照射而使数据受损。 图3.4 UVEPROM元件的原理   UVEPROM虽然使用很广泛,但也存在两个问题。   (1)紫外线擦除信息需很长时间(与紫外线光的照射强度有关);   (2)不能把芯片中个别需要改写的存储单元单独擦除和重写。   如图3.5(a)所示,EEPROM是在EPROM基本单元电路的控制栅G1的上面再生成一个抹去栅G2,可给G2引出一个电极,使其接某一电压VG;G1与漏极D之间有薄氧化层。如图3.5(b)所示,若VG为正电压,G1与D之间产生隧道效应,使电子注入控制栅,即编程写入0。如图3.5(c)所示,若VG为负电压,将使控制栅的电子散失,即擦除——全抹成1。擦除后可重新写入。 G1—浮空栅(控制栅);G2—抹去栅;D—漏极 图3.5 EEPROM元件的原理 3.1.2 随机存储器原理   按照工作原理,随机存储器分为静态随机存储器(static random access memory,SRAM)和动态随机存储器(dynamic random access memory,DRAM)。   1.SRAM原理   1)SRAM元件   SRAM记忆元件有双极型和金属-氧化物-半导体(metal-oxide-semiconductor,MOS)开关两种。下面以MOS开关元件为例说明SRAM的工作原理。   MOS开关元件是由金属(M)、氧化物(O)和半导体(S)组成的场效应管。它有三极(源极S、漏极D和栅极G)、两态(导通与截止):当栅极电压达到某个阈值(槛压)时,源极与栅极导通;低于这个阈值时源极与栅极截止。图?3.6为MOSFET的简化符号。   图3.7为6管静态MOS存储单元。其中,T1和T2反向耦合组成一个双稳态触发器(当T1导通时,T2就会截止;当T1截止时,T2就会导通),T3和T4作为阻抗,T5和T6作为记忆单元的选中开关(读写控制门)。当记忆单元未被选中(字线保持低电平)时,T5、T6截止,触发器与位线隔开,原来保存的状态不改变。当字线加上高电平时,T5、T6导通,该记忆单元被选中,可进行读写操作。   字线W是一个存储单元的一字节(面向字节的计算机)或一个字(面向字的计算机)中的所有位是共有的。选中字线,就是该存储单元中的所有记忆元件都被激活,便可以进行读写操作了。   写过程:选中字线W,T5、T6导通,即读写控制门打开。写1时,位线b′上送高电平,使T2导通,位线b上送低电平,使T1截止。这种状态不因写脉冲的撤离而改变。因为T2、T1成反向耦合,只要VCC上有+5V的电位,就能保持这一状态。写0时,位线b′上送低电平,位线b上送高电平,使T2截止、T1导通。   读过程:选中字线W,位线b′和b分别与A点和B点相通。记忆单元若原存1,A点(即位线b′)为高电平(读1);若原存0,B点(即位线b)为高电平(读0)。   静态MOS存储单元具有非破坏性读出的特点,抗干扰能力强,可靠性高。但是存储单元电路所用管子数目较多,占硅片面积大,功耗大,集成度不高。   双极型一般可分为晶体管-晶体管逻辑(transistor-transistor logic,TTL)和射极耦合逻辑(emitter coupled logic,ECL)两种。它们的电路驱动能力强,存取速度快,一般用作高速缓冲存储器。近年来还出现了新型的双极型存储单元电路,如集成注入逻辑(integrated injection logic)电路,简称I2L电路。它的特点是集成度高,工作电压低,功耗小,可靠性高,速度较快。双极型存储单元电路样式繁多,这里不再介绍。   2)一维地址译码RAM中的信号及其时序   图3.8为字结构、一维译码方式的RAM逻辑结构,通常用于小容量的SRAM。它在读写过程中,要使用如下一些信号。 图3.7 6管静态MOS存储单元 图3.8 字结构、一维译码方式的RAM逻辑结构   (1)数据总线上的地址信号。   (2)片选信号。   (3)写入控制信号。   (4)读出使能信号。   (5)数据总线上的数据信号。   图3.9所示的读写时序,形象地描画了这类SRAM在读写过程中,各种信号之间的时序关系。   如图3.9所示,不管是读还是写,都是按照下面的顺序发送有关信号。   (1)送地址信号,指定要读写的单元,此信号一直保留到有效读写完成。   (2)发送片选信号,选中一片存储器。    图3.9 一维地址译码RAM的读写时序   (3)发送读(高、低——有效)和写(低、高——有效)信号。   注意:数据线上的信号因读写而异。读出是从有关单元向数据线上输出数据信号,一般是在信号和信号稳定后即可有数据输出到数据线上;写入是由数据线向有关单元输入数据信号,一般对于送入数据的时间没有要求,但是信号和地址信号不能撤销太早,以保证有一个写入的稳定时间。   3)SRAM的有关时间参数   在对于一维地址译码RAM进行读写的过程中,为了保证读写质量,要关注如下一些时间参数。   (1)tSA:地址建立时间。从CPU发送地址信号到地址信号稳定时的时间,以保证地址 正确。   (2)tEQ:片选有效时间。从CPU发送到其稳定的有效时间,以保证选片正确。   (3)tGQ:读控制有效时间。从CPU发送到其稳定的有效时间,以保证稳定的读 操作。   (4)tAQ:有效读出时间,即和稳定到数据线上数据信号稳定的有效时间,在这段时间内和信号不可撤销,以保证读出信号正确。   (5)tWD:有效写入时间,以保证数据信号在信号之前撤销,否则可能造成写入数据错误。   (6)tWC:写入周期。   (7)tRC:读出周期。通常tRC = tWC,通称存取周期。   (8)tHD:可靠写入数据信号需要的维持时间。   需要强调,在不同的技术中,读写的时序可能不同。关键是如何保证可靠地读写。   2.??DRAM原理   1)DRAM元件   如图3.10所示,DRAM的存储元件靠栅极电容上的电荷保存信息,也称电荷存储型记忆元件。此外,每个RAM还有行地址线和列地址线,以支持二维地址译码。CPU使用行选与列选信号,使电容与外界的传输电路导通,电容充电(写入)与放电(读出)。   表3.1为SRAM与DRAM的比较。 表3.1 SRAM与DRAM的比较 比较内容 SRAM DRAM 存储体中的记忆元件 触发器 电容 是否破坏性读出 否 是 是否需要再刷新 否 是 读写周期 短 长 集成度 低 高(约是SRAM的4倍) 每位成本 高 低(约是SRAM的1/4) 所需功率 大 小(约是SRAM的1/6) 主要应用场合 高速缓冲存储器 主存储器      2)DRAM的逻辑结构与读写信号   图3.11为1M×4b的DRAM芯片组成的存储阵列的逻辑结构图。 图3.11 1M×4b的DRAM芯片组成的存储阵列的逻辑结构图   从这个逻辑结构图可以看出,它的地址总数为20,分为两部分:行地址(A0…A9)和列地址(A10…A19)。此外,还有一个刷新计数器及其控制线路。这样,它在读写时涉及如下一些信号。   (1)行地址。   (2)行地址选通信号。   (3)列地址。   (4)列地址选通信号。   (5)数据总线(DIN和DOUT)。   (6)读写控制脉冲R/。   由于DRAM中的信息要靠电容上的电荷保存,而存储单元中的电容容量很小,所以一个存储体中要有一个读出放大器(sense amplifier,S-AMP),用来放大/驱动数据信号,以保证可识别性。   此外,由于电容电荷总是会有泄漏的,为了保持数据,DRAM必须隔一段时间进行一次电荷的补充——刷新(refresh)。刷新周期视泄漏速度而定,如2ms、4ms等。为此DRAM中需要一个刷新放大器。不过这个刷新放大器现在已经被并入S-AMP中。   3)DRAM读写操作时的时序   图3.12形象地描画了这类DRAM在读写过程中各种信号之间的时序关系。可以看出,不管是读还是写,都是按照下面的顺序发送有关信号。 图3.12 二维地址译码DRAM的读写时序   (1)发送行地址和列地址。   (2)行地址稳定后,发送行地址选通信号,将行地址选存。   (3)发读写命令R/。读时高电平,并保持到结束之后;写时低电平,在此期间,数据线上必须送入欲写入的数据并保持到变为低电平之后。   (4)发送列地址选通信号,将列地址选存。在此期间,若R/= 1,则将数据输出到数据线上;当R/、和都有效时,数据线上的数据被写入有关单元。   4)DRAM的工作模式   DRAM在发展过程中,不断改进,先后形成了一些不同的工作模式。   (1)PM RAM、FPM DRAM与EDO DRAM。PM RAM(page mode RAM,页模式随机存储器)、FPM DRAM(fast page mode DRAM,快速页模式随机存储器)与EDO DRAM(extended data output RAM,扩展数据输出随机存取存储器)都是异步DRAM,即RAM与CPU采用不同的时钟频率。另外,它们还各有一些特点。   早期的DRAM称为PM RAM。其特点是每写入一位数据,就必须送出列(页)和行地址各一次,以决定该位的位置;并且每个地址都必须有一段稳定的时间,才能读写有效数据。在地址稳定之前,写入或读取的数据都是无效的。   FPM DRAM是一种改良型PM RAM。其特点是若需要读写的前后数据在同一列或同一页(page)内,则内存控制器不必重复送出列地址,只需指出下一行地址即可,以此来提高读写效率,可以做到每3个时钟周期输出一次数据。   EDO RAM取消了主板与内存两个存储周期之间的时间间隔,即不必等到数据完整地读取或写入,只要一到有效的时间,即可准备送出下一个地址,实现了每隔两个时钟脉冲周期输出一次数据,使存储速度提高30%。   (2)SDRAM。SDRAM(synchronous DRAM,同步动态随机存储器)的基本原理是将CPU与RAM通过一个相同的时钟锁在一起,使得RAM与CPU共享同一时钟,以相同的速度同步工作,避免了系统总线对异步DRAM进行操作时所需的一个时钟周期的额外等待时间,每个时钟脉冲的上升沿便开始传递数据,速度比EDO内存提高50%。   (3)DDR SDRAM。DDR SDRAM(double data rate SDRAM,双倍速率同步动态随机存储器,简称DDR)是SDRAM的更新换代产品,允许在时钟脉冲的上升沿和下降沿传输数据,这样不需要提高时钟的频率就能加倍提高SDRAM的速度。现在DDR已经进一步升级为DDR2、DDR3、DDR4、DDR5等标准系列。   (4)RDRAM。RDRAM(rambus DRAM,存储器总线式动态随机存储器)是RAMBUS公司开发的新型DRAM。它的主要特点是非常快,速度是DRAM的千倍以上。这个特高速度源自3项技术:采用超高频时钟频率(800~1200MHz),采用时钟双沿(上升沿和下降沿)传输数据(每个RDRAM晶片的传输峰值可达6.4GB/s),采用串行模块结构(各个芯片用一条总线串接起来,前面芯片写满后,后面的芯片才开始读入数据,简化了产品设计)。 3.2 主存储体组织 3.2.1 内存条   主存储器相当于计算机中用于记忆的大脑,要记忆大量信息就要有足够的存储单元。随着计算机应用领域的不断扩大,计算机功能越来越强大,主存储器的容量越来越大。为了便于设计、安装、维修,主存储器都以内存条形式进行规格化生产制造。如图3.13所示,内存条一般由内存颗粒、SPD芯片、引脚、印制电路板(printed-circuit board,PCB)(俗称金手指)及一些电容和电阻组成。   1.内存颗粒   主存储器的核心是IC存储晶片。每个IC存储晶片被生成后,必须进行封装,使其与外界隔离,防止空气中的杂质对芯片电路的腐蚀而造成电学性能下降,也防止其他原因造成的损害。每个被封装的IC存储晶片就称为一个内存颗粒。   IC存储晶片是非常精密、娇贵的产品。不仅制造需要高级技术,封装也需要高级技术。目前,业界普遍采用的封装技术有TSOP(thin small outline package,薄型小尺寸封装)和BGA(ball-gird-array,球栅阵列)封装技术。TSOP的典型特征是引脚由四周引出,如SDRAM的IC为两侧有引脚,SGRAM的IC四面都有引脚。BGA封装的引脚是由芯片中心方向引出的,从而有效地缩短了信号的传导距离,可以减少信号的衰减。   在每个封装后的内存颗粒上,一般都印刷有生产厂家、产品编号,以及颗粒的容量、数据宽度、存取速度、工作电压等重要参数,如图3.14(a)所示;也有的在内存统一给出这些参数,如图3.14(b)所示。各个厂家的参数标识各不相同。 图3.14 内存颗粒的参数标识   2.SPD芯片   SPD(serial presence detect,系列参数预置检测)是一片小型的EEPROM芯片,里面记录了内存条出厂时预先存入的速度、工作频率、容量、工作电压、行/列地址带宽、传输延迟、SPD版本等基本参数。当计算机开机工作时BIOS就会自动读取内存SPD中的记录信息,来对内存进行设置,使其运行在规定的工作频率上,工作在最佳状态,实现内存的“超频”。   3.引脚   如图3.15所示,为便于安装与维修,内存条不是焊接在主板上,而是插装固定在主板上的内存插槽中使用。引脚就是内存条中用来插入插槽进行内存条固定、并用于与计算机总线进行电气连接的部分。每个引脚都是PCB上镀金的覆铜条,所以俗称金手指。   内存条与其插槽都有一定的规格,要配套使用。引脚的基本参数是引脚数——线数。引脚数根据需要并行传递的数据位数而定。此外,为了防止插反,在引脚中间还设有槽口。有的规格设有一个槽口,有的设有两个槽口。下面介绍内存条的基本类型。   1)SIMM   SIMM(single in-line memory module,单列直插式内存模块)是早期FPM和EDD DRAM内存条,这种内存条两面的引脚传输相同的信号,相当于只有一面有引脚。最初的SIMM一次只传输8b数据,后来逐渐发展到16b、32b,形成30线、72线和专用内存条3类。   2)DIMM   DIMM(dual in-line memory module,双列直插式存模块)的两面都有可独立传输信号的引脚,并且可单条使用。DIMM又可以分为如下4类。   (1)SDRAM-DIMM也称标准DIMM,每面84线,双面共168线,故常称为168线内存条。工作时钟为60MHz、67MHz、75MHz、83MHz。常见的容量有8MB、16MB、32MB等。主要用于SDRAM芯片,也称为SDRAM内存条。这种内存条有两个引脚槽口。SDRAM-DIMM的新产品:200线的双面内存条,其工作时钟为77MHz、83MHz、100MHz,数据宽度为72b或80b,分缓冲型和非缓冲型两种,主要用于工作站和大型计算机。   (2)DDR-DIMM。尽管起名DDR-DIMM,但对于每代DDR,其插槽还是不同。例如,DDR内存条针脚数量为184针(每面92针)、DDR2内存条为240针、DDR3内存条有240针,而DDR4内存条则是288针,如图3.16所示,它们在结构上也有所区别。   (3)?SO-DIMM(small outline dual in-line memory module,小型双列直插式内存模块)是尺寸非常小的存储模块,同样SO-DIMM也根据SDRAM和DDR内存规格不同而不同:SDRAM的SO-DIMM只有144针,而DDR的SO-DIMM拥有200针,DDR3的SO-DIMM拥有204针;DDR4的SO-DIMM拥有260针。   (4)有MicroDIMM和Mini Registered DIMM两种接口。MicroDIMM接口的DDR为172针,DDR2为214针;Mini Registered DIMM接口为244针,主要用于DDR2内存条。   3)RIMM   RIMM(rambus lnline memory module)是Rambus公司生产的RDRAM内存所采用的接口类型。RIMM内存与DIMM的外形尺寸差不多,引脚同样也是双面的。RIMM有184针的引脚,在引脚的中间部分有两个靠得很近的卡口。RIMM非ECC版有16位宽,ECC版则都是18位宽。   注意:内存条插槽也有与内存条对应的型号。   4.??PCB、电阻和电容   内存条的PCB采用的是4层或6层的电路板。采用多层电路板的目的:一是紧凑,减少电磁辐射;二是分层,屏蔽电路的电磁辐射。   内存条上的电阻有10Ω和22Ω两种,使用10Ω的电阻的内存条信号很强,对主板的兼容性较好,但其阻抗低,经常因信号过强导致系统死机。使用22Ω电阻的内存条,优缺点与前者正好相反。内存条厂家往往从成本考虑使用10Ω电阻。电容用于滤除高频干扰。 3.2.2 基本的存储体扩展方式   从逻辑结构上看,一个主存储体可以看成由一些芯片扩展成的存储体阵列。所采用的芯片的集成方式以及计算机要求的字长不同,扩展方式也不同。本节从逻辑角度介绍几种基本的存储体扩展方式。   1. 字扩展方式   字扩展方式是位数(字长)不变,字数扩展。图3.17为用4片16K×8b的芯片扩展为64K×8b的存储器。每个芯片内部都有自己的地址译码电路和数据缓冲电路。    图3.17 用4片16K×8b的芯片扩展为64K×8b的存储器   说明:   (1)CPU地址总线的A14、A15连接到片选译码器,A14、A15为不同值时,在片选译码器的4条输出中,只有一条被选中(输出低电位)。由于它们分别连接各芯片的(片选端),因而只有一片被驱动(选中)。上的短线表示低电平驱动。   (2)各片的14条地址线都连接到CPU总线的A0~A13端。当CPU的地址总线输出一个16位的地址码时,A14、A15选中某片,而A0~A13选中该片中的某字。14条地址线的寻址范围为16K。   (3)为读写控制。该端为高电平(= 1)时,被选中的字将被读出;该端为低电平(= 0)时,被选中的字将被写入。   (4)每个芯片的8位数据引脚并联在8条CPU数据总线上。   2. 位扩展方式   位扩展方式是字数不变,位数(字长)扩展。图3.18为用8片8K×1b的芯片扩展成 8K×8b的存储器。 图3.18 用8片8K×1b的芯片扩展成8K×8b的存储器   注意:   (1)由于每个字的各位分布在所有芯片中,不同各片的片选端都并联在一起,连接到CPU的相应控制线上。当进行存储器读写时,该端应为低电平。同时,CPU的16条地址线并联到各片的16条地址线上,以便同时选中各片中属于同一字的各位。   (2)CPU中的每条数据线只与一个片中唯一的一条数据线相连。   3. 段扩展方式   段扩展方式是字向和位向都扩展。例如,由4片1M×4b的芯片扩展成2M×8b的存储器。 3.2.3 P-Bank和L-Bank   P-Bank和L-Bank是从物理和逻辑两方面进行内存芯片设计和组织的两个术语。   1.??P-Bank   通常,内存芯片与CPU交换数据时,为了保证CPU能正常工作,必须每发出一次片选信号,选中与CPU数据总线(以SDRAM系统为例,就是CPU到DIMM槽)的接口位宽相同的存储颗粒以便并行工作交换数据。这样的一个存储颗粒组就称为一个P-Bank(physical bank,也称Rank,因为Intel定义P-Bank为行)。这样的位宽称为物理层位宽。例如,一个CPU的数据总线位宽为64b,就需要64个颗粒组成一个P-Bank。从理论上说,为这样的CPU提供位宽为64b的存储芯片最为方便。但这对芯片制造有非常高的要求,会使芯片的成本效用都处于劣势。所以芯片会从自己的成本效用角度来确定自己的位宽。这样,一个P-Bank就需要由几个小位宽的存储芯片组合。例如,CPU 与内存之间的接口位宽是64b,而芯片每个传输周期能提供的数据量是8b,就需要 8个内存颗粒并联。   内存条的带宽为其上各个内存芯片的带宽之和,基本条件是带宽之和等于64b或其倍数。假如出现了各个内存芯片位宽之和等于128b,则分成两个64b,当读取一个64b部分时,另一个64b部分就不能读取。   2.??L-Bank   从逻辑上看,一个内存就是如图3.19(a)所示的一个由许多内存小方块(cell)组成的矩阵。显然,只要指定一个行(row),再指定一个列(column),就可以准确地定位到某个cell。这个阵列称为内存芯片的 L-Bank(logical bank,逻辑Bank,简称Bank)。这里,cell是根据由数据线条数决定的一次能同时读写的位数。   但是,由于技术、成本等原因,不可能只做一个全容量的L-Bank。最重要的是,由于SDRAM的工作原理限制,单一的L-Bank将会造成非常严重的寻址冲突,大幅降低内存效率。所以,人们在SDRAM内部分割成多个L-Bank,最多是4个;而DDR-2提高到了8个,RDRAM则最多达到了32个。   由于主板芯片组本身设计时只允许一个时钟周期内对单个L-Bank进行操作,而不是主板芯片组对内存芯片内所有L-Bank同时操作。因此,如图3.19(b)所示,在进行寻址时就要先确定是哪个L-Bank,然后再在这个选定的L-Bank选择相应的行与列进行寻址。这 样,单个L-Bank就决定了一次存储器寻址可以操作的位的数量。所以,有人将单个L-Bank内的cell数量称为数据深度。    图3.19 L-Bank存储颗粒阵列示意图   3. 内存芯片容量的计算   内存芯片的容量可以用L-Bank计算,也可以用位宽计算。   (1)用L-Bank计算。存储单元数量=一个 L-Bank 存储单元数量×L-Bank 的数量。其中,一个L-Bank存储单元数量=行数×列数。   (2)用位宽计算。在很多内存产品介绍文档中,都会用M×W的方式来表示芯片的容 量。M是该芯片中存储单元的总数,单位是M;W代表每个存储单元的容量,即SDRAM芯片的位宽,单位是b。计算出来的芯片容量也是以Mb为单位,但用户可以采用除以8的方法换算为兆字节(MB)。 3.2.4 并行存储器   随着计算机所处理信息量的增加,不断对存储器的速度及容量提出更高的要求;而随着CPU功能的增强和I/O设备数量的增加,主存储器的存取速度越来越成为计算机系统中的一个瓶颈。为了提高访问存储器的带宽,在致力于寻找高速元件的同时,也加紧从存储体系结构方面对存储器组织结构加以改进,发展并行存储结构。   从结构上拓宽存储器带宽技术主要有双端口(或多端口)存储器、单体多字系统和多体存储系统。   1. 双端口存储器   传统的存储器只有一个读写端口,要么进行写,要么进行读,读写不能同时进行。双端口存储器的基本特点:每个芯片都有两组数据总线、地址总线和控制总线,形成两个访问端口,只要不是同时访问同一个存储单元,就允许两个端口并行地进行独立的读写,而不互相干扰。如果两个端口同时访问同一个存储单元,就由片内仲裁逻辑决定由哪个端口访问。这样,在多处理机系统中,可以让两个CPU同时访问主存储器;或者设计成一个端口面向CPU、一个端口面向I/O处理的系统。两个端口可以不受编址的限制,成倍地提高存取效率。   双端口存储器的常见应用有Cache-主存储器结构中的主存储器、运算器中的通用寄存器组等。此外,在多机系统中常采用双端口存储器甚至多端口存储器,实现多CPU之间的存储共享。   2. 单体多字系统   根据程序访问的局部性原理(详见3.7.1节),要连续使用的信息(数据,尤其是指令)大多是就近(多数是连续)存放的。以此为前提,可以用同一套地址系统按同一地址码,在一个读周期内取出多个字,如同时读出4条指令,然后把它们组织成队列,每隔1/4主存周期(Tm)依次将一条指令送入指令寄存器去执行。   典型的单体多字系统是如图3.20所示的多模块单体存储器。它是由字长为W位的n个容量相同的模块器M0,M1,…,Mn–1并行连接起来,构造字长为n×W的存储体。这样,每个存储周期中可以同时读出n个字(例如,同时读出n条指令),从而使存储器的带宽BM=W/Tm提高到n倍。当然,若要访问的不是n个连续的字,如遇到转移指令或随机分布的数据时,会大大降低实际的带宽。   3. 多体存储系统   与单体存储系统不同,多体存储系统的各存储体都有自己的一套地址寄存器和地址译码、驱动、读数、时序电路,各自能以同等方式与CPU通信,形成分别独立的编址,又能并行或交叉工作,具有N个容量相同的存储体。   1)多体存储器的访问方式   分为N个存储体的主存储器称为“模N”的存储器,这N个存储体按统一规则,分别编址。它们的工作方式有两种。   (1)N个存储体同时启动,完全地并行工作,即同时送进N个地址,同时读出N个字,在总线上分时传送。   (2)N个存储体分时启动流水式工作。通常互相错开1/m个存储周期(m为存储体的个数),交叉地工作。图3.21为有4个存储体的交叉存储器中各存储体启动的时序关系(负脉冲启动)。可以看出,采用4个存储体的交叉存储器,每隔1/4主存周期(Tm)便启动一个存储体工作。这样,在一个存储周期内,就访问了4个存储单元,将存储带宽提高到了4倍。    图3.21 4个存储体的交叉存储器中各存储体启动的时序关系   2)多体存储器编址   访问多体存储器时,需要分别指定所访问的体号和体内地址,所以每个地址码由体号 + 体内地址(字地址)两部分组成,并需要分别进行地址译码。按照存储地址在各存储体内的分布关系,多体存储器的编址分为顺序(高位交叉)编址和交叉(低位交叉)编址两种。   如图3.22所示,顺序编址用高位地址表示体号,低位地址表示体内地址,所以每个存储体内的地址都是连续的。这样有利于存储器的扩充,可以任意增加一个或多个存储体(低位交叉方式只允许按2的倍数增加),并且当一个存储体出现故障时,不影响其他存储体的 图3.22 顺序编址的4个存储体的存储器的基本结构 工作,可靠性较高。但是,由于一个存储体在一个访存周期内只能读写一个字单元,而根据程序的局部性原理,多数程序代码是连续存放的,并且所访问的数据也是局部连续的。读写时,先选中一个存储体,再选其体内地址进行读写。这种编址方式一般不能实现多个存储体的并行工作,也不能实现多个存储体的分时启动(除非存储器采用的工作频率为CPU工作频率的m倍,m为存储体的个数),只有在直接存储器访问(DMA)及通道控制方式等情形下才有可能实现并行或并发工作。   如图3.23所示,交叉编址用低位地址表示体号,用高位地址表示体内地址,所以存储地址是横向连续的,即连续地址分布在相邻的块内。读写时,先选中4个相同的体内地址,然后依次给出体号来选中具体单元,进行读写。这样,非常容易实现各存储体的分时流水以及并行工作,大大提高了存储体的带宽。这是目前多体存储器的主流。    图3.23 交叉编址的4个存储体的存储器的基本结构   由于指令、数据、向量等的存储和执行基本上是顺序的,所以采用交叉编址时,同一主存周期中取出的是要连续执行的指令或数据,因而有利于减少存储冲突。但是可靠性较低,一个存储体故障将会导致所有程序无法执行。采用顺序编址方式时,一个存储体内的地址是连续的,但多个存储体仅扩大了存储容量,对提高吞吐量并没有作用。 3.2.5 并行处理机的主存储器   并行处理机一般是指一台计算机中有一个指令部件(取指令)和多个执行部件。在这种计算机中,处理机与存储器间通过互连网络(interconnection network,ICN)交换信息。如图3.24所示,其存储结构大体可以分为两大类:共享存储器结构和分布存储器结构。   1. 共享存储器结构   在具有共享存储器的并行处理机中,只有一个统一的内存,经ICN为全部处理元素(processing element,PE)共享。I/O设备、外存都可以通过I/O通道与共享存储器交换信息。   2. 分布存储器结构   在具有分布存储器的并行处理机中,存储系统由两部分组成:一部分集中在专做管理的监控机(supervisory control,SC)中,为常驻操作系统使用;另一部分称为处理元素存储器或局部存储器(processing element memory,PEM),分布在各处理单元中,用于存放程 图3.24 并行处理机系统中处理机与存储器的互连网络 序和数据。高速磁盘是存储的后援,通过I/O接口与SC及PEM交换信息。为了有效地进行高速处理,要使每个PE都可以依靠自己的PEM中的数据进行运算,为此要合理分配各处理单元中的数据。各处理单元之间可以通过两条途径相互联系:一条通过ICN;另一条通过控制部件(control unit,CU),即数据从PEM读至CU,然后通过公共数据总线“播送”到全部PE中。 3.2.6 存储器控制器   DRAM的刷新需要有硬件电路的支持,包括刷新计数器、刷新/访存裁决、刷新控制逻辑等。这些控制线路形成DRAM控制器,它将CPU的信号变换成适合DRAM芯片的信号。   (1)地址多路开关:刷新时不需要提供刷新地址,由多路开关进行选择。   (2)定时发生器:提供行地址选通信号RAS、列地址选通信号CAS和写信号WE。   (3)刷新定时器:定时电路用来提供刷新请求。   (4)刷新地址计数器:只用RAS信号的刷新操作,需要提供刷新地址计数器。   (5)仲裁电路:对同时产生的来自CPU的访问存储器的请求和来自刷新定时器的刷新请求的优先权进行裁定。   有些芯片将刷新控制电路集成在芯片内部,具有自动刷新功能;有些芯片需要外加刷新控制电路。 3.3 SDRAM内部操作与性能参数   SDRAM在集成度和成本两方面的优势,使其得到广泛应用和快速发展,并在发展中形成了一些极有特色的技术。这些技术特色主要表现在SDRAM的内部操作上。 3.3.1 SDRAM的主要引脚   为了说明SDRAM工作时其内部对技术性能有重要影响的内部操作,需要了解内部的重要信号,这些信号主要由引脚提供。表3.2为关于这些信号的说明。 表3.2 SDRAM的重要引脚 引 脚 名 称 描 述 CLK 时钟 芯片时钟输入 CKE 时钟使能 片内时钟信号控制 片选 禁止或使能CLK、CKE和DQM外的所有输入信号 BA0,BA1 组地址选择 用于片内4个组的选择 A12~A0 地址总线 行地址:A12~A0,列地址:A8~A0,自动预充电标志:A10 行地址锁存 列地址锁存 写使能 行、列地址锁存和写使能信号引脚 LDQM,UDQM 数据I/O 屏蔽 在读模式下控制输出缓冲;在写模式下屏蔽输入数据 DQ15~DQ0 数据总线 数据输入输出引脚 VDD/VSS 电源/地 内部电路及输入缓冲电源/地 VDDQ/VSSQ 电源/地 输出缓冲电源/地 NC 未连接 未连接    3.3.2 SDRAM的读写时序   SDRAM的读写操作是从对一个L-Bank中的阵列发出激活(active)命令开始的,其过程如图3.25所示:先是行有效操作,再是列读写。两者之间的时间间隔称为tRCD(RAS to CAS Delay,RAS信号到CAS信号之间的延迟)。最后才是读写操作。   1. 行有效   1)行有效及其过程   行有效就是确定要读写的行,使之处于激活——有效状态。一般行有效之前要进行片选和L-Bank定址,但它们与行有效可以同时进行。行有效的时序如图?3.26?所示。操作过程如下。 图3.25 RAS信号到CAS信号之间的延迟 图3.26 行有效的时序   (1)行地址通过地址总线传输到地址引脚。   (2)引脚被激活,行地址被放入行地址选通电路(row address latch)。   (3)?行地址解码器(row address decoder)选择正确的行然后送到传感放大器(S-AMP)。   (4)?此时引脚未被激活,所以DRAM知道它们不是进行写操作。   2)行有效过程中的时间参数   在行有效过程中,主要涉及3个时间关系:tRAS、tRC和tRP。它们之间的时序关系如 图3.27所示。 图3.27 行有效过程中的3个时间关系   (1)tRAS:行地址选通(row address strobe,RAS)信号的有效时间。   (2)tRC:行周期(row cycle)时间。在一个L-Bank中,两个相邻的active命令之间的时间间隔。而在同一Rank不同L-Bank中,执行两个连续active命令之间的最短的时间间隔被定义为行地址间延迟(RAS?to?RAS?Delay)tRRD。   (3)tRP:行地址选通预充电(RAS precharge)时间。如前所述,它用来设定在另一行能被激活之前RAS需要的充电时间(详见3.3.6节)。   2. 列读写   行地址确定之后,就要对列地址进行寻址。在SDRAM中,行地址与列地址线在A0~A11中一起发出。列地址选通(column address strobe,CAS)信号则可以区分行与列寻址的不同。   在发出列寻址信号的同时发出读写命令,并用信号的状态区分是读还是写:低电平(有效)时是写命令,高电平(无效)时是读命令。图3.28为列读写的时序。   在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD。广义的tRCD以时钟周期为单位,如tRCD=2,代表延迟周期为两个时钟周期。   在选定列地址后,就确定了具体的存储单元,剩下的事情就是将数据通过I/O通道输出到内存总线上了。但是并非CAS信号一发出就会有数据输出,往往要等几个时钟周期才可以进行读取动作。这段时间被定义为列地址选通潜伏期(CAS?latency,CL)。由于CL只在读取时出现,所以CL又被称为读取潜伏期(read?latency,RL)。   需要注意,潜伏(latency)与延迟(delay)是两个不同的概念。延迟指一个信息或一个事件被推迟的时间量,而潜伏指已经发生但还没有到达一定水平。因此说,CL造成了一些输出延迟,但CL并不是列地址选通延迟(CAS Delay,CD)。   一般来说,CL值越小越好。不过还要看内存颗粒的原始设定值,不能让CL值超过芯片的设计规范(电子工程设计发展联合协会(Joint Electron Device Engineering Council,JEDEC)定义的《JESD79》),否则会导致内存不稳定,甚至开不了机。此外,还要注意CL值不能在数据读取前临时修改,只能在初始化过程中的模式寄存器设置(mode register set,MRS)阶段设置,可用的选项为1、2、4、8、全页(full page),通常选4或8。   3.??SDRAM读周期中的时序细节   图3.29为SDRAM读周期中的时序细节。    图3.29 SDRAM读周期中的时序细节   图中,tOH为数据逻辑电平保持周期。时钟触发后的访问时间tAC则由如下原因引起:S-AMP的放大驱动要有一个准备时间才能保证信号的发送强度(事前还要进行电压比较以进行逻辑电平的判断)。简单地说,从数据I/O总线上有数据输出之前的一个时钟上升沿开始,数据就已传向S-AMP,经过一定的驱动时间最终传向数据I/O总线进行输出,这段时间被定义为tAC。tAC的单位是纳秒(ns),必须小于一个时钟周期。   需要注意的是,每个数据在读取时都有tAC,包括在连续读取中,只是在进行第一个数据传输的同时就开始了第二个数据的tAC。 3.3.3 突发传输??   突发传输(burst trans mission)是指在短时间内进行相对高带宽的数据传输。为此在对一组连续内存单元进行顺序读写时,要采取的与早期的?FPE/EDO不同的技术策略。就此将?FPE/EDO所采取的技术称为非突发传输技术。   非突发传输技术的基本思想:当要对一组连续内存单元顺序读写操作时,考虑到行地址相同,一开始只送一次行地址,以后每访问一个单元,就只送一个列地址和读写命令。这样就可以把送行地址的时间节省下来。以读操作为例,CAS发出之后,经过一个CL就会在数据总线上有数据流出。由于这几个单元的操作类似,CL相同,所以在数据总线上的数据是连续的。图3.30(a)为CL = 2(个时钟周期)时的非突发传输时序图。这种非突发传输技术,节省了发送行地址的时间,但是它在数据进行连续传输时无法输入新的命令,效率很低(内存就是以这种方式进行连续的数据传输)。为此,人们开发了突发传输技术。   如图3.30(b)所示,采用突发传输技术,只要指定起始列地址与突发长度(burst?length,BL,即连续传输所涉及存储单元的数量),内存就会依次地自动对后面相应数量的存储单元