内存访问方法和装置转让专利

申请号 : CN201210146754.9

文献号 : CN102681946B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张广飞王焕东陈新科黄帅

申请人 : 龙芯中科技术有限公司

摘要 :

本发明公开了一种内存访问方法和装置,其中,该方法包括:接收访问请求,访问请求为访问内存的请求;根据访问请求以颗粒组为单位访问内存,其中,颗粒组通过将内存颗粒分组得到,每个颗粒组包含一个或多个内存颗粒。本发明解决了相关技术中在进行内存访问的过程中由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作而造成功耗大的问题,达到减小内存功耗的效果,进一步地,提升了内存系统的性能。

权利要求 :

1.一种内存访问方法,其特征在于,包括:

接收访问请求,所述访问请求为访问内存的请求;

根据所述访问请求以颗粒组为单位访问内存以使得当一个访存请求在一个颗粒组上发生页冲突时,内存控制器只对发生页冲突的颗粒组进行页打开和页关闭操作,其中,所述颗粒组通过将内存颗粒分组得到,每个颗粒组包含一个或多个内存颗粒。

2.根据权利要求1所述的方法,其特征在于,根据所述访问请求以颗粒组为单位访问内存的步骤包括:获取访问请求中携带的内存地址信息,其中,所述内存地址信息包含颗粒地址,所述颗粒地址用于指向所需访问的颗粒组;

根据所述颗粒地址查询对应的颗粒组;

以查询到的颗粒组为单位进行访问操作。

3.根据权利要求2所述的方法,其特征在于,以查询到的颗粒组为单位进行访问操作的步骤包括:将所述访问请求发送至与所述颗粒地址对应的命令队列中;

读取并执行所述命令队列中存储的访问请求所指示的访问操作。

4.根据权利要求1所述的方法,其特征在于,动态配置所述颗粒组中所包含的内存颗粒的数目。

5.根据权利要求4所述的方法,其特征在于,通过配置寄存器组动态配置所述颗粒组中所包含的内存颗粒的数目,其中,所述配置寄存器组由若干配置寄存器组成,所述配置寄存器中包含如下信息:内存颗粒编号、颗粒组编号和当前颗粒组中所包含的所有内存颗粒编号。

6.根据权利要求2或3所述的方法,其特征在于,所述访问操作包括:读取操作和写入操作。

7.一种内存访问装置,其特征在于,包括:

接收单元,用于接收访问请求,所述访问请求为访问内存的请求;

访问单元,用于根据所述访问请求以颗粒组为单位访问内存以使得当一个访存请求在一个颗粒组上发生页冲突时,内存控制器只对发生页冲突的颗粒组进行页打开和页关闭操作,其中,所述颗粒组通过将内存颗粒分组得到,每个颗粒组包含一个或多个内存颗粒。

8.根据权利要求7所述的装置,其特征在于,所述访问单元包括:获取模块,用于获取访问请求中携带的内存地址信息,其中,所述内存地址信息包含颗粒地址,所述颗粒地址用于指向所需访问的颗粒组;

查询模块,用于根据所述颗粒地址查询对应的颗粒组;

访问模块,用于以查询到的颗粒组为单位访问内存。

9.根据权利要求8所述的装置,其特征在于,所述访问模块包括:发送子模块,用于将所述访问请求发送至与所述颗粒地址对应的命令队列中并存储;

执行子模块,用于执行所述命令队列中存储的访问请求所指示的访问操作。

10.根据权利要求7所述的装置,其特征在于,还包括:配置单元,用于通过配置寄存器组配置所述颗粒组所包含的内存颗粒的数量,其中,所述配置寄存器组由若干配置寄存器组成,所述配置寄存器中包含如下信息:内存颗粒编号、颗粒组编号和当前颗粒组中所包含的所有内存颗粒。

说明书 :

内存访问方法和装置

技术领域

[0001] 本发明涉及计算机领域,具体而言,涉及一种内存访问方法和装置。

背景技术

[0002] 在现有的计算机系统中,内存系统的性能对处理器性能起着举足轻重的作用。内存系统主要由内存控制器和内存芯片组成。内存控制器与内存芯片之间的接口主要由控制总线和数据总线组成。控制总线主要包括控制命令和地址信息。为了获得较高的访存带宽(带宽是指在单位时间内,内存系统提供给处理器的数据量,通常以字节为单位),内存控制器与内存芯片之间的数据总线一般比较宽,通常为64位。
[0003] 现有的内存颗粒通常采用Rank的组织形式,每个内存控制器可以连接多个Rank,每个Rank由多个内存颗粒组成。图1为现有的内存系统的结构示意图,在图1中,每个颗粒提供宽度为16位(简写为类型x16)的数据总线,则一个64位的Rank需要由4个x16的内存颗粒组成。每个内存颗粒由多个Bank组成。具体来说,以DDR3 SDRAM为例,每个内存颗粒固定由8个Bank组成。每个Bank由多个行(也称为页)和一个行缓冲组成。当内存控制器需要对某一行数据进行读取或者写入操作时,内存颗粒首先需要将该行的数据搬入行缓冲,然后在行缓冲中对该行数据进行读取或者写入操作。对数据的读取或者写入操作完成以后,需要将行缓冲中的数据搬运回原来的位置。
[0004] 内存控制器通常通过三类内存命令控制内存芯片:打开页操作,关闭页操作和读写数据操作。对于一个访存请求,如果该访存请求需要访问的数据已经在行缓冲中,则称该访存请求“页命中”。否则,称该访存请求“页冲突”。当发生页命中时,内存控制器可以直接在行缓冲中进行读写数据操作。当发生页冲突时,内存控制器需要首先将行缓冲中的行搬回原来的位置(关闭页),然后将需要访问的页搬到行缓冲中(打开页),然后在行缓冲中进行数据的读写操作。因此,页冲突的访存请求需要比页命中的访存请求消耗更多的时间。
[0005] 现有的内存控制器通常采用图1所示的方式,以Rank为单位进行内存访问。为了得到64位数据总线,内存控制器需要同时操作一个Rank上的所有颗粒,在内存访问过程中,可能多个功能单元会同时访问内存系统,不同的功能单元访问不同的页。这种情况下内存颗粒需要频繁的执行页打开和页关闭操作,造成严重的页冲突,从而使内存系统性能低下。
[0006] 图2为现有技术中内存颗粒控制的一种示例,(在图2中,Rank由4个颗粒组成,在实际的系统,每个Rank可能由不同数目的内存颗粒组成)。由于内存控制器同时操作所有的内存颗粒,所有的内存颗粒都处于相同的状态。当一个访存请求在一个颗粒上发生页冲突时,该访存请求也必然在其它颗粒上发生页冲突。同时由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作,消耗了大量的功耗,影响内存系统的性能。
[0007] 针对相关技术中在进行内存访问的过程中由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作而造成功耗大的问题,目前尚未提出有效的解决方案。

发明内容

[0008] 本发明提供了一种内存访问方法和装置,以解决相关技术中在进行内存访问的过程中由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作而造成功耗大的问题。
[0009] 根据本发明的一个方面,提供了一种内存访问方法,该方法包括:接收访问请求,访问请求为访问内存的请求;根据访问请求以颗粒组为单位访问内存,其中,颗粒组通过将内存颗粒分组得到,每个颗粒组包含一个或多个内存颗粒。
[0010] 优选的,根据访问请求以颗粒组为单位访问内存的步骤包括:获取访问请求中携带的内存地址信息,其中,内存地址信息包含颗粒地址,颗粒地址用于指向所需访问的颗粒组;内存地址信息内存地址信息根据颗粒地址查询对应的颗粒组;以查询到的颗粒组为单位进行访问操作。
[0011] 优选的,以查询到的颗粒组为单位进行访问操作的步骤包括:将访问请求发送至与颗粒地址对应的命令队列中;读取并执行命令队列中存储的访问请求所指示的访问操作。
[0012] 优选的,动态配置颗粒组中所包含的内存颗粒的数目。
[0013] 优选的,通过配置寄存器组动态配置颗粒组中所包含的内存颗粒的数目,其中,配置寄存器组由若干配置寄存器组成,配置寄存器中包含如下信息:内存颗粒编号、颗粒组编号和当前颗粒组中所包含的所有内存颗粒编号。
[0014] 优选的,访问操作包括:读取操作和写入操作。
[0015] 根据本发明的另一方面,提供了一种内存访问装置,该装置包括:接收单元,用于接收访问请求,访问请求为访问内存的请求;访问单元,用于根据访问请求以颗粒组为单位访问内存,其中,颗粒组通过将内存颗粒分组得到,每个颗粒组包含一个或多个内存颗粒。
[0016] 优选的,访问单元包括:获取模块,用于获取访问请求中携带的内存地址信息,其中,内存地址信息包含颗粒地址,颗粒地址用于指向所需访问的颗粒组;查询模块,根据颗粒地址查询对应的颗粒组;访问模块,用于以查询到的颗粒组为单位访问内存。
[0017] 优选的,访问模块包括:发送子模块,用于将访问请求发送至与颗粒地址对应的命令队列中并存储;执行子模块,用于读取并执行命令队列中存储的访问请求所指示的访问操作。
[0018] 优选的,该装置还包括:配置单元,用于通过配置寄存器组配置颗粒组所包含的内存颗粒的数量,其中,配置寄存器组由若干配置寄存器组成,配置寄存器中包含如下信息:内存颗粒编号、颗粒组编号和当前颗粒组中所包含的所有内存颗粒。
[0019] 在本发明中,以颗粒组的形式重新组织颗粒,每个颗粒组可以有一个或多个的内存颗粒,这样内存控制器可以单独操作每个内存颗粒组。由于每个内存命令只操作一个颗粒组,使得每个颗粒组处于不同的状态。当一个访存请求在一个颗粒组上发生页冲突时,内存控制器只对该颗粒组进行页打开和页关闭操作,从而起到节省功耗的目的。此外,一个Rank划分为多个颗粒组,每个颗粒组的Bank打开不同的页,可以有效的减少页冲突,解决了相关技术中在进行内存访问的过程中由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作而造成功耗大的问题,达到减小内存功耗的效果,进一步地,提升了内存系统的性能。

附图说明

[0020] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0021] 图1是根据相关技术的内存系统的一种结构示意图;
[0022] 图2是根据相关技术中内存颗粒控制的一种示意图;
[0023] 图3是根据本发明实施例的内存访问方法的一种优选的流程图;
[0024] 图4是根据本发明实施例的一种颗粒组的优选的示意图;
[0025] 图5是传统的地址划分形式的示意图;
[0026] 图6是根据本发明实施例的地址划分形式的示意图;
[0027] 图7是根据本发明实施例的另一种颗粒组的优选的示意图;
[0028] 图8是根据本发明实施例的另一种颗粒组的优选的示意图;
[0029] 图9是根据本发明实施例的内存访问装置的一种优选的结构示意图;
[0030] 图10是根据本发明实施例的内存访问装置的另一种优选的结构示意图;以及[0031] 图11是根据本发明实施例的内存访问装置的又一种优选的结构示意图。

具体实施方式

[0032] 下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0033] 实施例1
[0034] 本发明提供了一种内存访问方法,具体来说,如图3所示,该方法包括:
[0035] S302,接收访问请求,访问请求为访问内存的请求;优选的,当需要对某一行数据进行访问(如,读取某一行数据或者写入数据)时,向内存控制器发出请求访问内存的访问请求。
[0036] S304,根据访问请求以颗粒组为单位访问内存,其中,颗粒组通过将内存颗粒分组得到,每个颗粒组包含一个或多个内存颗粒。优选的,将内存颗粒分为若干个颗粒组,每个颗粒组包括一个或多个的内存颗粒。具体来说,图4示出一种将内存颗粒分组后得到的内存组的一种示意图,在图4中,一个Rank由4个内存颗粒组成,对应编号为内存颗粒0、内存颗粒1、内存颗粒2和内存颗粒3,每两个颗粒组成一个颗粒组,这两个颗粒组的编号依次为a,b,它们对应的内存颗粒编号依次为(0,1),(2,3)。为了使内存控制器可以单独控制每个内存颗粒组。本发明为每个颗粒组提供了专门的控制线路。当MR的值(MR的值为该访存请求要访问的颗粒组编号)为1时,内存颗粒1所在的颗粒组为颗粒组a,因而访存请求对颗粒组a进行读取或者写入操作。通过这种形式,本发明达到了划分不同颗粒组,并分别控制这些颗粒组的目的。
[0037] 在上述优选的实施方式中,以颗粒组的形式重新组织颗粒,每个颗粒组可以有一个或多个的内存颗粒,这样内存控制器可以单独操作每个内存颗粒组。由于每个内存命令只操作一个颗粒组,使得每个颗粒组处于不同的状态。当一个访存请求在一个颗粒组上发生页冲突时,内存控制器只对该颗粒组进行页打开和页关闭操作,从而起到节省功耗的目的。此外,一个Rank划分为多个颗粒组,每个颗粒组的Bank打开不同的页,可以有效的减少页冲突,解决了相关技术中在进行内存访问的过程中由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作而造成功耗大的问题,达到减小内存功耗的效果,进一步地,提升了内存系统的性能。
[0038] 本实施例中还提供了一种根据访问请求以颗粒组为单位访问内存的优选的方案,具体来说,该方案包括如下步骤:获取访问请求中携带的内存地址信息,其中,内存地址信息包含颗粒地址,颗粒地址用于指向所需访问的颗粒组;根据颗粒地址查询对应的颗粒组;以查询到的颗粒组为单位进行访问操作。具体来说,在接收到内存访问请求后,首先获取访问请求中携带的内存地址信息,传统的地址划分形式如图5所示,内存地址可以分为CS(Chip Select,用于选择Rank),ROW(行地址,用于选择行),BA(Bank地址,用于选择Bank),COL(列地址,用于选择列)。按照这种地址划分方式,访存请求以Rank为单位访问内存。本发明提出了一种新型的管理方式。如图6所示,内存地址可以划分为CS(Chip Select,用于选择Rank),MR(颗粒地址,用于选择颗粒组),ROW(行地址,用于选择行),BA(Bank地址,用于选择Bank),COL(列地址,用于选择列)。其中,MR的值为该访存请求要访问的颗粒组编号。根据MR的值来确定所需访问的内存地址所在的颗粒组,以颗粒组为单位进行内存访问。下面举例进行具体的说明:
[0039] 假设Addr代表访存地址,原有的地址映射机制需要将访存地址由高到低依次翻译为Rank地址,行地址,Bank地址,列地址和字节地址组成。例如,对于一个64位内存芯片,取其Rank地址有两位,行地址为14位,Bank地址为3位,列地址为10位。则Addr[2:0]为字节地址,Addr[12:3]为列地址,Addr[15:13]为Bank地址,Addr[29:16]为行地址,Addr[31:30]为Rank地址。
[0040] 在本发明中,需要新的地址位区分组成Rank的各个颗粒。例如,对于一个64位内存芯片,取其Rank地址有两位,行地址为14位,Bank地址为3位,列地址为10位。如果将其分为四个通道,则Addr[0]为字节地址,Addr[10:1]为列地址,Addr[13:11]为Bank地址,Addr[27:14]为行地址,Addr[29:28]为颗粒地址,Addr[31:30]为Rank地址。内存控制器根据颗粒地址,将访存请求发往相应的命令队列。命令队列负责存储对应颗粒的访存请求。
[0041] 本发明还对上述方法进行了优化,提出了一种以查询到的颗粒组为单位进行访问操作的优选的方案,具体地,该方案包括如下步骤:将访问请求发送至与颗粒地址对应的命令队列中;读取并执行命令队列中存储的访问请求所指示的访问操作。具体来说,内存控制器根据访问请求中携带的内存地址信息获取所需访问的内存颗粒地址,将访问请求发送至与颗粒地址对应的命令队列,命令队列负责存储对应颗粒的访问请求。下面以单个内存颗粒为一组颗粒组的情况举例说明命令发送和数据传输过程。
[0042] 命令发送:原有的内存控制器单独控制每个Rank,而本发明中内存控制器必须增加对每个颗粒控制线,为内存控制器设计单独控制组成Rank的每个颗粒。此外,内存控制器为每个颗粒增加了单独的状态机(Status Machine,SM)。跟原有的Rank状态机一样,颗粒状态机记录内存颗粒的控制信息,对内存颗粒发送相应的内存命令。
[0043] 数据传输:每个颗粒可以同时分别向内存控制器传输数据,这些数据分别对应不同的访存请求。颗粒状态机控制数据的接收和发送。对于读访存请求,颗粒状态机将内存颗粒传回的数据送往对应的命令队列,命令队列负责将该数据返回到内存接口。对于写访存请求,颗粒状态机将写数据送往内存颗粒。
[0044] 在本发明中,每个颗粒组中的内存颗粒数目可以相同,也可以不同。具体地,如图7所示,一个Rank由4个颗粒组成,颗粒0和颗粒1组成一个颗粒组,颗粒2和颗粒3分别组成一个颗粒组。为了使内存控制器可以单独控制每个内存颗粒组,本发明为每个颗粒组提供了专门的控制线路。这三个颗粒组的编号依次为a,b,c,它们对应的内存颗粒编号依次为(0,1),2,3。按照技术方案1提出的颗粒组地址划分形式,当MR的值为0或者1时,访存请求对颗粒组a进行读取或者写入操作。当MR的值分别为2或者3时,访存请求分别对颗粒组b和颗粒组c进行读写或者写入操作。通过这种形式,本发明达到了划分不同颗粒组,每个颗粒组中颗粒数目不同,并分别控制这些颗粒组的目的。在实际应用中,应用程序的访存带宽需求不同。带宽需求较高的应用程序可以使用由多个内存颗粒组成的颗粒组,带宽需求较低的应用程序可以使用由较少颗粒组成的颗粒组。
[0045] 本发明还对上述方法进行了进一步的优化,以达到动态配置颗粒组所包含的内存颗粒的数量的目的,为了达到上述目的,具体地,通过配置寄存器组配置颗粒组所包含的内存颗粒的数量,其中,配置寄存器组由若干配置寄存器组成,配置寄存器中包含如下信息:内存颗粒编号、颗粒组编号和当前颗粒组中所包含的所有内存颗粒编号。下面结合具体示例进行进一步说明:
[0046] 图8示出一种内存颗粒组织,由4个颗粒组成,假设图8中有4个颗粒组,每个颗粒组中有一个颗粒,每个内存颗粒都有专用的控制路线。优选的,在内存控制器中增加配置寄存器组,该寄存器组由多个配置寄存器组成,如表一所示:
[0047] 表一
[0048]颗粒编号 颗粒组编号 颗粒组中所有颗粒编号
[0049] 每个寄存器由三部分组成:颗粒编号,该颗粒对应的颗粒组编号,该颗粒组中所有颗粒编号。在内存访问过程中,内存控制器根据MR的值查询该配置寄存器,根据MR的值获知该访存请求需要访问的颗粒组编号和颗粒组中所有颗粒编号,访存请求访问该颗粒组中所有颗粒。表二,表三和表四分别举例介绍了图4,图7和图8中颗粒编号与颗粒组编号对应关系的设置值。表二,表三和表四如下:
[0050] 表二
[0051]颗粒编号 颗粒组编号 颗粒组中所有颗粒编号
0 a 0,1
1 a 0,1
2 b 2,3
3 b 2,3
[0052] 表三
[0053]颗粒编号 颗粒组编号 颗粒组中所有颗粒编号
0 a 0,1
1 a 0,1
2 b 2
3 c 3
[0054] 表四
[0055]颗粒编号 颗粒组编号 颗粒组中所有颗粒编号
0 a 0
1 b 1
2 c 2
3 d 3
[0056] 在表二中,当MR为0时,该访存请求访问访存组a,访存组a由内存颗粒0和内存颗粒1组成,该访存请求根据查询结果访问颗粒0和颗粒1;在表三中,当MR为0时,该访存请求访问访存组a,访存组a由内存颗粒0和内存颗粒1组成,该访存请求根据查询结果访问颗粒0和颗粒1;在表四中,当MR为0时,该访存请求访问访存组a,访存组a由内存颗粒0组成,该访存请求根据查询结果访问颗粒0。按照上述方法可以实现动态配置颗粒组中内存颗粒的数目,在实际应用中,应用程序的访存带宽需求不同。带宽需求较高的应用程序可以使用由多个内存颗粒组成的颗粒组,带宽需求较低的应用程序可以使用由较少颗粒组成的颗粒组。
[0057] 实施例2
[0058] 基于上述实施例1所记载的内存访问方法,本发明还提供了一种内存访问装置,具体来说,如图9所示,该装置包括:接收单元902,用于接收访问请求,访问请求为访问内存的请求;优选的,当需要对某一行数据进行访问(如,读取某一行数据或者写入数据)时,向内存控制器发出请求访问内存的访问请求。访问单元904,用于根据访问请求以颗粒组为单位访问内存,其中,颗粒组通过将内存颗粒分组得到,每个颗粒组包含一个或多个内存颗粒。具体来说,图4示出一种将内存颗粒分组后得到的内存组的一种示意图,在图4中,一个Rank由4个内存颗粒组成,对应编号为内存颗粒0、内存颗粒1、内存颗粒2和内存颗粒3,每两个颗粒组成一个颗粒组,这两个颗粒组的编号依次为a,b,它们对应的内存颗粒编号依次为(0,1),(2,3)。为了使内存控制器可以单独控制每个内存颗粒组。本发明为每个颗粒组提供了专门的控制线路。当MR的值(MR的值为该访存请求要访问的颗粒组编号)为
1时,内存颗粒1所在的颗粒组为颗粒组a,因而访存请求对颗粒组a进行读取或者写入操作。通过这种形式,本发明达到了划分不同颗粒组,并分别控制这些颗粒组的目的。
[0059] 在上述优选的实施方式中,以颗粒组的形式重新组织颗粒,每个颗粒组可以有一个或多个的内存颗粒,这样内存控制器可以单独操作每个内存颗粒组。由于每个内存命令只操作一个颗粒组,使得每个颗粒组处于不同的状态。当一个访存请求在一个颗粒组上发生页冲突时,内存控制器只对该颗粒组进行页打开和页关闭操作,从而起到节省功耗的目的。此外,一个Rank划分为多个颗粒组,每个颗粒组的Bank打开不同的页,可以有效的减少页冲突,解决了相关技术中在进行内存访问的过程中由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作而造成功耗大的问题,达到减小内存功耗的效果,进一步地,提升了内存系统的性能。
[0060] 本发明还对上述访问单元904进行了改进,以实现根根据访问请求以颗粒组为单位访问内存,为实现上述目的,具体来说,如图10所示,访问单元904包括:获取模块1002,用于获取访问请求中携带的内存地址信息,其中,内存地址信息包含颗粒地址,颗粒地址用于指向所需访问的颗粒组;查询模块1004,用于根据颗粒地址查询对应的颗粒组;访问模块1006,用于以查询到的颗粒组为单位进行访问操作。
[0061] 具体来说,在接收到内存访问请求后,首先获取访问请求中携带的内存地址信息,传统的地址划分形式如图5所示,内存地址可以分为CS(Chip Select,用于选择Rank),ROW(行地址,用于选择行),BA(Bank地址,用于选择Bank),COL(列地址,用于选择列)。按照这种地址划分方式,访存请求以Rank为单位访问内存。本发明提出了一种新型的管理方式。如图6所示,内存地址可以划分为CS(Chip Select,用于选择Rank),MR(颗粒地址,用于选择颗粒组),ROW(行地址,用于选择行),BA(Bank地址,用于选择Bank),COL(列地址,用于选择列)。其中,MR的值为该访存请求要访问的颗粒组编号。根据MR的值来确定所需访问的内存地址所在的颗粒组,以颗粒组为单位进行内存访问。下面举例进行具体的说明:
[0062] 假设Addr代表访存地址,原有的地址映射机制需要将访存地址由高到低依次翻译为Rank地址,行地址,Bank地址,列地址和字节地址组成。例如,对于一个64位内存芯片,取其Rank地址有两位,行地址为14位,Bank地址为3位,列地址为10位。则Addr[2:0]为字节地址,Addr[12:3]为列地址,Addr[15:13]为Bank地址,Addr[29:16]为行地址,Addr[31:30]为Rank地址。
[0063] 在本发明中,需要新的地址位区分组成Rank的各个颗粒。例如,对于一个64位内存芯片,取其Rank地址有两位,行地址为14位,Bank地址为3位,列地址为10位。如果将其分为四个通道,则Addr[0]为字节地址,Addr[10:1]为列地址,Addr[13:11]为Bank地址,Addr[27:14]为行地址,Addr[29:28]为颗粒地址,Addr[31:30]为Rank地址。内存控制器根据颗粒地址,将访存请求发往相应的命令队列。命令队列负责存储对应颗粒的访存请求。
[0064] 优选的,如图11所示,访问模块1006包括:发送子模块1102,用于将访问请求发送至与颗粒地址对应的命令队列中;执行子模块1104,用于读取并执行命令队列中存储的访问请求所指示的访问操作。
[0065] 具体来说,内存控制器根据访问请求中携带的内存地址信息获取所需访问的内存颗粒地址,将访问请求发送至与颗粒地址对应的命令队列,命令队列负责存储对应颗粒的访问请求。下面以单个内存颗粒为一组颗粒组的情况举例说明命令发送和数据传输过程。
[0066] 命令发送:原有的内存控制器单独控制每个Rank,而本发明中内存控制器必须增加对每个颗粒控制线,为内存控制器设计单独控制组成Rank的每个颗粒。此外,内存控制器为每个颗粒增加了单独的状态机(Status Machine,SM)。跟原有的Rank状态机一样,颗粒状态机记录内存颗粒的控制信息,对内存颗粒发送相应的内存命令。
[0067] 数据传输:每个颗粒可以同时分别向内存控制器传输数据,这些数据分别对应不同的访存请求。颗粒状态机控制数据的接收和发送。对于读访存请求,颗粒状态机将内存颗粒传回的数据送往对应的命令队列,命令队列负责将该数据返回到内存接口。对于写访存请求,颗粒状态机将写数据送往内存颗粒。
[0068] 在本发明中,每个颗粒组中的内存颗粒数目可以相同,也可以不同。具体地,如图7所示,一个Rank由4个颗粒组成,颗粒0和颗粒1组成一个颗粒组,颗粒2和颗粒3分别组成一个颗粒组。为了使内存控制器可以单独控制每个内存颗粒组,本发明为每个颗粒组提供了专门的控制线路。这三个颗粒组的编号依次为a,b,c,它们对应的内存颗粒编号依次为(0,1),2,3。按照技术方案1提出的颗粒组地址划分形式,当MR的值为0或者1时,访存请求对颗粒组a进行读取或者写入操作。当MR的值分别为2或者3时,访存请求分别对颗粒组b和颗粒组c进行读写或者写入操作。通过这种形式,本发明达到了划分不同颗粒组,每个颗粒组中颗粒数目不同,并分别控制这些颗粒组的目的。在实际应用中,应用程序的访存带宽需求不同。带宽需求较高的应用程序可以使用由多个内存颗粒组成的颗粒组,带宽需求较低的应用程序可以使用由较少颗粒组成的颗粒组。
[0069] 本发明还对上述装置进行了优化,具体地,该装置还包括:配置单元,用于通过配置寄存器组配置颗粒组所包含的内存颗粒的数量,其中,配置寄存器组由若干配置寄存器组成,配置寄存器中包含如下信息:内存颗粒编号、颗粒组编号和当前颗粒组中所包含的所有内存颗粒。。下面结合具体示例进行进一步说明:
[0070] 图8示出一种内存颗粒组织,由4个颗粒组成,假设图8中有4个颗粒组,每个颗粒组中有一个颗粒,每个内存颗粒都有专用的控制路线。优选的,在内存控制器中增加配置寄存器组,该寄存器组由多个配置寄存器组成,如表一所示,每个寄存器由三部分组成:颗粒编号,该颗粒对应的颗粒组编号,该颗粒组中所有颗粒编号。在内存访问过程中,内存控制器根据MR的值查询该配置寄存器,根据MR的值获知该访存请求需要访问的颗粒组编号和颗粒组中所有颗粒编号,访存请求访问该颗粒组中所有颗粒。表二,表三和表四分别举例介绍了图4,图7和图8中颗粒编号与颗粒组编号对应关系的设置值。在表二中,当MR为0时,该访存请求访问访存组a,访存组a由内存颗粒0和内存颗粒1组成,该访存请求根据查询结果访问颗粒0和颗粒1;在表三中,当MR为0时,该访存请求访问访存组a,访存组a由内存颗粒0和内存颗粒1组成,该访存请求根据查询结果访问颗粒0和颗粒1;在表四中,当MR为0时,该访存请求访问访存组a,访存组a由内存颗粒0组成,该访存请求根据查询结果访问颗粒0。按照上述方法可以实现动态配置颗粒组中内存颗粒的数目,在实际应用中,应用程序的访存带宽需求不同。带宽需求较高的应用程序可以使用由多个内存颗粒组成的颗粒组,带宽需求较低的应用程序可以使用由较少颗粒组成的颗粒组。
[0071] 从以上的描述中,可以看出,以颗粒组的形式重新组织颗粒,每个颗粒组可以有一个或多个的内存颗粒,这样内存控制器可以单独操作每个内存颗粒组。由于每个内存命令只操作一个颗粒组,使得每个颗粒组处于不同的状态。当一个访存请求在一个颗粒组上发生页冲突时,内存控制器只对该颗粒组进行页打开和页关闭操作,从而起到节省功耗的目的。此外,一个Rank划分为多个颗粒组,每个颗粒组的Bank打开不同的页,可以有效的减少页冲突,解决了相关技术中在进行内存访问的过程中由于发生页冲突时,同一个Rank上的所有内存颗粒都需要进行页打开和页关闭操作而造成功耗大的问题,达到减小内存功耗的效果,进一步地,提升了内存系统的性能。
[0072] 显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0073] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。