配置和初始化存储器及存储通道的方法与设备的制作方法

文档序号:6419334阅读:233来源:国知局
专利名称:配置和初始化存储器及存储通道的方法与设备的制作方法
技术领域
本发明涉及数据处理系统领域。更精确地说,本发明涉及初始化或配置一个存储通道中存储器设备。
背景技术
存储器和存储子系统一般都具有某些正常操作前须进行编程设定的初始化步骤和/或寄存器值。推荐的初始化步骤和寄存器值在存储器标准中通常都做出详细的介绍,供系统设计人员在设计与存储器连接的其它系统硬件时参考。但是,如果对初始化例程进一步优化,那么初始化可能会更快地结束,有利于促使其它的系统处理过程更快地开始。
正常操作前需要大量初始化处理的一个通道(即,一条总线配置)是一个直接Rambus动态随机存取存储通道(a DirectRDRAMTMChannel)。加州Mountain View的Rambus公司有技术资料对这种通道给出了详细说明。RDRAM存储器以及与Rambus通道连接的存储控制器都具有许多必须通过初始化过程进行设置的寄存器。
根据Rambus的资料,在使用Rambus通道之前,显然必须完成许多初始化操作。通常,存储控制器读取所有RDRAM之中只读寄存器的内容,处理这些信息,继而写入所有的读-写寄存器使RDRAM置于正确的操作模式。寄存器DeviceID和TRDLY是重要的读-写寄存器,分别设置存储处理程序及读取存储器数据延时数值所用到的设备地址。
通过对整个串行链循环,分配连续的串行标识号码,可给通道中每一个RDRAM设置一个独特的串行设备识别值(如见DirectRDRAMTH64/72兆位数据表第28页)。第二个ID值仅指一个设备的ID,在正常运行期间允许访问Rambus通道中的各个存储器。对于通道中各个运行的设备,也需要各设置一个独特的设备ID值;但是文献资料中未谈及设置设备ID的任何特殊技术。
此外,各RDRAM可以执行刷新、预充电、电流标定、电流采样、以及多种其它的操作(如见Direct RDRAMTH64/72兆位数据表第8-9页)。虽然在Direct RDRAMTH64/72兆位数据表中对这些命令都作了一般的讨论,但是并未给出一个完整的初始化序列。此外也可能没有初始化和/或配置各种特殊的存储控制器的详细说明。这样,先前的技术可能未提供一种适当的或完善的方法和设备来配置一个存储通道中的一组存储器。
发明概述本发明公开了一种配置和/或初始化存储器的方法和设备。被公开的方法可以初始化一个存储控制器和初始化多个存储控制器的配置寄存器。对连接于存储控制器的各个存储器设定串行识别号码。此外,至少部分基于存储器的大小将设备识别号码组分配给相应的存储器,从而使能存储器。


本发明通过举例进行图解说明,但并不局限于附图所给出的这些例子。
图1举例说明一种系统实施方案,该系统在存储控制器中使用配置寄存器的方法为存储器初始化指定初始化操作。
图2表明在图1这一系统实施方案中编程和执行初始化操作的一个流程图。
图3举例说明存储控制网络集线器的一种实施方案,它能根据装入控制寄存器和数据寄存器的值实现存储器的初始化。
图4说明一个存储器核心初始化操作的流程图。
图5举例说明执行图6-9所示的初始化流程的一种系统实施方案。
图6说明对图5所示系统的存储器子系统进行初始化处理时,整个初始化序列实施方案的流程图。
图7举例说明串行设备识别过程的一种实施方案。
图8A说明分组设备识别过程第一部分的一种实施方案。
图8B说明分组设备分配过程(例如,图8A中块820)的一种实施方案。
图8C说明图8A中分组设备识别过程第二部分的一种实施方案。
图9举例说明存储器核心初始化过程的一种实施方案。
图10举例说明由随机存储器挂起的能源管理状态进行恢复过程的一种实施方案。
发明详述以下的叙述为初始化存储器和存储通道提供一种方法和设备。为使读者更加彻底地了解本发明,以下说明中进而规定了许多细节的东西,诸如寄存器名称、存储器类型、总线协议、特殊类型部件、以及逻辑分区和集成的选择,等等。但是,对于本领域的技术人员来说,可以实施本发明而不需要这些细节的规定。在其它实例中,控制结构和门级电路没有详细地给出,以避免冲淡本发明的内容。利用这里包含的说明,对于本领域的技术人员,无须过多的解释将可以实施必要的逻辑电路。
使用现在公开的技术,我们可以实现有效而变通的存储器初始化操作。控制寄存器和数据寄存器可以进行编程处理,从而使得存储控制网络集线器(MCH)可根据装入寄存器中的值来实现初始化操作(IOP)。由于寄存器可以用诸如基本输入/输出系统(BIOS)这样的软件进行编程,所以初始化操作会变得比较容易。
图1举例说明使用寄存器实现存储器初始化的一种系统实施方案。该系统包括一个处理器195和一个与存储控制网络集线器(MCH)100连接的存储子系统104。与MCH 100连接的还有一个二级总线180,它又与一个输入装置190和一个包含BIOS例程的非易失性存储器185相连接。在一些实施方案中,非易失性存储器185和输入装置190其中之一或者双方是通过一个二级控制网络集线器(图中未画出)与MCH100相连接的。
在图示的实施方案中,存储子系统104包括三个存储模块160、170和175,它们是通过串行总线142和存储总线132(亦称作通道)与MCH100相连接。每一个存储模块可以包含一组单独的存储器件。例如,存储模块160至少包括存储器件160、161和168。在一种实施方案中,存储器160、161和168是Rambus的DRAM(RDRAM),存储模块为Rambus内嵌式存储模块(RIMM),而通道是按照对RIMM和RDRAM所规定的协议进行工作的。
存储控制网络集线器MCH 100包括一个控制寄存器112和一个可能用于初始化目的的数据寄存器114。一个初始化控制线路120执行初始化操作数(IOP),它被编程到控制寄存器112之中。控制寄存器112一般包含别的字段来确定初始化操作的信息,而由IOP确定的某些操作涉及与存贮子系统中设备的数据交换(例如,存储控制寄存器的读写,或相反的情况,产生控制信号)。
串行接口线路140在串行总线142上产生串行命令和数据序列。有些由初始化控制线路120执行的命令通过串行总线142对存储子系统发送命令和/或数据。控制寄存器,包括标识号码的设备寄存器,可能通过串行接口线路140进行读写操作。
存储器接口线路130将存储器数据从与存储子系统进行数据交换的数据包中移进、移出。一种实施方案中,存储接口线路是一个RambusASIC单元(RAC),基本作用正如加州Mountain View的Rambus公司所提供的“直接RAC数据表”文献所述。简言之,RAC将通道(总线132)上的Rambus信号电平(RSL)信号转换为MCH 100其它部分可以处理的信号。与此类似,RAC将存储控制器信号转换为Rambus通道中存储器可以处理的RSL信号。
图1所示系统的初始化事件序列表示在图2中。当系统启动或从新启动时,BIOS一般都执行多种初始化操作。在块200中,BIOS到达存储器配置部分。按照存储器的类型和预定使用的模式,初始化操作(块205)将由构成一个特殊序列的BIOS进行选择。图5-9更加详细地讨论了用RDRAM的系统初始化序列的一种实施方案,。
如块210所示,特殊的初始化操作数据(若有的话)存于数据寄存器114,而初始化操作数本身和其它的控制信息则存于控制寄存器112。在某些实施方案中,BIOS可以完成这一功能,它是通过向外设部件互连(PCI)配置寄存器执行写操作来实现的。可选择的是,可能用到其它的寄存器,或者说控制寄存器可能是具有或不具有MCH的通用存储器单元。实际上,控制寄存器可以是存储器初始化之前可读写MCH的存储足够多位的IOP和其他必要的控制信息的任何存储单元。
当把适当的初始操作和/或控制信息编程到控制寄存器112中时,初始化操作可以自动开始。例如执行块215所示的初始化操作是这样完成的,当初始化操作数装入控制寄存器112时,设置一个启动初始化操作(IIO)位。该IIO位可以是控制寄存器112的一个字段,所以同样的寄存器写入工作可能是设定IIO位也可能提供IOP。
完成初始化操作可以任何方式发出足以警告或通知BIOS的信号。例如,当初始化操作完成时,MCH可以自动地清除IIO位。如果BIOS查询IIO位,便可以确定何时初始化操作完成,如块220所示。如果初始化操作尚未完成,BIOS可能继续查询IIO位。如果初始化操作已经完成,BIOS在块205所示的初始化序列中选择下一个初始化操作。
输入设备190可以从计算机存储设备192(如光碟或磁盘或其他存储设备)或从一个网络或通信接口194接受程序指令。使系统实现本专利发明技术的BIOS代码(即计算机指令)可有几种办法将其程序化到非易失性存储器185中。BIOS可以在制造系统时编程,或者后来经输入设备190由一个计算机可读媒体交付。
在BIOS是后来提供的情况下,指令可能是经由一种计算机可读媒体交付的。通过一个适当的接口设备190,电子信号或有形的载波信号都可以是计算机可读媒体。例如,在一种实施方案中计算机存储设备192是一种计算机可读媒体。在另一种实施方案中携带计算机指令的载波196也是一种计算机可读媒体。运用已知的或已有的通信技术,载波196可被调制或处理以便包含输入设备190可解码的指令。不论哪种情况,计算机指令都可以通过一种计算机可读媒体交付。
图3表示一个存储控制网络集线器(MCH)300更加详细的描述。它详细地介绍了下面一种实施方案的特殊寄存器的名字、存储单元、容量、字段定义、以及初始化操作。对本领域的技术人员来说其它的实施方案是很显然的。下面几条命令要援引Rambus在64/72兆位数据表和Direct RAC数据表中所定义的命令。定义的这些操作是当适当的控制信号送到RAC时,Rambus RAC本身要送给RDRAMs的操作。正如下面将要详细介绍的,MCH 300的这种实施方案通过使用以前没有的硬件,并以新的方法或序列,来调用已知的RAC命令。
在该示范实施方案中,这一MCH 300包括一个RAC和一个串行接口340。该串行接口340使用时钟(SCK)、串行框架(CMD)、和双向串行I/O引线(SIO0和SIO1)来读、写RDRAM配置寄存器内容,并实施其它的IOP。该MCH还包括一个设备注册数据(DRD)寄存器314。在PCI配置空间该DRD寄存器314的地址偏移为90-91h,默认值为0000h(16位),而寄存器是一个读/写寄存器。DRD寄存器的字段示于表1。
表1一种DRD寄存器实施方案

MCH 300还包括一个RDRAM初始化控制管理(RICM)寄存器312。在PCI配置空间该RICM寄存器的地址偏移为90-91h,默认值为000000h(24位),它是一个读/写寄存器。该实施方案中RICM寄存器的字段设置示于表2。
表2RICM寄存器的一种实施方案


图3还说明了一种初始化控制电路320,它包括一个RDRAM IOP执行电路325。由控制电路320执行的各种IOP的详细说明示于表3。表3所列的广播地址(BA)字段(位19)和SDA字段(位8∶4)为如下内容之一NE该字段对初始化操作无影响
0对这一初始化操作,该字段置01对这一初始化操作,该字段置1X该字段应进行编程,适应特殊的初始化操作。
表3IOP操作详细说明




图4所表示的是,初始化控制线路320的一种实施方案在响应所接收到的RDRAM核心初始化IOP(10000b)所执行操作的详细描述。块400中,总线上发出一项广播断电退出的命令。其次,如块405所示,由块410到470所表示的序列对存储地址0到31重复16次。对一个具有一百二十八种电流标定水平和高达三十二个簇的存储子系统来说,这些数目可能是合适的。在其它的实施方案中,例如如果有一个较大的或较小的电流标定水平数的话,就可能用到一个不同的重多个目。同样,不同的系统中可能有不同数目的簇。
块410中,执行无操作命令以确保完成断电退出并在块415中正确地实现了刷新操作(REFA命令)。块420中,又一次执行无操作命令,接着在块425和430中又执行了两次刷新操作(REFA命令)。在块435中,又执行了三次无操作命令,以便在刷新预充电(REFP)命令前留出足够长的时间。块445又执行一条无操作命令后,块450中执行又一条刷新预充电(REFP)命令。
接着在块455中执行一条标定(CAL)命令。该命令为当前指定的设备标定(驱动)ICL电流。正如块465和455中所表明的那样,该项操作可能重复两次。然后,如块470所示,执行一条简单(SAMR)命令。该项简单命令更新目前所指设备的IOL电流。该过程重复进行,直到对三十二簇都完成了这所有的十六次循环步骤。
初始化序列按照上述的初始化操作,一个系统可以得到初始化处理。例如图5所示的系统,它给出一个Rambus直接RDRAM通道,该系统可以被初始化。该系统中,一个存储控制器500(也称之为存储控制网络集线器,或一个MCH)编写(orchestrate)初始化活动。该存储控制器还初始化通道中特殊的行/列信息包。串行接口540可用来与通道中的各种设备进行通讯。例如,时钟(SCK)、串行帧(CMD)、以及双向串行I/O(SIO0和SIO1)引线可以用来读、写各个RDRAM配置寄存器,还能实现其它的IOP。
该存储控制器包括一个Rambus ASIC单元(RAC)530,一块控制线路板520,和多种寄存器。这些寄存器包括用来初始化系统存储器的初始化寄存器515,和断电恢复寄存器510。断电恢复寄存器包含对运行存储通道至关紧要的计时和其他别的信息。换言之,断电恢复寄存器仅仅是这样的寄存器在存储控制器500断电后他们必须得以恢复,以便能够恢复访问存储通道。这些寄存器可以是PCI配置寄存器。
存储通道包括RIMM模块560、565、和570,它们通过一个控制和数据总线532以及一个串行总线542连接到MCH 500。控制和数据总线532可接一个阻抗终端533,而在来自MCH 500的通道远端可接一个直接Rambus时钟信号发生器(DRCG)580以便通过信号线582提供时钟信号。
此外,该系统包括一个输入/输出控制网络集线器(ICH)505,它把MCH对接到一个次级的总线506上,该系统还可能包括一个次级串行接口线路544,用以实现与一个次级串行总线546连接。每一个模块都有一个串行的存在探测(SPD)存储器572(一种非易失性存储器,诸如某种电子可擦除可编程的只读存储器),可通过串行接口544根据串行存在探测协议读取。该SPD存储器572可以提供每种特殊的存储模块的诸如计时信息、设备结构、和设备工艺等方面的信息。有关SPD协议较详细的讨论可参见“串行存在探测应用简介”一文,以及Rambus公司的直接RambusTMRIMMTM模块和64/72兆位直接RDRAMTM数据表。
在一种实施方案中,串行总线546是一个像系统管理总线(SMBus)的I2C总线。这种实施方案包括时钟(SMBCLK)和数据(SMBDATA)信号,它们遵循工业规范的系统管理总线(SMBus)协议,参见http//www.sbs-forum.org登载的智能电池制造商论坛中,系统管理总线说明书,第1.0版。
ICH设备具有通用输出(GPOs),用于控制多种系统功能,诸如设置DRCG 580的频率等。一个包含BIOS的非易失性存储器585可以连接到次级总线506上,一个电池后备随机存取存储器590也可如法炮制。该电池后备存储器590可以对MCH断电寄存器510保存断电恢复设置值592,从而无须执行后面详细介绍的全部初始化序列,MCH便可以恢复访问RDRAM通道。
简言之,初始化过程可以总结如下。启动复位后,由一个通道中RIMMs上串行存在探测(SPD)数据中读取配置信息。例如,一个存储设备SPD存储器572,将RDRAMs 573、574、576、和577的配置信息存储在RIMM 570。存储控制器的配置寄存器根据SPD信息中适当的值进行编程,然后RDRAM设备ID值的编程要使得每一个RDRAM设备可以被唯一认证并接受存储控制器访问。一旦某设备被初始化,它便可以使用了。
每一个RDRAM设备都有两个识别号码,用来在通道中唯一地选择一种设备,它们便是串行设备ID号和分组设备ID号。这两个ID用于RDRAM通道中截然不同的操作。当存储控制器根据RDRAM通道的SCK、SIO、和CMD信号发送初始化操作时,串行设备ID用来选择设备;而分组设备ID是当存储控制器根据RDRAM通道中RQ[7∶0]的信号发送ROW包和COLUMN包时,用来选择设备时使用的。每一设备复位以后而在能被初始化操作(IOP)和ROW/COLLUMN程序包寻址之前,串行设备ID和分组设备ID都要分别进行编程。
更加仔细地考察Rambus通道初始化过程,我们发现完成通道上RDRAM设备的正确操作可遵循一个特殊的序列。图6表示一种实施方案中某特定通道初始化的流程图,而表4列举了该初始化流程中所用到的一些变量。
表4初始化所用到的变量


块602发生系统复位,MCH复位其所有的状态并准备初始化。块604中,校验了系统存储器模块的配置。BIOS读取SPD数据以确定存贮器的设置。若仅有RIMMs,RDRAM的初始化序列可能继续进行块608。如存在固定存储器模块,系统便会给用户发布一条错误信息并停机,如块606所示。
时钟发生器在块608中开始。本项操作可以由软件完成,查询主板上存在的每一个RIMM模块上的SPD数据并确定一个所有RIMMs都可工作的通道频率。DRCG 580可根据ICH 505的一个通用输出设备(即如图5所示的GPOs)设定于合适的频率。一种实施方案中,在这一步和MCH RAC初始化之间,BIOS至少等待8毫秒。
如块610所示,下一个初始化的是MCH RAC。在MCH RAC初始化之前,源于DRCG的时钟应该是稳定的。MCH RAC的初始化是由执行MCHRAC初始化IOP实现的。该RAC初始化IOP施行基本的初始化,使存储控制器的内部RAC准备执行正常的操作。
一种实施方案中,BIOS在MCH RAC初始化IOP后给出5毫秒的时间来清除IIO位。若5毫秒后IIO位未被MCH清除,BIOS应报告该项错误,而通道是不稳定的。由于完成了MCH RAC初始化IOP在MCH清除了IIO位后可以再加5毫秒的延时。此举使MCH时钟有足够的时间达到稳定、同步。在某些实施方案中,RAC中一条总线可能在其它操作开始之前需要清除。该项操作可通过执行MCH RAC控制寄存器的装入IOP(DRD=00000h)来实现。在某些实施方案的初始化序列中,还有可能在较晚的某点执行RAC初始化操作。
如块612所示,许多MCH配置寄存器可能是在下一步被初始化的。一种实施方案中,分页策略寄存器RMC的空闲时间记录器(PGPOL RIT)字段(MCH 052h[2∶0])被设置为001b以保证通道初始化期间没有任何页面是关闭的(讨论见下)。该PGPOL RIT字段设置所有打开页面被关闭前存储控制器保持空闲状态的主机总线时钟数,而设置值为零时表示存储控制器开始关闭页面前将有无限长的等待时间。
此外,在某些实施方案中,可能使用操作池,根据确定的RDRAM状态分组RDRAMs。为了减小运行功率,RDRAM设备可以分作两个操作池,称之为池A和池B。在一种实施方案中,池A同时可多达八种设备。该种实施方案中,池A的八种设备中多达四种可以同时处于活动读/写或活动状态,而池A中的设备要么处于活动读/写或活动状态,要么处于备用状态。
池A中设备的最大个数是可编程的,而且它是由RDRAM电源管理寄存器(RPMR)即寄存器(MCH 053h)的一个PAC字段确定。所有不在池A的设备便都是池B的成员。池B中所有的设备要么处于备用状态,要么处于睡眠状态。池B中设备的状态是由DRAM控制(DRAMC)寄存器(MCH 051h)的PBS字段确定的。在一种实施方案中,RPMR寄存器设置为00h,选择池A仅有一种设备,而池B的操作设置为备用状态的操作(MCH 051h[6]=0)。
其次如块614所示,可执行附加的通道初始化。这可包括使用SIO(串行接口)复位IOP来执行一个SIO复位,以及为完成SIO复位序列允许足够的延时。加之,为了正确的操作可能需要初始化的其它寄存器此时也可以进行设置。例如在某些实施方案中,一个Test77寄存器在SIO复位后可能要写为0值,如在文献直接RDRAM 64/72兆位数据表第37页所说明的那样(执行一个广播SIO寄存器写IOPTEST77,DRA=4Dh,DRD=0000h)。
串行设备ID分配如块620所示,下一步可以分配串行设备认证值(IDs)。通常,软件唯一地识别通道上的每一种设备,使得各个设备上的初始化操作对准目标。每一种RDRAM的串行设备ID都被保存在RDRAM INIT寄存器(指数21h)的4-0位。SIO复位后,通道上所有的RDRAMs串行设备ID的默认值1Fh。并且在复位后,串行转发器(SRP位(RDRAM 021h)[7])被设置为1,使每一个RDRAM能够将SIO0接收到的SIO数据传播到RDRAM的SIO1引线上,将SIO包传送给下一个RDRAM设备。由于复位后所有的设备具有相同的串行设备ID,一个体设备在分配唯一的串行ID之前可能是不能被访问的。
图7表示一种实施方案所执行的串行设备列举操作的进一步细节。块700中,变量SeriallDCount初始化为零。接着,如块705所示,屏蔽通道中所有设备的SIO转发器的功能(广播SIO寄存器写IOP。初始化,DRA=21h,DRD=001Fh)。本项操作使得所有串行设备的ID都设置为01fh。SIO转发器的位设为零,所以仅有通道上第一个设备可被访问。
从块710开始,对通道上所有的设备循环该过程,并对每一种设备分配唯一的ID。当前设备的串行ID设于SeriallDCount而SIO转发器的位设为激活状态(SIO寄存器写IOP初始化,SDCA=1Fh,DRA=21h,DRD=0080h+SeriallDCount)。其次,不管设备是否真正存在,如块715所示它在系统中的作用受到检验。读取寄存器RDRAM INIT以确定是否刚被写入的同样的值能够正确地再读出来(SIO寄存器读IOP。初始化,SDCA=SeriallDCount,DRA=21h)。
如果数据相符(如块720所检验的那样),变量SerialIDCount增大(块725),并检查变量SerialIDCount看是否最大数目的设备(例如三十二个)都已给了IDs(块730)。若该SerialIDCount仍然指出是一个有效的串行ID,下一个设备便在块705中识别出来。
若该SerialIDCount变量超过了最大允许值,或者如果块720中的数据不相符,那么最后的设备已给了一个ID,而跟踪设备总数的变量可以设置给SerialIDCount,如块735所示。最后,为了使任何其它的在最后允许的设备之外的设备失效,可使具有最高串行ID的RDRAM的SIO转发器失效,如块740所示。因此,任何附加的设备(即,功能不正常的设备或最大数,例如32,之外的设备)不会收到命令因此不会有所响应。作为一种附加的检查,可考察RIMMs上的SPD信息,以确定最后的设备数是否正确。
分组设备ID分配回到图6,分配了唯一的串行IDs并禁用了最后一个设备的SIO输出后,如块630所示根据存储设备的大小分配分组IDs。在一种实施方案中,MCH支持多达三十二个RDRAM设备和八个分组。每组具有多达四种设备并有一个分组边界读写寄存器(GBA)确定分组ID及每组上下界地址。这样,每一个GBA寄存器便可用一个分组ID和一个9位的上界地址极限值进行编程。无设备占领的分组可能具有一个与前一个分组相同的值而组的大小为零。
此外,图8A-8C中的流程图表明模块630所指出的列举分组设备IDs方法的一种实施方案。如图8A块800所示的那样,许多变量得到了初始化处理。变量SerialIDCount,GroupDeviceIDCount,RIMMCount,RIMMDeviceCount,以及RIMMDeviceConfigNo皆被初始化为零。一个DRAMConfigIndex变量被初始化为一个值,该值指出MCH所支持的最大存储芯片技术。
如块805所示,数据读自一个模块(模块号RIMMCount)的SPD存储器,识别该模块的核心技术。这一信息可能包括每一设备的行数、每一设备的列数、每一设备的存储体数、以及各个存储体之间是相互有关的还是相互独立的等。下面,如块810所示,设置RIMMDeviceConfigNo的值,将读自SPD的核心技术值转换为一个分组结构(GAR)寄存器的等价的值。
下一步如块815所示,变量RIMMDeviceCount设置为由该种RIMM的SPD存储器所指出的设备的数目。据此,可以分配各设备的ID并设置有关寄存器的值,如块820所示。图8B对一种实施方案给出了块820所示过程的进一步细节。
通常,列举过程将一个RIMM上的RDRAM设备数加到第一个串行ID上,然后倒计数直到RIMM结束。因此,如块822所示,检验RIMMDeviceConfigNo是否等于DRAMConfigIndex以确定是否对所有设备特别是对核心技术都已分配了分组设备ID。若二者不等,那么该核心技术的所有设备就都有了分组ID,所以SerialIDCount设置为SerialIDCount加RIMMDeviceCount(见如块830)并且如块832所示使过程回到图8A。另外,如果RIMMDeviceCount为零(如块824所检验到的那样)或者MemberCount为零(如块826所检验到的那样),那么就不存在更多的设备给与分组ID,过程返回到图8A如块832所示。
如果变量RIMMDeviceCount和MemberCount不为零,那么将GroupDeviceIDCount的值设置为RDRAM的分组设备ID的值,该RDRAM的串行ID等于SerialIDCount的当前值,如块828所示。接着,更新当前分组边界地址寄存器(GBA)以便反映有新设备添加到这一组中来了,如块830所示。完成这一操作,可通过将一个表示设备大小的值加到那个GBA寄存器保存的先前的值之上。
下一步,如块832所示变量GroupDeviceIDCount与四(一种实施方案中每组最多的设备数)进行比较。如果该组已满,如块834所示,更新那一个组的MCH分组结构寄存器(GAR)。更新GAR以便正确地表示该组的配置(即存储体的个数和DRAM技术(大小))。在块836中,SerialDeviceIDCount增大,MenberCount减小,GroupDeviceIDCount增大,而RIMMDeviceCount减小。然后过程返回到块824。
回到图8A,如果RIMMDeviceCount或者MemberCount二者之一为零,那么如块850所示,RIMMCount增大。如果RIMMCount小于一个RIMMCount的最大值,如块855所检验到的那样,那么过程返回到块805。如果该RIMMCount的值达到最后的RIMM的值,如块860所示,过程在图8C中继续。
转到图8C,如果MemberCount为零(如块865所检测到的那样),那么设备ID列举过程结束。但是,如果MemberCount不为零,那么下一个MCH组被选在下一个DRAM技术中开始列举设备,如块870所示。变量GroupDeviceIDCount的更新可能通过加3并且将所得到的结果值与0FFFCh实行一次逻辑加运算。
如果GroupDeviceIDCount是通道所允许的最大设备数(例如是32,如块872所检验到的那样),那么分组ID列举过程到此结束。但是,如果较少的设备给于了分组ID号,那么DRAMCoufigIndex设为MCH支持的下一个最小的核心技术如块874所示。如果DRAMCoufigIndex显示不存在得到支持的较小核心技术(例如,DRAMCoufigIndex为零如块876所检验到的那样),这样ID的列举过程就结束了。如果还有更多的核心技术,那么如块878所示serialIDCount和RIMMCount复位到零,而过程返回到图8A的块805。
下面的伪代码指出可用于实现图6块630所示的一种实施方案中分组ID列举的操作。630.MCH设备组列举过程。
630.1.对所有的RIMM SPD存储器循环,并根据RIMM将设备分组。最大工艺的设备必须分到最低的设备组,随着工艺尺度的减小分组号码增大。
630.1.1.置MemberCount=MemberMax630.1.2.置SerialIDCount=0.这是串行设备ID计数器。
630.1.3.置GroupDeviceIDCount=0.这是分组设备ID计数器。
630.1.4.置RIMMCount=0.这是RIMM计数器。
630.1.5.置RIMMDeviceCount=0.这是RIMM上某#设备的计数器。
630.1.6.DRAMConfigIndex=MCH支持的最大工艺设备。
630.1.7.计算RIMM中某#RIMMCount的核心工艺号数。
630.1.7.1.RIMMDeviceConfigNo=读自RIMMs SPD的核心工艺号数。
630.1.8.RIMMDeviceCount=RIMM#RIMMCount中RDRAM设备的编号,读自RIMM的SPDEEPROM。
630.1.9.分配分组设备ID并为RIMM编程MCH GAR和GBA寄存器。
630.1.630.1.若RIMMDeviceConfigNo!=DRAMConfigIndex,转至630.1.10.
630.1.9.2.若RIMMDeviceCount=0,转至630.1.10.
630.1.9.3.若MemberCount=0,转至630.1.10.
630.1.9.4.SIO寄存器写IOP。DEVID,SDCA=SerialIDCount,DRA=40h,DRD=GroupDeviceIDCount.
630.1.9.5.程序MCH GBA[GroupDeviceIDCount SHR2]=MCH GBA[GroupDeviceIDCount SHR 2-1]+RIMM#RIMMCount设备大小。
630.1.9.6.若GroupDeviceIDCount逻辑加011b=0则630.1.9.6.1程序MCH GBA[GroupDeviceIDCount SHR2]=RIMMDeviceConfigNo630.1.9.7.GroupDeviceDCount加1。
630.1.9.8.SerialIDCount加1630.1.9.9.MemberCount减1630.1.9.10.Go to步骤630.1.9.2.
630.1.10.RIMMCount加1630.1.11.若RIMMCount<RIMMMax goto 630.1.7.
630.1.12.如果MemberCount=0则转到步骤10630.1.13.为下一个RDRAM技术选择下一组。
630.1.13.1.GroupDeviceIDCount=
(GroupDeviceIDCount+011b)逻辑加011b630.1.14.若GroupDeviceDCount=32则转到步骤10630.1.15.DRAMConfigIndex=下一个最小的DRAM技术630.1.16.若DRAMConfigIndex=0,则转到步骤10630.1.17.SerialIDCount=0630.1.18.RIMMCount=0630.1.19.Go to步骤630.1.7.这将开始为下一个最小的RDRAM技术调查RIMM.
分组ID分配完成后返回到图6,各个RDRAM设备可能出现断电模式并为了正常运行而进入快速时钟模式,如640步所示。在MCH和RDRAMs中各个RDRAM的计时寄存器可以编程。而REFB和REFR RDRAM控制寄存器也可以进行初始化处理(广播SIO寄存器写IOP.REFB,DRA=41h,DRD=0000h;广播SIO寄存器写IOP.REFR,DRA=42h,DRD=0000h)。
可以通过执行一个广播设置复位的IOP来复位各RDRAM设备,紧跟一个适当的延迟(例如32微秒),继而执行一个清除复为IOP,也紧跟一个适当的延迟(例如4微秒),给完成复位操作留出时间。执行一个广播RDRAM断电出口IOP使各RDRAM进入断电模式,而通过执行一个广播RDRAM设置快速时钟模式的初始化IOP使其进入快速时钟模式。
此后,RDRAM核心可以像块642所示进行初始化。一种RDRAM核心初始化实施方案的进一步细节情况表示在图9之中。如块900所示,对一个适当的RDRAM寄存器写入一个中间值,RDRAM设备准备好做电流标定(广播SIO寄存器写IOP。CCA,DRA=43h,DRD=0040h;广播SIO寄存器写IOP.CCA,DRA=44h,DRD=0040h)。在一个具有一百二十七种可能的电流标定水平的实施方案中,四十个十六进位可能是一个适当的中间值。从这一中间值开始限制了所需标定循环的总数,因为可能仅有大约半数的标定值中止。
其次,执行每一个RDRAM设备的每一个存储体预充电操作。为执行预充电操作,MCH对所有存储体计数时每次加2,首先预充电奇数存储体接着预充电偶数存储体。块910中寄存体指数置0。然后执行一个广播预充电IOP如块910所示。寄存体指数值递增2如块915所示,广播预充电操作对偶数存储体重复,直到存储体指数等于最大存储体数(例如32)为止,如块920所示。
一旦达到最大存储体数目,存储体指数置为1(如块930所示),并且所有的奇数存储体都被预充电。一旦存储体指数超过最大存储体数目,RDRAM核心初始化IOP被执行六次,如块940所示。
通道分级当块642所示的RDRAM核心初始化完成以后,我们从新回到图6,通道可以进行分级,如块644所示。这一过程包括对所有的RDRAM将RDRAM读出反应时间之和与RDRAM到MCH的一个传播延迟进行均衡处理。换言之,一旦通道分了级,存储控制器里所有的RDRAM将在相同的总线周期中提供数据。
下面的伪代码表示一个系列步骤可以完成在一种实施方案中实施块644所示的分级过程。644.分级Rambus通道644.1.第一段确定MCHtDRLY字段的置。
644.1.1.SerialIDCount=MemberMax644.1.2.Mch Trdly=0644.1.3.子程序MCH RDT∶TRDLY字段=MchTrdly.
644.1.4.计算32位的地址,为分级检验RDRAM设备。
644.1.4.1.SIO寄存器读IOP.DEVID,SDCA=SerialIDCount,DRA=40h644.1.4.2.DRD(MCH 090h[15∶0])现在包含RDRAM设备的ID644.1.4.3.DeviceTestAddress=MCH GBA[(DRD SHR 2)-1]SHL23+((DRD AND 011b)*以字节表示的设备大小(根据GAR[DRD SHR 2])644.1.5.以TestPattern方式对地址DeviceTestAddress执行QWORD写操作。
644.1.6.对地址DeviceTestAddress执行QWORD读操作。
644.1.7.如果所读的数据!=TestPattern则644.1.7.1.增大MCH RDT∶TRDLY字段644.1.7.2.如果MCH RDT∶TRDLY字段<=4转至644.1.5.
644.1.8.否则(如果所读的数据!=TestPattern)644.1.8.1.MchTrdly=读自MCH RDT∶TRDLY字段的数据644.1.8.2.如果MchTrdly=4转至644.2644.1.9.减小SerialIDCount644.1.10.如果SerialIDCount>=0则转至644.1.3.
644.2.第二段确定RDRAM分级计时值
644.2.1.SenallDCount=MemberMax644.2.2.计算32bit位地址,为分级工作检验RDRAM设备644.2.2.1.SIO寄存器读IOP.DEVID,SDCA=SerialIDCount,DRA=40h644.2.2.2.DRD(MCH 090h[15∶0])现在包含RDRAM的设备ID.
644.2.2.3.DeviceTestAddress=MCH GBA[(DRD SHR 2)-1]SHL23+((DRD AND 011b)*以字节表示的设备大小(根据GAR[DRD SHR 2])644.2.3.以TestPattern方式对地址DeviceTestAddress执行QWORD写操作。
644.2.4.执行QWORD读操作,给出DeviceTestAddress的地址644.2.5.若读到的数据=TestPattern则转至644.2.8644.2.6.若RDRAM的TCDLY字段<TCDLY的最大值(根据SPD,则644.2.6.1.根据TCDLY的支持数据表,给RDRAM的TCDLY寄存器(TDAC和TRDLY)增大644.2.6.2.转移到644.2.3644.2.7.标记RDRAM设备将失效644.2.8.计数器SerialIDCount减小644.2.9.若SerialIDCount>=0则转移到644.2.2分级完成后,一种实施方案将一系列节电恢复存储器初始化的值保存在图5中电池后备存储器590中,如块646所示。值得注意,适当的值由初始化子程序确定后,这一操作可以在任何其它阶段实现。保存这些值是要将由初始化过程确定的初始化信息保持在这一点。
当系统进入一个低能态(如,暂停于RAM)时,MCH的电源可能就被断开了。这样,如果初始化的信息没有保留,那么可能不得不重复整个初始化过程。将关键的初始化信息保存在一个非遗失性存储器中,可能有利于提高从这种低能状态苏醒的速度。但由于这些值恢复之前存储子系统将不起作用,这一实事增加了保存此种信息的难度。
任何可以写入的非遗失性存储器都可以用来保存适当的初始化信息;然而,许多计算机系统中装有一种电池后备存储器,因此这可能是一种方便的选择。在一种实施方案中,下面诸寄存器的内容保存在存储器590中。□MCH分组结构(GAR)寄存器(040-047h)这些寄存器指出每组设备的配置,诸如存储体的个数和DRAM的技术(容量)等。□MCH RDRAM计时寄存器RDT(050h)这一个寄存器定义通道中所有设备的计时参数。□MCH DRAM控制(DRAMC)寄存器(051h)这一个寄存器包括池B操作选择(PBS)位,确定MCH某一操作模式的存储器传送网络集线器存在的一个位(MTHP),以及一个孔径读写全局启用位,它能在孔径范围和转换表建立之前阻止任何部分对孔径的访问。□MCH分页规则(PGPOL)寄存器(052h)这一寄存器确定分页规则的特征,包括DRAM刷新率(DRR)和一个RMC空闲时间记录器。该DRR字段调整DRAM的刷新率,而RIT字段确定所有打开页面关闭之前存储控制器将保持空闲状态的主机总线时钟周期数。□MCH RPMR(053h)这一寄存器包括一个设备睡眠计时器(DNT)字段,一个池A的活动设备(ADPA)字段,一个设备睡眠启用(DNE)字段,以及一个池A的容量(PAC)字段。字段DNT确定最近最少使用的设备由存储体A推入存储体B之前存储控制器处于空闲状态的主机时钟数。ADPA字段确定存储体A中同时可以是有效读/写或者活动状态的最大RDRAM设备数。存储体A中不是有效读/写或者活动状态的设备乃是处于备用状态。DNE位(当置为1的时候)使通道的休止状态计数器连续地统计休止时间。当计数器的值超出了由DNT确定的阈值时,最近最少使用的设备由存储体A推入存储体B。PAC字段确定某一时刻可以驻留在存储体A中的最大RDRAM设备数。不是存储体A一部分的设备则都属于存储体B。□MCH分组边界访问(GBA)寄存器(060-06Fh)寄存器GBA包括一个分组ID和一个指示该设备组地址上界的值。□MCH配置寄存器MCHCFG(0BE-BFh)这些寄存器包括Rambus频率和DRAM数据完整性模式字段。
另外,各断电配置选项也可以在此进行编程。在一种实施方案中,设置了自刷新和低功率自刷新选项(对每一个SerialIDCountSIO寄存器写IOP.INT,SDCA=SerialIDCount,DRA=21h,DRD=400h,(LSR,若SPD支持的话)+200h(PSR)+80h(SRP))。
如块650所示,对正常操作再作少数几个寄存器的编程工作后,便可以开始正常操作了。设置分页规则寄存器,以便能正常运行(PGPOLRIT字段(MCH 052h[2∶0])至001b),因为对分级来说页面关闭计时器实际上已经失效,而通过RPMR寄存器(MCH 053h)电源管理特征在此生效了。如果对睡眠(NAP)操作配置了存储体B选择位(MCH 051h[6]),那么可执行一个广播NAP入口IOP,是所有设备进入NAP状态。在设置IIO位的同一I/O指令中,也将RICM中的IC bit为设置为一,故MCH的正常操作可以开始了。
退出低能状态时恢复通道正常操作继续了一段时间后,由于系统不活动或其他原因,系统可能进入一种低能状态,如图10中块1000所示。系统可能进入的一种状态是一种悬挂到RAM(STR)的状态,其中MCH丢失了保存在它的寄存器中的值。当进入STR状态后,可能检测出使系统退出STR状态的一个事件,如块1010所示。于是,BIOS对MCH和其它别的系统元部件加电。这一过程中MCH的配置寄存器可自动地复位到一个默认值。
因此,要再一次访问存储通道上的各存储器,至少某些配置寄存器的值是必需的。BIOS可使ICH 505访问电池后备存储器590并恢复下列的寄存器(保存在图6块646)。□MCH GAR寄存器(040-047h)□MCH RDT(050h)□MCH DRAMC(051h)□MCH PGPOL(052h)□MCH RMR(053h)□MCH GBA寄存器(060-06Fh)□MCH配置寄存器MCHCFG(OBE-BFh)将这些寄存器的值恢复后,系统进入STR状态时MCH可以再一次访问保存在存储器中的项目,这些项目包括诸如处理程序的环境等,倘若保存了的话。由于存储器在STR状态执行自刷新操作,故未丢失其它数据。
其次,时钟发生器开始工作,如块1040所示。由MCH MCHCFG寄存器(MCH 0Beh[11],在块1030得以恢复)读出适当的Rambus通道频率。当时钟稳定后,MCH RAC进行初始化,如块1050所示。这一工作可以通过执行MCH RAC初始化IOP来完成。另外,DRD寄存器可以装入0000h的内容,并可执行MCH RAC控制寄存器装载IOP来初始化RAC中的一条总线(如有关块610的讨论)。
下一步,如块1060所示实现电流标定。完成这一工作正如对块642和图9有关讨论那样。但是,在块940所示的最后一次迭代中,可以设置RICM寄存器中的IC位,使得一旦完成电流标定边立即开始正常的操作。这样,由STR序列重新开始,大大地快于系统第一次加电所要求的整个初始化序列,因为通道的分级、SPD查询、ID分配、以及许多别的初始化操作可以免去了。
总之,本项发明给出一种方法和设备初始化一个存储设备和存储通道。当对某些特定的举例实施方案进行了描述并用附图作了说明时,我们应该知道这些实施方案仅仅是使用图例进行说明而不是严格的广泛意义下的发明,而且这种发明不限于已经进行了演示和说明了的特殊的结构和安排,因为对那些技术平平的人来说,在考察本项发明的时候,可能出现许多别的修正。
权利要求
1.一种方法,包括初始化存储控制器;初始化多个存储控制器的配置寄存器;为与存储控制器耦合的多个存储设备分配串行识别号码;至少基于存储设备的大小,为多个存储设备组分配设备识别号码;以及使能存储设备。
2.权利要求1的方法,其中初始化存储控制器进一步包括复位该存储控制器和一个存储接口电路。
3.权利要求1的方法,在分配串行识别号码之前,进一步包括复位一个串行接口。
4.权利要求1的方法,进一步包括对每一个存储设备的寄存器编程,使设备反应时间之和等于从每一存储设备到所有存储设备共有的存储控制器的时间延迟。
5.权利要求1的方法,进一步包括检验该多个存储设备是否是第一类存储设备;并且如果存在不是第一类而是其它类型的存储设备,而它们混合在包括第一类存储设备的存储模块之中,则给出一个错误信息。
6.权利要求1的方法,其中对多个存储设备分配设备识别号码进一步包括给具有最大支持规模的存储设备分配一组最低的识别号码;和给其余的规模较小存储设备分配其后的识别号码。
7.权利要求1的方法,其中对多个存储设备分配设备识别号码进一步包括从一个选定的存储设备模块读取表示核心技术的大小的数值;对所选存储模块上的每一个存储设备进行重复分配一个设备识别号码,它是分组计数器和表示核心技术大小数值的一个函数;以及增加分组计数器的值
8.权利要求7的方法,进一步包括对所选存储模块上的每一个存储设备,更新组特性寄存器。
9.权利要求1的方法,其中对多个存储设备分配设备识别号码进一步包括对每一多个存储模块,确定设备大小的信息;根据设备大小,选择一个被选存储模块;至少对所选模块上的一个设备组分配设备识别号码;以及重复选择下一个被选存储模块并分配设备识别号码,直到所有的设备有了设备识别号码。
10.权利要求1的方法,其中初始化多个存储控制器配置寄存器包括初始化组边界地址寄存器;初始化组结构寄存器;初始化RDRAM计时寄存器;初始化RDRAM控制寄存器;初始化RDRAM能源管理寄存器;以及初始化RDRAM初始化控制寄存器。
11.权利要求1的方法,其中对多个存储设备分配串行识别号码进一步包括根据多个存储设备在串行总线上的串行顺序给该多个存储设备分配连续的唯一的串行识别号码。
12.权利要求1的方法,其中分配串行识别号码进一步包括禁止串行识别号码等于最大设备计数的最后一个存储设备的串行输出。
13.权利要求1的方法,其中使能多个存储设备包括复位该多个存储设备;广播退出断电的初始化操作;广播一组快速时钟模式初始化操作;以及初始化该多个存储设备的每一个的核心。
14.权利要求13的方法,其中初始化多个存储设备每一个核心包括使该多个存储设备做好电流标定的准备;给每一存储设备的每一个存储体传送预充电操作;以及执行一个核心初始化操作。
15.权利要求14的方法进一步包括再执行5次同样的核心初始化操作。
16.权利要求15的方法,其中执行核心初始化操作包括对多个组中的每一个重复N次执行无操作命令;执行刷新命令;执行第二次的无操作命令;执行第三次的和第四次的刷新命令;执行第三次,第四次,和第五次的无操作命令;执行刷新预充电命令;执行第六次无操作命令;执行第二次刷新预充电命令;执行第一次,第二次,和第三次的标定命令;以及执行简单的命令。
17.权利要求1的方法,其中初始化存储控制线路包括初始化一个Rambus应用的特殊集成电路(ASIC)单元(RAC)。
18.权利要求5的方法,其中检验多个存储设备是否是第一类型存储设备包括检验该多个存储设备是否是Rambus RDRAMs;以及禁止任何不同类型存储设备的多个存储设备。
19.一种系统,包括一个处理器;一个连接到处理器上的存储控制器,该存储控制器具有一个多个控制寄存器和一个串行接口线路;一个存储总线,它具有与之相连接的多个存储设备,存储总线连接于存储控制器;一个连接到存储控制器上的附加存储设备,在初始化多个存储设备之前存储控制器可访问该附加存储设备,该附加存储设备包含多条指令,若被系统执行,则使该系统执行初始化存储控制器;初始化多个控制寄存器;给连接于存储控制器的多个存储设备分配串行识别号码;至少部分地根据存储设备的大小给多个存储设备分配设备识别号码;以及使能该多个存储设备。
20.一种产品,包括机器可读的媒体和存储于其中的许多指令,如果机器执行之,则使该机器执行初始化一个存储控制器;初始化一个多个存储控制器的配置寄存器;给连接于存储控制器的多个存储设备分配串行识别号码;至少部分地根据存储设备的大小给多个存储设备分配设备识别号码;以及使能该多个存储设备。
21.权利要求20的产品,机器可读的媒体是一个存储器。
22.权利要求20的产品,机器可读的媒体是一种载波。
23.一种方法,包括对多个存储模块的每一个确定设备大小信息;根据其设备大小选择一个选中的存储模块;以及对被选中的存储模式中至少一个设备分组分配设备识别号码。
24.权利要求20的方法,进一步包括重复选择下一个被选存储模块,并给附加的分组设备分配设备识别号码,直至所有的设备都有设备识别号码为止。
25.权利要求20的方法,进一步包括对每一分组更新分组边界寄存器,以反应每一分组设备所覆盖的地址;以及对存储控制器中的每一分组更新分组结构寄存器,以正确地反应每一分组中设备大小的信息。
全文摘要
一种配置/初始化存储器设备(160-162,168,170,175)的方法和装置。公开的方法初始化存储器控制器(100)和多个存储器控制器配置寄存器(112)。串行标示号码被分配至与存储器控制器(100)连接的存储器设备(160-162,170,175)。此外,至少部分基于存储器设备大小分配串行识别号码组给存储器设备(160-162,170,175),并且使能存储器设备(160-162,170,175)。
文档编号G06F13/42GK1342282SQ99815395
公开日2002年3月27日 申请日期1999年10月22日 优先权日1998年11月3日
发明者W·A·斯蒂芬斯, P·K·尼扎 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1