技术领域
[0001] 本发明涉及用于对用于分组缓冲的诸如一个或多个动态随机存取存储器(DRAM)之类的一个或多个存储器器件的存取进行调度的存取调度器。本发明也涉及包括这种存取调度器的存储器控制器并且涉及包括该存储器控制器的数据处理系统。
相关背景技术
[0002] 因为动态随机存取存储器(DRAM)的低成本和低功率,所以往往使用动态随机存取存储器(DRAM)来实施分组缓冲器,例如排队器件。然而,DRAM由于其长的等待时间以及其对随机存取的约束而提出挑战。DRAM被成排(bank)地组织并且DRAM的物理性质对排存取提出限制。例如,存取参数行循环时间tRC给出对DRAM排中的行的存取和对相同DRAM排中的另一行的连续存取之间的最小时间。另一个存取参数滚动时间帧tFAW限制时间窗口内的行激活命令的数量,在所述滚动时间帧tFAW中可以同时进行对相同DRAM器件的最大四行激活。行是排的一部分。在可以执行对行内的地址的读或写之前,必须激活该行。
[0003] DRAM的存储器控制器接收针对DRAM的不同排的读和写请求。由于就每时间单位的存取而言DRAM带宽往往是瓶颈,所以DRAM的存储器控制器可以重新布置读和写请求的顺序,使得最大化存储器接口的利用。
[0004] 一种优化是以固定的顺序循环地存取这些排,因而确保对任一DRAM排的两个连续存取之间的时间大于或等于行循环时间tRC。
[0005] 另一种优化是重新布置读请求和写请求,使得多个读请求后面是多个写请求:例如把序列S1 = (R1, W2, R3, W4)重新布置成S2 = (R1, R3, W2, W4),其中R代表读,W代表写并且数字指示其中存储器控制器接收请求的顺序。对于在对DRAM的读和写存取之间的转向而言经常存在带宽惩罚,因此S2比S1在更短的时间内完成。
[0006] Bains的已公开美国申请US 2004/0236921 A1揭示了一种改进高速缓存数据总线上的带宽使得可以更高效地使用诸如DRAM之类的高速缓存存储器的方法。在一个实施例中,重新排序读或写存取以高效地利用数据总线上的带宽。
[0007] Van Hook等人的美国专利US 6,564,304 B1揭示了一种用于对图形处理系统中的存储器进行存取的存储器处理系统,其中存储器控制器仲裁来自多个存储器请求器的存储器存取请求。读被分组在一起并且写被分组在一起以避免模式切换。
[0008] 然而,例如,如果DRAM排中的地址在变成写之前被读,则诸如读和写存取之类的存取的重新排序可能造成逻辑错误。例如,在上面提及的序列S1 = (R1, W2, R3, W4)和S2 = (R1, R3, W2, W4)中,W2和R3可能存取相同的排地址。如果W2写数据结构(例如链接表)的元素并且R3存取该数据结构的相同元素,则如果如以S2那样重新排序W2和R3,将发生逻辑错误,原因在于这将使程序在地址被写完之前读该地址。即,重新排序将使解析该链接表的程序使用陈旧的指针,造成程序故障。
[0009] Laskshmanamurthy等人的已公开美国申请US 2007/0156946 A1揭示了一种利用排分类(sort)和调度的存储器控制器。存储器控制器包括FIFO缓冲器、仲裁器、排FIFO集和排调度器。来自FIFO缓冲器的输出被馈送到把存储器请求分类到适当的排FIFO中的仲裁器中。仲裁器可以使用循环仲裁方案来分类和优先化输入请求流。排调度器接收来自排FIFO集的输出并且循环地处理这些请求。在每个循环中,排调度器可以选择对读/写效率进行优化的业务,例如排调度器可以对读和/或写进行分组以最小化读写周转。
[0010] 在US 2007/0156946 A1中,如上面所描述的逻辑错误的问题由“无序”机构解决,该“无序”机构确保从不违反支配对相同地址的读和写的业务排序规则,即地址在其被写完之前不能被读。
[0011] US 2007/0156946 A1的存储器控制器的缺点/问题在于其未提供存储器带宽的加权公平共享。通过把读和写存储器请求存储在相同的排FIFO中,读和写之间的共享由请求到达过程确定而不由存储器控制器调整。
[0012] 进一步,US 2007/0156946 A1的存储器控制器具有确保例如在写请求之前不发出读请求(如果这些请求是针对相同地址的话)的仲裁器。因而,尽管存在要在存储器控制器的内部储存器中读的数据,还发出对DRAM的读请求。这意味着DRAM未被最优地利用并且读等待时间未被最小化。
[0013] 而且,US 2007/0156946 A1的存储器控制器没有装置来优先化需要低等待时间的请求,例如与控制信息有关的请求,使得它们在容忍较长等待时间的请求(例如与分组数据有关的请求)之前被服务。
具体实施方式
[0041] 虽然本发明覆盖各种修改以及可选方法、装置和系统,但是本发明的实施例在附图中被示出并且将在下文中被更详细地描述。然而,要理解,特定的描述和附图不旨在把发明限制为所揭示的特定形式。相反,所要求保护的发明的范围旨在包括落入如在所附权利要求到其等效物的整个范围中表示的发明的精神和范围内的其所有修改和可选构造。在附图中,相同的参考数字用于相同或类似的特征。
[0042] 图1示出根据本发明的数据处理系统100的实施例的概观。数据处理系统100包括连接到存储器控制器104的处理器102。处理器102被配置成把存取请求发送到存储器控制器104并且接收来自存储器控制器104的存取响应,如箭头所示的。
[0043] 处理器102可以是可以执行计算机程序的中央处理器单元(CPU)、多处理器、网络处理器、可编程管线、IO处理器或者诸如有限状态机之类的逻辑电路。
[0044] 存储器控制器104经由存储器接口400连接到一个或多个存储器器件106并且被配置成控制对一个或多个存储器器件106的存取。有时也被称为分组缓冲器的存储器器件106可以是具有随机存取约束的长等待时间存储器,诸如动态随机存取存储器(DRAM)。
[0045] 在实施例中,存储器控制器104包括存取缓冲器200、存取调度器300、存储器接口400和重新排序器件500,参见图1。如先前所提及的,存储器接口400被配置成把存储器控制器104连接到一个或多个存储器器件106(例如DRAM)并且实施针对使用的器件类型的通信协议(例如DRAM协议)。
[0046] 然而,如图2示意性地所示的,应当理解,在实施例中存储器接口400可以被布置在一个或多个存储器控制器104的外部。在这样的实施例中,存储器接口400可以借助于交换机450而连接到一个或多个存储器控制器104,参见图2。该交换机可以例如是交叉开关(crossbar)、网状网络、环或总线。
[0047] 优选地,存储器接口400被微编码并且被配置成响应于接收的命令而执行微编码的序列。该命令可以例如是从存取缓冲器200接收的读请求或写请求。
[0048] 当用于本描述中时,措词“微代码”/“微编码”指代实施功能基元以供其它单元使用的硬件级指令。微代码驻留在特殊的存储器(未示出)中并且把输入转换成内部电路上或输入/输出(IO)管脚上的电路级控制信号序列。
[0049] 存取缓冲器200被配置成接收来自连接到存储器控制器104的一个或多个处理器102的一个或多个存取请求。在实施例中,存取缓冲器200被配置成处理对一个或多个存储器器件106例如DRAM的存取。
[0050] 存取请求可以具有不同类型,例如具有高或低优先级的读或写请求以及管理请求。然而,应当理解,其它实施例可以包括其它请求类型,诸如DRAM刷新请求。
[0051] 在实施例中,管理请求具有最高优先级,并且与写和读控制信息数据有关的请求一般具有比与写和读数据例如有效载荷数据有关的请求更高的优先级。
[0052] 管理请求可以例如是对存储器接口中的微代码存储器或配置参数的读或写请求、或者对存储器接口的状态位的读请求。
[0053] 数据请求可以例如是对在DRAM中缓冲的分组数据例如有效载荷数据的读或写请求。
[0054] 控制信息数据请求可以例如是对与对数据进行存储的数据结构有关的信息(诸如链接表指针或分组长度)的读或写请求。
[0055] 在实施例中,存取缓冲器200基于先进先出(FIFO),即存取缓冲器200包括许多FIFO缓冲器,所述FIFO缓冲器在本说明书文本中也被称为FIFO队列。
[0056] 如果例如存取缓冲器200被配置成处理两个存储器器件106(例如DRAM),每个具有8排,则与FIFO队列关联的每一请求类型存在16个FIFO队列。管理请求经常不与FIFO队列关联,因为它们具有最高的优先级并因此被优先化而不用缓冲。具有高优先级的读请求、具有低优先级的读请求、具有高优先级的写请求和具有低优先级的写请求每个与每排存储器器件的FIFO队列关联。
[0057] 根据从处理器接收的请求类型且根据其旨在用于哪个存储器器件和该存储器器件的哪排,该请求被存储在与请求类型和所讨论的存储器器件排对应的FIFO队列中。
[0058] 存取缓冲器200包括或连接到存取调度器300。存取调度器被配置成从存取缓冲器的FIFO队列接收或检索请求信息和/或从存取缓冲器接收或检索管理请求信息。请求信息可以例如是存取缓冲器中的FIFO队列包括存取请求的指示,其也可以包括FIFO队列为空的信息以及关于请求长度的信息。优选地,由于管理请求具有最高优先级,所以存取调度器可以直接接收或检索管理请求信息而不用管理请求信息在存取缓冲器的任何缓冲。
[0059] 存取调度器进一步被配置成借助于包括一个或多个调度算法的一个或多个调度器或仲裁器来调度请求。也被称为选择的请求的所调度请求然后作为请求命令发送到所讨论的存储器器件,优选地到存储器器件的特定排。请求命令优选地在存取缓冲器中被生成并且从存取缓冲器直接或经由交换机发送到存储器接口。
[0060] 存储器控制器104进一步包括重新排序器件500,该重新排序器件500被连接成并且被配置成从存取缓冲器200和/或从存储器器件106接收响应数据。在实施例中,重新排序器件500被连接成并且被配置成经由存储器接口400以及也可能经由交换机450从存储器器件106接收响应数据。重新排序器件500被配置成对接收的响应数据进行分类,使得以与处理器102向存储器控制器104发出对应的存取请求相同的顺序产生到处理器102的存取响应。
[0061] 图3和4示出发明存取调度器300的实施例。该发明存取调度器被配置为层次调度器,其中也被称为合格信息的状态信息从叶子朝树根传播,如下面将描述的。在根中做出调度决策以便选择服务哪个请求,然后调度决策从根传播到叶子,如下面将描述的。在叶子处,请求信息被检索并发送到基于所检索的请求信息来生成DRAM命令的命令生成器。
[0062] 在实施例中,发明存取调度器300包括五个层次级别,如图3示意性地所示的。然而,如图4示意性地所示的,存取调度器300的实施例可以包括树层次级别。在图4中,在存取调度器300中包括三个级别:级别1,级别4和级别5。
[0063] 现在将参考图3来描述合格信息从叶子到根的传播。
[0064] FIFO队列,诸如“Rd Hi FIFO”, “Rd Lo FIFO”, “Wr Hi FIFO”或者“Wr Lo FIFO”中的一个,在其不是空的且其排定时器屏蔽允许调度的情况下有资格由在第一级别(级别1)处的调度器304调度。
[0065] 进一步,如果由第一级别调度器304服务的任一FIFO是合格的,则在级别1处的第一级别调度器304有资格由在级别2处的第二级别调度器308调度。例如,为了第一级别调度器304a有资格由第二级别调度器308a调度,读高优先级FIFO队列“Rd Hi FIFO”之一必须是合格的。
[0066] 如果由在级别3处的第三级别调度器312服务的在级别2处的任一第二级别调度器308是合格的,则在级别2处的第二级别调度器308有资格由在级别3处的第三级别调度器312调度。
[0067] 进一步,如果由在级别4处的第四级别调度器318服务的在级别3处的任一第三级别调度器312是合格的,则在级别3处的第三级别调度器312有资格由在级别4处的第四级别调度器318调度。为了使第三级别调度器312是合格的,群组定时器315必须允许调度。在级别5处,在级别4处的群组以循环的方式交替。
[0068] 现在将参考图3和9来描述调度决策从根到叶子的传播。
[0069] 对于该群组,即在级别5处选择的DRAM器件,如果也被称为刷新定时器314的用于刷新的计数器达到了在配置参数单元316中可配置的阈值,则该群组的有限状态机(FSM)320选择刷新操作。刷新操作可以被延迟,直到达到其中FSM否则将从读切换到写或空闲或者从写切换到读或空闲的状态为止。如果未选择刷新,并且读和/或写是合格的,则读/写仲裁器318使用例如亏损加权循环(DWRR)调度算法来选择读或写。否则调度器318可以是空闲的。如果选择读或写,则被选择的在级别3处的第三级别调度器312在合格的第二级别调度器308之间选择具有最高优先级的第二级别调度器308。
[0070] 然后,被选择的第二级别调度器308在合格的第一级别调度器304之间选择具有最高优先级的第一级别调度器304。第一级别调度器304以循环方式选择下一合格的FIFO队列。
[0071] 应当理解,合格信息从叶子到根的传播以及调度决策从根到叶子的传播在具有除5之外的另一个层次级别数量的存取调度器中以相同的方式运行。
[0072] 根据实施例,第一级别(级别1)包括一个或多个排定时器302,排定时器的数量对应于排的数量。排定时器302被配置成当在存取缓冲器中包括的且与该排关联的FIFO队列被存取时设定每排存储器器件106的屏蔽位,如图7示意性地所示的。在图3中,屏蔽位的设定由环绕连接FIFO与第一级别调度器304的线A40的环所示。通过当相关FIFO队列被存取时设定该排的屏蔽位,该排不能被选择用于另一个存取直到该屏蔽位被清除为止。进一步,当DRAM特定的随机存取时间tRC过期时,借助于排定时器302来清除该屏蔽位。从而,可以防止存取错误,诸如在对排的先前存取之后过早地存取相同排。
[0073] 进一步,调度器300包括一个或多个第一级别仲裁器304,例如与存取缓冲器中的FIFO队列关联的每一存取请求类型一个第一级别仲裁器304。FIFO队列把合格信息传播到第一级别仲裁器304,如图9中的箭头A40所示的。第一级别仲裁器304被配置成借助于调度算法诸如如图3中由RR所示的循环调度算法,以公平的方式且基于所接收的请求信息来选择与排0-7关联的FIFO队列之一中包括的存取请求之一。
[0074] 因而,向排的工作守恒循环服务提供每一存取请求类型一个循环;即每一读高优先级请求、读低优先级请求、写高优先级请求和写低优先级请求一个循环。
[0075] 一旦选择了存取请求,第一级别仲裁器304将把关于存储与选择的存取请求有关的请求信息的FIFO的合格信息传播到在下一级别(级别2)中包括的第二级别仲裁器308,如图9中的箭头A42所指示的。
[0076] 如图3示意性地所示的,用于调度读高优先级请求的第一级别仲裁器304a被配置成基于与排0-7关联的8个FIFO队列“Read Hi FIFO”之一中包括的请求信息来选择读高优先级请求之一。以相同的方式,第一级别仲裁器304b、304c、304d被配置成分别从FIFO队列“Read Lo FIFO”、“Write Hi FIFO”和“Write Lo FIFO”选择读低优先级请求、写高优先级请求和写低优先级请求。
[0077] 在最后储存器306中,存储来自调度器304的指针。该指针被配置成告诉哪个排0-7是要服务的最后排。在调度决策之后最后指针被增加1模与调度器关联的排的数量,以指示调度器304接着要服务哪个排。
[0078] 根据实施例,第二级别(级别2)包括一个或多个第二级别仲裁器308。优选地,存取调度器300包括每一请求类型(不管高低优先级)一个第二级别仲裁器308,即每一写请求一个和每一读请求一个。因而,第一第二级别仲裁器308a被配置成在读请求之间仲裁而第二第二级别仲裁器308b被配置成在写请求之间仲裁。
[0079] 第二级别仲裁器308被配置成借助于固定优先级调度算法在低优先级请求和高优先级请求之间执行仲裁,即第二级别仲裁器308被配置成选择具有最高优先级的请求并且把合格信息传播到在下一级别(级别3)中包括的第三级别仲裁器312,如图9中的箭头A44所指示的。
[0080] 因而,只要读高优先级请求存在,在选择读低优先级请求之前,第一第二级别仲裁器308a将选择读高优先级请求。
[0081] 按照相同的推理,第二第二级别仲裁器308b被配置成在选择写低优先级请求之前选择写高优先级请求。
[0082] 在第二级别(级别2)中,存取调度器300也包括管理请求单元310,其被配置成把具有高优先级的管理读请求从存取缓冲器传播到第三级别调度器312a并且把合格信息传播到第三级别调度器312b,如图9中的箭头A46所指示的。
[0083] 根据实施例,在第三级别(级别3)中,存取调度器300包括一个或多个第三级别仲裁器312。第三级别仲裁器312被配置成在正常存取请求即读请求和写请求以及管理存取请求之间调度。如先前所提及的,管理存取请求是高优先级存取请求,其可以源自除处理器之外的另一个部件;例如源自连接到存取调度器/存取缓冲器的控制平面CPU。
[0084] 如图3示意性地所示的,第一第三级别仲裁器312a被配置成在读请求和读管理请求之间选择,而第二第三级别仲裁器312b被配置成在写请求和写管理请求之间选择。由于管理请求比读请求和写请求具有更高的优先级,所以只要管理请求可用于选择,第三级别仲裁器312将选择管理请求。
[0085] 如图9中的箭头A48所指示的,合格信息被传播到在下一级别(级别4)中包括的第四级别仲裁器318。
[0086] 在实施例中,存取调度器300也包括刷新定时器314,其被配置成基于存储在配置参数单元316中的配置参数来指令有限状态机(FSM)320以生成刷新请求。该刷新请求可以例如是对DRAM的维护请求,即请求维护DRAM以例如通过内部电机构来刷新存储器的内容的请求。若不刷新,存储器内容变得走样(corrupted)。刷新请求可以被周期性地发送并且它们可以优先于其它存取请求和管理请求。
[0087] 在实施例中,存取调度器包括一个或多个群组定时器315。群组定时器315被配置成根据例如tFAW、tRRD、tRead2write、tWrite2read和tCalibration来设定群组即DRAM器件的屏蔽位,如图8示意性地所示的。tFAW限制时间窗口内的行激活命令的数量,并且tRRD是到DRAM器件的两个连续激活命令之间的最小时间。tRead2write是读命令和后续写命令之间的最小时间,而tWrite2read是写命令和后续读命令之间的最小时间。tCalibration是两个校准命令之间的时间周期。可以例如执行校准命令以补偿操作条件的变化,诸如温度变化。
[0088] 在第四级别中,存取调度器可以包括配置参数单元316。配置参数单元316被配置成把诸如在要执行许多写请求之前要执行的读请求的数量或者在写之前要读的突发的数量之类的配置参数传递到在第四级别(级别4)中包括的有限状态机(FSM)320。借助于配置参数,FSM 320被配置成控制何时进行读、写、刷新或空闲。
[0089] FSM被配置成把也被称为Ack信号的确认信号传输到一个或多个FIFO队列和传输到与一个或多个第一级别仲裁器304关联的一个或多个最后储存器306,如图3、4和9示意性地所示的。Ack信号触发从选择的FIFO检索请求。另外,其触发在与选择的FIFO关联的RR调度器304的最后储存器306中更新RR指针。
[0090] 根据实施例,存取调度器在第四级别(级别4)中包括第四级别仲裁器318、有限状态机(FSM)320、FSM定时器计数器322。
[0091] 第四级别仲裁器318被配置成在不考虑优先级的情况下在请求之间即在写请求、读请求、管理请求和刷新请求之间调度,即在第四级别处请求是具有低优先级还是高优先级无关紧要。第四级别仲裁器318也可以被配置成调度在要执行许多写请求之前要执行的许多读请求以便最小化存储器存取的延迟,原因在于不同存取请求(例如读、写、管理、刷新和维护)之间的切换花费时间并且也可能要求插入空闲循环。
[0092] 在实施例中,刷新定时器314被配置成对刷新请求之间的循环数量进行计数并且一个或多个FSM计算器322被配置成对写和读请求的数量以及对在诸如读、写和刷新之类的命令类型之间切换时需要插入的循环的数量进行计数。
[0093] 读和写带宽是可配置的并且以公平、加权、工作守恒的方式被动态地共享。在配置参数单元316中包括的两个可配置参数是“MaxRead” “MaxWrite”。参数“MaxWrite”指示在转向服务DRAM读之前被写(如果合格的话)的DRAM突发的数量。参数“MaxRead”指示在转向服务DRAM写之前被读(如果合格的话)的DRAM突发的数量。在实施例中,“MaxRead”和“MaxWrite”是亏损加权循环(DWRR)调度器的权重。
[0094] 进一步,第四级别仲裁器318被配置成把合格信息传播到在存取调度器的下一级别(级别5)中包括的第五级别仲裁器324,如图9中的箭头A50所指示的。
[0095] 根据实施例,存取调度器在第五级别(级别5)中包括第五级别仲裁器324,其被配置成在到也被称为第一群组0的第一存储器器件106的存取请求和到也被称为第二群组1的第二存储器器件106的存取请求之间选择。在实施例中,这些群组共享地址总线但是具有单独的数据总线。在实施例中,第五级别仲裁器324在选择对第一存储器器件和对第二存储器器件的存取请求之间交替。
[0096] 为了最大化存储器接口的利用,DRAM器件因而可以被组织成群组,例如组织成群组0和群组1。通过在群组之间交替,如由tFAW参数表示的对时间窗口内的行激活命令数量的DRAM约束不会减损存储器接口带宽。在群组之间交替也防止由于tRRD即两个连续行激活命令之间的最小时间和tCCD即两个列命令之间的最小时间引起的带宽减损。
[0097] 命令生成器214被布置成与存取调度器300通信并且被配置成基于关于来自存取调度器的优胜者的请求信息(如图9中的箭头Rq Info所指示)且基于与请求关联的且从FIFO队列检索的地址、数据和属性(如图9中的箭头“地址、数据和属性”所指示)来生成命令。该命令然后经由存储器接口400发送到DRAM,如图9中的箭头Cmd所指示的。
[0098] 图4示意性地示出发明存取调度器300的更广义实施例。
[0099] 如所示的,存取调度器300的实施例在第一级别(级别1)中包括一个或多个排定时器302,排定时器的数量对应于排的数量。排定时器302被配置成当在存取缓冲器中包括的且与该排关联的FIFO队列被存取时设定每排存储器器件106的屏蔽位,如先前所描述的。
[0100] 进一步,调度器300包括一个或多个第一级别仲裁器304,例如与存取缓冲器中的FIFO队列关联的每一存取请求类型一个第一级别仲裁器304。在所示的实施例中,存取请求类型的数量是二:读请求和写请求。
[0101] 一旦选择了存取请求,第一级别仲裁器304将把关于存储与选择的存取请求有关的请求信息的FIFO的合格信息传播到在下一级别(级别4)中包括的第四级别仲裁器318,如线A44所指示的。
[0102] 在实施例中,存取调度器300也包括刷新定时器314、群组定时器315、配置参数单元316、有限状态机(FSM)320和FSM计数器322,如先前所描述的。
[0103] 第四级别仲裁器318被配置成在请求之间即在写请求、读请求、管理请求和刷新请求之间调度。第四级别仲裁器318也可以被配置成调度在要执行许多写请求之前要执行的许多读请求以便最小化存储器存取的延迟,原因在于不同存取请求(例如读、写、管理、刷新和维护)之间的切换花费时间并且也可能要求插入空闲循环。
[0104] 进一步,第四级别仲裁器318被配置成把合格信息传播到在存取调度器的下一级别(级别5)中包括的第五级别仲裁器324,如线A50所指示的。
[0105] 第五级别仲裁器324被配置成在到也被称为第一群组0的第一存储器器件106的存取请求和到也被称为第二群组1的第二存储器器件106的存取请求之间选择,如先前所描述的。关于优胜者的请求信息被传输到命令生成器214,该命令生成器214基于请求信息且基于与请求关联的且在FIFO队列中存储的地址、数据和属性来生成命令。该命令然后经由存储器接口400发送到DRAM器件。
[0106] 图5示意性地示出存取缓冲器200的实施例。存取缓冲器200优选地基于先进先出(FIFO),即存取缓冲器200包括许多FIFO缓冲器,所述FIFO缓冲器在本描述文本中也被称为FIFO队列。
[0107] 图5所示的存取缓冲器200的实施例被配置成处理两个存储器器件106(例如DRAM),每个具有8排,意味着每一请求类型存在16个FIFO队列。由于与FIFO队列关联的请求类型的数量为4(管理请求不与FIFO队列关联),所以存取缓冲器200的所示实施例包括总共64个FIFO队列。为了清楚起见,在图5中未示出所有64个FIFO队列。
[0108] 然而,应当理解,FIFO队列的数量可以根据要处理的存储器器件的数量、在每个存储器器件中包括的排的数量和/或与一个或多个FIFO队列关联的请求类型的数量而不同。
[0109] 在实施例中,存取缓冲器200包括:许多写/读低优先级/高优先级FIFO队列204:“Wr Lo Prio FIFO”, “Wr Hi Prio FIFO”, “Rd Hi Prio FIFO”和“Rd Lo Prio FIFO”;许多写/读低优先级/高优先级储存器206:“Wr LoPrio Storage”, “Rd LoPrio storage”, “Wr HiPrio Storage”和“Rd HiPrio Storage”;搜索单元208,仲裁器210,复用器212,存取调度器300,以及命令生成器214。命令生成器214被配置成以所需的格式构造存储器控制器命令并且经由存储器接口400把所生成的命令发送到存储器器件106。
[0110] 在实施例中,可搜索地址储存器206是内容可寻址相关存储器(CAM)。
[0111] 进一步,应当理解,在其它实施例中,存取调度器300可以被布置在存取缓冲器200的外部并且与存取缓冲器200通信。
[0112] 如图5的左手侧的向右箭头A1-A5示意性地所示的,不同类型的请求,例如读/写、高优先级/低优先级、和管理,可以从处理器发送到存取缓冲器200。然而,应当理解,其它实施例可以包括其它请求类型,诸如DRAM刷新请求。
[0113] 在图5中,示出以下不同请求类型:管理请求“Mgmt”;具有低优先级的写请求“WriteLoPrio”,例如写数据请求;具有高优先级的写请求“WriteHiPrio”,例如写控制信息数据请求;具有高优先级的读请求“ReadHiPrio”,例如读控制信息数据请求;以及具有低优先级的读请求“ReadLoPrio”,例如读数据请求。
[0114] 在实施例中,例如参见图5,写请求包括要写到存储器器件的数据、与要写数据的存储器器件的地址对应的地址、以及定义该请求相对于其它请求的顺序的属性;而读请求包括与要读数据的存储器器件的地址对应的地址、以及定义该请求相对于其它请求的顺序的属性。
[0115] 在其它实施例中,例如参见图6,写请求不包括属性。在这样的实施例中,写请求包括要写到存储器器件的数据、以及与要写数据的存储器器件的地址对应的地址;而读请求包括与要读数据的存储器器件的地址对应的地址、以及定义该请求相对于其它请求的顺序的属性。
[0116] 在实施例中,管理请求具有最高优先级,并且与写和读控制信息数据有关的请求一般具有比与写和读数据例如有效载荷数据有关的请求更高的优先级。
[0117] 管理请求可以例如是对存储器接口中的微代码存储器或配置参数的读或写请求。
[0118] 数据请求可以例如是对在DRAM中缓冲的分组数据例如有效载荷数据的读或写请求。
[0119] 控制信息数据请求可以例如是对与对数据进行存储的数据结构有关的信息(诸如链接表指针或分组长度)的读或写请求。
[0120] 如图5示意性地所示的,当存取缓冲器200如箭头A1所指示的那样从处理器102接收把例如低优先级数据写到存储器器件106的请求“WriteLoPrio”时,低优先级数据的地址将如箭头A1a所指示的那样被写到在存取缓冲器200中包括的FIFO队列“Wr LoPrio FIFO”之一。进一步,写低优先级请求的数据和属性(Attr)将被存储在存取缓冲器200中包括的可搜索地址储存器“Wr LoPrio Storage”206中,如箭头A1b所指示的。
[0121] 进一步,如图5示意性地所示的,当存取缓冲器200如箭头A2所指示的那样从处理器接收把例如控制信息数据写到存储器器件106的请求“WriteHiPrio”时,请求“WriteHiPrio”的地址将如箭头A2a所指示的那样被写到在存取缓冲器200中包括的FIFO队列“Wr HiPrio FIFO”之一。进一步,请求“WriteHiPrio”的数据和属性将被存储在存取缓冲器200中包括的可搜索地址储存器“Wr HiPrio Storage”206中,如箭头A2b所指示的。
[0122] 而且,如图5示意性地所示的,当存取缓冲器200如箭头A3所指示的那样从处理器接收例如从存储器器件106读控制信息数据的请求“ReadHiPrio”时,请求“ReadHiPrio”的地址将如箭头A3a所指示的那样被写到在存取缓冲器200中包括的FIFO队列“Rd HiPrio FIFO”之一。进一步,请求“ReadHiPrio”的属性将被存储在存取缓冲器200中包括的可搜索地址储存器“Rd HiPrio Storage”206中,如箭头A3b所指示的。
[0123] 如图5示意性地所示的,当存取缓冲器200如箭头A4所指示的那样从处理器102接收例如从存储器器件106读数据信息的请求“ReadLoPrio”时,存取缓冲器200被配置成借助于搜索单元208来(如虚线箭头所示的那样)搜索FIFO队列“Wr LoPrio FIFO”以确定请求“ReadLoPrio”的地址是否包括在FIFO队列“Wr LoPrio FIFO”之一中。
[0124] 如果要读的数据的地址是在FIFO队列“Wr LoPrio FIFO”之一中,则搜索单元208检测到“命中(hit)”。搜索单元208从FIFO队列“Wr LoPrio FIFO”去除该地址并且要读的数据和属性从数据储存器“Wr LoPrio Storage”进行读。在从“Wr LoPrio Storage”读之前,“Hit”请求可以如箭头A4c所指示的那样被写到FIFO队列“Hit Synch FIFO”,并且如箭头A6所指示的那样借助于仲裁器210被调度,以便如箭头A7所指示的那样以有序的且经调度的方式从储存器“Wr LoPrio Storage”读数据和属性。当从储存器“Wr LoPrio Storage”读了数据和属性时,数据和属性分别如箭头A8b和A8c所指示的那样被发送到重新排序器件500。此后,重新排序器件500被配置成以正确的顺序把存取响应传输到处理器102,该响应是基于所读的数据和属性,如图5中的重新排序器件500中的符号“属性+数据(命中)”所指示的。
[0125] 仲裁器210被配置成借助于严格的优先级调度算法来执行调度。在实施例中,由存取调度器300选择的存取请求应当优先于“Hit”请求,原因在于存储器接口的带宽应当被优化。在这种情况下,“Hit”请求可以在Hit Synch FIFO中等待可用的时隙(例如存取调度器读命令)。
[0126] 如果要读的地址不在FIFO队列之一中,则搜索单元208检测到“未中(miss)”。要读的数据的地址然后如箭头A4d所指示的那样被写到在存取缓冲器200中包括的FIFO队列“Rd LoPrio FIFO”之一。进一步,该请求的属性(Attr)将被存储在存取缓冲器200中包括的储存器“Rd LoPrio Storage”中,如箭头A4b所指示的。
[0127] 如图5所示的,存取调度器300被配置成基于存取缓冲器200的FIFO队列204即“Wr LoPrio FIFO”、“Wr HiPrio FIFO”、“Rd HiPrio FIFO”和“Rd LoPrio FIFO”中的信息且基于如箭头A5a所指示的那样由存取调度器300接收的管理请求的可能地址来选择存取请求之一。存取调度器300被配置成借助于一个或多个仲裁器,基于调度算法例如如图5中用“RR”指示的循环调度算法、或先来先服务、或者另一种合适的调度算法来选择存取请求之一。存取调度器可以进一步包括调度器和有限状态机(FSM)216,其被配置成执行写/读/刷新请求调度并且确保不违反DRAM协议。
[0128] 然而,如箭头A5b所指示的,管理请求的数据和属性可以直接发送到被配置生成命令的命令生成器214,所述命令借助于存储器接口400发送到存储器器件106。
[0129] 进一步,如箭头A13所指示的,存取调度器300被配置成把选择的存取请求的地址传输到命令生成器214。当存取请求被存取调度器300选择时,存取缓冲器200被配置成从FIFO队列清除该存取请求的地址并且从储存器206之一读所选择请求的数据和/或属性。
[0130] 如果例如选择的存取请求是“WriteLoPrio”,即写低优先级请求,则存取调度器300将如箭头A12所指示的那样把在“Wr LoPrio FIFO”中包括的所选择存取请求的地址传达到“Wr LoPrio Storage”并且如箭头A13所指示的那样传达到命令生成器214。进一步,如图3所示,地址可以通过仲裁器210,以便在从“Wr LoPrio Storage”读和去除数据和属性之前,基于搜索单元208所检测的命中或者基于从存取调度器300选择的写低优先级请求来优先化“Wr LoPrio Storage”中的读。当从“Wr LoPrio Storage”读了数据和属性时,数据和属性被传输到命令生成器214,如箭头A8a和A14所指示的。进一步,当从“Wr LoPrio Storage”读了数据和属性时,数据和属性被传输到重新排序器件500,如箭头A8b和A8c所指示的。
[0131] 在实施例中,数据和属性经由复用器212被传输到命令生成器214以便在如箭头A8a、A9a、A10和A11所指示的那样从不同数据储存器传输的不同数据和属性之间进行选择。
[0132] 当从“Wr LoPrio Storage”读的数据和属性在命令生成器214中被接收时,其将与从“Wr LoPrio FIFO”读的地址组合成被传输到存储器器件的写低优先级命令。
[0133] 进一步,如果例如所选择的存取请求是“WriteHiPrio”,即写高优先级请求,则存取调度器300将如箭头A12所指示的那样把在“Wr HiPrio FIFO”中包括的写高优先级请求的地址传达到“Wr HiPrio Storage”并且如箭头A13所指示的那样传达到命令生成器214。当从“Wr HiPrio Storage”读和去除了数据和属性时,数据和属性被传输到命令生成器214,如箭头A10和A14所指示的。
[0134] 可能地,数据和属性经由复用器212被传输到命令生成器214以便在如箭头A8a、A9a、A10和A11所指示的那样从不同数据储存器传输的不同数据和属性之间进行选择。
[0135] 当来自“Wr HiPrio Storage”的数据和属性在命令生成器214中被接收时,其将与从“Wr HiPrio FIFO”读的地址组合成被传输到存储器器件的写高优先级命令。
[0136] 而且,如果例如所选择的存取请求是“ReadHiPrio”,即读高优先级请求,则存取调度器300将如箭头A12所指示的那样把与所选择的存取请求对应的“Rd HiPrio FIFO”中存储的读高优先级请求的地址传达到“Rd HiPrio Storage”并且如箭头A13所指示的那样传达到命令生成器214。当从“Rd HiPrio Storage”读和去除了属性时,属性被传输到命令生成器214,如箭头A11和A14所指示的。可能地,属性经由复用器212被传输到命令生成器214以便在如箭头A8a、A9a、A10和A11所指示的那样从不同数据储存器传输的不同数据和属性之间进行选择。当从“Rd HiPrio Storage”读的属性在命令生成器214中被接收时,其将与从“Rd HiPrio FIFO”读的地址组合成被传输到存储器器件的读高优先级命令。
[0137] 如果例如所选择的存取请求是“ReadLoPrio”,即读低优先级请求,则存取调度器300将如箭头A12所指示的那样把与所选择的存取请求对应的“Rd LoPrio FIFO”的地址传达到“Rd LoPrio Storage”并且如箭头A13所指示的那样传达到命令生成器214。当从“Rd LoPrio Storage”读和去除了属性时,属性被传输到命令生成器214,如箭头A9a和A14所指示的。进一步,属性也被传输到重新排序器件500,如箭头A9所指示的。
[0138] 可能地,属性经由复用器212被传输到命令生成器214以便在如箭头A8a、A9a、A10和A11所指示的那样从不同数据储存器传输的不同数据和属性之间进行选择。
[0139] 当从“Rd LoPrio Storage”读的属性在命令生成器214中被接收时,其将与从“Rd LoPrio FIFO”读的地址组合成被传输到存储器器件的读低优先级命令。
[0140] 当命令从命令生成器214发送到存储器器件时,关于发送的请求类型例如写/读低/高优先级请求“Type”和关于请求的序列标识“SerID”的信息被发送到重新排序器件500,如箭头A15所指示的。
[0141] 在实施例中,SerID是由处理器设定的属性。其用来识别回到处理器的响应。另外,其被重新排序器件500用来恢复可能被存取调度器打断的原始顺序。例如,处理器可以针对每个请求使SerID递增一直到达到诸如65 535之类的最大值为止,此后SerID被复位到0并且继续按一递增。
[0142] 重新排序器件500被配置成使用所接收的属性来为与该属性关联的存取请求的顺序分配重新排序器件中的地址。因而,当在重新排序器件500中接收存取响应时,该属性可以用来知道何时把存取响应发送到处理器。因而借助于请求的属性,知道该请求相对于从处理器发送的其它请求的顺序。如果例如该请求的顺序在请求序列中是第二,则来自存储器器件的对这个请求的响应应当在发送了对第一请求的响应之后且在发送对第三请求的响应之前发送到处理器。
[0143] 图6示出被配置成处理分别如箭头A1’和A3’示意性地所示的所接收的写请求和读请求的存取缓冲器200的广义实施例。存取缓冲器200包括许多FIFO队列例如写、读和命中FIFO队列204、搜索单元208,存取调度器300以及命令生成器214。进一步,存取缓冲器连接到被配置成如先前所描述的那样运行的重新排序器件500。
[0144] 当如箭头A1’所示的那样接收包括地址和数据的写请求时,写请求的地址和数据被存储在写FIFO队列“Wr FIFO”之一中。
[0145] 当如箭头A3’所示的那样接收包括地址和属性的读请求时,搜索单元208被配置成在“Wr FIFO”中搜索与读请求的地址匹配的地址。
[0146] 如果找到这样的地址,则搜索单元208检测到命中并且可能经由命中FIFO队列“Hit FIFO”把读请求的属性和地址传输到重新排序器件500。
[0147] 如果未找到这样的地址,则搜索单元208检测到未中并且把地址和属性存储在读FIFO队列“RD FIFO”之一中。
[0148] 如先前所描述的,存取调度器300被配置成选择请求之一。
[0149] 如果所选择的请求是写请求,则地址和数据从写FIFO进行检索并且发送到命令生成器214以生成写命令。
[0150] 如果所选择的请求是读请求,则属性被发送到重新排序器件500并且地址被发送到命令生成器214以生成读命令。
[0151] 命令生成器214被配置成把生成的命令发送到存储器器件并且把请求类型例如写或读“Type”以及SerID发送到重新排序器件500。
[0152] 进一步,存取缓冲器的实施例可以被配置成具有拥有背压(backpressure)阈值的一个或多个FIFO队列。如果FIFO队列的填充级别超过其背压阈值,则存取缓冲器被配置成把这个背压传达到处理器。从而,处理器被配置成阻止对存取缓冲器的相同类型(例如读或写,或者具有优先级的读或写)的进一步存取请求,直到存取缓冲器向处理器传达FIFO队列的填充级别已返回到在阈值之下的级别。背压级别应当被设定为使最大不可阻止请求流适应FIFO之一。如果例如FIFO可以包括16个请求并且不可阻止量是5个请求,则背压阈值应当被设定为11个请求。
[0153] 而且,存取缓冲器的实施例可以被配置成具有拥有应急(panic)阈值的一个或多个FIFO队列。如果写FIFO队列或读FIFO队列的最大填充级别增长到大于应急阈值,则用于读和写的权重在存取调度器中被自动地改变,使得写或读得到更高的相对带宽共享。当填充级别返回到在阈值之下的级别时,离开应急模式并且把权重复位到正常值。