发明内容
为解决现有技术中存在的问题,本发明的实施例提供一种存储器的控制方法、存储器控制器和存储器控制***,能够充分利用页保持打开策略和页保持关闭策略的优势,减少读写命令的反转,大大降低了存储器进行数据访问时的延迟,显著增加了数据总线的可利用带宽,提高了***的性能。
为达到上述目的,本发明的实施例采用如下技术方案:
一种存储器的控制方法,所述方法包括:
获取存储体存储体的运行状态;
获取待执行的命令队列中所述存储体对应的下一个命令的地址信息;
根据所述运行状态和地址信息动态确定对所述存储体当前所采用的控制策略,所述策略包括页保持打开页保持打开策略和页保持关闭页保持关闭策略。
进一步的,所述运行状态为激活状态,所述激活状态为存储体当前被激活时所处的状态,所述地址信息包括行地址;
所述根据所述运行状态信息和地址信息动态确定对所述存储体当前所采用的控制策略为:
判断所述存储体中激活行的行地址与所述下一个命令的行地址是否一致,若是,采用页保持打开策略;若否,采用页保持关闭策略。
进一步的,所述方法还包括:按照预定的排序规则,对待执行命令队列中的命令进行排序;
所述排序规则包括禁止规则和重排规则,所述禁止规则优先于所述重排规则;
所述禁止规则包括:
当所述命令在命令队列中的驻留时间超出预定值时,禁止新入队的命令排在所述命令前;
当新入队的命令的地址与命令队列中命令的地址相同时,禁止新入队的命令排在所述命令前,所述地址包括存储体地址、行地址和列地址;
当所述的命令来自同一个端口且所述命令的命令类型相同时,禁止对所述命令进行排序;
所述重排规则包括:
当新入队的命令的存储体地址和行地址与命令队列中命令的存储体地址和行地址相同时,将新入队的命令排在所述命令的下一位置;
当新入队的命令与命令队列中的命令类型相同时,将新入队的命令排在所述命令的下一位置。
一种存储器控制器,包括:
存储体调度器,用于获取存储体的运行状态;
命令前向观测单元,用于获取待执行的命令队列中所述存储体对应的下一个命令的地址信息;
策略确定单元,用于根据所述存储体调度器获取的运行状态和所述命令前向观测单元获取的地址信息动态确定对所述存储体当前所采用的控制策略,所述策略包括页保持打开策略和页保持关闭策略。
进一步的,上述存储器控制器还包括:
命令排序单元,用于按照预定的排序规则,对待执行命令队列中的命令进行排序;所述命令前向观测单元,还用于获取经所述命令排序单元排序后的待执行命令队列中所述存储体对应的下一个命令的地址信息。
进一步的,还包括至少两个命令队列构建寄存器,
所述命令队列构建寄存器,用于保存命令的信息,向所述命令前向观测单元提供该命令相应的信息,并根据所述命令排序单元的排序结果更新所保存的命令的信息,其中,所述命令的信息包括命令的存储体地址、行地址和列地址,命令类型。
一种存储器控制***,所述***包括存储器控制器和DDR SDRAM,所述DDR SDRAM包括至少两个存储体,
所述存储器控制器包括,存储体调度器,用于获取存储体的运行状态;命令前向观测单元,用于获取待执行的命令队列中所述存储体对应的下一个命令的地址信息;策略确定单元,用于根据所述存储体调度器获取的运行状态和所述命令前向观测单元获取的地址信息动态确定对所述存储体当前所采用的控制策略,并将该策略对应的命令进行解释后发送至DDR SDRAM,所述策略包括页保持打开策略和页保持关闭策略;
所述DDR SDRAM,用于按照所述存储器控制器解释后的命令进行相应操作。
其中,所述存储器控制器还包括:命令排序单元,用于按照预定的排序规则,对待执行命令队列中的命令进行排序,并将排序后命令的信息发送到所述存储器控制器的命令前向观测单元;
所述命令前向观测单元,还用于获取经所述命令排序单元排序后的待执行命令队列中所述存储体对应的下一个命令的地址信息。
本发明实施例提供的技术方案,采用了命令前向预测的机制,即根据待执行命令的信息确定当前采用的控制策略,能够根据不同命令的不同特点动态确定当前采用的策略,从而能够充分利用页保持打开策略和页保持关闭策略的优点;同时,该技术方案可以对命令队列中的命令进行重排序,增加行命中的操作,减少读写命令的切换。本发明实施例提供的技术方案大大降低了存储器进行数据访问时的延迟,显著增加了数据总线的可利用带宽,提高了***的性能。
具体实施方式
为了更清楚地说明本发明实施例的技术方案,下面将结合附图对本发明的实施例进行详细的介绍,下面的描述仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些实施例获得本发明的其他的实施方式。
本发明实施例主要通过一种命令前向预测的机制,动态控制页保持打开策略与页保持关闭策略;同时,构建了命令队列结构,利用该命令队列结构对命令进行重排序,从而能够大大降低了存储器进行数据访问时的延迟,显著增加了数据总线的可利用带宽,提高了***的性能。
在本发明实施例中,对存储器的控制主要以对DDR SDRAM的控制为例进行说明,但不局限于此,可适用于对任何类型存储器的控制。
本发明实施例提供了一种存储器的控制方法,如图1所示,所述方法包括:
步骤T1:获取存储体的运行状态;
存储体的运行状态可包括三种:空闲状态,激活状态和等待状态。
等待状态指当存储体接受了命令之后,按照命令协议时间的进行等待,在此等待状态下存储体不接收下一命令;当达到等待时间后,当前一个执行的命令为激活、读、写命令,跳入激活状态。
空闲状态表明存储体当前没有被激活(即存储体当前不存在被激活的行)。当需要对该存储体进行读写操作时,会先对该存储体发送一个行激活的命令,存储体先跳入等待状态,然后进入激活状态。
激活状态,表明当前的存储体处于激活状态,即存储体当前存在被激活的行。
在本发明实施例中,可通过为每个存储体设置存储体调度器,来指示存储体的运行状态,存储体调度器可按照DDR SDRAM的命令协议对相应的存储体进行监测,以提供该存储体的运行状态。
步骤T2:获取待执行的命令队列中所述存储体对应的下一个命令的地址信息;
上述的地址信息主要包括命令的行地址,也可以包括列地址。
在存储体执行当前的命令的同时,会对待执行的命令队列中的命令进行搜索,利用搜索结果来获取该存储体对应的待执行命令队列中的第一个命令(即下一个要执行的命令),搜索的方式可以为搜索命令队列中的每个命令的行地址和存储体地址,从而找出所述存储体对应的下一个命令的行地址。
步骤T3:根据所述运行状态和地址信息动态确定对所述存储体当前所采用的控制策略,所述策略包括页保持打开策略和页保持关闭策略。
根据存储体调度器获知存储体的运行状态,当存储体的运行状态为激活状态时,判断所述存储体中激活行的行地址与所述下一个命令的行地址是否一致,若是,即属于行命中的情况,这时,采用页保持打开策略;若否,即属于行缺失的情况,这时,采用页保持关闭策略。
进一步的,本发明实施例还可利用前向预测的结果,控制对处于空闲状态的存储体的激活操作,具体包括如下处理:
根据获取到的该存储体在待执行命令队列中的下一个命令的地址信息,如行地址,通过激活所述存储体中相同的行来激活该存储体,这样当执行下一个命令时,属于行命中的情况,则采用页保持打开策略,以减少访问延时。
为了提高总线效率,在本发明实施例中,还包括:按照预定的排序规则,对待执行命令队列中的命令进行排序;
这时上述步骤T2为:获取排序后的待执行的命令队列中所述存储体对应的下一个命令的地址信息。即在进行前向预测时,利用排序后的命令动态确定所采用的策略。
首先,构建命令队列结构以进入队列的命令进行重排序,这里,本发明实施例提供了一种利用寄存器组来实现的排序的处理方法,具体包括如下处理:
进入队列结构的命令根据排序规则,获知自己在队列的位置后,将该命令信息存至队列,并调整在命令队列中的其他命令的位置。当读取命令时每次只读取队列中的第一个命令,当第一个命令被取出时那么队列中的剩下的命令则前移,直到队列中无命令。
可选的,如图2所示,命令队列结构可由8个寄存器组成。每个寄存器保存命令的驻留时间、行地址、列地址、存储体地址、命令类型和数据长度的信息。
其中,队列结构的头,也就是0位置对应的寄存器,是单方向命令只能由1位置的寄存器进从0位置的寄存器直接出。执行命令读取时,总是从0位置的寄存器进行命令读取,然后进行命令解释。
其余位置的寄存器采用双向移动的方向,即可从前后的寄存器读取命令也可将命令送入前后的寄存器。寄存器的移动根据当前有无新的命令以及0位置的命令是否已取出决定。
如果当前不执行命令读取,有新命令进入时,命令队列中有三个命令分别位于0位置的寄存器,1位置的寄存器,2位置的寄存器,新命令的位置落在1位置的寄存器。则此时0位置的命令保持不变,1位置的命令被新的命令取代,而原来的1,2位置的命令则移动到2,3位置。
如果当前执行命令读取,且有新命令进入时,命令队列中有三个命令分别位于0位置的寄存器,1位置的寄存器,2位置的寄存器,新命令的位置落在1位置的寄存器。则此时新命令放在位置0,而1,2位置的命令保持不变。
当命令队列已满时,下一个新的命令不能够进入队列。可为队列结构中的命令设置计数器,以记录该命令的驻留时间,例如,根据命令在队列的时间,每个周期计数器加1,当超过***预设值之后保持该计数器的值保持不变。
下面对上述命令队列的排序规则进行说明。
排序规则根据已在命令队列中的命令信息明确新命令摆放的位置,主要包括禁止规则和重排规则,所述禁止规则优先于所述重排规则;
禁止规则包括:命令驻留时间超出时禁止;读写地址重叠时禁止;命令源重合时读写命令禁止;重排规则包括:行命中优先;读写命令相同优先。
经过上述排序规则过滤之后,得到当前命令的存放位置。下面分别对各个规则进行说明。
1、命令驻留时间超出时禁止
为了防止命令等待的时间过长导致“饿死”的情况,如对命令2(cmd2),由于其的优先级较低,很多后来的命令先于cmd2执行,从而导致cmd2长时间得不到响应,影响***的效率。
因此,设定计数器计算并记录命令的驻留时间,当获知cmd2在命令队列中的等待时间超出预定时间(如32个周期)后,禁止新入队的命令先于cmd2执行,从而保证了cmd2在一定的时间内得到响应。
2、读写地址重叠时禁止
***中写命令是对已指定的地址中的数据进行更新;读命令是获取已指定的地址中的数据。地址重叠的意思是读写命令的存储体地址、行地址即列地址相同。
为防止当采用命令排序后,地址重叠可能引入的冲突。例如,假设原始数据为D0,进行一次写之后的数据为D1,进行第二次写之后的数据为D2,可能会带来如下冲突:
读后写冲突:此时期望的读数据为写命令更新后的D1。但当读和写顺序颠倒后读的数据为更新之前的数据D0。
写后写冲突:此时期望的写之后的最终数据为D2。但当写操作之间的顺序颠倒后得到的最终数据为D1。
写后读冲突:此时期望的读数据为D0,但当读和写颠倒顺序之后数据为D1。
为避免上述冲突的发生,当新入队的命令与待执行队列中的命令的地址重叠时,禁止新入队的命令排在所述命令前。
3.命令源重合时读写命令禁止
每一命令来自一个端口(源)。同一的端口的读写命令是按照一定顺序发送过来的。
对于读操作来说,该端口的期望读命令返回的数据是按照读命令发送的顺序传递。如果重排顺序,那么需要一个将顺序恢复的机制,而这种实现方式的代价比较大,所以不对同一端口的读操作进行重新排序。
对于写命令来说,如果重排顺序,那么写命令对应数据也要按照排序后的顺序来传输,这种实现方式的代价比较大,所以不对同一端口的写操作进行重新排序。
但对于来自同一端口的读操作和写操作,可以进行排序。
即当所述的命令来自同一个端口且所述命令的命令类型相同时,禁止对所述命令进行排序,该命令类型包括读命令和写命令。
4.行命中优先
行命中是新入队的命令与命令队列中某一命令的存储体地址和行地址相同时,将该新入队的命令放到所述命令的下一位,从而避免了属于行命中情况的两个的命令之间,存在行缺失情况时,增加行预充电延时和行激活延时。
5、读写命令相同优先
该规则将读命令或写命令收集在一起,即若新入队的命令与命令队列中命令的命令类相同,将新入队的命令放到与该命令类型相同的命令的下一位。从而减少读写命令的反转,减少DDR SDRAM的命令流水线与数据流水线的空闲状态。
其中,当出现同时满足行命中优先和读写命令相同优先的情况时,首先考虑读写命令相同优先的规则,在此基础上,再考虑行命中优先的规则。
通过将上面几项的排序原则结合起来,可以得到新入队命令最合适的位置,得到一个重排序的命令序列,利用排序后的命令序列对DDR SDRAM进行控制,可以大大提高总线效率。
为了清楚理解本发明实施例,下面结合具体的示例进行说明。
若***当前的命令队列结构中有三个命令Cmd0、Cmd1和Cmd2,待入队的新命令为Cmd_in,设置***预定的命令驻留时间为32个周期。即未排序前命令的顺序为:Cmd0,Cmd1,Cmd2,Cmd_in,
其中,各命令的具体命令信息如下:
(1)Cmd0的信息
命令类型:读,存储体地址=0,行地址:0,列地址:0,
长度:16,命令端口:0,驻留时间:10
(2)Cmd1的信息
命令类型:读,存储体地址=1,行地址:2,列地址:128,
长度:16,命令端口:1,驻留时间:8
(3)Cmd2的信息
命令类型:写,存储体地址=0,行地址:3,列地址:36,
长度:16,命令端口:2驻留时间:5
(4)Cmd_in的信息
命令类型:读,存储体地址=0,行地址:0,列地址:36,
长度:16,命令端口:3驻留时间:0
根据上述各个命令的信息,将待进入队列的新命令与队列中已有的命令进行比较可知存在如下结论:
A.所有命令的驻留时间都小于32。队列中不存在命令驻留时间超出禁止的情况。
B.没有地址重叠的命令,不存在读写地址重叠时禁止情况。
C.不存在命令源重合读写命令禁止情况。
D.Cmd_in与Cmd0的存储体地址,行地址相同,属于行命中的情况,满足行命中优先情况。
E:Cmd_in与Cmd0,Cmd1的读写命令相同,满足读写命令相同优先的情况。
综合上述结论得到,将新的命令的位置重排在Cmd0位置之后,则此时命令队列中的命令为:
Cmd0,Cmd_in,Cmd1,Cmd2
未排序前执行命令时,进行如下操作:
Cmd0,Cmd1正常执行。Cmd2与Cmd0的存储体地址相同而行地址不同,属于行缺失情况,则采用页保持打开策略执行Cmd2命令时,会首先关闭存储体0,进行行预充电,等待行预充电延时后激活存储体0,等待行激活延时后执行cmd2。然后Cmd_in也是与Cmd2存储体地址相同而行地址不同,执行同样的操作,首先关闭存储体0,等待行预充电延时后激活存储体0,等待行激活延时后执行Cmd_in。
进行排序后执行命令时,进行如下操作:
Cmd0正常执行。Cmd_in与Cmd0的存储体地址相同而行地址相同,采用页保持打开策略,可以直接执行Cmd_in,而且此时相比较排序前的顺序来说,Cmd0,Cmd_in都是存储体0命令,占用存储体0的时间相对充足,可以用于掩藏较长的Cmd1的激活时间或关闭时间。Cmd2与Cmd_in的存储体地址相同而行地址不同,那么Cmd2命令在执行的时候,会首先关闭存储体0,等待行预充电延时后激活存储体0,等待行激活延时后执行cmd2。因而重排序后所花的时间减少了:行预充电延时+行激活延时+掩藏Cmd1的命令时间。
进一步的,结合上述的前向预测机制,由于DDR SDRAM命令协议的特点,同一存储体的命令是有空隙的,采用在命令空隙的时候,对命令队列中的命令进行前向预测。
此时存储体0调度器的状态处于等待状态,若存储体1调度器处于空闲状态。
命令队列的命令为:
Cmd0,Cmd_in,Cmd1,Cmd2,
对当前的处理进行分析,可得到如下结论:
对Cmd0,Cmd0为存储体0的命令,命令队列中存储体0对应的下一个命令为Cmd_in,Cmd0和Cmd_in属于行命中的情况,等待状态结束进入激活状态,执行Cmd0时采用页保持打开策略;
对Cmd_in,Cmd_in为存储体0的命令,直接执行该命令;
对Cmd1,Cmd1为存储体1的命令,存储体1调度器处于空闲状态,需要执行激活命令,激活存储体1时,利用Cmd1命令的行地址对存储体1进行激活,即激活存储体1中Cmd1命令的行地址对应的行,以避免行缺失的情况;
对Cmd2,Cmd2为存储体0的命令,由于队列前端已有同存储体0的命令,即Cmd2不是存储体0对应的待执行命令的第一个命令,所以暂不不处理,当执行Cmd_in时,发现存储体0的下一个待执行命令,即Cmd2,属于行缺失的情况,则确定当前采用页保持关闭策略。
由上所述,确认下一个命令为存储体1的激活命令,该命令只要满足DDRSDRAM命令协议就可以执行。采用上述处理方式,能够使对存储体1的激活操作在执行Cmd_in的空隙中执行,可以有效的掩藏激活操作的等待时间,降低了数据访问的延时。
本发明还提供了一种存储器控制器,如图3所示,包括:
存储体调度器31,用于获取存储体的运行状态;
命令前向观测单元32,用于获取待执行的命令队列中所述存储体对应的下一个命令的地址信息;
策略确定单元33,用于根据所述存储体调度器31获取的运行状态和所述命令前向观测单元32获取的地址信息动态确定对所述存储体当前所采用的控制策略,所述策略包括页保持打开策略和页保持关闭策略。
进一步的,上述存储器控制器还包括:
命令排序单元,用于按照预定的排序规则,对待执行命令队列中的命令进行排序;
所述命令前向观测单元32,还用于获取经所述命令排序单元排序后的待执行命令队列中所述存储体对应的下一个命令的地址信息。
进一步的,为保障命令排序单元能够对队列进行排序,上述存储器控制器还包括至少两个命令队列构建寄存器,用以构建命令队列结构
所述命令队列构建寄存器,用于保存命令的信息,向所述命令前向观测单元提供该命令相应的信息,并根据所述命令排序单元的排序结果更新所保存的命令的信息,其中,所述命令的信息包括命令的存储体地址、行地址和列地址,命令类型。
应当注意到,上述存储器控制器负责整个***的调度、存储体之间DDRSDRAM命令协议控制和对DDR SDRAM命令的解释。当命令队列中有命令,存储器控制器从命令队列中的第一位取命令,定义为当前命令。
该存储器控制器采用了全流水线的操作,在每一周期根据各个存储体反馈的信息、DDR SDRAM的命令流水线与数据流水线的信息确定下一个时钟周期将要执行的DDR SDRAM命令。当前命令执行完后则从命令队列取下一个命令,直到命令队列空。
进一步的该存储器控制器还要处理自动刷新、低功耗、模式寄存器配置等功能。
由于每个时钟周期的每个存储体可选取出一个命令,但DDR SDRAM的命令总线每个时钟周期只能执行一个命令,需要对命令进行选择。本发明实施例根据时间优先的原则进行选择。
存储器控制器当前处理的存储体优先级最高,有行缺失命令那么在采用自动刷新读写命令,这样可以提前使该存储体进入页保持关闭状态,而且因为自动刷新命令不占用DDR SDRAM命令总线带宽,减少了命令执行的延迟。对于其他的存储体来说,存储器控制器根据命令所在的命令队列位置的次序,确定选用哪个存储体执行下一步的命令。
本发明实施例提供的存储器控制器中各功能模块的具体工作方式参见本发明的方法实施例。
本发明实施例提供的技术方案,采用了命令前向预测的机制,即根据待执行命令的信息确定当前采用的控制策略,能够根据不同命令的不同特点动态确定当前采用的策略,从而能够充分利用页保持打开策略和页保持关闭策略的优点;同时,该技术方案可以对命令队列中的命令进行重排序,增加行命中的操作,减少读写命令的切换。本发明实施例提供的技术方案大大降低了存储器进行数据访问时的延迟,显著增加了数据总线的可利用带宽,提高了***的性能。
本发明实施例一种存储器控制***,如图4所示,所述***包括存储器控制器41和双倍数据传输速度同步动态随机存取存储器DDR SDRAM42,所述DDR SDRAM42包括至少两个存储体,
所述存储器控制器41包括,存储体调度器,用于获取存储体的运行状态;命令前向观测单元,用于获取待执行的命令队列中所述存储体对应的下一个命令的地址信息;策略确定单元,用于根据所述存储体调度器获取的运行状态和所述命令前向观测单元获取的地址信息动态确定对所述存储体当前所采用的控制策略,并将该策略对应的命令进行解释后发送至DDR SDRAM42,所述策略包括页保持打开策略和页保持关闭策略;
所述DDR SDRAM42,用于按照所述存储器控制器41解释后的命令进行相应操作。
进一步的,所述存储器控制器41还包括:
命令排序单元,用于按照预定的排序规则,对待执行命令队列中的命令进行排序,并将排序后命令的信息发送到所述存储器控制器的命令前向观测单元;
所述存储器控制器的命令前向观测单元,还用于获取经所述命令排序单元排序后的待执行命令队列中所述存储体对应的下一个命令的地址信息。
如图5所示,为本发明实施例提供的存储器控制***的原理图,由寄存器组(如由8个寄存器构成的寄存器组)构建命令队列结构,新命令到来时,根据排序规则进行命令重排序,同时,利用命令前向预测机制对寄存器组中的命令进行前向观测,确定采用的控制策略,存储器控制器对整个***的操作进行控制,将最终解释输出的命令发送给DDR SDRAM。
本发明实施例提供的技术方案,采用了命令前向预测的机制,即根据待执行命令的信息确定当前采用的控制策略,能够根据不同命令的不同特点动态确定当前采用的策略,从而能够充分利用页保持打开策略和页保持关闭策略的优点;同时,该技术方案可以对命令队列中的命令进行重排序,增加行命中的操作,减少读写命令的切换。本发明实施例提供的技术方案大大降低了存储器进行数据访问时的延迟,显著增加了数据总线的可利用带宽,提高了***的性能。
本领域普通技术人员可以理解实现上述实施例中的全部或部分步骤,可以通过程序指令相关硬件完成。所述实施例对应的软件可以存储在一个计算机可存储读取的介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。