一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

动态随机存取存储器的刷新方法及内存控制器、电子装置与流程

2021-02-19 22:31:00 来源:中国专利 TAG:存储器 存取 控制器 装置 刷新
动态随机存取存储器的刷新方法及内存控制器、电子装置与流程

本公开的实施例涉及一种动态随机存取存储器的刷新方法及内存控制器、电子装置。



背景技术:

计算机系统通常会采用动态随机存取存储器(Dynamic Random Access Memory,DRAM)作为系统的主存储器(或称为内存)。DRAM具有较高的密度和低廉的价格,因此广泛应用于计算机系统中。DRAM是一种半导体存储器,主要的工作原理是利用电容来存储数据,以电容内存储电荷的多寡来表示二进制比特(bit)为“0”或“1”。



技术实现要素:

本公开至少一个实施例提供一种用于动态随机存取存储器的刷新方法,其中,所述动态随机存取存储器包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块,所述方法包括:确定所述多个存储队列对应的多个状态机的状态,其中,所述多个存储队列与所述多个状态机一一对应;确定所述多个存储队列对应的多个预测地址;基于所述多个状态机的状态、所述多个预测地址以及错误监测和擦洗计数器的数值,生成刷新请求,并将所述刷新请求发送给与所述动态随机存取存储器连接的仲裁器,以使得所述仲裁器对所述刷新请求进行仲裁,并且响应于所述刷新请求赢得仲裁,将所述刷新请求发送给所述动态随机存取存储器,以用于实现所述动态随机存取存储器的刷新;其中,所述刷新请求包括全区块刷新请求、同区块刷新请求、全区块刷新管理刷新请求和同区块刷新管理刷新请求。

例如,在本公开一实施例提供的方法中,确定所述多个存储队列对应的多个状态机的状态包括:对于每个状态机,根据推迟刷新计数器的数值、刷新管理指示、自刷新进入请求以及自刷新退出命令,确定所述状态机的状态。

例如,在本公开一实施例提供的方法中,所述状态机包括7种状态:第一优先级状态、刷新管理状态、第一冲刷状态、第二优先级状态、第二冲刷状态、自刷新状态和自刷新退出状态,所述第一优先级状态、所述刷新管理状态和所述第一冲刷状态的优先级为第一等级,所述第二优先级状态和所述第二冲刷状态的优先级为第二等级,所述第一等级高于所述第二等级。

例如,在本公开一实施例提供的方法中,对于每个状态机,根据所述推迟刷新计数器的数值、所述刷新管理指示、所述自刷新进入请求以及所述自刷新退出命令,确定所述状态机的状态,包括:响应于所述推迟刷新计数器的数值大于或等于阈值,使所述状态机进入所述第一优先级状态;响应于所述推迟刷新计数器的数值小于所述阈值,使所述状态机进入所述第二优先级状态;响应于接收到所述刷新管理指示且所述推迟刷新计数器的数值小于最大值,使所述状态机进入所述刷新管理状态;响应于所述自刷新进入请求,根据所述状态机的当前状态,使所述状态机立即或延迟进入所述第二冲刷状态;响应于所述状态机处于所述第二冲刷状态,并且所述推迟刷新计数器的数值大于或等于所述阈值或者接收到所述刷新管理指示,使所述状态机进入所述第一冲刷状态;响应于所述状态机处于所述第一冲刷状态,命令队列未排空,并且所述推迟刷新计数器的数值小于所述阈值或者与所述刷新管理指示对应的操作完成,使所述状态机进入所述第二冲刷状态;响应于所述状态机处于所述第一冲刷状态或所述第二冲刷状态,并且所述命令队列已排空,使所述状态机进入所述自刷新状态;响应于所述自刷新退出命令,使所述状态机进入所述自刷新退出状态;响应于与所述自刷新退出状态对应的操作完成,根据所述推迟刷新计数器的数值,使所述状态机进入所述第一优先级状态或所述第二优先级状态。

例如,在本公开一实施例提供的方法中,响应于所述自刷新进入请求,根据所述状态机的当前状态,使所述状态机立即或延迟进入所述第二冲刷状态,包括:响应于所述自刷新进入请求,在所述状态机处于所述第一优先级状态或所述刷新管理状态的情形,使所述状态机保持所述第一优先级状态或所述刷新管理状态直至所述推迟刷新计数器的数值小于所述阈值再进入所述第二冲刷状态;响应于所述自刷新进入请求,在所述状态机处于所述第二优先级状态的情形,使所述状态机进入所述第二冲刷状态。

例如,在本公开一实施例提供的方法中,确定所述多个存储队列对应的所述多个预测地址包括:对于每个存储队列,基于区块信息以及所述存储队列对应的状态机的状态,确定所述预测地址。

例如,在本公开一实施例提供的方法中,对于每个存储队列,基于所述区块信息以及所述存储队列对应的状态机的状态,确定所述预测地址,包括:响应于所述状态机处于所述第一优先级状态且对应的存储队列中无正在执行的刷新任务,按照从第一级别至第N级别的优先级顺序将满足要求的区块的地址确定为所述预测地址;响应于所述状态机处于所述第二优先级状态且对应的存储队列中无正在执行的刷新任务,按照从所述第一级别至第M级别的优先级顺序将满足要求的区块的地址确定为所述预测地址;响应于所述状态机处于所述第一优先级状态且对应的存储队列中有正在执行的刷新任务,确定所述预测地址为空;响应于所述状态机处于所述第二优先级状态,并且,不存在满足要求的区块或对应的存储队列中有正在执行的刷新任务,确定所述预测地址为空;其中,N>M>1且N和M均为整数,所述第一级别至所述第N级别的优先级顺序逐渐降低,各个级别的优先级顺序基于所述区块信息确定,所述区块信息至少包括:是否有效、是否被刷新、是否存在访存请求、是否空闲、时序是否符合。

例如,本公开一实施例提供的方法还包括:基于所述多个状态机的状态以及所述多个预测地址,生成阻挡地址,并将所述阻挡地址发送给所述仲裁器,以使得所述仲裁器对所述阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡。

例如,在本公开一实施例提供的方法中,基于所述多个状态机的状态以及所述多个预测地址,生成所述阻挡地址,并将所述阻挡地址发送给所述仲裁器,包括:响应于所述状态机处于所述第一优先级状态以及对应的存储队列中无正在执行的刷新任务,生成所述阻挡地址,并将所述阻挡地址发送给所述仲裁器。

例如,在本公开一实施例提供的方法中,在所述状态机的当前状态属于全区块场景的情形,所述阻挡地址为对应的存储队列的地址;在所述状态机的当前状态属于同区块场景的情形,所述阻挡地址为所述存储队列对应的预测地址。

例如,在本公开一实施例提供的方法中,基于所述多个状态机的状态、所述多个预测地址以及所述错误监测和擦洗计数器的数值,生成所述刷新请求,并将所述刷新请求发送给与所述动态随机存取存储器连接的所述仲裁器,包括:响应于所述错误监测和擦洗计数器的数值等于预设值,对与所述预设值对应的存储队列进行标记,以使被标记的存储队列对应的下一个刷新请求为全区块类型的刷新请求;响应于所述多个状态机不处于所述自刷新退出状态、所述第一冲刷状态、所述第二冲刷状态和所述自刷新状态,基于所述多个状态机的状态,根据优先级选择规则选择存储队列并基于被选择的存储队列是否被标记,生成所述刷新请求,并且将所述刷新请求发送给所述仲裁器;响应于所述多个状态机处于所述自刷新退出状态、所述第一冲刷状态或所述第二冲刷状态,随机选择一个状态机对应的存储队列,并根据所述状态机的状态对应的操作生成全区块刷新请求或全区块刷新管理刷新请求以作为所述刷新请求,并且将所述刷新请求发送给所述仲裁器;其中,所述刷新请求包括请求命令、请求地址和标志位,在所述刷新请求为所述全区块刷新请求或所述全区块刷新管理刷新请求的情形,所述请求地址为被选择的存储队列的地址,在所述刷新请求为所述同区块刷新请求的情形,所述请求地址为被选择的存储队列对应的预测地址,在所述刷新请求为所述同区块刷新管理刷新请求的情形,所述请求地址为被选择的存储队列中需要进行刷新管理操作的区块的地址,所述标志位指示被选择的存储队列对应的状态机的优先级级别为所述第一等级或所述第二等级。

例如,在本公开一实施例提供的方法中,所述第一优先级状态包括第一子状态和第二子状态,所述第一子状态的优先级高于所述第二子状态的优先级,所述第一子状态为所述推迟刷新计数器的数值达到最大值,所述第二子状态为所述推迟刷新计数器的数值小于所述最大值且未收到所述刷新管理指示,所述优先级选择规则为:按照所述第一子状态、所述刷新管理状态、所述第二子状态、所述第二优先级状态的优先级顺序选择对应的存储队列,若所有状态机均处于所述第二优先级状态,则选择预测地址不为空的存储队列,若存在多个具有同一优先级顺序的状态机,则在所述多个具有同一优先级顺序的状态机中随机选择一个状态机对应的存储队列。

例如,在本公开一实施例提供的方法中,在被选择的存储队列对应的状态机为所述刷新管理状态,且所述刷新管理指示对应的区块已执行过同区块类型的刷新的情形,所述刷新请求为所述全区块刷新请求或所述全区块刷新管理刷新请求;在被选择的存储队列对应的状态机为所述刷新管理状态,且所述刷新管理指示对应的区块未执行过同区块类型的刷新以及被选择的存储队列未被标记的情形,所述刷新请求为所述同区块刷新请求或所述同区块刷新管理刷新请求;在被选择的存储队列对应的状态机为所述刷新管理状态,且所述刷新管理指示对应的区块未执行过同区块类型的刷新以及被选择的存储队列被标记的情形,所述刷新请求为所述全区块刷新请求或所述全区块刷新管理刷新请求;在被选择的存储队列对应的状态机为所述第一子状态、所述第二子状态或所述第二优先级状态,且被选择的存储队列未被标记的情形,所述刷新请求为所述同区块刷新请求;在被选择的存储队列对应的状态机为所述第一子状态、所述第二子状态或所述第二优先级状态,且被选择的存储队列被标记的情形,所述刷新请求为所述全区块刷新请求。

例如,在本公开一实施例提供的方法中,所述预设值包括多个不同的数值,所述预设值的不同的数值对应于不同的存储队列,以使不同的存储队列在不同的时刻分别执行所述全区块类型的刷新请求。

例如,在本公开一实施例提供的方法中,所述错误监测和擦洗计数器进行循环计数,所述错误监测和擦洗计数器的最大计数值T为:T=tECSint-9*Trefi2,其中,tECSint为错误监测和擦洗平均间隔时间,Trefi2=1.95微秒,所述预设值小于或等于所述最大计数值。

例如,本公开一实施例提供的方法还包括:响应于生成所述刷新请求、所述刷新请求的标志位指示所述第一等级以及所述请求地址对应的区块非全空闲,生成预充电请求并将所述预充电请求发送给所述仲裁器;其中,在所述刷新请求为所述全区块刷新请求或所述全区块刷新管理刷新请求的情形,所述预充电请求为全区块类型,在所述刷新请求为所述同区块刷新请求或所述同区块刷新管理刷新请求的情形,所述预充电请求为同区块类型。

例如,在本公开一实施例提供的方法中,所述仲裁器还配置为对读写请求、行选通请求、所述预充电请求进行仲裁,进行仲裁的优先级按如下顺序降低:所述标志位指示所述第一等级的刷新请求、所述读写请求、所述行选通请求、所述预充电请求、所述标志位指示所述第二等级的刷新请求。

例如,本公开一实施例提供的方法还包括:响应于所述状态机处于所述自刷新退出状态并且对应的存储队列未收到刷新请求,生成补偿阻挡地址,并将所述补偿阻挡地址发送给所述仲裁器,以使得所述仲裁器对所述补偿阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡,其中,所述补偿阻挡地址为所述存储队列的地址。

本公开至少一个实施例还提供一种用于动态随机存取存储器的内存控制器,其中,所述内存控制器配置为与所述动态随机存取存储器连接且配置为控制所述动态随机存取存储器进行刷新,所述动态随机存取存储器包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块;所述内存控制器包括仲裁器和刷新控制模块,所述刷新控制模块与所述仲裁器连接,所述仲裁器与所述动态随机存取存储器连接;所述刷新控制模块包括多个状态机、多个地址预测单元、错误监测和擦洗计数器以及请求生成单元;所述多个状态机与所述多个存储队列一一对应,所述状态机配置为在多个状态之间切换;所述多个地址预测单元与所述多个存储队列一一对应,所述地址预测单元配置为确定对应的存储队列的预测地址;所述错误监测和擦洗计数器配置为循环计数,并将计数的数值提供给所述请求生成单元;所述请求生成单元配置为基于所述多个状态机的状态、所述预测地址以及所述错误监测和擦洗计数器的数值,生成刷新请求,并将所述刷新请求发送给与所述动态随机存取存储器连接的所述仲裁器;所述刷新请求包括全区块刷新请求、同区块刷新请求、全区块刷新管理刷新请求和同区块刷新管理刷新请求。

例如,在本公开一实施例提供的内存控制器中,所述仲裁器配置为对所述刷新请求进行仲裁,并且响应于所述刷新请求赢得仲裁,将所述刷新请求发送给所述动态随机存取存储器,以用于实现所述动态随机存取存储器的刷新。

例如,在本公开一实施例提供的内存控制器中,所述刷新控制模块还包括多个阻挡地址生成单元;所述多个阻挡地址生成单元与所述多个存储队列一一对应,所述阻挡地址生成单元配置为基于所述预测地址以及所述预测地址对应的存储队列的状态机的状态,生成阻挡地址,并将所述阻挡地址发送给所述仲裁器;所述仲裁器还配置为对所述阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡。

例如,在本公开一实施例提供的内存控制器中,所述刷新控制模块还包括刷新间隔计数器、多个推迟刷新计数器、多个刷新地址记录单元和多个补偿刷新控制单元;所述刷新间隔计数器配置为循环计数,并且当计数值达到计数设定值时产生脉冲并清空,以及将所述脉冲发送给所述多个推迟刷新计数器;所述多个推迟刷新计数器与所述多个存储队列一一对应,所述推迟刷新计数器配置为基于接收到的脉冲对对应的存储队列的被推迟的刷新请求进行计数,并将计数结果发送给所述状态机;所述多个刷新地址记录单元与所述多个存储队列一一对应,所述刷新地址记录单元配置为对已刷新的区块的地址进行记录;所述多个补偿刷新控制单元与所述多个存储队列一一对应,所述补偿刷新控制单元配置为判断是否需要在自刷新退出状态下发送补偿刷新请求,并在需要发送所述补偿刷新请求的情形下提供补偿地址给所述阻挡地址生成单元,以使所述阻挡地址生成单元生成补偿阻挡地址。

例如,本公开一实施例提供的内存控制器还包括刷新管理模块,其中,所述刷新管理模块与所述刷新控制模块连接,所述刷新管理模块配置为统计各个区块执行行选通命令的次数,并在所述行选通命令的次数达到行选通设定值时向所述刷新控制模块发送刷新管理指示。

本公开至少一个实施例还提供一种电子装置,包括如本公开任一实施例所述的内存控制器。

例如,本公开一实施例提供的电子装置还包括所述动态随机存取存储器。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。

图1为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器的结构示意图;

图2为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器中刷新控制模块的结构示意图;

图3为本公开一些实施例提供的一种用于动态随机存取存储器的刷新方法的流程示意图;

图4为本公开一些实施例提供的一种用于动态随机存取存储器的刷新方法中的状态机的示意图;

图5为本公开一些实施例提供的另一种用于动态随机存取存储器的刷新方法的流程示意图;以及

图6为本公开一些实施例提供的一种电子装置的示意框图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

DRAM是易失性存储器,不能持久地保持数据。这是由于DRAM通过电容来存储数据,随着时间推移,电容上的电荷会逐渐流失,从而导致数据的丢失。因此,为了保持数据,需要周期性地对DRAM进行刷新(Refresh),也即是,将电容里的数据读出并重新写入,以将电容上的电荷恢复到原有水平,从而达到保持数据的目的。

然而,在刷新的过程中,DRAM不能够进行正常的读写访问,也不能接收其他任何命令,这给内存带宽带来了负面的影响。在第五代双倍数据率动态随机存取存储器(Double Data Rate Dynamic Random Access Memory,DDR5 DRAM)之前,刷新命令是以队列(Rank)为单位进行的,该类型的刷新命令称为REFab(all bank refresh)。在通常的刷新方案中,大多数是通过对刷新分级来实现刷新调度。当刷新积累到接近可以推迟的上限时间时,再对DRAM进行紧急刷新。紧急刷新发生时,对DRAM性能的影响非常明显。

从DDR5 DRAM开始,在支持REFab的同时,还可以采用更细粒度的刷新命令,该刷新命令是以区块(Bank)为单位进行的,该类型的刷新命令称为REFsb(same bank refresh),该刷新命令会使一个存储队列内具有某一相同区块地址的所有区块执行刷新。同时,从DDR5 DRAM开始,对内存数据安全保护的要求更高,因此出现了刷新管理和错误监测和擦洗(ECS)操作命令。

DRAM中存在一种叫做rowhammer的漏洞,也即,多次访问后导致比特位翻转。在DDR5以前的DRAM中,完全依靠内存控制器本身设计去避免rowhammer的发生。而从DDR5 DRAM开始,提供了一种叫做刷新管理的机制来处理rowhammer漏洞,但也需要内存控制器能够支持。例如,可以通过刷新管理(Refresh Management,RFM)来避免rowhammer的发生。当某一区块收到的行选通命令的次数超过某一阈值时,DRAM需要对该区块执行刷新管理刷新,以保护数据,同时降低记录的行选通命令的次数的数值。

为了保证数据的正确性,从DDR5 DRAM开始,还要求定期的进行ECS操作,主要完成读取、校验,然后再写回的过程,从而及时对数据纠错,保证数据的正确性。ECS可以通过多用途命令(Multi-Purpose Command,MPC)来实现,但会对DRAM的带宽带来负面影响。因此,在高带宽要求下,通常会采用自动ECS。在自动ECS模式下,需要定期执行REFab,DRAM利用REFab运行的时间完成一次自动的读取、检测错误、纠错和写回的流程。

DDR5 DRAM提供了两种刷新命令:REFab和REFsb。在只应用REFab的方案中,DRAM的数据可靠性可以得到保障,不用为ECS做特殊的处理,但是带宽是偏低的。而在只应用REFsb的方案中,虽然带宽上更具优势,但是为了数据的可靠性,需要周期性的通过MPC命令发送手动ECS操作命令,又带来了额外开销,还增加了设计的难度和复杂性。因此,仅采用REFsb或仅采用REFab,已经难以满足可靠性的要求。如何兼顾刷新、数据安全和内存带宽,成为亟待解决的问题。

本公开至少一个实施例提供一种用于动态随机存取存储器的刷新方法及内存控制器、电子装置。该方法具有多层次优先级和多种场景,可以实现全区块类型和同区块类型的混合刷新,能够兼顾刷新管理以及错误监测和擦洗(ECS)的处理,既保证数据的可靠性,又降低了刷新对DRAM带宽的影响,具有安全、可靠、完整、高性能等优点。

下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。

本公开至少一个实施例提供一种用于动态随机存取存储器的刷新方法,该动态随机存取存储器包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块。该方法包括:确定多个存储队列对应的多个状态机的状态,多个存储队列与多个状态机一一对应;确定多个存储队列对应的多个预测地址;基于多个状态机的状态、多个预测地址以及错误监测和擦洗计数器的数值,生成刷新请求,并将刷新请求发送给与动态随机存取存储器连接的仲裁器,以使得仲裁器对刷新请求进行仲裁,并且响应于刷新请求赢得仲裁,将刷新请求发送给动态随机存取存储器,以用于实现动态随机存取存储器的刷新。刷新请求包括全区块刷新请求、同区块刷新请求、全区块刷新管理刷新请求和同区块刷新管理刷新请求。

图1为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器的结构示意图。例如,该内存控制器100适用于对DDR5 DRAM进行控制。需要说明的是,图1中仅示出了内存控制器100中与刷新操作相关的功能模块,其他功能模块可根据需求设置,本公开的实施例对此不作限制。

例如,需要进行刷新的DRAM包括多个存储队列(Rank),每个存储队列包括多个区块组,每个区块组包括多个区块(Bank)。例如,在一些示例中,DRAM包括32或64个存储队列,每个存储队列包括4或8个区块组,每个区块组包括2或4个区块。关于DRAM的具体结构可参考常规设计,此处不再详述。

例如,如图1所示,内存控制器100分别与总线接口和DDR5物理层连接,既可以接收总线接口传输的来自中央处理器(Central Processing Unit,CPU)核心的访存命令来对DRAM进行访问(例如读写数据),又可以控制DRAM进行刷新。例如,内存控制器100通过DDR物理层(DDR PHY Interface,DFI)接口与DDR5物理层连接,例如还可以进一步通过高级外围总线(Advanced Peripheral Bus,APB)接口与DDR5物理层连接,进而实现内存控制器100与DRAM的连接。由此,内存控制器100可以对控制寄存器进行配置、对DRAM进行存储访问,以及发布如刷新、校准等命令。例如,在一些示例中,内存控制器100包含有一个32位宽度不含纠错位(ECC位)的DRAM通道。

例如,该内存控制器100包括地址解码器101、命令队列102、数据缓存103、时序检查器104、区块状态记录表105、仲裁器106、刷新控制模块107、刷新管理模块108、出发队列109和预先预充电模块110。

地址解码器101配置为将接收到的访存请求的物理地址按照配置寄存器指定的地址映射方式,转换成DDR5 DRAM的标准地址格式。命令队列102配置为存储收到的访存命令,同时根据仲裁器106提供的信息对存储的访存请求信息实时更新。例如,若接收到写请求,对应的数据会存储在数据缓存103中。除了存储访存信息外,命令队列102也提供一些统计结果以供其他模块使用。例如,命令队列102需要向刷新控制模块107提供如下两种统计信息:(1)对应区块地址的访存命令统计,以告知刷新控制模块107对应区块是否在命令队列102中存在访存请求;(2)对应区块地址是否存在一种类型的访存命令,这种类型的访存命令是指已经有行选通命令发出,但是读写命令还没发出,也即是,读写未完成的命令。

时序检查器104记录、检测访存中用到的各种时序参数,并为仲裁器106和刷新控制模块107提供必要的时序信息,以保证DRAM访存操作的正确性。区块状态记录表105中记录了DRAM各个区块的地址以及状态,并根据仲裁器106的仲裁结果进行更新。同时,每当有访存请求到达时,区块状态记录表105也会为命令队列102提供该访存请求的初始区块状态信息。

仲裁器106配置为接收其他模块的各种请求,按照既定规则对请求进行筛选。当有命令赢得仲裁时,仲裁器106将赢得仲裁的命令发往出发队列109,同时,仲裁器106还会向各个模块提供反馈信号,以帮助这些模块进行信息更新。例如,仲裁器106还配置为按照刷新控制模块107提供的阻挡地址对与该阻挡地址对应的请求(例如读写请求等)进行阻挡。

刷新控制模块107配置为根据配置寄存器的配置以及命令队列102、时序检查器104、区块状态记录表105和刷新管理模块108提供的信息,推迟或生成刷新请求,并提供相关的优先级指示。由于执行刷新要求对应地址的存储队列或区块处于空闲状态,因此刷新控制模块107还配置为根据需要生成全区块地址预充电(all bank pre-charge,PCHGab)请求或同区块地址预充电(same bank pre-charge,PCHGsb)请求。全区块地址预充电请求会使一个存储队列内所有区块执行预充电,同区块地址预充电请求会使一个存储队列内具有某一相同区块地址的所有区块执行预充电。为了保证刷新和预充电能够正常有序地进行,同时也为了兼顾读写访问,刷新控制模块107还提供阻挡地址,并告知仲裁器106按照阻挡地址对与阻挡地址对应的其他命令进行阻挡。

刷新管理模块108用于统计DRAM中各个区块执行行选通命令的次数。当某个区块执行行选通命令的次数超过行选通设定值时,刷新管理模块108将刷新管理指示发送给刷新控制模块107。刷新控制模块107基于接收到的刷新管理指示改变状态机的状态,以用于在适当条件下生成对应区块的刷新管理刷新请求或对应存储队列的刷新管理刷新请求,从而实现刷新管理(关于生成刷新管理刷新请求,后文将详细说明)。例如,行选通设定值可以为任意适用的数值,这可以根据实际需求而定,本公开的实施例对此不作限制。在对应的刷新管理刷新请求发出后,刷新管理模块108将会按照DDR5协议规定的情况降低对应区块记录的行选通命令的次数。并且,刷新管理模块108还提供阻挡地址,并告知仲裁器106按照阻挡地址对与阻挡地址对应的行选通命令进行阻挡。

出发队列109配置为将来自仲裁器106的请求按照规则发送给DFI接口,并最终到达DRAM,并且接收从DRAM读回的数据,并将数据返回至总线接口,以使该数据到达CPU核心。例如,当来自仲裁器106的请求为写请求时,出发队列109还将从数据缓存103得到的数据按照规则发送给DFI接口,并最终到达DRAM,以实现数据写入。

预先预充电模块110配置为监测区块访问历史,当某个区块在一定时间内没有被读写访问时,预先预充电模块110会产生预充电命令将该区块关闭。

图2为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器中刷新控制模块的结构示意图。例如,如图2所示,刷新控制模块107包括刷新间隔计数器201、多个推迟刷新计数器202、多个状态机203、多个刷新地址记录单元204、请求生成单元205、多个地址预测单元206、多个阻挡地址生成单元207、多个补偿刷新控制单元208、错误监测和擦洗计数器209。刷新控制模块107主要工作在细粒度模式下,可以支持全区块类型(all bank)和同区块类型(same bank)的请求,也即,支持混合刷新方案,并且能够支持自动ECS操作和刷新管理操作。

多个状态机203与多个存储队列一一对应,也即是,每个存储队列单独分配有一个状态机203。状态机203配置为在多个状态之间切换。多个地址预测单元206与多个存储队列一一对应,也即是,每个存储队列分配有一个地址预测单元206。地址预测单元206配置为确定对应的存储队列的预测地址。错误监测和擦洗计数器209配置为循环计数,并将计数的数值提供给请求生成单元205。请求生成单元205配置为基于多个状态机203的状态、预测地址以及错误监测和擦洗计数器209的数值,生成刷新请求,并将刷新请求发送给与DRAM连接的仲裁器106。例如,请求生成单元205生成的刷新请求包括全区块刷新请求、同区块刷新请求、全区块刷新管理刷新请求和同区块刷新管理刷新请求。在每一次生成刷新请求时,请求生成单元205会生成上述4种请求中的一种。

多个阻挡地址生成单元207与多个存储队列一一对应,也即是,每个存储队列单独分配有一个阻挡地址生成单元207。阻挡地址生成单元207配置为基于预测地址以及预测地址对应的存储队列的状态机203的状态,生成阻挡地址,并将阻挡地址发送给仲裁器106。

刷新间隔计数器201配置为循环计数,并且当计数值达到计数设定值时产生脉冲并清空,以及将脉冲发送给多个推迟刷新计数器202。多个推迟刷新计数器202与多个存储队列一一对应,也即是,每个存储队列单独分配有一个推迟刷新计数器202。推迟刷新计数器202配置为基于接收到的脉冲对对应的存储队列的被推迟的刷新请求进行计数,并将计数结果发送给状态机203。多个刷新地址记录单元204与多个存储队列一一对应,也即是,每个存储队列单独分配有一个刷新地址记录单元204。刷新地址记录单元204配置为对已刷新的区块的地址进行记录。

多个补偿刷新控制单元208与多个存储队列一一对应,也即是,每个存储队列单独分配有一个补偿刷新控制单元208。补偿刷新控制单元208配置为判断是否需要在自刷新退出状态下发送补偿刷新请求,并在需要发送补偿刷新请求的情形下提供补偿地址给阻挡地址生成单元207,以使阻挡地址生成单元207生成补偿阻挡地址。

图3为本公开一些实施例提供的一种用于动态随机存取存储器的刷新方法的流程示意图。例如,在一些示例中,如图3所示,该方法包括如下操作。

步骤S10:确定多个存储队列对应的多个状态机的状态,其中,多个存储队列与多个状态机一一对应;

步骤S20:确定多个存储队列对应的多个预测地址;

步骤S30:基于多个状态机的状态、多个预测地址以及错误监测和擦洗计数器的数值,生成刷新请求,并将刷新请求发送给与动态随机存取存储器连接的仲裁器,以使得仲裁器对刷新请求进行仲裁,并且响应于刷新请求赢得仲裁,将刷新请求发送给动态随机存取存储器,以用于实现动态随机存取存储器的刷新,其中,刷新请求包括全区块刷新请求、同区块刷新请求、全区块刷新管理刷新请求和同区块刷新管理刷新请求。

下面结合图2所示的刷新控制模块107对上述各个步骤进行示例性说明。

例如,在步骤S10中,多个存储队列与多个状态机203一一对应,也即是,每个存储队列单独分配有一个状态机203,多个状态机203的状态可以相同或不同。

如图4所示,状态机203包括7种状态:第一优先级状态302、刷新管理状态303、第一冲刷状态305、第二优先级状态301、第二冲刷状态304、自刷新状态306和自刷新退出状态307。第一优先级状态302、刷新管理状态303和第一冲刷状态305的优先级为第一等级,第二优先级状态301和第二冲刷状态304的优先级为第二等级,第一等级高于第二等级。也即是,第一优先级状态302、刷新管理状态303和第一冲刷状态305这3个状态的优先级较高,而第二优先级状态301和第二冲刷状态304这2个状态的优先级较低。自刷新状态306和自刷新退出状态307这2个状态为自刷新相关的状态,不进行优先级的区分。

第一优先级状态302的优先级高于第二优先级状态301的优先级,在工作时,第一优先级状态302和第二优先级状态301是主要的两个状态。刷新管理状态303用于生成刷新管理刷新请求,以通过刷新管理机制来处理rowhammer漏洞。自刷新状态306是DRAM的一种用于休眠模式或低功耗模式下的状态,在自刷新状态306下,DRAM会根据内部时钟周期性地刷新以保持数据,此状态下DRAM不接收来自外部的任何命令。第一冲刷状态305和第二冲刷状态304用于为进入自刷新状态306做准备,第一冲刷状态305的优先级高于第二冲刷状态304的优先级。在第一冲刷状态305和第二冲刷状态304下,命令队列102会进行清空(也即全部发出),除此之外,高优先级的刷新请求也会进行清空(也即全部发出),低优先级的刷新请求会根据需求选择性地进行清空(也即选择是否全部发出)。自刷新退出状态307用于发送补偿刷新请求。

例如,如图4所示,状态机203可以在7种状态之间按照图中带箭头线条所表示的方向进行跳转和切换,以实现状态的改变。

例如,确定多个存储队列对应的多个状态机203的状态可以包括:对于每个状态机203,根据推迟刷新计数器202的数值、刷新管理指示、自刷新进入请求以及自刷新退出命令,确定状态机203的状态。

进一步地,对于每个状态机203,根据推迟刷新计数器202的数值、刷新管理指示、自刷新进入请求以及自刷新退出命令,确定状态机203的状态,可以包括如下操作:响应于推迟刷新计数器202的数值大于或等于阈值,使状态机203进入第一优先级状态302;响应于推迟刷新计数器202的数值小于阈值,使状态机203进入第二优先级状态301;响应于接收到刷新管理指示且推迟刷新计数器202的数值小于最大值,使状态机203进入刷新管理状态303;响应于自刷新进入请求,根据状态机203的当前状态,使状态机203立即或延迟进入第二冲刷状态304;响应于状态机203处于第二冲刷状态304,并且推迟刷新计数器202的数值大于或等于阈值或者接收到刷新管理指示,使状态机203进入第一冲刷状态305;响应于状态机203处于第一冲刷状态305,命令队列未排空,并且推迟刷新计数器202的数值小于阈值或者与刷新管理指示对应的操作完成,使状态机203进入第二冲刷状态304;响应于状态机203处于第一冲刷状态305或第二冲刷状态304,并且命令队列已排空,使状态机203进入自刷新状态306;响应于自刷新退出命令,使状态机203进入自刷新退出状态307;响应于与自刷新退出状态307对应的操作完成,根据推迟刷新计数器202的数值,使状态机203进入第一优先级状态302或第二优先级状态301。

例如,上述阈值可以根据需求设置并由配置寄存器指定。通常,DRAM需要按照刷新平均时间间隔(Trefi)进行周期性刷新,在正常刷新模式下最多可以被推迟4次,在细粒度刷新模式下最多可以被推迟8次。因此,上述阈值可以设置为小于8的数值,例如为5、6或7等,这可以根据实际需求而定,本公开的实施例对此不作限制。例如,上述最大值可以根据实际需求设置,例如可以设置为8或其他适用的数值,本公开的实施例对此不作限制。

状态机203在第一优先级状态302和第二优先级状态301之间进行状态转换的主要依据是推迟刷新计数器202的数值。当推迟刷新计数器202的数值大于或等于阈值时,状态机203进入第一优先级状态302(也即进入高优先级状态);当推迟刷新计数器202的数值小于阈值时,状态机203进入第二优先级状态301(也即进入低优先级状态)。

例如,第一优先级状态302划分为第一子状态和第二子状态,第一子状态的优先级高于第二子状态的优先级。例如,第一子状态为推迟刷新计数器202的数值达到最大值,第二子状态为推迟刷新计数器202的数值小于最大值且未收到刷新管理指示。

例如,刷新间隔计数器201在内存控制器100和DRAM完成初始化后开始工作。刷新间隔计数器201循环计数,并且当计数值达到计数设定值(该计数设定值例如为Trefi)时产生脉冲并清空,将产生的脉冲发送给推迟刷新计数器202,然后重新计数。例如,在细粒度模式下,Trefi为1.95微秒。例如,刷新控制模块107会根据DRAM的温度信息动态调整Trefi的值。每当刷新间隔计数器201产生脉冲时,所有推迟刷新计数器202均加1计数一次。推迟刷新计数器202的数值代表当前被推迟的刷新请求的数量,推迟刷新计数器202的数值为0时代表DRAM不需要刷新。

当刷新控制模块107接收到刷新管理指示并且推迟刷新计数器202的数值小于最大值时,状态机203进入刷新管理状态303。例如,刷新管理指示由刷新管理模块108发出。刷新管理模块108统计DRAM中各个区块执行行选通命令的次数。当某个区块执行行选通命令的次数超过行选通设定值时,刷新管理模块108将刷新管理指示发送给刷新控制模块107。

当刷新控制模块107接收到自刷新进入请求时,根据状态机203的当前状态,使状态机203立即或延迟进入第二冲刷状态304。例如,响应于自刷新进入请求,在状态机203处于第一优先级状态302或刷新管理状态303的情形,使状态机203保持第一优先级状态302或刷新管理状态303直至推迟刷新计数器202的数值小于阈值再进入第二冲刷状态304,也即是,延迟进入第二冲刷状态304。响应于自刷新进入请求,在状态机203处于第二优先级状态301的情形,使状态机203进入第二冲刷状态304,也即是,立即进入第二冲刷状态304。

例如,在第二冲刷状态304下,命令队列102会进行清空(也即全部发出),高优先级的刷新命令也会进行清空(也即全部发出),并且,刷新控制模块107将根据配置寄存器的指示选择是否将剩余积累的低优先级的刷新请求全部发出。

例如,在某些情况下,命令队列102的排空会需要较长时间,可能导致已经完成冲刷的存储队列对应的推迟刷新计数器202的计数值大于或等于阈值,或者,在等待命令队列102排空的时间内又接收到新的刷新管理指示。当这种情况发生时,也即是,当状态机203处于第二冲刷状态304并且推迟刷新计数器202的数值大于或等于阈值或者接收到刷新管理指示时,状态机203将进入具有高优先级的第一冲刷状态305,从而在对应的存储队列被选中时用高优先级将全区块类型(all bank)的刷新请求发送到仲裁器106,例如发送全区块刷新请求(REFab)或全区块刷新管理刷新请求(All Bank Refresh Management,RFMab),以尽快实现整个存储队列的刷新。当状态机203处于第一冲刷状态305,命令队列未排空,并且推迟刷新计数器202的数值变小直至小于阈值或者与刷新管理指示对应的操作完成,状态机203又回到第二冲刷状态304以继续等待命令队列102排空。这里,与刷新管理指示对应的操作例如是指刷新控制模块107将刷新管理刷新请求发送给仲裁器106。当状态机203处于第一冲刷状态305或第二冲刷状态304,并且命令队列已排空所有存储的访存请求后,状态机203进入自刷新状态306。

在接收到自刷新退出命令时,状态机203从自刷新状态306进入自刷新退出状态307,自刷新退出状态307用于发送补偿刷新请求。补偿刷新控制单元208负责记录距离上一次退出自刷新状态306到本次进入自刷新状态306期间发送命令的情况。若发送命令的情况不符合DDR5协议规定的条件,在自刷新退出状态307下,将会对该存储队列发送一个REFab作为补偿刷新请求。同时,在自刷新退出状态307下,在需要进行补偿刷新的存储队列没有收到补偿刷新请求之前,补偿刷新控制单元208会将补偿地址提供给阻挡地址生成单元207,阻挡地址生成单元207生成补偿阻挡地址,以用于阻挡对应地址的其他请求。若发送命令的情况符合DDR5协议规定的条件,则无需发送补偿刷新请求。

需要说明的是,在其他一些示例中,也可以不采用补偿刷新控制单元208来统计发送命令并判断是否发送补偿刷新请求,而是在进入自刷新状态306前不统计刷新命令数量,在退出自刷新状态306后固定发送指定数量补偿刷新请求,在这种方式下,可以省略补偿刷新控制单元208。

当与自刷新退出状态307对应的操作完成后,也即是,当补偿刷新完成后,根据推迟刷新计数器202的数值,使状态机203进入第一优先级状态302或第二优先级状态301。在接收到自刷新退出命令时,若推迟刷新计数器202的数值大于或等于阈值,则使状态机203进入第一优先级状态302,若推迟刷新计数器202的数值小于阈值,则使状态机203进入第二优先级状态301。

例如,在步骤S20中,多个地址预测单元206分别确定多个存储队列对应的多个预测地址,也即是,多个地址预测单元206与多个存储队列一一对应,每个地址预测单元206确定对应的存储队列所对应的预测地址。例如,预测地址可以是某个区块的地址,表示地址预测单元206所预测的当前存储队列的下一个REFsb请求的区块地址。地址预测单元206将所确定的预测地址提供给请求生成单元205和阻挡地址生成单元207。需要说明的是,每个地址预测单元206都会确定预测地址,该预测地址可以是某个区块的地址,也可以为空。

需要说明的是,若当前存储队列的下一个请求为REFab,则无需使用地址预测单元206确定的预测地址,REFab的地址使用该存储队列的地址即可。

例如,确定多个存储队列对应的多个预测地址包括:对于每个存储队列,基于区块信息以及存储队列对应的状态机203的状态,确定预测地址。

进一步地,对于每个存储队列,基于区块信息以及存储队列对应的状态机203的状态,确定预测地址,可以包括如下操作:响应于状态机203处于第一优先级状态302且对应的存储队列中无正在执行的刷新任务,按照从第一级别至第N级别的优先级顺序将满足要求的区块的地址确定为预测地址;响应于状态机203处于第二优先级状态301且对应的存储队列中无正在执行的刷新任务,按照从第一级别至第M级别的优先级顺序将满足要求的区块的地址确定为预测地址;响应于状态机203处于第一优先级状态302且对应的存储队列中有正在执行的刷新任务,确定预测地址为空;响应于状态机203处于第二优先级状态301,并且,不存在满足要求的区块或对应的存储队列中有正在执行的刷新任务,确定预测地址为空。例如,将区块划分为N个级别,N>M>1且N和M均为整数,第一级别至第N级别的优先级顺序逐渐降低。需要说明的是,N和M的具体数值可以根据实际需求而定,本公开的实施例对此不作限制。

例如,各个级别的优先级顺序基于区块信息确定,区块信息至少包括:是否有效、是否被刷新、是否存在访存请求、是否空闲、时序是否符合等。

例如,在一些示例中,地址预测单元206进行地址预测时,可以参考如下信息:(1)未被刷新,即区块地址是否在刷新地址记录单元204中有记录;(2)无访存请求,即命令队列102中是否存在该区块的访存请求;(3)区块空闲,即对应区块是否处于空闲状态;(4)区块读写完成,即对应区块没有读写未完成的命令;(5)刷新时序符合,即REFsb请求要求的时序检查是否满足;(6)预充电时序符合,即预充电请求要求的时序检查是否满足;(7)有效区块,即当前区块地址是否是有效地址(每个区块组中包含的区块数可能为2个或者4个)。

需要说明的是,地址预测单元206进行地址预测时所参考的区块信息不限于上文中列举的信息,还可以包括其他任意适用的信息,这可以根据实际需求而定,本公开的实施例对此不作限制。

例如,在一些示例中,将区块划分为10个级别,也即是,前述的N等于10。例如,M等于2。地址预测单元206基于如下规则挑选区块以确定预测地址:

(1)第一级别:有效区块,未被刷新,无访存请求,区块空闲,刷新时序符合;

(2)第二级别:有效区块,未被刷新,无访存请求,区块空闲,刷新时序不符合;

(3)第三级别:有效区块,未被刷新,无访存请求,区块非空闲,预充电时序符合;

(4)第四级别:有效区块,未被刷新,无访存请求,区块非空闲,预充电时序不符合;

(5)第五级别:有效区块,未被刷新,有访存请求,区块读写完成,区块空闲,刷新时序符合;

(6)第六级别:有效区块,未被刷新,有访存请求,区块读写完成,区块空闲,刷新时序不符合;

(7)第七级别,有效区块,未被刷新,有访存请求,区块读写完成,区块非空闲,预充电时序符合;

(8)第八级别:有效区块,未被刷新,有访存请求,区块读写完成,区块非空闲,预充电时序不符合;

(9)第九级别:有效区块,未被刷新,区块读写未完成,预充电时序符合;

(10)第十级别:有效区块,未被刷新,区块读写未完成,预充电时序不符合。

例如,从第一级别至第十级别的优先级顺序逐渐降低。

当状态机203处于第一优先级状态302且对应的存储队列中无正在执行的刷新任务时,会按照从第一级别至第十级别的优先级顺序将满足要求的区块的地址确定为预测地址,也即是,进行第一级别至第十级别的预测;当状态机203处于第一优先级状态302且对应的存储队列中有正在执行的刷新任务时,确定预测地址为空。

当状态机203处于第二优先级状态301且对应的存储队列中无正在执行的刷新任务时,会按照从第一级别至第二级别的优先级顺序将满足要求的区块的地址确定为预测地址,也即是,进行第一级别至第二级别的预测;当状态机203处于第二优先级状态301,并且,不存在满足第一级别至第二级别的区块或对应的存储队列中有正在执行的刷新任务时,确定预测地址为空。

低优先级命令只有前两级预测,在没有符合条件的情况时,低优先级命令将会积累,也即是,对应的存储队列所对应的预测地址为空且不会被请求生成单元205选择。高优先级命令拥有所有10级预测。通过这种方式,既可以保证读写和刷新的同时进行,又可以避免造成无意义的行选通,从而提高带宽利用率。这里,“无意义的行选通”是指行选通后,没有发出读写命令就被预充电。

例如,在步骤S30中,请求生成单元205基于多个状态机203的状态、多个预测地址以及错误监测和擦洗计数器209的数值,生成刷新请求,并将刷新请求发送给与DRAM连接的仲裁器106。由此使得仲裁器106对刷新请求进行仲裁,并且,响应于刷新请求赢得仲裁,仲裁器106将刷新请求发送给DRAM,以用于实现DRAM的刷新。

例如,请求生成单元205生成的刷新请求包括全区块刷新请求、同区块刷新请求、全区块刷新管理刷新请求和同区块刷新管理刷新请求。在每一次生成刷新请求时,请求生成单元205会生成上述4种请求中的一种。

例如,全区块刷新请求即为REFab,REFab会使一个存储队列内所有区块执行刷新。同区块刷新请求即为REFsb,REFsb会使一个存储队列内具有某一相同区块地址的所有区块执行刷新。全区块刷新管理刷新请求为RFMab(All Bank Refresh Management),RFMab会使一个存储队列内所有区块执行刷新,以实现刷新管理刷新。同区块刷新管理刷新请求为RFMsb(Same Bank Refresh Management),RFMsb会使一个存储队列内具有某一相同区块地址的所有区块执行刷新,以实现刷新管理刷新。REFab和RFMab为全区块类型的命令,REFsb和RFMsb为同区块类型的命令。因此,本公开实施例提供的刷新方法可以实现全区块类型和同区块类型的混合刷新。

例如,基于多个状态机203的状态、多个预测地址以及错误监测和擦洗计数器209的数值,生成刷新请求,并将刷新请求发送给与DRAM连接的仲裁器106,可以包括如下操作:响应于错误监测和擦洗计数器209的数值等于预设值,对与预设值对应的存储队列进行标记,以使被标记的存储队列对应的下一个刷新请求为全区块类型的刷新请求;响应于多个状态机203不处于自刷新退出状态307、第一冲刷状态305、第二冲刷状态304和自刷新状态306,基于多个状态机203的状态,根据优先级选择规则选择存储队列并基于被选择的存储队列是否被标记,生成刷新请求,并且将刷新请求发送给仲裁器106;响应于多个状态机203处于自刷新退出状态307、第一冲刷状态305或第二冲刷状态304,随机选择一个状态机203对应的存储队列,并根据状态机203的状态对应的操作生成全区块刷新请求或全区块刷新管理刷新请求以作为刷新请求,并且将刷新请求发送给仲裁器106。

例如,当错误监测和擦洗计数器209的数值等于预设值时,对与预设值对应的存储队列进行标记,以使被标记的存储队列对应的下一个刷新请求为全区块类型的刷新请求。例如,全区块类型的刷新请求可以包括全区块刷新请求(REFab)。由此,当某存储队列达到自动ECS间隔时,该存储队列的下一个刷新请求将为全区块类型(例如为REFab),从而实现自动ECS。

例如,在细粒度刷新模式下,在采用自动ECS操作时,存储队列需要每经过tECSint时间执行一次REFab。在本公开的实施例中,使错误监测和擦洗计数器209按照最大计数值T进行循环计数,最大计数值T相较于tECSint时间有所调整,最大计数值T不同于tECSint时间。错误监测和擦洗计数器209的最大计数值T为:T=tECSint-9*Trefi2。其中,Trefi2=1.95微秒,tECSint为错误监测和擦洗平均间隔时间,根据DRAM颗粒大小的不同,tECSint时间为0.161ms~1.287ms。当错误监测和擦洗计数器209的计数值循环一次,则强制使存储队列的下一个刷新请求为REFab,从而实现自动ECS。通过这种方式,配合已有的REFab检查机制,可以确保错误监测和擦洗平均间隔时间到达前有REFab发送至指定的存储队列,从而大幅降低自动ECS设计的复杂度,节省其他逻辑开销。

例如,上述预设值包括多个不同的数值,预设值的不同的数值对应于不同的存储队列,以使不同的存储队列在不同的时刻分别执行全区块类型的刷新请求(例如全区块刷新请求(REFab))。例如,预设值小于或等于最大计数值T。通过这种方式,可以避免所有存储队列在同一时间进行ECS,可以使各个存储队列进行ECS的时间彼此错开,各个存储队列交错进行自动ECS,从而避免对带宽造成冲击。

例如,在一些示例中,可以使上述预设值分别为最大计数值T的1/4倍、1/2倍、3/4倍和1倍。当错误监测和擦洗计数器209的数值等于T*(1/4)时,使第一个物理存储队列下的所有存储队列的下一个刷新请求为REFab,此时预设值T*(1/4)与第一个物理存储队列对应;当错误监测和擦洗计数器209的数值等于T*(1/2)时,使第二个物理存储队列下的所有存储队列的下一个刷新请求为REFab,此时预设值T*(1/2)与第二个物理存储队列对应;当错误监测和擦洗计数器209的数值等于T*(3/4)时,使第三个物理存储队列下的所有存储队列的下一个刷新请求为REFab,此时预设值T*(3/4)与第三个物理存储队列对应;当错误监测和擦洗计数器209的数值等于T时,使第四个物理存储队列下的所有存储队列的下一个刷新请求为REFab,此时预设值T与第四个物理存储队列对应。由此,可以使4个不同的物理存储队列进行ECS的时间彼此错开。

需要说明的是,预设值的数量、具体设置方式以及具体数值可以根据实际需求而定,不限于上文描述的方式,例如可以根据存储队列的数量和最大计数值T来确定,本公开的实施例对此不作限制。

例如,当多个状态机203不处于自刷新退出状态307、第一冲刷状态305、第二冲刷状态304和自刷新状态306时,也即是,当多个状态机203分别处于第一优先级状态302、第二优先级状态301或刷新管理状态303时,基于多个状态机203的状态,根据优先级选择规则选择存储队列并基于被选择的存储队列是否被标记,生成刷新请求,并且将刷新请求发送给仲裁器106。

例如,在一些示例中,请求生成单元205根据如下的优先级选择规则来选择存储队列。该优先级选择规则为:按照第一优先级状态302的第一子状态、刷新管理状态303、第一优先级状态302的第二子状态、第二优先级状态301的优先级顺序选择对应的存储队列,也即是,优先级关系为:第一优先级状态302的第一子状态>刷新管理状态303>第一优先级状态302的第二子状态>第二优先级状态301;若所有状态机203均处于第二优先级状态301,则选择预测地址不为空的存储队列;若存在多个具有同一优先级顺序的状态机203,则在多个具有同一优先级顺序的状态机203中随机选择一个状态机203对应的存储队列。

基于上述优先级选择规则,请求生成单元205会优先挑选高优先级的存储队列。在多个状态机203具有同一优先级顺序的情形下,通过随机选择,可以避免按照固定顺序导致某个存储队列的刷新积累过多。

例如,在被选择的存储队列对应的状态机203为刷新管理状态303,且刷新管理指示对应的区块已执行过同区块类型(same bank类型)的刷新(也即,刷新地址记录单元204中有相应的记录)的情形,请求生成单元205生成的刷新请求为全区块刷新请求(REFab)或全区块刷新管理刷新请求(RFMab)。在被选择的存储队列对应的状态机203为刷新管理状态303,且刷新管理指示对应的区块未执行过同区块类型(same bank类型)的刷新(也即,刷新地址记录单元204中无相应的记录),以及被选择的存储队列未被标记(也即,被选择的存储队列不需要进行ECS)的情形,请求生成单元205生成的刷新请求为同区块刷新请求(REFsb)或同区块刷新管理刷新请求(RFMsb),从而可以提高带宽。在被选择的存储队列对应的状态机203为刷新管理状态303,且刷新管理指示对应的区块未执行过同区块类型(same bank类型)的刷新(也即,刷新地址记录单元204中无相应的记录),以及被选择的存储队列被标记(也即,被选择的存储队列需要进行ECS)的情形,请求生成单元205生成的刷新请求为全区块刷新请求(REFab)或全区块刷新管理刷新请求(RFMab),从而在实现刷新管理的同时实现自动ECS。

需要注意的是,在刷新管理状态303下,刷新命令的发送不受推迟刷新计数器202数值的影响,当其数值为0时,仍然会发送刷新请求,该刷新请求也不影响推迟刷新计数器202的数值。

在被选择的存储队列对应的状态机203为第一子状态、第二子状态或第二优先级状态301,且被选择的存储队列未被标记(也即,被选择的存储队列不需要进行ECS)的情形,请求生成单元205生成的刷新请求为同区块刷新请求(REFsb)。在被选择的存储队列对应的状态机203为第一子状态、第二子状态或第二优先级状态301,且被选择的存储队列被标记(也即,被选择的存储队列需要进行ECS)的情形,请求生成单元205生成的刷新请求为全区块刷新请求(REFab),从而实现自动ECS。

需要说明的是,本公开的实施例中,当错误监测和擦洗计数器209的数值等于预设值时,对与预设值对应的存储队列进行标记的方式不受限制,可以采用任意的方式进行标记,例如设置标记位、设置标记缓存区、设置ECS记录表等,这可以根据实际需求而定。例如,当完成ECS后,去掉该存储队列的标记,以使该存储队列处于未标记的状态。

通过划分第一优先级状态302的第一子状态、刷新管理状态303、第一优先级状态302的第二子状态、第二优先级状态301这4种优先级等级,可以覆盖到不同的刷新请求紧急等级。最高级(也即第一优先级状态302的第一子状态)可以保证刷新不会违规;第二级(也即刷新管理状态303)可以优先放行刷新管理相关的刷新命令,以尽快使行选通命令的次数恢复正常;第三级(也即第一优先级状态302的第二子状态)代表刷新已经积累到了一定程度。通过这样的优先级划分,可以充分保证刷新安全和读写进程。

例如,当多个状态机203处于自刷新退出状态307、第一冲刷状态305或第二冲刷状态304时,随机选择一个状态机203对应的存储队列,并根据状态机203的状态对应的操作生成全区块刷新请求(REFab)或全区块刷新管理刷新请求(RFMab)以作为刷新请求,并且将刷新请求发送给仲裁器106。

例如,在一些示例中,当随机选择的存储队列对应的状态机203处于自刷新退出状态307时,若需要进行补偿刷新,则请求生成单元205生成的刷新请求为全区块刷新请求(REFab),若不需要进行补偿刷新,则请求生成单元205不生成刷新请求。例如,在一些示例中,当随机选择的存储队列对应的状态机203处于第一冲刷状态305或第二冲刷状态304时,根据此时需要排空的请求的类型,请求生成单元205生成全区块刷新请求(REFab)或全区块刷新管理刷新请求(RFMab)。

例如,所生成的刷新请求包括请求命令、请求地址和标志位。在所生成的刷新请求为全区块刷新请求(REFab)或全区块刷新管理刷新请求(RFMab)的情形,请求地址为被选择的存储队列的地址;在所生成的刷新请求为同区块刷新请求(REFsb)的情形,请求地址为被选择的存储队列对应的预测地址;在所生成的刷新请求为同区块刷新管理刷新请求(RFMsb)的情形,请求地址为被选择的存储队列中需要进行刷新管理操作的区块的地址。

标志位指示被选择的存储队列对应的状态机203的优先级级别为第一等级或第二等级。例如,在一些示例中,可以采用1位二进制数(例如“0”和“1”)来表示被选择的存储队列对应的状态机203处于第一等级或第二等级。例如,第一优先级状态302、刷新管理状态303和第一冲刷状态305为第一等级,第二优先级状态301和第二冲刷状态304为第二等级。

仲裁器106不仅接收来自请求生成单元205的刷新请求,还接收来自其他单元和模块的读写请求、行选通请求、预充电请求等,仲裁器106配置为对刷新请求、读写请求、行选通请求、预充电请求等多种请求进行仲裁。例如,仲裁器106进行仲裁的优先级按如下顺序降低:标志位指示第一等级的刷新请求、读写请求、行选通请求、预充电请求、标志位指示第二等级的刷新请求。仲裁器106能够使高优先级的刷新请求及时到达DRAM以保持DRAM的数据。

需要说明的是,仲裁器106进行仲裁的优先级顺序不限于上述顺序,也可以采用其他任意适用的规则进行仲裁,并且,参与仲裁的请求还可以包括节能(powerdown)请求、寄存器读(mode register read)请求、阻抗校准(zq calibration)请求等多种其他请求,这可以根据实际需求而定,本公开的实施例对此不作限制。

当仲裁器106进行仲裁时,若来自请求生成单元205的刷新请求赢得仲裁,仲裁器106会将赢得仲裁的刷新请求发送给DRAM,以用于实现DRAM的刷新。关于DRAM接收到刷新请求后进行刷新的具体操作,可参考常规设计,此处不再详述。

例如,当刷新请求赢得仲裁后,刷新地址记录单元204会记录下已经刷新的区块地址。当某个存储队列所有区块地址都被REFsb刷新或者收到REFab,刷新地址记录单元204将会清零,并使推迟刷新计数器202减1计数一次。如果刷新地址记录单元204清零的同时刷新间隔计数器201产生脉冲,则推迟刷新计数器202此次不计数。

在本公开实施例提供的刷新方法中,通过采用上述方式,可以实现全区块类型的请求和同区块类型的请求分场景混合发送,在不同场景下使用不同类型刷新命令,在不同场景下选择更适合的刷新命令类型,从而在保证数据安全的前提下,最大化利用REFsb的带宽优势。

本公开实施例提供的刷新方法具有多层次优先级和多种场景(例如具有全区块类型的场景和同区块类型的场景),可以实现全区块类型和同区块类型的混合刷新,能够兼顾刷新管理以及错误监测和擦洗(ECS)的处理,既保证数据的可靠性,又降低了刷新对DRAM带宽的影响,兼顾访存连续性,能够明显提高DRAM的带宽利用率,降低数据错误的风险,具有安全、可靠、完整、高性能等优点。

图5为本公开一些实施例提供的另一种用于动态随机存取存储器的刷新方法的流程示意图。例如,在该实施例中,该方法可以包括如下操作。

步骤S10:确定多个存储队列对应的多个状态机的状态,其中,多个存储队列与多个状态机一一对应;

步骤S20:确定多个存储队列对应的多个预测地址;

步骤S40:基于多个状态机的状态以及多个预测地址,生成阻挡地址,并将阻挡地址发送给仲裁器,以使得仲裁器对阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡;

步骤S30:基于多个状态机的状态、多个预测地址以及错误监测和擦洗计数器的数值,生成刷新请求,并将刷新请求发送给与动态随机存取存储器连接的仲裁器;

步骤S50:响应于生成刷新请求、刷新请求的标志位指示第一等级以及请求地址对应的区块非全空闲,生成预充电请求并将预充电请求发送给仲裁器。

在该实施例中,步骤S10、S20和S30与图3中所示的步骤S10、S20和S30基本相同,相关说明可参考前述内容,此处不再赘述。

下面结合图2所示的刷新控制模块107对步骤S40和S50进行示例性说明。

例如,在步骤S40中,阻挡地址生成单元207基于多个状态机203的状态以及多个预测地址,生成阻挡地址,并将阻挡地址发送给仲裁器106,以使得仲裁器106对阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡。例如,地址预测单元206将预测地址发送给阻挡地址生成单元207,以供阻挡地址生成单元207使用。例如,阻挡地址生成单元207根据如下信息生成阻挡地址:(1)状态机203的状态;(2)地址预测单元206分享的预测地址;(3)对应存储队列是否有刷新正在执行;(4)当前执行REFab场景还是REFsb场景。

进一步地,阻挡地址生成单元207响应于状态机203处于第一优先级状态302以及对应的存储队列中无正在执行的刷新任务,生成阻挡地址,并将阻挡地址发送给仲裁器106。例如,在状态机203的当前状态属于全区块场景(例如REFab场景)的情形,阻挡地址为对应的存储队列的地址;在状态机203的当前状态属于同区块场景(例如REFsb场景)的情形,阻挡地址为存储队列对应的预测地址。

需要说明的是,虽然刷新控制模块107包括多个阻挡地址生成单元207,每个存储队列对应于一个阻挡地址生成单元207,但是,只有当对应的状态机203处于第一优先级状态302并且对应的存储队列中无正在执行的刷新任务时,对应的阻挡地址生成单元207才生成阻挡地址并发送给仲裁器106。其他不满足要求的存储队列对应的阻挡地址生成单元207不会生成阻挡地址,也即是,不会提供有效地址信息,以避免同一时间在同一存储队列中有至少两个区块地址不可访问的情况出现。例如,当状态机203处于优先级较低的第二优先级状态301时,对应的阻挡地址生成单元207不会生成阻挡地址。例如,若某一存储队列中有任一区块地址在进行刷新,对应的阻挡地址生成单元207不会生成阻挡地址,可以避免同一时间在同一存储队列中有至少两个区块地址不能进行其他访存请求,避免降低带宽。

仲裁器106接收到阻挡地址后,将阻挡该阻挡地址对应的除刷新命令和预充电命令之外的命令(例如访存请求)参加仲裁器106的仲裁,从而为高优先级的刷新请求能够尽快发送提供时序和区块状态的保证。例如,在一些示例中,在刷新控制模块107还生成预充电请求的情形,仲裁器106会对阻挡地址对应的命令中除了预充电命令和刷新命令以外的其他命令进行阻挡。这可以为刷新和预充电的进行提供前提条件,使其区块状态和时序要求尽快达到。当某些区块被执行刷新请求或者是被阻挡的目标区块时,仲裁器106会将这些区块从读写切换、读写统计、命令优先级等逻辑中暂时移除,以免阻挡其他访存相关功能逻辑的运行,防止不可读写访问的区块干扰其他读写的进行。

在本公开实施例提供的刷新方法中,通过生成阻挡地址以对相应的除刷新命令和预充电命令之外的命令进行阻挡,可以使高优先级的刷新请求能够尽快赢得仲裁器106的仲裁并到达DRAM,以保证刷新及时完成。

例如,在其他一些示例中,也可以在状态机203的当前状态属于全区块场景和同区块场景时均将存储队列的地址确定为阻挡地址,也即是,阻挡整个存储队列,然后在发送出刷新请求后,放行其他区块地址的访存请求,这可以根据实际需求而定,本公开的实施例对此不作限制。

例如,在步骤S50中,响应于生成刷新请求、刷新请求的标志位指示第一等级以及请求地址对应的区块非全空闲,生成预充电请求并将预充电请求发送给仲裁器106。例如,在刷新请求为全区块刷新请求或全区块刷新管理刷新请求的情形,该预充电请求为全区块类型(例如为全区块预充电请求PCHGab);在刷新请求为同区块刷新请求或同区块刷新管理刷新请求的情形,该预充电请求为同区块类型(例如为同区块预充电请求PCHGsb)。例如,在生成标志位指示第一等级的刷新请求的同时,若请求地址对应的区块或存储队列处于开启状态,则需要发布预充电请求(同区块预充电请求PCHGsb或全区块预充电请求PCHGab),预充电请求会关闭对应的区块或存储队列,以便之后赢得仲裁的刷新请求能够执行。

在本公开实施例提供的刷新方法中,通过生成预充电请求,可以为高优先级的刷新请求的执行尽快做好准备,以保证刷新及时完成。

需要说明的是,在生成标志位指示第二等级的刷新请求的同时,若对应区块或存储队列处于开启状态,将不会生成预充电请求。此时,标志位指示第二等级的刷新请求将等待预先预充电模块110关闭对应区块或存储队列,否则将一直积累直到达到第一等级。低优先级刷新请求不产生预充电请求,可以避免低优先级刷新可能干扰未来到来的读写进程,也可以达到优先放行读写、提高带宽的作用。

例如,在一些示例中,本公开实施例提供的刷新方法还可以包括如下操作:响应于状态机203处于自刷新退出状态307并且对应的存储队列未收到刷新请求,生成补偿阻挡地址,并将补偿阻挡地址发送给仲裁器106,以使得仲裁器106对补偿阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡。例如,补偿阻挡地址为存储队列的地址。例如,补偿刷新控制单元208判断是否需要在自刷新退出状态307下发送补偿刷新请求。当状态机203处于自刷新退出状态307并且对应的存储队列未收到刷新请求时,补偿刷新控制单元208提供补偿地址给阻挡地址生成单元207,阻挡地址生成单元207生成补偿阻挡地址并将补偿阻挡地址发送给仲裁器106。仲裁器106接收到补偿阻挡地址后,对补偿阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡。

本公开至少一个实施例还提供一种用于动态随机存取存储器的内存控制器。该内存控制器具有多层次优先级和多种场景,可以实现全区块类型和同区块类型的混合刷新,能够兼顾刷新管理以及错误监测和擦洗(ECS)的处理,既保证数据的可靠性,又降低了刷新对DRAM带宽的影响,具有安全、可靠、完整、高性能等优点。

结合图1和图2所示,该内存控制器100配置为与DRAM连接且配置为控制DRAM进行刷新。DRAM包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块。

内存控制器100至少包括仲裁器106、刷新控制模块107和刷新管理模块108。

刷新控制模块107包括刷新间隔计数器201、多个推迟刷新计数器202、多个状态机203、多个刷新地址记录单元204、请求生成单元205、多个地址预测单元206、多个阻挡地址生成单元207、多个补偿刷新控制单元208、错误监测和擦洗计数器209。

多个状态机203与多个存储队列一一对应,状态机203配置为在多个状态之间切换,例如在第一优先级状态302、刷新管理状态303、第一冲刷状态305、第二优先级状态301、第二冲刷状态304、自刷新状态306和自刷新退出状态307之间切换。多个地址预测单元206与多个存储队列一一对应,地址预测单元206配置为确定对应的存储队列的预测地址。错误监测和擦洗计数器209配置为循环计数,并将计数的数值提供给请求生成单元205。请求生成单元205配置为基于多个状态机203的状态、预测地址以及错误监测和擦洗计数器209的数值,生成刷新请求,并将刷新请求发送给与DRAM连接的仲裁器106。例如,刷新请求包括全区块刷新请求、同区块刷新请求、全区块刷新管理刷新请求和同区块刷新管理刷新请求。

多个阻挡地址生成单元207与多个存储队列一一对应,阻挡地址生成单元207配置为基于预测地址以及预测地址对应的存储队列的状态机203的状态,生成阻挡地址,并将阻挡地址发送给仲裁器106。

刷新间隔计数器201配置为循环计数,并且当计数值达到计数设定值时产生脉冲并清空,以及将脉冲发送给多个推迟刷新计数器202。多个推迟刷新计数器202与多个存储队列一一对应,推迟刷新计数器202配置为基于接收到的脉冲对对应的存储队列的被推迟的刷新请求进行计数,并将计数结果发送给状态机203。多个刷新地址记录单元204与多个存储队列一一对应,刷新地址记录单元204配置为对已刷新的区块的地址进行记录。

多个补偿刷新控制单元208与多个存储队列一一对应,补偿刷新控制单元208配置为判断是否需要在自刷新退出状态307下发送补偿刷新请求,并在需要发送补偿刷新请求的情形下提供补偿地址给阻挡地址生成单元207,以使阻挡地址生成单元207生成补偿阻挡地址。

刷新控制模块107与仲裁器106连接,仲裁器106与DRAM连接。仲裁器106配置为对刷新请求进行仲裁,并且响应于刷新请求赢得仲裁,将刷新请求发送给DRAM,以用于实现DRAM的刷新。仲裁器106还配置为对阻挡地址对应的除刷新命令和预充电命令之外的命令进行阻挡。

刷新管理模块108与刷新控制模块107连接。刷新管理模块108配置为统计各个区块执行行选通命令的次数,并在行选通命令的次数达到行选通设定值时向刷新控制模块107发送刷新管理指示。

需要说明的是,本公开的实施例中,内存控制器100还可以包括更多的模块和单元,刷新控制模块107也可以包括更多的模块和单元,不限于图1和图2中示出的模块和单元,这可以根据实际需求而定,本公开的实施例对此不作限制。关于内存控制器100的详细说明和技术效果可以参考上文中关于刷新方法的描述,此处不再赘述。

本公开至少一个实施例还提供一种电子装置,该电子装置包括本公开任一实施例提供的内存控制器。该电子装置中的内存控制器具有多层次优先级和多种场景,可以实现全区块类型和同区块类型的混合刷新,能够兼顾刷新管理以及错误监测和擦洗(ECS)的处理,既保证数据的可靠性,又降低了刷新对DRAM带宽的影响,具有安全、可靠、完整、高性能等优点。

图6为本公开一些实施例提供的一种电子装置的示意框图。例如,如图6所示,该电子装置200包括内存控制器100,内存控制器100为本公开任一实施例提供的内存控制器,例如图1所示的内存控制器100。例如,该电子装置200还可以包括动态随机存取存储器210。内存控制器100配置为与动态随机存取存储器210连接且配置为控制动态随机存取存储器210进行刷新。例如,该电子装置200可以实现为中央处理器(CPU)或其他任意的装置,本公开的实施例对此不作限制。

需要说明的是,本公开的实施例中,电子装置200还可以包括更多的模块和单元,不限于图6中示出的模块和单元,这可以根据实际需求而定,本公开的实施例对此不作限制。关于电子装置200的详细说明和技术效果可以参考上文中关于刷新方法和内存控制器的描述,此处不再赘述。

有以下几点需要说明:

(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。

(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。

再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜