存储控制器的读写切换方法 【技术领域】
本发明涉及用于对存储器进行读写的存储控制器的技术领域。
背景技术
当对存储器中的同一个存储体执行背对背读取时,目前的双倍数据速率(“DDR”)和双倍数据速率-II(“DDR-II”)动态随机存取存储器(DRAM)子系统具有相当大的延迟。在这种配置中,随机业务重复到达同一存储体的概率为1∶4(25%)。在页面空白存取情况下(这种情况在服务器芯片组中是常见的),总的存储体冲突时间是“触发到读取”(tRCD)的延迟加上“读取到预充电”(tRPD)的延迟再加上从“预充电”到“触发”(tRP)的延迟或者“触发到触发命令期间”(tRC)中时间限制较长的一个。在2001年8月14日公布的第9修订版英特尔DDR-266,JEDEC规范说明书附录的情况,此存储体冲突持续时间一般为65纳秒。在2001年6月25日公布的DDR-II-553的情况中,此存储体冲突持续时间一般为60纳秒。相反,对于每一存储器技术,脉冲宽度为4(32比特)的总的数据延迟各自仅仅为15纳秒和7.5纳秒。
传统的读写切换方法优先处理读请求,直到写请求队列到达一预设置的阈值。然后背对背地“消耗”写请求的数量,以及优先返回到读请求(当等候写请求耗尽时,对读请求进行排队)。但是,因为在存储体冲突期间没有执行附加的读或写,所以这种读写切换方法是很慢且缺乏效率。
【发明内容】
本发明的目的在于克服现有技术的上述缺陷,提供一种用于存储控制器的读写切换的技术。
根据本发明地一方面,提供一种存储系统,包含:
存储器件,具有第一存储体和第二存储体;以及
存储控制器,具有用以存储若干写请求的一写请求队列,其中当在对第一存储体的第一读请求和对第一存储体的第二读请求之间存在读存储体冲突时,在执行第一读请求之后和执行第二读请求之前,在一个延迟期间执行对第二存储体的第一写请求。
根据本发明的另一方面,提供一种存储系统,包含:
存储器件,具有第一存储体和第二存储体;以及
存储控制器,具有用以存储若干读请求的一读请求队列,其中当在对第一存储体的第一写请求和对第一存储体的第二写请求之间存在写存储体冲突时,在执行第一写请求之后和执行第二写请求之前,在一延迟期间执行对第二存储体的第一读请求。
根据本发明的又一方面,提供一种方法,包括:
将若干读请求存储在一读请求队列;对存储器件的第一存储体执行一个第一写请求;当在第一写请求和第二写请求之间存在写存储体冲突时,在执行第一写请求之后,在一个延迟之后,执行对第一存储体的第二写请求;以及在该延迟期间,执行对第二存储体的第一读请求。
根据本发明的又一方面,提供一种方法,包括:
将若干写请求存储在一写请求队列中;对存储器件的第一存储体执行一个第一读请求;当在第一读请求和第二读请求之间存在读存储体冲突时,在执行第一读请求之后,在一个延迟之后,执行对第一存储体的第二读请求;以及在该延迟期间,执行对第二存储体的第一写请求。
根据本发明的又一方面,提供一种包含存储介质的物品,在该存储介质上存储有指令,当所述指令被机器执行时,产生以下结果:
将若干写请求存储在一写请求队列中;对存储器件的第一存储体执行一个第一读请求;当在第一读请求和第二读请求之间存在读存储体冲突时,在执行第一读请求之后,在一个延迟之后,执行对第一存储体的第二读请求;以及在该延迟期间,执行对第二存储体的第一写请求。
根据本发明的又一方面,提供另一种包含存储介质的物品,在该存储介质上存储有指令,当所述指令被机器执行时,产生以下结果:
将若干读请求存储在一读请求队列中;对存储器件的第一存储体执行一个第一写请求;当在第一写请求和第二写请求之间存在写存储体冲突时,在执行第一写请求之后,在一个延迟之后,执行对第一存储体的第二写请求;以及在该延迟期间,执行对第二存储体的第一读请求。
根据本发明的又一方面,提供一种存储控制器,包括:
一写请求队列,用以存储若干写请求,其中当在对存储器件的第一存储体的第一读请求和对第一存储体的第二读请求之间存在读存储体冲突时,在执行所述第二读请求之前的延迟期间,执行对所述存储器件的第二存储体的第一写请求。
根据本发明的又一方面,提供另一种存储控制器,包含:
一读请求队列,用以存储若干读请求,其中当在对存储器件的第一存储体的第一写请求和对第一存储体的第二写请求之间存在写存储体冲突时,在执行所述第二写请求之前的延迟期间,执行对所述存储器件的第二存储体的第一读请求。
附图简述
图1是根据本发明一个实施例的存储系统的示意图。
图2是根据本发明一个实施例的存储控制器的示意图。
图3是根据本发明一个实施例的时序图。
图4是根据本发明一个实施例、当在同一列内执行写操作时具有存储体冲突的读操作的时序图。
图5是根据本发明一个实施例、当在不同的列内执行多个写操作时具有存储体冲突的读操作的时序图。
图6是根据本发明一个实施例、当有一个读存储体冲突时执行多个写命令的方法的示意图。
图7A是根据本发明一个实施例、执行写命令的另一个方法的第一部分的示意图。
图7B是根据本发明一个实施例、执行写命令的另一个方法的第二部分的示意图。
【具体实施方式】
本发明的实施例可以被用来在DRAM存储信道中更快地操作写请求。存储器件可以排队对存储器的若干写请求。当来自存储器的连续读取是对同一列、同一存储体、但不同页面时,存在“存储体冲突”,以及在对存储体的触发命令之间会发生延迟。当安排读取的同时,若干写请求可以排队在一写请求队列中。如果有冲突时(即,有连续的读,并且第二个读是对同一列、同一存储体、但不同页面),在用于读动作的页面等待被触发的同时,可以对在同一列中的不同存储体进行写操作。根据用于行的触发所必需的时间,可在同一列中对其它存储体进行附加的写操作。这种方法可以实现更快速地执行写命令,以及DRAM存储器件的更快的性能。
可替换的是,在执行写的同时,存储器件可以排队若干个读命令。在执行写命令的同时,可以排队若干个读命令。一旦发生存储体冲突(即,对同一列但不同页面中的同一存储体的两次连续写),在触发下一页面的同时,可以执行读。因此,DRAM可以更高效地进行读写操作。
图1是根据本发明一个实施例的存储系统的示意图。该存储系统可以包括存储控制器100和存储体105。存储体105可以包括若干个存储体,例如存储体A 110、存储体B 115、存储体C 120和存储体D 125。存储控制器100可以与存储体A 110、存储体B 115、存储体C 120和存储体D 125的每一个进行通信。虽然在图1中仅显示了单个存储体105,但是也可以使用多个存储体。每个存储体可以包括一个具有多个存储单元的页面(即,若干行)和列的阵列。通过触发一个特定的页面,可以从一个单元读数据或者将数据写入该单元中。然后,可以从该页面中的若干个单元中读数据。为了从不同的页面读数据,可以预充电不同的页面,并且然后在从第一页面读取数据之后使其触发。
图2是根据本发明一个实施例的存储控制100的示意图。存储控制器100可以包括一读请求队列200。读请求队列200被用来在当前正在进行读以及正在进行写时对若干读请求排队。存储控制器100也可以包括一写请求队列205,写请求队列205也可以被用来在目前正在进行读以及正在进行写时对若干写请求排队。
存储控制器100也可以包括一个写数据缓冲器210,其可以以相关和/或一致的方式高速缓冲将要写的数据。写数据缓冲器210可以存储仍然没有写到存储器中的写数据。写数据缓冲器210可以是一个数据项深(one entry deep),但是由于性能的原因,一般是多于一个数据项深。如果一个在先写请求随后的对同一存储器地址的读请求进入存储控制器100时,存储控制器100可以或者使用来自写数据缓冲器210的数据进行读请求,或者它可以安排写请求,然后安排读请求。
存储控制器100可以包括逻辑部件220。逻辑部件220可以用来确定是否下一个未执行读命令具有与先前安排的命令冲突的协议。协议冲突可以是这样的条件,其中DRAM时序限制禁止存储控制器100在当前时钟周期中安排DRAM命令。协议冲突包括存储体冲突,其中在触发命令之间对同一列、存储体、不同页面的背对背存取被延迟一特定的时间量(由于tRC DRAM时序限制)。
存储控制器100可以与处理器225进行通信,以控制读请求队列200、写请求队列205、写数据缓冲器210以及逻辑部件220的每一个。处理器225又可以与指令存储装置230进行通信。指令存储装置230可以包含可由处理器225执行的指令(例如程序代码)。
存储控制器100可以在由存储体冲突引起的延迟期间促使写被执行。假如最早排队的写与当前的读操作不冲突,存储控制器100可以在存储体冲突期间使该最早排队的写被安排。
图3是根据本发明一个实施例的时序图。时序图顶部的标尺代表时间。每个数字单元可以表示10纳秒。例如,“ACT”表示触发命令。当选择所读的页面时,通过“ACT”命令可以触发该页面。如图所示,“ACT”命令花费3个时间单元用于将页面触发。这个触发延迟由时间延迟“tRCD”来表示(tRCD是“触发用于读命令的时间”的缩写)。接下来,执行读命令(如“RD”所示)。RD命令可花费1个时间单元来执行,然后附加2个时间单元,直到数据被实际读取。这个延迟由时间延迟“tCL”来表示(“tCL”可代表“用于CAS延迟的时间”,其中“CAS”是“列存取选通”的缩写)。从页面被触发直到可以读数据的整个时间由时间延迟“tRCD+tCL”来表示,“tRCD+tCL”是tRCD和tCL时序限制的总和,并且被显示为6个时间单位。
下面,执行预充电指令(“PRE”),并且根据前面的RD指令读数据(如在时序图上显示的“RD DATA”)。预充电过程可以花费3个时间单位,如所示的时间“tRP”(预充电命令期间的缩写)。预充电(“PRE”)命令释放(de-activate)存储体中的页面。如果没有预充电该页面,那么对那个存储体的下一个存取或者是一个页面命中(同一列、存储体、页面)或者是一个页面未命中(同一列、存储体、不同页面)。页面命中(page hit)仅仅要求“RD”命令。页面未命中要求“PRE”、“ACT”以及然后“RD”。如果预充电一个页面,在下一时间对那个存储体进行存储(可以是稍后时间),然后下一个存取将是页面空存取,其仅要求“ACT”以及然后“RD”。
接下来,如果从同一存储体里的不同页面读数据,会遇到附加的tRC延迟。可再次执行ACT和RD命令,并且在读来自下一页面的数据前,可耗用附加的6个时间单元的时间周期。然后可执行附加PRE命令,等等。
因此,正如图所示,当从同一存储体的不同页面进行连续读取时,存在由时间周期tRCD所示的相当长的延迟(如果从同一存储体和列的相同页面进行连续读取时,则不存在tRCD周期)。存储控制器100可以通过在此时间周期内执行写指令而利用此tRCD延迟,导致更高效的和更快的写命令安排。
图4是根据本发明一个实施例、当在同一列内进行写操作时具有存储体冲突的读操作的时序图。如图所示,读命令和时间延迟与图3所示的是一样的。但是,在图4的时序图中,存储控制器100通过对在同一列内不同的存储体写数据而利用tRCD延迟。例如,如果一个读操作是对存储体105的存储体A 110内的页面,在tRAS时间周期内,可以对其它存储体(例如存储体B 115、存储体C 120、或者存储体D 125,但不是存储体A 110)进行写操作。
在预充电操作期间的tRP时间周期内,可以执行写命令“WR”,以及在下一tRCD时间周期内可以实际地写数据(“WR DATA”)。tWTR被称作“从写到读命令的延迟”并且如果在对同一列的写操作之后有一个读操作时,必须满足延迟限制。对于存储控制器100最好安排对不同列的最后的写而不是随后的读,原因就在于此。因此,可以执行WR命令以及将数据写入另一存储体,而没有对RD命令的执行产生不利影响。
图5是根据本发明一个实施例、当在不同的列内进行多个写操作时具有存储体冲突的读操作的时序图。如图所示,可以执行写操作,以对在不同列中的存储体写数据。为了避免影响因为tWTR延迟而引起第二次读的等待,最后的写处理需要将不同的列作为目标,而不同于第二次读操作。如图所示,可以从列“0”里的存储体读数据。在tRCD时间周期内,数据可以首先被写入列“X”里的存储体,然后数据可以被写入列“1”里的存储体。如图所示,将数据写入列“X”里的存储体的WR命令可以在tRP周期结束时执行。然后,在数据被实际地写入存储体的同时,可以执行写命令WR1,以及然后数据可被写入列“1”里的存储体。因此,可以执行两个写操作,而没有对RD操作产生不利影响。
其它的实施例可以在具有存储体冲突的两个读之间对同一列执行交错的两个写操作,并且假如最新的三个写命令是对不同于读命令的列时,则五个或者六个(取决于技术协议时序)写可以在具有存储体冲突的两个读之间交错。如果tRCD时序限制保持恒定,但是DRAM时钟周期增加(例如时钟加快),那么在存储体冲突(tRCD)期间可以被安排的处理次数可从1或者2增加到更多。通过使用在系统中的特定DRAM器件时序参数来确定可安排多少处理,而不会影响第二个原始处理的等待。
图6是根据本发明一个实施例、当有一个读存储体冲突时执行多个写命令的方法的示意图。首先,在操作600,系统确定是否有一个对于下一次读操作的存储体冲突。如果“没有”,处理可停留在操作600。如果“有”,处理进行到操作602,在操作602,系统可以从写请求队列205载入最早排列的写命令。然后在操作605,系统可确定是否两个载入写命令来自同一列,如果“不是”,处理前进到操作615。如果“是”,处理前进到操作610,在操作610,移去较新的写命令,以及载入下一个排队的写命令。在操作610之后,处理可以返回到操作605。在操作615,系统可以确定任一个载入的写命令是否是用于与下一个读相同的存储体。如果“不是”,处理前进到操作625。如果“是”,处理前进到操作620,在操作620,移去冲突的写命令,以及载入下一个排队的写命令。在操作620之后,处理可返回到操作605。在操作625,在已经读取数据以后,系统可以首先执行最早的写命令,然后执行较新的写命令。在其它实施例中,可以首先执行较新的写命令。在其它的实施例中,在读操作存储体冲突期间,可以执行两个以上的写命令。在操作625之后,处理可返回到操作600。
图7A是根据本发明一个实施例、执行写命令的另一个方法的第一部分的示意图。如图所示,在操作700,系统首先可确定是否读请求队列200和写请求队列205是否都是空的。如果“是”,处理停留在操作700。如果“不是”,处理前进到操作705,在操作705,系统确定是否在写请求队列205中的写请求数目超过一预设置的阈值。系统可以具有它可存储的写请求数目的一预设置的阈值。一旦写请求数目超过该阈值水平,系统可以优先执行写请求,以及尽早执行它们,直到排队的写请求数目低于该阈值。如果在操作705中的回答是“是”,处理前进到操作710。如果在操作705中的回答是“不是”,处理前进到操作730,如图7B所示。
在操作710,系统可以确定是否下一个写命令可用于执行。如果“是”,处理前进到操作715。如果“不是”,处理前进到操作720。在操作715,系统可执行下一个写请求,并且然后处理可返回到操作700。在操作720,系统可以确定是否下一个读请求可用于执行。如果“是”,处理前进到操作725。如果“不是”,处理返回到操作700。接下来,在操作725,系统执行下一个写请求,然后处理返回到操作700。
图7B是根据本发明一个实施例、执行写命令的另一个方法的第二部分的示意图。在操作730,系统可确定是否下一个读请求可用于执行。如果“是”,处理前进到操作735。如果“不是”,处理前进到操作740。在操作735,系统可执行下一个读请求以及然后进行到操作700。接下来,在操作740,系统可确定是否下一个写请求可用于执行。如果“是”,处理前进到操作745。如果“不是”,处理进行到操作700。在操作745,系统执行下一个写请求以及然后处理返回到操作700。
虽然以上参照本发明的特定实施例进行了描述,但是可以理解的是,可以做出许多修改而不偏离其宗旨。所附的权利要求书应该包含落入本发明真正的范围和宗旨中的这些修改。因此,目前所公开的实施例在所有方面应该被视为描述性的而非限定性的。本发明的范围是通过权利要求书来表明,而不是前述的说明。因此,在权利要求的含义和等效范围内的所有变化都应包括在权利要求书的范围之内。