首页 / 专利库 / 电脑零配件 / 计算机系统 / 内存访问方法及内存控制器

内存访问方法及内存控制器

阅读:1048发布:2020-05-19

专利汇可以提供内存访问方法及内存控制器专利检索,专利查询,专利分析的服务。并且本 发明 实施例 公开了一种内存 访问 方法,包括:内存 控制器 确定访问队列中第一访问集合,所述第一访问集合中包含有连续的多个访问 请求 ;所述内存控制器将所述第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址 修改 为第二bank group地址;所述内存控制器分别根据修改后的第一访问集合中的第一访问请求和第二访问请求生成第一访问指令和第二访问指令;所述内存控制器按照预设的第一时间间隔分别向所述内存发送所述第一访问指令和所述第二访问指令。上述设定内存访问方法可减少内存访问延时,提高内存的读写速度。,下面是内存访问方法及内存控制器专利的具体信息内容。

1.一种内存访问方法,其特征在于,所述方法应用于计算机系统,所述计算机系统包括内存控制器以及内存,所述内存包括控制电路和多个寄存器,所述方法包括:
所述内存控制器确定访问队列中第一访问集合,所述第一访问集合中包含有连续的多个访问请求,所述第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,所述第一行地址用于指向所述内存中的一行寄存器;
所述内存控制器将所述第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址;
所述内存控制器分别根据修改后的第一访问集合中的第一访问请求和第二访问请求生成第一访问指令和第二访问指令,其中,所述第一访问请求和所述第二访问请求为所述第一访问集合中相邻的访问请求,所述第一访问请求和所述第一访问指令中包含有第一bank group地址,所述第二访问请求和所述第二访问指令中包含有第二bank group地址;
所述内存控制器按照预设的第一时间间隔分别向所述内存发送所述第一访问指令和所述第二访问指令,所述第一时间间隔小于标准设定的连续发送具有相同bank group地址的两个访问指令的时间间隔,所述第一访问指令用于指示所述内存的控制电路访问所述第一访问请求待访问的第一寄存器,所述第二访问指令用于指示所述内存的控制电路访问所述第二访问请求待访问的第二寄存器。
2.根据权利要求1所述的方法,其特征在于,所述内存控制器将所述第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址包括:
所述内存控制器确定所述第一访问集合中的访问请求的数量不小于预设阈值
所述内存控制器将所述第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址,以使修改后的第一访问集合中的多个访问请求交替使用第一bank group地址和第二bank group地址。
3.根据权利要求2所述的方法,其特征在于,所述预设阈值为:
(tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S);
其中,tRP为预充电有效周期,tRTP为内存从读取命令发出的时间到tRP之前的时间的延时,tRCD为行地址激活命令发出之后内存对行地址的操作所需要的时间;tCCD_S为异bank group地址下的列地址到列地址操作的延时,tCCD_L为同bank group地址下的列地址到列地址操作的延时。
4.一种内存访问方法,其特征在于,所述方法应用于计算机系统,所述计算机系统包括内存控制器以及内存,所述内存包括控制电路和多个寄存器,所述方法包括:
所述内存控制器确定访问队列中第一访问集合,所述第一访问集合中包含有连续的多个访问请求,所述第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,所述第一行地址用于指向所述内存中的第一行寄存器;
所述内存控制器确定访问队列中的第二访问请求,所述第二访问请求在所述访问队列中位于所述第一访问集合的访问请求之后且与所述第一访问集合的访问请求相邻,所述第二访问请求中包含有所述第一bank group地址以及第二行地址,所述第二行地址与所述第一行地址不同,所述第二行地址用于指向所述内存中的第二行寄存器;
所述内存控制器确定所述第一访问集合中的访问请求的数量小于预设阈值;
所述内存控制器将所述第二访问请求中的第一bank group地址修改为第二bank group地址;
所述内存控制器根据第二时间间隔分别向所述内存发送第一激活指令以及第二激活指令,其中,所述第一激活指令是根据所述第一访问集合中的第一访问请求生成的,所述第一激活指令中包含有所述第一bank group地址以及所述第一行地址,所述第一激活指令用于指示所述第一访问请求待访问的第一寄存器的行地址;所述第二激活指令是根据所述第二访问请求生成的,所述第二激活指令中包含有所述第二bank group地址以及所述第二行地址,所述第二激活指令用于指示所述第二访问请求待访问的第二寄存器的行地址。
5.根据权利要求4所述的方法,其特征在于,所述预设阈值为:
(tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S);
其中,tRP为预充电有效周期,tRTP为内存从读取命令发出的时间到tRP之前的时间的延时,tRCD为行地址激活命令发出之后内存对行地址的操作所需要的时间;tCCD_S为异bank group地址下的列地址到列地址操作的延时,tCCD_L为同bank group地址下的列地址到列地址操作的延时。
6.根据权利要求4所述的方法,其特征在于,所述内存控制器根据第二时间间隔分别向所述内存发送第一激活指令以及第二激活指令包括:
所述内存控制器在所述第一行地址和第二行地址中确定优先到达空闲状态的行地址;
当所述内存控制器确定所述第一行地址优先到达空闲状态时,所述内存控制器向所述内存发送所述第一激活指令,经过所述第二时间间隔后,所述内存控制器向所述内存发送所述第二激活指令。
7.根据权利要求4所述的方法,其特征在于,所述内存控制器根据第二时间间隔分别向所述内存发送第一激活指令以及第二激活指令包括:
所述内存控制器在所述第一行地址和第二行地址中确定优先到达空闲状态的行地址;
当所述内存控制器确定所述第二行地址优先到达空闲状态时,所述内存控制器向所述内存发送所述第二激活指令,经过所述第二时间间隔后,所述内存控制器向所述内存发送所述第一激活指令。
8.一种内存控制器,所述内存控制器在计算机系统中与内存连接,所述内存包括控制电路和多个寄存器,其特征在于,所述内存控制器用于:
确定访问队列中第一访问集合,所述第一访问集合中包含有连续的多个访问请求,所述第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,所述第一行地址用于指向所述内存中的一行寄存器;
将所述第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址;
分别根据修改后的第一访问集合中的第一访问请求和第二访问请求生成第一访问指令和第二访问指令,其中,所述第一访问请求和所述第二访问请求为所述第一访问集合中相邻的访问请求,所述第一访问请求和所述第一访问指令中包含有第一bank group地址,所述第二访问请求和所述第二访问指令中包含有第二bank group地址;
按照预设的第一时间间隔分别向所述内存发送所述第一访问指令和所述第二访问指令,所述第一时间间隔小于标准设定的连续发送具有相同bank group地址的两个访问指令的时间间隔,所述第一访问指令用于指示所述内存的控制电路访问所述第一访问请求待访问的第一寄存器,所述第二访问指令用于指示所述内存的控制电路访问所述第二访问请求待访问的第二寄存器。
9.根据权利要求8所述的内存控制器,其特征在于,所述内存控制器用于:
确定所述第一访问集合中的访问请求的数量不小于预设阈值;
将所述第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址,以使修改后的第一访问集合中的多个访问请求交替使用第一bank group地址和第二bank group地址。
10.根据权利要求9所述的内存控制器,其特征在于,所述预设阈值为:
(tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S);
其中,tRP为预充电有效周期,tRTP为内存从读取命令发出的时间到tRP之前的时间的延时,tRCD为行地址激活命令发出之后内存对行地址的操作所需要的时间;tCCD_S为异bank group地址下的列地址到列地址操作的延时,tCCD_L为同bank group地址下的列地址到列地址操作的延时。
11.一种内存控制器,所述内存控制器在计算机系统中与内存连接,所述内存包括控制电路和多个寄存器,其特征在于,所述内存控制器用于:
确定访问队列中第一访问集合,所述第一访问集合中包含有连续的多个访问请求,所述第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,所述第一行地址用于指向所述内存中的第一行寄存器;
确定访问队列中的第二访问请求,所述第二访问请求在所述访问队列中位于所述第一访问集合的访问请求之后且与所述第一访问集合的访问请求相邻,所述第二访问请求中包含有所述第一bank group地址以及第二行地址,所述第二行地址与所述第一行地址不同,所述第二行地址用于指向所述内存中的第二行寄存器;
确定所述第一访问集合中的访问请求的数量小于预设阈值;
将所述第二访问请求中的第一bank group地址修改为第二bank group地址;
根据第二时间间隔分别向所述内存发送第一激活指令以及第二激活指令,其中,所述第一激活指令是根据所述第一访问集合中的第一访问请求生成的,所述第一激活指令中包含有所述第一bank group地址以及所述第一行地址,所述第一激活指令用于指示所述第一访问请求待访问的第一寄存器的行地址;所述第二激活指令是根据所述第二访问请求生成的,所述第二激活指令中包含有所述第二bank group地址以及所述第二行地址,所述第二激活指令用于指示所述第二访问请求待访问的第二寄存器的行地址。
12.根据权利要求11所述的内存控制器,其特征在于,所述预设阈值为:
(tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S);
其中,tRP为预充电有效周期,tRTP为内存从读取命令发出的时间到tRP之前的时间的延时,tRCD为行地址激活命令发出之后内存对行地址的操作所需要的时间;tCCD_S为异bank group地址下的列地址到列地址操作的延时,tCCD_L为同bank group地址下的列地址到列地址操作的延时。
13.根据权利要求11所述的内存控制器,其特征在于,所述内存控制器用于:
在所述第一行地址和第二行地址中确定优先到达空闲状态的行地址;
当所述内存控制器确定所述第一行地址优先到达空闲状态时,向所述内存发送所述第一激活指令,经过所述第二时间间隔后,所述内存控制器向所述内存发送所述第二激活指令。
14.根据权利要求11所述的内存控制器,其特征在于,所述内存控制器用于:
在所述第一行地址和第二行地址中确定优先到达空闲状态的行地址;
当所述内存控制器确定所述第二行地址优先到达空闲状态时,向所述内存发送所述第二激活指令,经过所述第二时间间隔后,所述内存控制器向所述内存发送所述第一激活指令。

说明书全文

内存访问方法及内存控制器

技术领域

[0001] 本发明涉及计算机技术领域,特别是涉及一种内存访问方法及内存控制器。

背景技术

[0002] 随着计算机技术的发展,双倍速率同步动态随机存储器(英文:Double Data Rate,简称:DDR)总线已经发展到了DDR4。DDR4标准中的bank group将内存划分为多个区域,每个bank group可以独立读写数据,这样一来内部的数据吞吐量大幅度提升,可以同时读取大量的数据,内存的等效频率在这种设置下也得到巨大的提升。
[0003] 然而发明人经研究发现,传统技术中处理器向内存控制器发起的内存访问请求的序列中,通常所有的内存访问请求中的bank group地址均相同,这就使得传统技术中的内存控制器生成的内存访问指令的bank group地址也均相同,而由于标准设定的内存控制器在向内存发送指向内存的寄存器中的同一行地址的访问指令的时间间隔较长,这就使得内存的访问需要耗费较长的时间,从而导致内存读写速度较低。

发明内容

[0004] 本申请提供了一种内存访问方法和内存控制器,能够缩短内存访问过程中的访问延时,提高内存访问效率。
[0005] 第一方面,本申请提供了一种内存访问方法,该方法应用于计算机系统,所述计算机系统包括内存控制器以及内存,所述内存包括控制电路和多个寄存器。
[0006] 在上述方法中,内存控制器先确定访问队列中第一访问集合,该第一访问集合中包含有连续的多个访问请求,并且,该第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,需要说明的是第一行地址用于指向所述内存中的一行寄存器。
[0007] 例如,若访问队列中的请求为ABBBBBC,A、B和C分别为包含不同行地址但bank group地址均相同的请求,则内存控制器可确定第一访问集合为BBBBB的请求序列。
[0008] 内存控制器将确定的第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址;也就是说,若第一访问集合中的访问请求的bank group地址均为BG0,则可以随机选取或按照预设的策略选取部分访问请求将bank group地址修改为BG1,若内存控制器支持更多的bank group,那么内存控制器还可以将部分访问请求的bank group地址修改为BG2或BG3等。若此处,第二bank group地址仅用于与第一bank group地址以示区别,而并不限定于某个特定的bank group地址。
[0009] 内存控制器分别根据修改后的第一访问集合中的第一访问请求和第二访问请求生成第一访问指令和第二访问指令,其中,所述第一访问请求和所述第二访问请求为所述第一访问集合中相邻的访问请求,所述第一访问请求和所述第一访问指令中包含有第一bank group地址,所述第二访问请求和所述第二访问指令中包含有第二bank group地址。
[0010] 所述内存控制器按照预设的第一时间间隔分别向所述内存发送所述第一访问指令和所述第二访问指令,第一时间间隔小于标准设定的连续发送具有相同bank group地址的两个访问指令的时间间隔,所述第一访问指令用于指示所述内存的控制电路访问所述第一访问请求待访问的第一寄存器,所述第二访问指令用于指示所述内存的控制电路访问所述第二访问请求待访问的第二寄存器。
[0011] 可选的,第一时间间隔的最小取值可以是tCCD_S,即异bank group地址下的列地址到列地址操作的延时,而标准设定的内存控制器连续发送具有相同bank group地址的两个针对同一行地址的访问指令的时间间隔即为tCCD_L。由于tCCD_S(4个内存时序)<tCCD_L(6个内存时序),因此,第一时间间隔的取值可以小于标准设定的连续发送具有相同bank group地址的两个访问指令的时间间隔。
[0012] 结合本发明实施例第一方面可能的实现方式,在本发明实施例第一方面的第一种可能的实现方式中,内存控制器在对第一访问集合中的访问请求进行bank group地址的修改时,可以先确定该第一访问集合中的访问请求的数量N不小于预设阈值;然后将该第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址,以使修改后的第一访问集合中的多个访问请求交替使用第一bank group地址和第二bank group地址。
[0013] 也就是说,对于第一访问集合中的N个连续的访问请求,生成的连续的访问指令的中,两两相邻的访问指令的bank group地址都不同。例如,可第2i个访问指令的bank group地址为BG0,第2i+1个访问指令的bank group地址为BG1,i为自然数。
[0014] 结合本发明实施例第一方面以及第一方面的第一种可能的实现方式,在本发明实施例第一方面的第二种可能的实现方式中,所述预设阈值为:
[0015] (tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S);
[0016] 其中,tRP为预充电有效周期,内存控制器在发出预充电命令之后,要经过一段时间间隔才能发送RAS行有效命令打开新的行,这个时间间隔即为tRP,tRTP为内存从读取命令发出到tRP之前的延时,tRCD为行地址激活命令发出之后内存对行地址的操作所需要的时间;tCCD_S为异bank group地址下的列地址到列地址操作的延时,tCCD_L为同bank group地址下的列地址到列地址操作的延时。
[0017] 第二方面,本申请提供了又一种内存访问方法,所述方法应用于计算机系统,所述计算机系统包括内存控制器以及内存,所述内存包括控制电路和多个寄存器。
[0018] 在上述内存访问方法中,内存控制器先确定访问队列中第一访问集合,所述第一访问集合中包含有连续的多个访问请求,并且,该第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,需要说明的是,第一行地址用于指向所述内存中的第一行寄存器。
[0019] 例如,若访问队列中的请求为ABBBBBC,A、B和C分别为包含不同行地址但bank group地址均相同的请求,则内存控制器可确定第一访问集合为BBBBB的请求序列。
[0020] 内存控制器还要确定访问队列中的第二访问请求,该第二访问请求在所述访问队列中位于所述第一访问集合的访问请求之后且与所述第一访问集合的访问请求相邻,所述第二访问请求中包含有所述第一bank group地址以及第二行地址,所述第二行地址与所述第一行地址不同,所述第二行地址用于指向所述内存中的第二行寄存器。
[0021] 如上例中,访问请求C与访问请求B包含的行地址不同,但bank group地址相同,因此,内存控制器可确定访问请求C即为第二访问请求。访问请求C包含的行地址即为第二行地址,用于指向内存中的第二行寄存器。
[0022] 内存控制器确定所述第一访问集合中的访问请求的数量小于预设阈值之后,则将所述第二访问请求中的第一bank group地址修改为第二bank group地址。
[0023] 如上例中,在第一访问集合中的访问请求的数量N小于预设阈值时,也就是第一访问集合中,包含同一行地址的请求B的数量小于预设阈值时,若访问请求B和C初始的bank group地址均为BG0,则可将第二访问请求C的bank group地址修改为BG1。
[0024] 内存控制器根据第二时间间隔分别向所述内存发送第一激活指令以及第二激活指令,其中,需要说明的是,第一激活指令是根据所述第一访问集合中的第一访问请求生成的,所述第一激活指令中包含有所述第一bank group地址以及所述第一行地址,所述第一激活指令用于指示所述第一访问请求待访问的第一寄存器的行地址;所述第二激活指令是根据所述第二访问请求生成的,所述第二激活指令中包含有所述第二bank group地址以及所述第二行地址,所述第二激活指令用于指示所述第二访问请求待访问的第二寄存器的行地址。
[0025] 所述第二时间间隔的最小取值可以是行地址间延迟tRRD。也就是说,内存控制器在激活了第一访问请求对应的第一行地址之后,不需要等待第一访问集合中的第一访问请求全部访问完毕,再激活第二访问请求对应的第二激活指令,而是可以在响应第一访问指令的过程中,异步地在第二bank group中激活第二行地址,从而减少等待时间,提高内存访问速度。
[0026] 结合本发明实施例第二方面可能的实现方式,在本发明实施例第三方面的第一种可能的实现方式中,该预设阈值可以设置为:
[0027] (tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S);
[0028] 其中,tRP为预充电有效周期,tRTP为内存从读取命令发出到tRP之前的延时,tRCD为行地址激活命令发出之后内存对行地址的操作所需要的时间;tCCD_S为异bank group地址下的列地址到列地址操作的延时,tCCD_L为同bank group地址下的列地址到列地址操作的延时。
[0029] 结合本发明实施例第二方面可能的实现方式,在本发明实施例第三方面的第二种可能的实现方式中,内存控制器在所述第一行地址和第二行地址中确定优先到达空闲状态的行地址;当所述内存控制器确定所述第一行地址优先到达空闲状态时,所述内存控制器向所述内存发送所述第一激活指令,经过所述第二时间间隔后,所述内存控制器向所述内存发送所述第二激活指令。
[0030] 结合本发明实施例第二方面可能的实现方式,在本发明实施例第三方面的第三种可能的实现方式中,内存控制器在所述第一行地址和第二行地址中确定优先到达空闲状态的行地址;当所述内存控制器确定所述第二行地址优先到达空闲状态时,所述内存控制器向所述内存发送所述第二激活指令,经过所述第二时间间隔后,所述内存控制器向所述内存发送所述第一激活指令。
[0031] 也就是说,内存控制器在根据第二时间间隔分别向所述内存发送第一激活指令以及第二激活指令时,可决定优先发送第一激活指令还是第二激活指令,决定的依据即为第一行地址和第二行地址中谁优先到达空闲状态,若第一行地址先到达空闲状态,则内存控制器优先发送第一激活指令;第二行地址先到达空闲状态,则内存控制器优先发送第二激活指令。这样可以减少等待行地址变为空闲状态的时间,从而减少内存访问耗时,提高内存的访问速度。
[0032] 第二方面,本发明实施例还提供了一种内存控制器,该内存控制器在计算机系统与内存连接,所述内存包括控制电路和多个寄存器。该内存控制器可用于执行上述第一方面提供的内存访问方法。
[0033] 第四方面,本发明实施例还提供了另一种内存控制器,该内存控制器在计算机系统中与内存连接,所述内存包括控制电路和多个寄存器。该内存控制器可用于执行上述第二方面提供的内存访问方法。
[0034] 上述内存访问方法及内存控制器中,寄存器空间中的同一寄存器内容对应至少一个寄存器地址,所述至少一个寄存器地址仅内存库组bank group地址不同,所述访问请求的寄存器地址使用第一bank group地址。内存控制器通过动态地选访问请求设定bank group地址为第二bank group地址,使得内存控制器能够根据原本携带同一bank group地址的内存访问请求生成携带不同bank group地址的内存访问指令,从而使得部分内存访问指令可对内存进行异步地访问,提高了内存访问的并发量,并利用了内存控制器发送异bank group地址的内存访问指令的最小间隔tCCD_S小于发送同bank group地址的内存访问指令的最小间隔tCCD_L的特性,从而减少了内存读写延时,提高了内存的读写效率。
[0035] 第五方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行上述第一方面中描述的任意一种内存访问指令的调度方法。
[0036] 第六方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行上述第二方面中描述的任意一种内存访问指令的调度方法。附图说明
[0037] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例的附图。
[0038] 图1为本发明实施例提供的一种内存工作环境的硬件架构图;
[0039] 图2为本发明实施例提供的一种内存访问方法的流程图
[0040] 图3为本发明实施例提供的内存控制器的内部功能示意图;
[0041] 图4为本发明实施例提供的多BG地址映射同一寄存器内容的示意图;
[0042] 图5为本发明实施例提供的未修改访问请求的bank group地址时的内存访问过程的时序图;
[0043] 图6为本发明实施例提供的间隔修改多个访问同一行地址的访问请求的bank group地址时的内存访问的时序图;
[0044] 图7为本发明实施例提供的又一种内存访问方法的流程图;
[0045] 图8为本发明实施例提供的修改相邻的但访问不同行地址访问请求的bank group地址时的内存访问的时序图;
[0046] 图9为本发明实施例提供的在请求队列中选择访问请求修改bank group地址时的多种修改方式的示意图。

具体实施方式

[0047] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
[0048] 为了解决上述传统技术中的内存控制器在根据多个具有同一行地址的内存访问请求生成访问指令访问内存时导致的访问延时的浪费,内存读写速度较低的技术问题,在一个实施例中,提出了一种内存访问方法。该方法应用于计算机系统,该计算机系统包括内存控制器以及内存,所述内存包括控制电路和多个寄存器,该方法可由内存控制器执行。在传统技术中的计算机系统架构中,内存控制器通常位于主板芯片组的北桥芯片内部,或集成在CPU(中央处理单元,Central Processing Unit)基板上内置的北桥芯片中。
[0049] 具体的,参考图1所示,在一个NVM(英文:NonVolatile Memory,中文:非易失存储器)/FLASH(即Flash EEPROM Memory,闪存)DIMM(英文:Dual In-line Memory Module,中文:双列直插式存储模)接入标准内存接口(DDR4)的实施例中,CPU若要与内存进行数据交换,则需要经过CPU→内存控制器(北桥芯片中)→内存总线(例如DDR4总线)→NVM/FLASH控制器(NVM/FALSH DIMM的寄存器空间)→内存总线→内存控制器→CPU的数据传输过程。CPU可通过发送寄存器空间的内存访问请求至内存控制器,该访问请求中携带有需要访问的寄存器空间中的寄存器内容的寄存器地址,一个寄存器地址包括bank group地址、行地址、列地址、Bank地址、Rank地址等。内存控制器接收到该内存访问请求之后,则可根据内存访问请求的寄存器地址生成内存总线上的内存访问指令发送给NVM/FLASH控制器进行读写。
[0050] 而本发明实施例为解决前述的多个携带同一bank group地址的内存访问请求访问内存时导致的访问延时的浪费,内存读写速度较低的技术问题,采用了在内存控制器中修改CPU对寄存器空间中的内存访问请求的寄存器地址的bank group地址,从而使得内存控制器可向内存发送异步的内存访问指令的技术手段,使得内存访问的延时大大降低。
[0051] 具体的,如图2所示,该内存访问方法包括:
[0052] 步骤S102:内存控制器确定访问队列中第一访问集合,第一访问集合中包含有连续的多个访问请求,第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,第一行地址用于指向内存中的一行寄存器。
[0053] 如前所述,处理器CPU对内存的读写操作是通过向内存控制器发送对内存的寄存器空间的访问请求实现的。内存控制器接收CPU的访问请求然后生成内存总线上的访问指令的过程可参考图3所示。
[0054] 在图3中,内存控制器通过与CPU的接口接收到CPU发送的访问请求,然后缓存在请求队列中,然后进一步的,分Bank的存放属于各bank的访问请求。Bank状态寄存器中则存储着记录各Bank的当前状态。Bank状态包括READ/WRITE(读/写状态)、ACT(激活状态)、PRECHARGE(预充电状态)、IDLE(空闲状态)等几种状态。Bank状态寄存器中还存储有处于ACT(激活)状态的行地址,如果Bank中有行处于激活状态,那么则记录当前激活的行地址。访问地址生成器则根据Bank队列中的访问请求的先后顺序以及携带的寄存器地址生成访问指令,然后通过内存总线(例如DDR4)发送给NVM/FLASH DIMM。可以理解的是,实际应用中,内存控制器也可以将接收的内存访问请求不区分Bank进行缓存,也就是说,图3中的Bank队列不是必需的。
[0055] 在本实施例中,第一访问集合即为内存控制器中缓存的请求队列中的访问同一行地址的子队列,例如,若缓存的请求队列中的请求序列为ABBBBBC,其中,A、B和C分别表示不同的行地址,即分别指向内存中的A、B和C行寄存器,则BBBBB则为一个第一访问集合,行地址B即为第一访问集合中的多个访问请求均包含的第一行地址,且这些内存访问请求的bank group地址相同。
[0056] 在本实施例中,寄存器空间中的同一寄存器内容对应至少一个寄存器地址,该寄存器内容对应的至少一个寄存器地址仅bank group地址不同。另外,接收的访问请求的寄存器地址使用第一bank group地址。
[0057] 参考图4所示,在一个应用场景中,NVM/FLASH DIMM的寄存器空间中,同一个寄存器内容可通过两个寄存器地址访问,即使用第一bank group地址(以下简称BG地址)的寄存器地址和使用第二BG地址的寄存器地址,这两个地址仅需要BG地址不同,但Bank地址、Rank地址、行地址和列地址需要相同(也就是说,同一个寄存器内容仅与Bank地址、Rank地址、行地址和列地址相关,与BG地址无关,在其他实施例或应用场景中,对应同一个寄存器内容的寄存器地址可以为多个,例如,大于2个,分别使用不同的BG地址)。
[0058] 而内存控制器在生成内存访问指令,通过内存总线(例如,DDR4总线)访问NVM/FLASH DIMM的寄存器空间时,对于访问同一寄存器内容的寄存器地址,既可使用第一BG地址,也可使用第二BG地址,只需要这两个寄存器地址的Bank地址、Rank地址、行地址和列地址相同即可。
[0059] 而在本实施例中,CPU在向内存控制器发送寄存器空间的访问请求时,访问请求中携带的寄存器地址仅使用第一BG地址,如图4中所示,可仅使用BG0地址,与传统技术一致。
[0060] 也就是说,对于CPU侧而言,本发明实施例不需要修改CPU访问内存控制器的计算机程序,CPU仍然可按照传统技术中访问内存控制器的方式向内存控制器发送访问请求,而对于某些老式的CPU程序,可能不支持bank group地址,因此,其发送的给内存控制器的访问请求中携带的寄存器地址可能仅包含Bank地址、Rank地址、行地址和列地址,则内存控制器在接收到该访问请求并缓存在请求队列中时,可自动为其设置缺省的BG地址为第一BG地址。
[0061] 步骤S104:内存控制器将第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址。
[0062] 再参考图3所示,内存控制器在根据访问请求生成内存总线上的访问指令之前,可选取部分访问请求,修改选取的访问请求的BG地址,由缺省的第一BG地址修改为第二BG地址。修改完成后,则可根据请求队列中的访问请求生成内存总线上的访问指令。
[0063] 步骤S106:内存控制器分别根据修改后的第一访问集合中的第一访问请求和第二访问请求生成第一访问指令和第二访问指令,其中,第一访问请求和第二访问请求为第一访问集合中相邻的访问请求,第一访问请求和第一访问指令中包含有第一bank group地址,第二访问请求和第二访问指令中包含有第二bank group地址。
[0064] 步骤S108:内存控制器按照预设的第一时间间隔分别向内存发送第一访问指令和第二访问指令,第一时间间隔小于标准设定的连续发送具有相同bank group地址的两个访问指令的时间间隔,第一访问指令用于指示内存的控制电路访问第一访问请求待访问的第一寄存器,第二访问指令用于指示内存的控制电路访问第二访问请求待访问的第二寄存器。
[0065] 参考图4所示,可将第一访问集合中的部分访问请求缺省的第一BG地址修改为第二BG地址即由BG0修改为BG1,未修改的访问请求的BG地址即为BG0,被选择修改的访问请求的BG地址即为BG1。这样修改之后,对于第一访问集合中的两个连续的但经过修改后bank group地址不同的内存访问请求:第一访问请求和第二访问请求,内存控制器生成的相应的内存访问指令:第一访问指令和第二访问指令对应的BG地址也分别为BG0和BG1,此时内存控制器在向内存发送第一访问指令和第二访问指令时,即可采用小于标准设定的连续发送具有相同bank group地址的两个访问指令的时间间隔的第一时间间隔发送第一访问指令和第二访问指令。第一时间间隔的最小取值可以是tCCD_S,即异bank group地址下的列地址到列地址操作的延时,而标准设定的连续发送具有相同bank group地址的两个访问指令的时间间隔的最小取值为tCCD_L,即同bank group地址下的列地址到列地址操作的延时,而由于在内存中tCCD_L延时大于tCCD_S延时,使得这两个连续的访问请求的内存读写延时降低,从而提高内存读写的效率。
[0066] 例如,在一个应用场景中,一个请求队列中连续的三个读加请求(执行读取并加1的访问请求,即既包含了读指令也包含了写指令)A、B、C分别对应行地址R0,R0和R1,R0和R1为三个请求需要访问的寄存器地址中的行地址,也就是说,前两个请求为行地址相同的请求,邻接了一个后续的不同行的请求。
[0067] 若按照传统技术中的方式,由内存控制器根据访问请求A、B、C分别生成访问指令分别按照标准设定的时间间隔通过内存总线发送给NVM/FLASH DIMM,则NVM/FLASH DIMM中的内存读写时序即可参考图5所示。
[0068] 在图5中,这三个访问请求的内存响应延时总和为(单位为内存时序单元):
[0069] tRCD(16)+tCCD_L(6)+tRTP(6)+tRP(11)tRCD(16)+tCL(16)+4=75
[0070] 其中,tCL(即CAS Latency):CAS即Column Address Strobe,列地址信号,它定义了在读取命令发出后到数据读出到IO接口的间隔时间。
[0071] RAS(Row Address Strobe,行地址选通脉冲)的含义与CAS类似,就是行(Row)地址信号。它定义的是在内存的一个rank(内存的一面)之中,行地址激活(Active)命令发出之后,内存对行地址的操作所需要的时间。
[0072] tRCD(即DRAM RAS to CAS Delay):内存在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔即为tRCD,RAS至CAS的延迟,简单的说,已知行地址位置,在这一行中找到相应的列地址,就可以完成寻址,进行读写操作,从已知行地址到找到列地址过去的时间就是tRCD。
[0073] tRP(Precharge command Period):预充电有效周期。在内存发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开新的工作行,这个间隔被称为tRP。
[0074] tRTP(即DRAM Read to Precharge Time):定义了同一rank上内存从读取命令发出到tRP之前的间隔时间,但是它在读取完成并且行地址关闭之后才会生效。
[0075] 也就是说,内存控制器激活内存的寄存器中的R0 BG0需要耗时tRCD,然后才能响应A请求读取R0 BG0上的数据,当紧接着响应同行的B请求再次访问R0 BG0的数据时,需要等待tCCD_L的延时方可读取,当紧接着响应异行的C请求读取R1 BG0上的数据时,需要等待tRP+tRTP的行预充电时间。然后再等待R1 BG0上写数据的时间。
[0076] 而若采用上述方法,对于访问同行地址的连续多个访问请求修改bank group地址,则内存控制器向内存发送的两个相邻的但bank group地址的访问指令的时间间隔则可得到缩短。
[0077] 例如,参考图6所示,在图6中,仍然是三个访问请求A、B、C的地址在队列中分别为:R0 BG0、R0 BG0、R1 BG0;可将连续同行的请求A、B间隔修改,即修改B请求的地址为R0 BG1(即修改为第二BG地址,但行地址仍然保持R0不变)。则内存控制器在发送A和B的访问请求对应的访问指令时,第一时间间隔为tCCD_S,缩短了内存控制器发送相邻的对应同一行地址的访问指令的时间,而整体上,这三个访问请求的内存响应延时总和为(单位为内存时序单元):
[0078] tRCD(16)+tRTP(6)+tRP(11)tRCD(16)+tCL(16)+4=69,即节省了tCCD_L-tCCD_S+tCCD_S个延时。
[0079] 也就是说,对于BG0,在响应完A请求的R0 BG0的读取指令之后,直接预充电,并继续响应C请求读取R1 BG0,而B请求的R0 BG1由于属于BG1,因此可异步地访问BG1,从而节省了延时。
[0080] 而在另一个实施例中,内存控制器在修改请求队列中访问请求的bank group地址时,也可针对访问不同行地址的访问请求采用如下策略,请参考图7所示,包括:
[0081] 步骤S202:内存控制器确定访问队列中第一访问集合,第一访问集合中包含有连续的多个访问请求,第一访问集合中的多个访问请求中均包含有第一bank group地址以及第一行地址,第一行地址用于指向所述内存中的第一行寄存器。
[0082] 步骤S204:内存控制器确定访问队列中的第二访问请求,第二访问请求在访问队列中位于第一访问集合的访问请求之后且与第一访问集合的访问请求相邻,第二访问请求中包含有第一bank group地址以及第二行地址,第二行地址与第一行地址不同,第二行地址用于指向内存中的第二行寄存器。第一行寄存器和第二行寄存器均是指内存中的任意一行寄存器。
[0083] 如上例中,仍然是三个访问请求A、B、C的地址在队列中分别为:R0 BG0、R0 BG0、R1 BG0。请求A和B访问行地址R0,请求C访问行地址R1,但请求A、B、C对应的bank group地址均为BG0。则请求A和B为第一访问集合中的第一访问请求,请求C为位于第一访问集合的访问请求之后且与第一访问集合的访问请求相邻的第二访问请求。R0为第一行地址,执行内存中的第一行寄存器,R1为第二行地址,执行内存中的第二行寄存器。
[0084] 步骤S206:内存控制器确定所述第一访问集合中的访问请求的数量小于预设阈值。
[0085] 步骤S208:内存控制器将第二访问请求中的第一bank group地址修改为第二bank group地址。
[0086] 如上例中,内存控制器可将请求C的bank group地址修改为BG1,而保持请求A和B的bank group地址不变。
[0087] 步骤S210:内存控制器根据第二时间间隔分别向内存发送第一激活指令以及第二激活指令,其中,第一激活指令是根据所述第一访问集合中的第一访问请求生成的,所述第一激活指令中包含有所述第一bank group地址以及所述第一行地址,所述第一激活指令用于指示所述第一访问请求待访问的第一寄存器的行地址;所述第二激活指令是根据所述第二访问请求生成的,所述第二激活指令中包含有所述第二bank group地址以及所述第二行地址,所述第二激活指令用于指示所述第二访问请求待访问的第二寄存器的行地址。
[0088] 第二时间间隔的最小取值可以是行地址间延迟tRRD(DRAM RAS to RAS Delay,同rank不同bank间两个连续激活指令的最短延迟),也就是说,内存控制器在向内存发送针对第一行地址的第一激活指令和针对第二行地址的第二激活指令时,不需要等待第一访问集合中的所有请求访问内存完毕再发送针对第二行地址的第二激活指令,而可在等待较短的第二时间间隔(例如tRRD的间隔)后异步地发送第二激活指令,使得对第二行地址的访问可异步地执行。
[0089] 例如,在该实施例中,参考图8所示,在图8中,三个请求A、B、C的地址在队列中分别为:R0 BG0、R0 BG0、R1 BG0;可将连续异行的请求AB和C间隔修改,即修改C请求的地址为R1BG1(即修改为第二BG地址,但行地址仍然保持R1不变)。则内存控制器在向内存发送第一激活指令之后,等待tRRD的时间即可发送第二激活指令,缩短了等待时间,且这三个请求的内存访问延时总和为(单位为内存时序单元):
[0090] tRCD(16)+tCL(16)+6+4+4=46
[0091] 即节省了tRTP+tRP+tRCD-tCCD_S个延时。
[0092] 也就是说,内存控制器在根据BG0的A请求和B请求向内存发起第一激活指令时,可异步地向内存发起BG1的C请求对应的第二激活指令,即在激活R0 BG0后,虽然需要等待tRRD的延时,才能激活R1 BG1,但该延时发生时,BG0仍处于tRCD的延时等待过程中。而BG0在等待tCCD_L和tCCD_S的延时时,BG1也处于等待tCL延时的过程中,因此,延时被分摊到了BG0和BG1上得到了异步地处理,从而使得执行内存访问指令的延时大大减少。
[0093] 进一步的,在一个实施例中,还存在针对连续同行的访问请求数量较多的情况,例如,请求队列中现有N+1个请求,按照接收的先后顺序,前N个请求的地址对应同一行R0 BG0,后1个请求对应不同行R1 BG0。内存控制器可根据第一访问集合的长度N在上述两种修改bank group地址的方法中选择较优的方式。
[0094] 例如,当内存控制器确定所述第一访问集合中的访问请求的数量N不小于预设阈值时,内存控制器将第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址,以使修改后的第一访问集合中的多个访问请求交替使用第一bank group地址和第二bank group地址。
[0095] 而当内存控制器确定第一访问集合中的访问请求的数量N小于预设阈值时,则执行上述步骤S208:内存控制器将第二访问请求中的第一bank group地址修改为第二bank group地址。
[0096] 可选的,该预设阈值为:
[0097] (tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S);
[0098] 其中,tRP为预充电有效周期,tRTP为内存从读取命令发出到tRP之前的延时,tRCD为行地址激活命令发出之后内存对行地址的操作所需要的时间;tCCD_S为异bank group地址下的列地址到列地址操作的延时,tCCD_L为同bank group地址下的列地址到列地址操作的延时。
[0099] 如前所述,参考图9所示,第一访问集合中的N个第一访问请求的地址对应同一行R0 BG0,后1个第二访问请求对应不同行R1 BG0的情况,则得到的第一子队列即为N个针对R0 BG0的请求。
[0100] 若采用前述的内存控制器将第一访问集合中的多个访问请求中的部分访问请求的第一bank group地址修改为第二bank group地址的方式进行修改,则共计节省延时为:
[0101] 省时1=(tCCD_L-tCCD_S)×N+tCCD_S
[0102] 而采用前述的内存控制器将第二访问请求中的第一bank group地址修改为第二bank group地址的方式进行修改,则节省延时为:
[0103] 省时2=tRTP+tRP+tRCD-tCCD_S个延时。
[0104] 因此当省时1>省时2时,选用前述的针对连续同行的请求进行间隔修改的方式设定BG地址,当省时1<省时2,选用前述的针对异行间的请求进行间隔修改的方式设定BG地址。
[0105] 因此,队列长度阈值即为(tRTP+tRP+tRCD-tCCD_S-tCCD_S)/(tCCD_L-tCCD_S)。
[0106] 在其他实施例中,在寄存器空间中的同一个寄存器内容可使用大于2个BG地址的应用场景中,例如,可分别对应BG0、BG1和BG2地址,则以此类推,对于上述请求A、B、C,可将初始的R0 BG0、R0 BG0、R1 BG0修改为R0 BG0、R0 BG1、R1 BG2,然后分摊在BG0、BG1、BG2上异步执行。更进一步地提高执行效率。
[0107] 进一步的,若内存控制器确定第一访问集合中的访问请求的数量N小于预设阈值时,即内存控制器采用将第二访问请求中的第一bank group地址修改为第二bank group地址的修改方式时,内存控制器还可确定发送第一激活指令和第二激活指令的先后顺序。
[0108] 即,内存控制器在第一行地址和第二行地址中确定优先到达空闲状态的行地址。
[0109] 当所述内存控制器确定第一行地址优先到达空闲状态时,内存控制器向内存发送所述第一激活指令,经过第二时间间隔后,内存控制器向内存发送第二激活指令;
[0110] 当内存控制器确定第二行地址优先到达空闲状态时,内存控制器向内存发送第二激活指令,所述第二时间间隔后,内存控制器向所述内存发送第一激活指令。
[0111] 参考图3所示,内存控制器中还设置有Bank状态寄存器,其中存储有内存中的寄存器行地址的状态。Bank状态中按照距离空闲状态由远到近的顺序为READ/WRITE(读/写状态)、ACT(激活状态)、PRECHARGE(预充电状态)、IDLE(空闲状态)。若第一行地址更快达到空闲状态,则优先发送第一激活指令,使得第一访问指令能够被内存快速地响应;而当第二地址更快达到空闲状态,则优先发送第二激活指令,使得第二访问指令能够被内存快速地响应。若在第二地址更快达到空闲状态时,仍然优先发送第一激活指令,则及时内存控制器将寄存器中的行地址激活,也需要等待该行地址达到空闲状态才能对其访问,因此需要等待额外的时间,而此时先发送第二激活指令,则在等待第二时间间隔的同时,等待了第一行地址抵达空闲状态,从而合并了等待的时间,也就减少了访问内存的时间,从而提高了内存的访问速度。
[0112] 综上,实施本发明实施例,将具有如下有益效果:
[0113] 上述设定内存访问方法及内存控制器中,寄存器空间中的同一寄存器内容对应至少一个寄存器地址,所述至少一个寄存器地址仅内存库组bank group地址不同,所述访问请求的寄存器地址使用第一bank group地址。内存控制器通过动态地选访问请求设定bank group地址为第二bank group地址,使得内存控制器能够根据原本携带同一bank group地址的内存访问请求生成携带不同bank group地址的内存访问指令,从而使得部分内存访问指令可对内存进行异步地访问,提高了内存访问的并发量,并利用了内存控制器发送异bank group地址的内存访问指令的最小间隔tCCD_S小于发送同bank group地址的内存访问指令的最小间隔tCCD_L的特性,从而减少了内存读写延时,提高了内存的读写效率。
[0114] 同时,本发明实施例中的设定bank group地址的方法及装置没有对CPU请求内存控制器的计算机程序进行修改,对于CPU侧而言,内存控制器设定bank group地址的方式是透明的,对于开发人员而言,也不需要对CPU侧的计算机程序进行修改即可完成适配,从而提高了扩展性。
[0115] 以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈