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

文档序号:23718287发布日期:2021-01-24 06:30阅读:111来源:国知局
动态随机存取存储器的刷新方法及内存控制器、电子装置与流程

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


背景技术:

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


技术实现要素:

[0003]
本公开至少一个实施例提供一种用于动态随机存取存储器的刷新方法,其中,所述动态随机存取存储器包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块,所述方法包括:确定所述多个存储队列对应的多个状态机的状态,其中,所述多个存储队列与所述多个状态机一一对应;确定所述多个存储队列对应的多个预测地址;基于所述多个状态机的状态以及所述多个预测地址,生成刷新请求,并将所述刷新请求发送给与所述动态随机存取存储器连接的仲裁器,以使得所述仲裁器对所述刷新请求进行仲裁,并且响应于所述刷新请求赢得仲裁,将所述刷新请求发送给所述动态随机存取存储器,以用于实现所述动态随机存取存储器的刷新。
[0004]
例如,在本公开一实施例提供的方法中,确定所述多个存储队列对应的多个状态机的状态包括:对于每个状态机,根据推迟刷新计数器的数值、自刷新进入请求以及自刷新退出命令,确定所述状态机的状态。
[0005]
例如,在本公开一实施例提供的方法中,所述状态机包括4种状态:第一优先级状态、第二优先级状态、冲刷状态和自刷新状态,所述第一优先级状态的优先级高于所述第二优先级状态的优先级。
[0006]
例如,在本公开一实施例提供的方法中,对于每个状态机,根据所述推迟刷新计数器的数值、所述自刷新进入请求以及所述自刷新退出命令,确定所述状态机的状态,包括:响应于所述推迟刷新计数器的数值大于或等于阈值,使所述状态机进入所述第一优先级状态;响应于所述推迟刷新计数器的数值小于所述阈值,使所述状态机进入所述第二优先级状态;响应于所述自刷新进入请求,根据所述状态机的当前状态,使所述状态机立即或延迟进入所述冲刷状态;响应于与所述冲刷状态对应的操作完成,使所述状态机进入所述自刷新状态;响应于所述自刷新退出命令,根据所述推迟刷新计数器的数值,使所述状态机进入所述第一优先级状态或所述第二优先级状态。
[0007]
例如,在本公开一实施例提供的方法中,响应于所述自刷新进入请求,根据所述状态机的当前状态,使所述状态机立即或延迟进入所述冲刷状态,包括:响应于所述自刷新进入请求,在所述状态机处于所述第一优先级状态的情形,使所述状态机保持所述第一优先
级状态直至所述推迟刷新计数器的数值小于所述阈值再进入所述冲刷状态;响应于所述自刷新进入请求,在所述状态机处于所述第二优先级状态且刷新地址记录单元中无记录地址的情形,使所述状态机进入所述冲刷状态;响应于所述自刷新进入请求,在所述状态机处于所述第二优先级状态且所述刷新地址记录单元中存在记录地址的情形,使所述状态机保持所述第二优先级状态直至所述刷新地址记录单元中无记录地址再进入所述冲刷状态。
[0008]
例如,在本公开一实施例提供的方法中,确定所述多个存储队列对应的所述多个预测地址包括:对于每个存储队列,基于区块信息以及所述存储队列对应的状态机的状态,确定所述预测地址。
[0009]
例如,在本公开一实施例提供的方法中,对于每个存储队列,基于所述区块信息以及所述存储队列对应的状态机的状态,确定所述预测地址,包括:响应于所述状态机处于所述第一优先级状态且对应的存储队列中无正在执行的刷新任务,按照从第一级别至第n级别的优先级顺序将满足要求的区块的地址确定为所述预测地址;响应于所述状态机处于所述第二优先级状态且对应的存储队列中无正在执行的刷新任务,按照从所述第一级别至第m级别的优先级顺序将满足要求的区块的地址确定为所述预测地址;响应于所述状态机处于所述第一优先级状态且对应的存储队列中有正在执行的刷新任务,确定所述预测地址为空;响应于所述状态机处于所述第二优先级状态,并且,不存在满足要求的区块或对应的存储队列中有正在执行的刷新任务,确定所述预测地址为空;其中,n>m>1且n和m均为整数,所述第一级别至所述第n级别的优先级顺序逐渐降低,各个级别的优先级顺序基于所述区块信息确定,所述区块信息至少包括:是否有效、是否被刷新、是否存在访存请求、是否空闲、时序是否符合。
[0010]
例如,本公开一实施例提供的方法还包括:基于所述多个状态机的状态以及所述多个预测地址,生成阻挡地址,并将所述阻挡地址发送给所述仲裁器,以使得所述仲裁器对所述阻挡地址对应的非刷新命令进行阻挡。
[0011]
例如,在本公开一实施例提供的方法中,基于所述多个状态机的状态以及所述多个预测地址,生成所述阻挡地址,并将所述阻挡地址发送给所述仲裁器,包括:响应于所述状态机处于所述第一优先级状态以及对应的存储队列中无正在执行的刷新任务,将所述存储队列对应的预测地址确定为所述阻挡地址,并将所述阻挡地址发送给所述仲裁器。
[0012]
例如,在本公开一实施例提供的方法中,基于所述多个状态机的状态以及所述多个预测地址,生成所述刷新请求,并将所述刷新请求发送给与所述动态随机存取存储器连接的所述仲裁器,包括:基于所述多个状态机的状态,根据优先级选择规则选择存储队列并生成所述刷新请求,并且将所述刷新请求发送给所述仲裁器;其中,所述刷新请求包括请求命令、请求地址和标志位,所述请求地址为被选择的存储队列对应的预测地址,所述标志位指示被选择的存储队列对应的状态机处于所述第一优先级状态或所述第二优先级状态。
[0013]
例如,在本公开一实施例提供的方法中,所述第一优先级状态包括第一子状态和第二子状态,所述第一子状态的优先级高于所述第二子状态的优先级,所述第一子状态为所述推迟刷新计数器的数值达到最大值,所述第二子状态为所述推迟刷新计数器的数值小于所述最大值并且大于或等于所述阈值;所述优先级选择规则为:按照所述第一子状态、所述第二子状态、所述第二优先级状态的优先级顺序选择对应的存储队列,若所有状态机均处于所述第二优先级状态,则选择预测地址不为空的存储队列,若存在多个具有同一优先
级顺序的状态机,则在所述多个具有同一优先级顺序的状态机中随机选择一个状态机对应的存储队列。
[0014]
例如,本公开一实施例提供的方法还包括:响应于生成所述刷新请求、所述刷新请求的标志位指示所述第一优先级状态以及所述请求地址对应的区块非全空闲,生成预充电请求并将所述预充电请求发送给所述仲裁器;其中,所述预充电请求对应于所述请求地址对应的区块。
[0015]
例如,在本公开一实施例提供的方法中,所述仲裁器还配置为对读写请求、行选通请求、所述预充电请求进行仲裁,进行仲裁的优先级按如下顺序降低:所述标志位指示所述第一优先级状态的刷新请求、所述读写请求、所述行选通请求、所述预充电请求、所述标志位指示所述第二优先级状态的刷新请求。
[0016]
本公开至少一个实施例还提供一种用于动态随机存取存储器的内存控制器,其中,所述内存控制器配置为与所述动态随机存取存储器连接且配置为控制所述动态随机存取存储器进行刷新,所述动态随机存取存储器包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块;所述内存控制器包括刷新控制模块,所述刷新控制模块包括多个状态机、多个地址预测单元和请求生成单元;所述多个状态机与所述多个存储队列一一对应,所述状态机配置为在多个状态之间切换;所述多个地址预测单元与所述多个存储队列一一对应,所述地址预测单元配置为确定对应的存储队列的预测地址;所述请求生成单元配置为基于所述多个状态机的状态以及所述预测地址,生成刷新请求,并将所述刷新请求发送给与所述动态随机存取存储器连接的仲裁器。
[0017]
例如,本公开一实施例提供的内存控制器还包括所述仲裁器,其中,所述刷新控制模块与所述仲裁器连接,所述仲裁器与所述动态随机存取存储器连接,所述仲裁器配置为对所述刷新请求进行仲裁,并且响应于所述刷新请求赢得仲裁,将所述刷新请求发送给所述动态随机存取存储器,以用于实现所述动态随机存取存储器的刷新。
[0018]
例如,在本公开一实施例提供的内存控制器中,所述刷新控制模块还包括多个阻挡地址生成单元;所述多个阻挡地址生成单元与所述多个存储队列一一对应,所述阻挡地址生成单元配置为基于所述预测地址以及所述预测地址对应的存储队列的状态机的状态,生成阻挡地址,并将所述阻挡地址发送给所述仲裁器;所述仲裁器还配置为对所述阻挡地址对应的非刷新命令进行阻挡。
[0019]
例如,在本公开一实施例提供的内存控制器中,所述刷新控制模块还包括刷新间隔计数器、多个推迟刷新计数器和多个刷新地址记录单元;所述刷新间隔计数器配置为循环计数,并且当计数值达到计数设定值时产生脉冲并清空,以及将所述脉冲发送给所述多个推迟刷新计数器;所述多个推迟刷新计数器与所述多个存储队列一一对应,所述推迟刷新计数器配置为基于接收到的脉冲对对应的存储队列的被推迟的刷新请求进行计数,所述状态机基于对应的推迟刷新计数器的数值确定状态;所述多个刷新地址记录单元与所述多个存储队列一一对应,所述刷新地址记录单元配置为对已刷新的区块的地址进行记录。
[0020]
本公开至少一个实施例还提供一种电子装置,包括如本公开任一实施例所述的内存控制器。
[0021]
例如,本公开一实施例提供的电子装置还包括所述动态随机存取存储器。
附图说明
[0022]
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
[0023]
图1为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器的结构示意图;
[0024]
图2为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器中刷新控制模块的结构示意图;
[0025]
图3为本公开一些实施例提供的一种用于动态随机存取存储器的刷新方法的流程示意图;
[0026]
图4为本公开一些实施例提供的一种用于动态随机存取存储器的刷新方法中的状态机的示意图;
[0027]
图5为本公开一些实施例提供的另一种用于动态随机存取存储器的刷新方法的流程示意图;以及
[0028]
图6为本公开一些实施例提供的一种电子装置的示意框图。
具体实施方式
[0029]
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0030]
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
[0031]
dram是易失性存储器,不能持久地保持数据。这是由于dram通过电容来存储数据,随着时间推移,电容上的电荷会逐渐流失,从而导致数据的丢失。因此,为了保持数据,需要周期性地对dram进行刷新(refresh),也即是,将电容里的数据读出并重新写入,以将电容上的电荷恢复到原有水平,从而达到保持数据的目的。
[0032]
然而,在刷新的过程中,dram不能够进行正常的读写访问,也不能接收其他任何命令,这给内存带宽带来了负面的影响。在第五代双倍数据率动态随机存取存储器(double data rate dynamic random access memory,ddr5 dram)之前,刷新命令是以队列(rank)为单位进行的,该类型的刷新命令称为refab(all bank refresh)。在通常的刷新方案中,大多数是通过对刷新分级来实现刷新调度。当刷新积累到接近可以推迟的上限时间时,再对dram进行紧急刷新。紧急刷新发生时,对dram性能的影响非常明显。
[0033]
从ddr5 dram开始,可以采用更细粒度的刷新命令,该刷新命令是以区块(bank)为单位进行的,该类型的刷新命令称为refsb(same bank refresh),该刷新命令会使一个存储队列内具有某一相同区块地址的所有区块执行刷新。
[0034]
然而,当前的刷新方案中,难以兼顾dram的刷新和读写访问,刷新对dram的性能影响较大,使得dram的带宽利用率较低。
[0035]
本公开至少一个实施例提供一种用于动态随机存取存储器的刷新方法及内存控制器、电子装置。该方法具有多层次优先级和仲裁逻辑,可以兼顾动态随机存取存储器的刷新和读写访问,在保证刷新及时完成的基础上,尽可能地保证读写访问的连续性,降低刷新对动态随机存取存储器性能的影响,改善内存访问的带宽,提高带宽利用率。
[0036]
下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。
[0037]
本公开至少一个实施例提供一种用于动态随机存取存储器的刷新方法,该动态随机存取存储器包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块。该方法包括:确定多个存储队列对应的多个状态机的状态,多个存储队列与多个状态机一一对应;确定多个存储队列对应的多个预测地址;基于多个状态机的状态以及多个预测地址,生成刷新请求,并将刷新请求发送给与动态随机存取存储器连接的仲裁器,以使得仲裁器对刷新请求进行仲裁,并且响应于刷新请求赢得仲裁,将刷新请求发送给动态随机存取存储器,以用于实现动态随机存取存储器的刷新。
[0038]
图1为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器的结构示意图。例如,该内存控制器100适用于对ddr5 dram进行控制。需要说明的是,图1中仅示出了内存控制器100中与刷新操作相关的功能模块,其他功能模块可根据需求设置,本公开的实施例对此不作限制。
[0039]
例如,需要进行刷新的dram包括多个存储队列(rank),每个存储队列包括多个区块组,每个区块组包括多个区块(bank)。例如,在一些示例中,dram包括32或64个存储队列,每个存储队列包括4或8个区块组,每个区块组包括2或4个区块。关于dram的具体结构可参考常规设计,此处不再详述。
[0040]
例如,如图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通道。
[0041]
例如,该内存控制器100包括地址解码器101、命令队列102、数据缓存103、时序检查器104、区块状态记录表105、仲裁器106、刷新控制模块107、出发队列108和预先预充电模块109。
[0042]
地址解码器101配置为将接收到的访存请求的物理地址按照配置寄存器指定的地址映射方式,转换成ddr5 dram的标准地址格式。命令队列102配置为存储收到的访存命令,
同时根据仲裁器106提供的信息对存储的访存请求信息实时更新。例如,若接收到写请求,对应的数据会存储在数据缓存103中。除了存储访存信息外,命令队列102也提供一些统计结果以供其他模块使用。例如,命令队列102需要向刷新控制模块107提供如下两种统计信息:(1)对应区块地址的访存命令统计,以告知刷新控制模块107对应区块是否在命令队列102中存在访存请求;(2)对应区块地址是否存在一种类型的访存命令,这种类型的访存命令是指已经有行选通命令发出,但是读写命令还没发出,也即是,读写未完成的命令。
[0043]
时序检查器104记录、检测访存中用到的各种时序参数,并为仲裁器106和刷新控制模块107提供必要的时序信息,以保证dram访存操作的正确性。区块状态记录表105中记录了dram各个区块的地址以及状态,并根据仲裁器106的仲裁结果进行更新。同时,每当有访存请求到达时,区块状态记录表105也会为命令队列102提供该访存请求的初始区块状态信息。
[0044]
仲裁器106配置为接收其他模块的各种请求,按照既定规则对请求进行筛选。当有命令赢得仲裁时,仲裁器106将赢得仲裁的命令发往出发队列108,同时,仲裁器106还会向各个模块提供反馈信号,以帮助这些模块进行信息更新。例如,仲裁器106还配置为按照刷新控制模块107提供的阻挡地址对与该阻挡地址对应的请求(例如读写请求等)进行阻挡。
[0045]
刷新控制模块107配置为根据配置寄存器的配置以及命令队列102、时序检查器104和区块状态记录表105提供的信息,推迟或生成刷新请求,并提供相关的优先级指示。由于执行refsb要求对应地址的区块处于空闲状态,因此刷新控制模块107还配置为根据需要生成同区块地址预充电(same bank pre-charge,pchgsb)请求,该同区块地址预充电请求会使一个存储队列内具有某一相同区块地址的所有区块执行预充电。为了保证刷新和预充电能够正常有序地进行,同时也为了兼顾读写访问,刷新控制模块107还提供阻挡地址,并告知仲裁器106按照阻挡地址对与阻挡地址对应的其他命令进行阻挡。
[0046]
出发队列108配置为将来自仲裁器106的请求按照规则发送给dfi接口,并最终到达dram,并且接收从dram读回的数据,并将数据返回至总线接口,以使该数据到达cpu核心。例如,当来自仲裁器106的请求为写请求时,出发队列108还将从数据缓存103得到的数据按照规则发送给dfi接口,并最终到达dram,以实现数据写入。
[0047]
预先预充电模块109配置为监测区块访问历史,当某个区块在一定时间内没有被读写访问时,预先预充电模块109会产生预充电命令将该区块关闭。
[0048]
图2为本公开一些实施例提供的一种用于动态随机存取存储器的内存控制器中刷新控制模块的结构示意图。例如,如图2所示,刷新控制模块107包括刷新间隔计数器201、多个推迟刷新计数器202、多个状态机203、请求生成单元204、多个地址预测单元205、多个阻挡地址生成单元206以及多个刷新地址记录单元207。
[0049]
多个状态机203与多个存储队列一一对应,也即是,每个存储队列单独分配有一个状态机203。状态机203配置为在多个状态之间切换。多个地址预测单元205与多个存储队列一一对应,也即是,每个存储队列分配有一个地址预测单元205。地址预测单元205配置为确定对应的存储队列的预测地址。请求生成单元204配置为基于多个状态机203的状态以及预测地址,生成刷新请求,并将刷新请求发送给与dram连接的仲裁器106。
[0050]
多个阻挡地址生成单元206与多个存储队列一一对应,也即是,每个存储队列单独分配有一个阻挡地址生成单元206。阻挡地址生成单元206配置为基于预测地址以及预测地
址对应的存储队列的状态机203的状态,生成阻挡地址,并将阻挡地址发送给仲裁器106。
[0051]
刷新间隔计数器201配置为循环计数,并且当计数值达到计数设定值时产生脉冲并清空,以及将脉冲发送给多个推迟刷新计数器202。多个推迟刷新计数器202与多个存储队列一一对应,也即是,每个存储队列单独分配有一个推迟刷新计数器202。推迟刷新计数器202配置为基于接收到的脉冲对对应的存储队列的被推迟的刷新请求进行计数,状态机203基于对应的推迟刷新计数器202的数值确定状态。多个刷新地址记录单元207与多个存储队列一一对应,也即是,每个存储队列单独分配有一个刷新地址记录单元207。刷新地址记录单元207配置为对已刷新的区块的地址进行记录。
[0052]
图3为本公开一些实施例提供的一种用于动态随机存取存储器的刷新方法的流程示意图。例如,在一些示例中,如图3所示,该方法包括如下操作。
[0053]
步骤s10:确定多个存储队列对应的多个状态机的状态,其中,多个存储队列与多个状态机一一对应;
[0054]
步骤s20:确定多个存储队列对应的多个预测地址;
[0055]
步骤s30:基于多个状态机的状态以及多个预测地址,生成刷新请求,并将刷新请求发送给与动态随机存取存储器连接的仲裁器,以使得仲裁器对刷新请求进行仲裁,并且响应于刷新请求赢得仲裁,将刷新请求发送给动态随机存取存储器,以用于实现动态随机存取存储器的刷新。
[0056]
下面结合图2所示的刷新控制模块107对上述各个步骤进行示例性说明。
[0057]
例如,在步骤s10中,多个存储队列与多个状态机203一一对应,也即是,每个存储队列单独分配有一个状态机203,多个状态机203的状态可以相同或不同。
[0058]
如图4所示,状态机203包括4种状态:第一优先级状态302、第二优先级状态303、冲刷状态304和自刷新状态301。例如,第一优先级状态302的优先级高于第二优先级状态303的优先级,也即是,第一优先级状态302为高优先级状态,第二优先级状态303为低优先级状态。自刷新状态301是dram的一种用于休眠模式或低功耗模式下的状态,在自刷新状态301下,dram会根据内部时钟周期性地刷新以保持数据,此状态下dram不接收来自外部的任何命令。冲刷状态304用于为进入自刷新状态301做准备,在冲刷状态304下,命令队列102会进行清空(也即全部发出),除此之外,高优先级的刷新请求也会进行清空(也即全部发出),低优先级的刷新请求会根据需求选择性地进行清空(也即选择是否全部发出)。例如,如图4所示,状态机203可以在4种状态之间按照图中带箭头线条所表示的方向进行跳转和切换,以实现状态的改变。
[0059]
例如,确定多个存储队列对应的多个状态机203的状态可以包括:对于每个状态机203,根据推迟刷新计数器202的数值、自刷新进入请求以及自刷新退出命令,确定状态机203的状态。
[0060]
进一步地,对于每个状态机203,根据推迟刷新计数器202的数值、自刷新进入请求以及自刷新退出命令,确定状态机203的状态,可以包括如下操作:响应于推迟刷新计数器202的数值大于或等于阈值,使状态机203进入第一优先级状态302;响应于推迟刷新计数器202的数值小于阈值,使状态机203进入第二优先级状态303;响应于自刷新进入请求,根据状态机203的当前状态,使状态机203立即或延迟进入冲刷状态304;响应于与冲刷状态304对应的操作完成,使状态机203进入自刷新状态301;响应于自刷新退出命令,根据推迟刷新
计数器202的数值,使状态机203进入第一优先级状态302或第二优先级状态303。
[0061]
例如,上述阈值可以根据需求设置并由配置寄存器指定。通常,dram需要按照刷新平均时间间隔(trefi)进行周期性刷新,在正常刷新模式下最多可以被推迟4次,在细粒度刷新模式下最多可以被推迟8次。因此,上述阈值可以设置为小于8的数值,例如为5、6或7等,这可以根据实际需求而定,本公开的实施例对此不作限制。
[0062]
状态机203在第一优先级状态302和第二优先级状态303之间进行状态转换的主要依据是推迟刷新计数器202的数值。当推迟刷新计数器202的数值大于或等于阈值时,状态机203进入第一优先级状态302(也即进入高优先级状态);当推迟刷新计数器202的数值小于阈值时,状态机203进入第二优先级状态303(也即进入低优先级状态)。
[0063]
例如,根据推迟刷新计数器202的数值,第一优先级状态302划分为第一子状态和第二子状态,第一子状态的优先级高于第二子状态的优先级。例如,第一子状态为推迟刷新计数器202的数值达到最大值,第二子状态为推迟刷新计数器202的数值小于最大值并且大于或等于阈值。例如,最大值可以根据实际需求设置,例如可以设置为8或其他适用的数值,本公开的实施例对此不作限制。
[0064]
例如,刷新间隔计数器201在内存控制器100和dram完成初始化后开始工作。刷新间隔计数器201循环计数,并且当计数值达到计数设定值(该计数设定值例如为trefi)时产生脉冲并清空,将产生的脉冲发送给推迟刷新计数器202。每当刷新间隔计数器201产生脉冲时,所有推迟刷新计数器202均加1计数一次。推迟刷新计数器202的数值代表当前被推迟的刷新请求的数量,推迟刷新计数器202的数值为0时代表dram不需要刷新。
[0065]
当刷新控制模块107接收到自刷新进入请求时,根据状态机203的当前状态,使状态机203立即或延迟进入冲刷状态304。例如,响应于自刷新进入请求,在状态机203处于第一优先级状态302的情形,使状态机203保持第一优先级状态302直至推迟刷新计数器202的数值小于阈值再进入冲刷状态304,也即是,延迟进入冲刷状态304。响应于自刷新进入请求,在状态机203处于第二优先级状态303且刷新地址记录单元207中无记录地址(没有记录任何地址)的情形,使状态机203进入冲刷状态304,也即是,立即进入冲刷状态304。响应于自刷新进入请求,在状态机203处于第二优先级状态303且刷新地址记录单元207中存在记录地址的情形,使状态机203保持第二优先级状态303直至刷新地址记录单元207中无记录地址(也即,完成对所有区块地址刷新一次后)再进入冲刷状态304。
[0066]
例如,在冲刷状态304下,命令队列102会进行清空(也即全部发出),高优先级的刷新命令也会进行清空(也即全部发出),并且,刷新控制模块107将根据配置寄存器的指示选择是否将剩余积累的低优先级的刷新请求全部发出。当与冲刷状态304对应的操作完成后,也即是,上述需要发出的请求均已发出后,状态机203进入自刷新状态301。
[0067]
在接收到自刷新退出命令时,若推迟刷新计数器202的数值大于或等于阈值,则使状态机203进入第一优先级状态302,若推迟刷新计数器202的数值小于阈值,则使状态机203进入第二优先级状态303。通过采用前述的状态转换机制,保证了在进入自刷新状态301之前所有区块都收到了refsb请求(也即所有区块都刷新了一次),因此,在退出自刷新状态301后,状态机203将跳过发送补偿刷新的过程,直接从自刷新状态301跳转至第一优先级状态302或者第二优先级状态303。由于补偿刷新所需的refsb数量总是大于或等于进入自刷新状态301前距离达成所有区块均收到refsb这个条件所需的refsb数量,因此通过上述方
式可以降低进出自刷新状态301的整体过程的额外开销。当然,本公开的实施例不限于此,在其他一些示例中,也可以在进入自刷新状态301前不做任何限制,在退出自刷新状态301后进行补偿刷新。
[0068]
例如,在步骤s20中,多个地址预测单元205分别确定多个存储队列对应的多个预测地址,也即是,多个地址预测单元205与多个存储队列一一对应,每个地址预测单元205确定对应的存储队列所对应的预测地址。例如,预测地址可以是某个区块的地址,表示地址预测单元205所预测的当前存储队列的下一个refsb请求的区块地址。地址预测单元205将所确定的预测地址提供给请求生成单元204和阻挡地址生成单元206。需要说明的是,每个地址预测单元205都会确定预测地址,该预测地址可以是某个区块的地址,也可以为空。
[0069]
例如,确定多个存储队列对应的多个预测地址包括:对于每个存储队列,基于区块信息以及存储队列对应的状态机203的状态,确定预测地址。
[0070]
进一步地,对于每个存储队列,基于区块信息以及存储队列对应的状态机203的状态,确定预测地址,可以包括如下操作:响应于状态机203处于第一优先级状态302且对应的存储队列中无正在执行的刷新任务,按照从第一级别至第n级别的优先级顺序将满足要求的区块的地址确定为预测地址;响应于状态机203处于第二优先级状态303且对应的存储队列中无正在执行的刷新任务,按照从第一级别至第m级别的优先级顺序将满足要求的区块的地址确定为预测地址;响应于状态机203处于第一优先级状态302且对应的存储队列中有正在执行的刷新任务,确定预测地址为空;响应于状态机203处于第二优先级状态303,并且,不存在满足要求的区块或对应的存储队列中有正在执行的刷新任务,确定预测地址为空。例如,将区块划分为n个级别,n>m>1且n和m均为整数,第一级别至第n级别的优先级顺序逐渐降低。需要说明的是,n和m的具体数值可以根据实际需求而定,本公开的实施例对此不作限制。
[0071]
例如,各个级别的优先级顺序基于区块信息确定,区块信息至少包括:是否有效、是否被刷新、是否存在访存请求、是否空闲、时序是否符合等。
[0072]
例如,在一些示例中,地址预测单元205进行地址预测时,可以参考如下信息:(1)未被刷新,即区块地址是否在刷新地址记录单元207中有记录;(2)无访存请求,即命令队列102中是否存在该区块的访存请求;(3)区块空闲,即对应区块是否处于空闲状态;(4)区块读写完成,即对应区块没有读写未完成的命令;(5)刷新时序符合,即refsb请求要求的时序检查是否满足;(6)预充电时序符合,即pchgsb请求要求的时序检查是否满足;(7)有效区块,即当前区块地址是否是有效地址(每个区块组中包含的区块数可能为2个或者4个)。
[0073]
需要说明的是,地址预测单元205进行地址预测时所参考的区块信息不限于上文中列举的信息,还可以包括其他任意适用的信息,这可以根据实际需求而定,本公开的实施例对此不作限制。
[0074]
例如,在一些示例中,将区块划分为10个级别,也即是,前述的n等于10。例如,m等于2。地址预测单元205基于如下规则挑选区块以确定预测地址:
[0075]
(1)第一级别:有效区块,未被刷新,无访存请求,区块空闲,刷新时序符合;
[0076]
(2)第二级别:有效区块,未被刷新,无访存请求,区块空闲,刷新时序不符合;
[0077]
(3)第三级别:有效区块,未被刷新,无访存请求,区块非空闲,预充电时序符合;
[0078]
(4)第四级别:有效区块,未被刷新,无访存请求,区块非空闲,预充电时序不符合;
[0079]
(5)第五级别:有效区块,未被刷新,有访存请求,区块读写完成,区块空闲,刷新时序符合;
[0080]
(6)第六级别:有效区块,未被刷新,有访存请求,区块读写完成,区块空闲,刷新时序不符合;
[0081]
(7)第七级别,有效区块,未被刷新,有访存请求,区块读写完成,区块非空闲,预充电时序符合;
[0082]
(8)第八级别:有效区块,未被刷新,有访存请求,区块读写完成,区块非空闲,预充电时序不符合;
[0083]
(9)第九级别:有效区块,未被刷新,区块读写未完成,预充电时序符合;
[0084]
(10)第十级别:有效区块,未被刷新,区块读写未完成,预充电时序不符合。
[0085]
例如,从第一级别至第十级别的优先级顺序逐渐降低。
[0086]
当状态机203处于第一优先级状态302且对应的存储队列中无正在执行的刷新任务时,会按照从第一级别至第十级别的优先级顺序将满足要求的区块的地址确定为预测地址,也即是,进行第一级别至第十级别的预测;当状态机203处于第一优先级状态302且对应的存储队列中有正在执行的刷新任务时,确定预测地址为空。
[0087]
当状态机203处于第二优先级状态303且对应的存储队列中无正在执行的刷新任务时,会按照从第一级别至第二级别的优先级顺序将满足要求的区块的地址确定为预测地址,也即是,进行第一级别至第二级别的预测;当状态机203处于第二优先级状态303,并且,不存在满足第一级别至第二级别的区块或对应的存储队列中有正在执行的刷新任务时,确定预测地址为空。
[0088]
低优先级命令只有前两级预测,在没有符合条件的情况时,低优先级命令将会积累,也即是,对应的存储队列所对应的预测地址为空且不会被请求生成单元204选择。高优先级命令拥有所有10级预测。通过这种方式,既可以保证读写和刷新的同时进行,又可以避免造成无意义的行选通,从而提高带宽利用率。这里,“无意义的行选通”是指行选通后,没有发出读写命令就被预充电。
[0089]
例如,在步骤s30中,请求生成单元204基于多个状态机203的状态以及多个预测地址,生成刷新请求,并将刷新请求发送给与dram连接的仲裁器106。由此使得仲裁器106对刷新请求进行仲裁,并且,响应于刷新请求赢得仲裁,仲裁器106将刷新请求发送给dram,以用于实现dram的刷新。例如,请求生成单元204基于多个状态机203的状态,根据优先级选择规则选择存储队列并生成刷新请求,并且将刷新请求发送给仲裁器106。
[0090]
例如,所生成的刷新请求包括请求命令、请求地址和标志位。请求地址为被选择的存储队列对应的预测地址。标志位指示被选择的存储队列对应的状态机203处于第一优先级状态302或第二优先级状态303。例如,在一些示例中,可以采用1位二进制数(例如“0”和“1”)来表示被选择的存储队列对应的状态机203处于第一优先级状态302或第二优先级状态303。
[0091]
例如,在一些示例中,请求生成单元204根据如下的优先级选择规则来选择存储队列。该优先级选择规则为:按照第一优先级状态302的第一子状态、第一优先级状态302的第二子状态、第二优先级状态303的优先级顺序选择对应的存储队列,也即是,优先级关系为:第一优先级状态302的第一子状态>第一优先级状态302的第二子状态>第二优先级状态
303;若所有状态机203均处于第二优先级状态303,则选择预测地址不为空的存储队列;若存在多个具有同一优先级顺序的状态机203,则在多个具有同一优先级顺序的状态机203中随机选择一个状态机203对应的存储队列。基于上述优先级选择规则,请求生成单元204会优先挑选高优先级的存储队列来生成对应的刷新请求并发送至仲裁器106。
[0092]
通过按照第一子状态、第二子状态、第二优先级状态303这三级进行存储队列的选择,可以保证优先挑选推迟刷新计数器202的数值达临界点的存储队列进行刷新,保证刷新不会违规。若存在多个具有同一优先级顺序的状态机203,则在多个具有同一优先级顺序的状态机203中随机选择一个状态机203对应的存储队列,通过随机选择,可以避免按照固定顺序导致某个存储队列的刷新积累过多。
[0093]
通过按照上述优先级选择规则来选择存储队列并生成相应的刷新请求,可以保证刷新没有读写访存请求的区块,使该区块刷新时,其他有读写访存的区块可以进行读写操作,最大化地使刷新和读写并行,从而有效提高带宽。
[0094]
仲裁器106不仅接收来自请求生成单元204的刷新请求,还接收来自其他单元和模块的读写请求、行选通请求、预充电请求等,仲裁器106配置为对刷新请求、读写请求、行选通请求、预充电请求等多种请求进行仲裁。例如,仲裁器106进行仲裁的优先级按如下顺序降低:标志位指示第一优先级状态302的刷新请求、读写请求、行选通请求、预充电请求、标志位指示第二优先级状态303的刷新请求。仲裁器106能够使高优先级的refsb及时到达dram以保持dram的数据。需要说明的是,仲裁器106进行仲裁的优先级顺序不限于上述顺序,也可以采用其他任意适用的规则进行仲裁,并且,参与仲裁的请求还可以包括节能(powerdown)请求、寄存器读(mode register read)请求、阻抗校准(zq calibration)请求等多种其他请求,这可以根据实际需求而定,本公开的实施例对此不作限制。
[0095]
当仲裁器106进行仲裁时,若来自请求生成单元204的刷新请求赢得仲裁,仲裁器106会将赢得仲裁的刷新请求发送给dram,以用于实现dram的刷新。关于dram接收到刷新请求后进行刷新的具体操作,可参考常规设计,此处不再详述。
[0096]
例如,当刷新请求赢得仲裁后,刷新地址记录单元207会记录下已经刷新的区块地址。当所有区块地址都被refsb刷新后,刷新地址记录单元207清零,并使推迟刷新计数器202减1计数一次。如果刷新地址记录单元207清零的同时刷新间隔计数器201产生脉冲,则推迟刷新计数器202此次不计数。
[0097]
本公开实施例提供的刷新方法运用了refsb刷新请求,并且通过上述方式,可以结合延迟刷新、刷新地址预测、命令队列监测等一系列因素构成多层次优先级和仲裁逻辑,从而可以兼顾dram的刷新和读写访问,在保证刷新及时完成的基础上,尽可能地保证读写访问的连续性,降低刷新对dram性能的影响,改善内存访问的带宽,提高带宽利用率。
[0098]
图5为本公开一些实施例提供的另一种用于动态随机存取存储器的刷新方法的流程示意图。例如,在该实施例中,该方法可以包括如下操作。
[0099]
步骤s10:确定多个存储队列对应的多个状态机的状态,其中,多个存储队列与多个状态机一一对应;
[0100]
步骤s20:确定多个存储队列对应的多个预测地址;
[0101]
步骤s40:基于多个状态机的状态以及多个预测地址,生成阻挡地址,并将阻挡地址发送给仲裁器,以使得仲裁器对阻挡地址对应的非刷新命令进行阻挡;
[0102]
步骤s30:基于多个状态机的状态以及多个预测地址,生成刷新请求,并将刷新请求发送给与动态随机存取存储器连接的仲裁器;
[0103]
步骤s50:响应于生成刷新请求、刷新请求的标志位指示第一优先级状态以及请求地址对应的区块非全空闲,生成预充电请求并将预充电请求发送给仲裁器。
[0104]
在该实施例中,步骤s10、s20和s30与图3中所示的步骤s10、s20和s30基本相同,相关说明可参考前述内容,此处不再赘述。
[0105]
下面结合图2所示的刷新控制模块107对步骤s40和s50进行示例性说明。
[0106]
例如,在步骤s40中,阻挡地址生成单元206基于多个状态机203的状态以及多个预测地址,生成阻挡地址,并将阻挡地址发送给仲裁器106,以使得仲裁器106对阻挡地址对应的非刷新命令进行阻挡。例如,地址预测单元205将预测地址发送给阻挡地址生成单元206,以供阻挡地址生成单元206使用。
[0107]
进一步地,阻挡地址生成单元206响应于状态机203处于第一优先级状态302以及对应的存储队列中无正在执行的刷新任务,将该存储队列对应的预测地址确定为阻挡地址,并将阻挡地址发送给仲裁器106。
[0108]
需要说明的是,虽然刷新控制模块107包括多个阻挡地址生成单元206,每个存储队列对应于一个阻挡地址生成单元206,但是,只有当对应的状态机203处于第一优先级状态302并且对应的存储队列中无正在执行的刷新任务时,对应的阻挡地址生成单元206才将对应的预测地址确定为阻挡地址并发送给仲裁器106。其他不满足要求的存储队列对应的阻挡地址生成单元206不会生成阻挡地址,也即是,不会提供有效地址信息,以避免同一时间在同一存储队列中有至少两个区块地址不可访问的情况出现。例如,若某一存储队列中有任一区块地址在进行刷新,对应的阻挡地址生成单元206不会生成阻挡地址,可以避免同一时间在同一存储队列中有至少两个区块地址不能进行其他访存请求,避免降低带宽。
[0109]
仲裁器106接收到阻挡地址后,将阻挡该阻挡地址对应的非刷新命令(例如访存请求)参加仲裁器106的仲裁,从而为高优先级的刷新请求能够尽快发送提供时序和区块状态的保证。例如,在一些示例中,在刷新控制模块107还生成预充电请求的情形,仲裁器106会对阻挡地址对应的命令中除了预充电命令和刷新命令以外的其他命令进行阻挡。这可以为刷新和预充电的进行提供前提条件,使其区块状态和时序要求尽快达到。当某些区块被执行刷新请求或者是被阻挡的目标区块时,仲裁器106会将这些区块从读写切换、读写统计、命令优先级等逻辑中暂时移除,以免阻挡其他访存相关功能逻辑的运行,防止不可读写访问的区块干扰其他读写的进行。
[0110]
在本公开实施例提供的刷新方法中,通过生成阻挡地址以对相应的非刷新命令进行阻挡,可以使高优先级的刷新请求能够尽快赢得仲裁器106的仲裁并到达dram,以保证刷新及时完成。
[0111]
例如,在其他一些示例中,也可以不基于预测地址生成阻挡地址,而是阻挡整个存储队列,然后在发送出refsb后,放行其他区块地址的访存请求,这可以根据实际需求而定,本公开的实施例对此不作限制。
[0112]
例如,在步骤s50中,响应于生成刷新请求、刷新请求的标志位指示第一优先级状态302以及请求地址对应的区块非全空闲,请求生成单元204生成预充电请求并将预充电请求发送给仲裁器106,该预充电请求对应于请求地址对应的区块,预充电请求的地址即为请
求地址。例如,在生成标志位指示第一优先级状态302的刷新请求的同时,若对应区块处于开启状态,则需要发布预充电请求(pchgsb),pchgsb会关闭对应的区块,以便之后赢得仲裁的对应于该区块的refsb能够执行。
[0113]
在本公开实施例提供的刷新方法中,通过生成预充电请求,可以为高优先级的刷新请求的执行尽快做好准备,以保证刷新及时完成。
[0114]
需要说明的是,在生成标志位指示第二优先级状态303的刷新请求的同时,若对应区块处于开启状态,将不会生成pchgsb。此时,标志位指示第二优先级状态303的刷新请求将等待预先预充电模块109关闭对应区块,否则将一直积累直到达到第一优先级状态302。低优先级刷新请求不产生pchgsb,可以避免低优先级刷新可能干扰未来到来的读写进程,也可以达到优先放行读写、提高带宽的作用。
[0115]
本公开至少一个实施例还提供一种用于动态随机存取存储器的内存控制器,该内存控制器具有多层次优先级和仲裁逻辑,可以兼顾动态随机存取存储器的刷新和读写访问,在保证刷新及时完成的基础上,尽可能地保证读写访问的连续性,降低刷新对动态随机存取存储器性能的影响,改善内存访问的带宽,提高带宽利用率。
[0116]
结合图1和图2所示,该内存控制器100配置为与dram连接且配置为控制dram进行刷新。dram包括多个存储队列,每个存储队列包括多个区块组,每个区块组包括多个区块。
[0117]
内存控制器100至少包括仲裁器106和刷新控制模块107。
[0118]
刷新控制模块107包括刷新间隔计数器201、多个推迟刷新计数器202、多个状态机203、请求生成单元204、多个地址预测单元205、多个阻挡地址生成单元206和多个刷新地址记录单元207。
[0119]
多个状态机203与多个存储队列一一对应,状态机203配置为在多个状态之间切换,例如在第一优先级状态302、第二优先级状态303、冲刷状态304和自刷新状态301之间切换。多个地址预测单元205与多个存储队列一一对应,地址预测单元205配置为确定对应的存储队列的预测地址。请求生成单元204配置为基于多个状态机203的状态以及预测地址,生成刷新请求,并将刷新请求发送给与dram连接的仲裁器106。多个阻挡地址生成单元206与多个存储队列一一对应,阻挡地址生成单元206配置为基于预测地址以及预测地址对应的存储队列的状态机203的状态,生成阻挡地址,并将阻挡地址发送给仲裁器106。
[0120]
刷新间隔计数器201配置为循环计数,并且当计数值达到计数设定值时产生脉冲并清空,以及将脉冲发送给多个推迟刷新计数器202。多个推迟刷新计数器202与多个存储队列一一对应,推迟刷新计数器202配置为基于接收到的脉冲对对应的存储队列的被推迟的刷新请求进行计数。状态机203基于对应的推迟刷新计数器202的数值确定状态。多个刷新地址记录单元207与多个存储队列一一对应,刷新地址记录单元207配置为对已刷新的区块的地址进行记录。
[0121]
刷新控制模块107与仲裁器106连接,仲裁器106与dram连接。仲裁器106配置为对刷新请求进行仲裁,并且响应于刷新请求赢得仲裁,将刷新请求发送给dram,以用于实现dram的刷新。仲裁器106还配置为对阻挡地址对应的非刷新命令进行阻挡。
[0122]
需要说明的是,本公开的实施例中,内存控制器100还可以包括更多的模块和单元,刷新控制模块107也可以包括更多的模块和单元,不限于图1和图2中示出的模块和单元,这可以根据实际需求而定,本公开的实施例对此不作限制。关于内存控制器100的详细
说明和技术效果可以参考上文中关于刷新方法的描述,此处不再赘述。
[0123]
本公开至少一个实施例还提供一种电子装置,该电子装置包括本公开任一实施例提供的内存控制器。该电子装置中的内存控制器具有多层次优先级和仲裁逻辑,可以兼顾动态随机存取存储器的刷新和读写访问,在保证刷新及时完成的基础上,尽可能地保证读写访问的连续性,降低刷新对动态随机存取存储器性能的影响,改善内存访问的带宽,提高带宽利用率。
[0124]
图6为本公开一些实施例提供的一种电子装置的示意框图。例如,如图6所示,该电子装置200包括内存控制器100,内存控制器100为本公开任一实施例提供的内存控制器,例如图1所示的内存控制器100。例如,该电子装置200还可以包括动态随机存取存储器210。内存控制器100配置为与动态随机存取存储器210连接且配置为控制动态随机存取存储器210进行刷新。例如,该电子装置200可以实现为中央处理器(cpu)或其他任意的装置,本公开的实施例对此不作限制。
[0125]
需要说明的是,本公开的实施例中,电子装置200还可以包括更多的模块和单元,不限于图6中示出的模块和单元,这可以根据实际需求而定,本公开的实施例对此不作限制。关于电子装置200的详细说明和技术效果可以参考上文中关于刷新方法和内存控制器的描述,此处不再赘述。
[0126]
有以下几点需要说明:
[0127]
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
[0128]
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
[0129]
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1