掌桥专利:专业的专利平台
掌桥专利
首页

内存模组和电子设备

文献发布时间:2024-04-18 19:58:53


内存模组和电子设备

技术领域

本申请涉及计算机技术领域,特别涉及一种内存模组和电子设备。

背景技术

内存又称主存,是现代计算机系统中的核心部件之一。目前内存在硬件系统中的典型形态是包括多个内存芯片的内存模组(又称为内存条),例如包括多个动态随机存储器(Dynamic Random Access Memory,DRAM)颗粒的内存模组。由于DRAM颗粒在使用过程中会因为电路故障、存储单元故障等导致数据错误,为确保数据完整性,在对数据稳定性要求较高的场景中,例如服务器、云存储等应用场景中,会使用错误检查和纠正(Error Checkingand Correcting,ECC)内存模组。ECC内存模组通过增加冗余的DRAM颗粒来存储纠错码,例如,参考图1,采用第四代双倍数据率同步动态随机存取存储器(Double-Data-Rate FourthGeneration Synchronous Dynamic Random Access Memory,DDR4)规范的ECC内存模组在和处理器进行数据交换时,一个采样周期交换72位数据,其中,64位为数据,8位为纠错码。处理器在访问ECC内存模组中的数据时,可以通过该纠错码来确定访问的数据是否有错误,并在确定出访问的数据有错误的情况下,通过ECC算法来纠正错误。

目前,处理器对应的可纠正错误的数据位宽通常为4位,即是在处理器单次对ECC内存模组的数据访问过程中,在出现错误的数据位数不超过4位的情况下,可以通过处理器或存储器控制器进行纠正。在采用数据位宽为4位的DRAM颗粒的内存模组中,由于DRAM颗粒的数据位与处理器的数据位是一一对应关系,若一个DRAM颗粒发生故障,则只会有4位数据可能发生错误,处理器可以通过ECC算法对该DRAM颗粒的数据错误进行纠正。

为满足用户对计算机的内存性能的需求,例如提高内存容量、访问速度等,ECC内存模组中可以采用数据位宽更大的DRAM颗粒。但是,在ECC内存模组采用的DRAM颗粒的数据位宽超过4位时,例如DRAM颗粒的位宽为8位或16位时,由于DRAM颗粒的数据位与处理器的数据位是一一对应关系,单个DRAM颗粒故障时会导致出现错误的数据位数超过4位,从而导致处理器无法进行纠错,进而使得采用数据位宽为8位或16位的DRAM颗粒的ECC内存模组的稳定性,低于采用数据位宽为4位的DRAM颗粒的ECC内存模组,限制了采用数据位宽为8位或16位的DRAM颗粒的ECC内存模组在对数据稳定性要求较高的场景中的应用。

发明内容

有鉴于此,本申请提供了一种内存模组和电子设备,有利于提高内存模组的稳定性。

第一方面,本申请实施例提供了一种内存模组,该内存模组的Rank位宽为4N,并且内存模组包括:存储模块,存储模块包括至少一个Rank,每个Rank包括N个内存颗粒,其中,16个内存颗粒用于存储数据,N-16个内存颗粒用于存储纠错码;控制电路,用于根据接收到的第一读取指令从每个内存颗粒中读取(2N-32)×8位数据并且每个采样周期输出4N位数据,或者根据接收到的第一存储指令向每个内存颗粒中存储(2N-32)×8位数据,其中,每个采样周期输出的4N位数据中至多有4位是从同一个内存颗粒中读取。

也即是说,在本申请实施例中,通过增加一个Rank中的内存颗粒(例如DRAM颗粒)的数量来减少每次访问过程中处理器从单个内存颗粒访问的数据的位数。内存模组的一个Rank中内存颗粒的位宽总和为内存模组的Rank位宽的两倍,对于采用DDR4规范的内存模组,Rank位宽为72(即N=18),从而处理器在通过BL8访问指令(第一存储指令或第一读取指令)访问一个Rank时,从一个内存颗粒只读取32位数据,并且每个采样周期向处理器发送的数据中,只有4位是来自于同一个内存颗粒,进而在一个内存颗粒故障时,每个采样周期的数据至多只有4位出错,未超出处理器的纠错能力,提高了内存模组的稳定性。

类似地,对于采用DDR5规范的内存模组,Rank位宽为80(即N=20),从而处理器在通过BL16访问指令(第一存储指令或第一读取指令)访问一个Rank时,从一个内存颗粒只读取64位数据,并且每个采样周期向处理器发送的数据中,只有4位是来自于同一个内存颗粒,进而在一个内存颗粒故障时,每个采样周期的数据至多只有4位出错,未超出处理器的纠错能力,提高了内存模组的稳定性。

在上述第一方面的一种可能实现中,N=18或20,并且各内存颗粒的颗粒位宽为8位。

对于采用DDR4规范的内存模组,Rank位宽为72,N=18;对于采用DDR5规范的内存模组,Rank位宽为80,N=20。

在上述第一方面的一种可能实现中,上述控制电路包括指令/地址转换模块和数据缓存模块;并且,控制电路通过以下方式根据接收到的第一存储指令向每个内存颗粒中存储(2N-32)×8位数据:指令/地址转换模块将第一存储指令转换为第二存储指令,第二存储指令用于向每个内存颗粒中的2N-32个存储单元中写入数据;数据缓存模块将接收到的(2N-32)×8N位数据分为数据位数相同的N个数据组,并向每个内存颗粒发送一个数据组的数据;存储模块响应第二存储指令,将接收到的各数据组的数据存储在相对应的内存颗粒中的2N-32个存储单元中。

在本申请实施例中,增加了一个Rank中的内存颗粒的数量,对于采用DDR4规范的内存模组,可以将BL8访问指令转换为BL4访问指令来从一个内存颗粒访问32位数据;而对于采用DDR5规范的内存模组,可以将BL16访问指令转换为BL8访问指令来从一个内存颗粒访问64位数据。

在上述第一方面的一种可能实现中,上述控制电路通过以下方式根据接收到的第一读取指令从每个内存颗粒中读取(2N-32)×8位数据并且每个采样周期输出4N位数据:指令/地址转换模块将第一读取指令转换为第二读取指令,第二读取指令用于读取每个内存颗粒的2N-32个存储单元中数据;存储模块响应第二读取指令,将每个内存颗粒中的2N-32个存储单元中的数据发送给数据缓存模块;数据缓存模块每个采样周期将从存储模块接收的数据中选择4N位数据输出。

在上述第一方面的一种可能实现中,在N=18的情况下,第一读取指令或第一存储指令为BL8访问指令,第二读取指令或第二存储指令为BL4访问指令;在N=20的情况下,第一读取指令或第一存储指令为BL16访问指令,第二读取指令或第二存储指令为BL8访问指令。

在上述第一方面的一种可能实现中,上述每个内存颗粒包括至少一个记忆体晶片(Bank),每个记忆体晶片的行数为P1、列数为Q1,第一存储指令包括第一逻辑地址,第一逻辑地址包括第一行标识R1和第一列标识C1,R1的取值范围为0至2P1-1,第二存储指令中包括第一物理地址;并且,指令/地址转换模块将第一存储指令转换为第二存储指令,包括:指令/地址转换模块在R1

在本申请实施例中,处理器访问内存模组的逻辑地址(第一逻辑地址)中,行标识的取值范围为内存颗粒的每个Bank行数P1据的两倍,从而内存模组可以在逻辑地址中的行标识R1≥P1时,访问每个Bank的后一半的列。

在上述第一方面的一种可能实现中,上述第一读取指令包括第二逻辑地址,第二逻辑地址包括第二行标识R2和第二列标识C2,R2取值范围为0至2P1-1,第二读取指令中包括第二物理地址;并且,指令/地址转换模块将第一读取指令转换为第二读取指令,包括:指令/地址转换模块在R2

在上述第一方面的一种可能实现中,上述内存颗粒为以下内存颗粒中的任意一种:DRAM颗粒、RRAM颗粒、MRAM颗粒、PCRAM颗粒。

第二方面,本申请实施例提供了一种内存模组,该内存模组的Rank位宽为8X,并且内存模组包括:存储模块,存储模块包括至少一个Rank,每个Rank包括X个内存颗粒,每个内存颗粒包括多个记忆体晶片(Bank),其中,8个内存颗粒用于存储数据,X-8个内存颗粒用于存储纠错码;控制电路,用于根据接收到的第三读取指令从每个内存颗粒的第一Bank和第二Bank各读取(4X-32)×8位数据并且每个采样周期输出8X位数据,或者根据接收到的第三存储指令向每个内存颗粒的第三Bank或第四Bank各存储(4X-32)×8位数据,其中,每个采样周期输出的8X位数据中至多有4位是从同一个内存颗粒的同一个Bank中读取。

也即是说,在本申请实施例中,通过将对一个内存颗粒(例如DRAM颗粒)同一Bank的访问转换为对该内存颗粒的两个Bank的访问,来减少一次访问过程中从一个Bank中访问的数据的位数。

对于采用DDR4规范的内存模组,Rank位宽为72(即X=9),从而处理器在通过BL8指令访问一个Rank时,从该Rank中的每一个内存颗粒的两个Bank中各读32位数据,并且每个采样周期向处理器发送的数据中,只有4位是来自于同一个内存颗粒的同一个Bank,进而在一个Bank发生故障时,每个采样周期的数据至多只有4位出错,未超出处理器的纠错能力,由于内存颗粒中两个Bank同时发生故障的概率较低,可以提高内存模组的稳定性。

类似地,对于采用DDR4规范的内存模组,Rank位宽为80(即X=10),从而处理器在通过BL16指令访问一个Rank时,从该Rank中的每一个内存颗粒的两个Bank中各读64位数据,并且每个采样周期向处理器发送的数据中,只有4位是来自于同一个内存颗粒的同一个Bank,进而在一个Bank发生故障时,每个采样周期的数据至多只有4位出错,未超出处理器的纠错能力,由于内存颗粒中两个Bank同时发生故障的概率较低,可以提高内存模组的稳定性。

在上述第二方面的一种可能实现中,X=9或10,并且各内存颗粒的颗粒位宽为8位。

对于采用DDR4规范的内存模组,Rank位宽为72,X=8;对于采用DDR5规范的内存模组,Rank位宽为80,X=10。

在上述第二方面的一种可能实现中,上述控制电路包括指令/地址转换模块和数据缓存模块;并且,控制电路通过以下方式根据接收到的第三存储指令向每个内存颗粒的第三Bank或第四Bank各存储(4X-32)×8位数据:指令/地址转换模块将第三存储指令转换为第四存储指令和第五存储指令,第四存储指令用于向每个内存颗粒中第一Bank的4X-32个存储单元中写入数据、第五存储指令用于向每个内存颗粒中第二Bank的4X-32个存储单元中写入数据;数据缓存模块将接收到的(4X-32)×16X位数据分为数据位数相同的X个数据组,并向每个内存颗粒发送一个数据组的数据;存储模块响应第四存储指令和第五存储指令,将接收到的各数据组中的(4X-32)×8位数存储到对应的内存颗粒的第一Bank中的4X-32个存储单元中,将另外(4X-32)×8位数存储到第二Bank中的4X-32个存储单元中。

在上述第二方面的一种可能实现中,上述控制电路通过以下方式根据接收到的第三读取指令从每个内存颗粒的第一Bank和第二Bank各读取(4X-32)×8位数据并且每个采样周期输出8X位数据:指令/地址转换模块将第三读取指令转换为第四读取指令和第五读取指令,第四读取指令用于从每个内存颗粒中第一Bank的4X-32个存储单元中读取数据、第五读取指令用于从每个内存颗粒中第二Bank的4X-32个存储单元中读取数据;存储模块响应第四读取指令,从各内存颗粒的第一Bank中的4X-32个存储单元中读取数据并发并给数据缓存模块,以及响应第五读取指令,从各内存颗粒的第二Bank中的4X-32个存储单元中读取数据并发并给数据缓存模块;数据缓存模块每个采样周期将从存储模块接收的数据中选择8X位数据输出。

在上述第二方面的一种可能实现中,在X=9的情况下,第三读取指令和第三存储指令为BL8访问指令,第四读取指令、第五读取指令、第四存储指令和第五存储指令为BL4访问指令;在X=10的情况下,第三读取指令或第三存储指令为BL16访问指令,第四读取指令、第五读取指令、第四存储指令和第五存储指令为BL8访问指令。

在上述第二方面的一种可能实现中,每个内存颗粒中每个记忆体晶片的行数为P2、列数为Q2、Bank数为T,第三存储指令包括第三逻辑地址,第三逻辑地址包括第三行标识R3、第三列标识C3和第一Bank标识B1,B1的取值范围为0至T-1,第四存储指令中包括第三物理地址、第五存储指令中包括第四物理地址;并且,指令/地址转换模块将第三存储指令转换为第四存储指令和第五存储指令,包括:指令/地址转换模块在B1T/2的情况下,将第一Bank的Bank标识设置为B1、将第二Bank的Bank标识设置为B1-T/2、将第三物理地址和第四物理地址的行标识设置为R3,列标识设置为C3/2+Q2/2,并且,第一Bank的4X-32个存储单元包括第三物理地址指示的存储单元所在的行中,列标识为C3/2+Q2/2至C3/2+Q2/2+4X-33的存储单元,第二Bank的4X-32个存储单元包括第四物理地址指示的存储单元所在的行中,列标识为C3/2+Q2/2至C3/2+Q2/2+4X-33的存储单元。

在上述第二方面的一种可能实现中,上述第三读取指令包括第四逻辑地址,第四逻辑地址包括第四行标识R4、第四列标识C4和第二Bank标识B2,B2的取值范围为0至T-1,第四读取指令中包括第五物理地址、第五读取指令中包括第六物理地址;并且,指令/地址转换模块将第三存储指令转换为第四存储指令和第五存储指令,包括:指令/地址转换模块在B2T/2的情况下,将第一Bank的Bank标识设置为B2、将第二Bank的Bank标识设置为B2-T/2、将第五物理地址和第六物理地址的行标识设置为R4,列标识设置为C4/2+Q2/2,并且,第一Bank的4X-32个存储单元包括第五物理地址指示的存储单元所在的行中,列标识为C4/2+Q2/2至C4/2+Q2/2+4X-33的存储单元,第二Bank的4X-32个存储单元包括第六物理地址指示的存储单元所在的行中,列标识为C4/2+Q2/2至C4/2+Q2/2+4X-33的存储单元。

在上述第二方面的一种可能实现中,上述内存颗粒为以下内存颗粒中的任意一种:DRAM颗粒、RRAM颗粒、MRAM颗粒、PCRAM颗粒。

第三方面,本申请实施例提供了一种电子设备,该电子设备包括至少一个上述第一方面、上述第一方面的各种可能实现、上述第二方面及上述第二方面的各种可能实现提供的任意一种内存模组。

附图说明

图1根据本申请的一些实施例,示出了一种DDR4 ECC内存模组与处理器进行数据交换的示意图;

图2根据本申请的一些实施例,示出了一种DRAM颗粒的存储结构示意图;

图3根据本申请的一些实施例,示出了一种DDR5 ECC内存模组与处理器进行数据交换的示意图;

图4根据本申请的一些实施例,示出了一种通过BL8访问指令访问DRAM颗粒的示意图;

图5A根据本申请的一些实施例,示出了一种BL8访问指令的纠错数据组的划分示意图;

图5B根据本申请的一些实施例,示出了一种BL16访问指令的纠错数据组的划分示意图;

图6A根据本申请的一些实施例,示出了一种采用X4颗粒的内存模组1示意图;

图6B根据本申请的一些实施例,示出了一种内存模组1中数据组织方式示意图;

图7A根据本申请的一些实施例,示出了一种采用X4颗粒的内存模组2的内存子通道A的示意图;

图7B根据本申请的一些实施例,示出了一种采用X4颗粒的内存模组2的内存子通道B的示意图;

图7C根据本申请的一些实施例,示出了一种内存模组2的内存子通道A的数据组织方式示意图;

图8A根据本申请的一些实施例,示出了一种采用X4颗粒的内存模组3示意图;

图8B根据本申请的一些实施例,示出了一种内存模组3中数据组织方式示意图;

图9A根据本申请的一些实施例,示出了一种采用X4颗粒的内存模组4示意图;

图9B根据本申请的一些实施例,示出了一种内存模组4的的一个内存子通道的数据组织方式示意图;

图10根据本申请的一些实施例,示出了一种内存模组5的一个Rank的结构示意图;

图11根据本申请的一些实施例,示出了一种逻辑地址A和物理地址B的转换关系示意图;

图12A根据本申请的一些实施例,示出了一种将数据形式为4组×8位/组的数据转换为8组×4位/组的示意图;

图12B根据本申请的一些实施例,示出了另一种将数据形式为4组×8位/组的数据转换为8组×4位/组的示意图;

图12C根据本申请的一些实施例,示出了一种将数据形式为8组×4位/组的数据按位拼接为8组×72位/组的数据的示意图;

图13根据本申请的一些实施例,示出了一种内存模组5的一个Rank中各X8颗粒中的数据与内存总线数据位的对应关系示意图;

图14A根据本申请的一些实施例,示出了一种内存模组6的一个内存子通道的结构示意图;

图14B根据本申请的一些实施例,示出了一种将数据形式为8组×8位/组的数据转换为16组×4位/组的示意图;

图14C根据本申请的一些实施例,示出了一种内存模组6的一个内存子通道中各X8颗粒中的数据与内存总线数据位的对应关系示意图;

图15根据本申请的一些实施例,示出了一种内存模组7的一个Rank的结构示意图;

图16根据本申请的一些实施例,示出了一种逻辑地址A和物理地址C1、物理地址C2的转换关系示意图;

图17根据本申请的一些实施例,示出了一种数据缓存模块710将数据形式为2Bank×4存储单元/Bank×8位/存储单元的数据转换为8组×8位/组的数据形式的示意图;

图18根据本申请的一些实施例,示出了一种内存模组7的一个Rank中各X8颗粒中的数据与内存总线数据位的对应关系示意图;

图19A根据本申请的一些实施例,示出了一种内存模组8的一个内存子通道的结构示意图;

图19B根据本申请的一些实施例,示出了一种内存模组8的一个内存子通道中各X8颗粒中的数据与内存总线数据位的对应关系示意图;

图20根据本申请的一些实施例,示出了一种电子设备100的结构示意图。

具体实施方式

本申请的说明性实施例包括但不限于内存模组和电子设备。

为便于理解,首先对本申请实施例涉及的术语进行介绍。

(1)内存芯片

内存芯片,又称为内存颗粒,是内存模组中用于存储数据的芯片,例如DRAM颗粒、阻变式存储器(Resistive Random Access Memory,RRAM)颗粒、磁性随机存储器(MagneticRandom Access Memory,MRAM)颗粒、相变随机存储器(Phase Change Random AccessMemory,PCRAM)颗粒等。为了便于描述,本申请中以内存模组中的内存芯片为DRAM颗粒进行介绍。

例如,参考图2,DRAM颗粒中通常包括多个记忆体晶片(Bank),每一个Bank可以看作是一个有多行(Row)多列(Column)的存储矩阵,存储矩阵中的每一个存储单元(Cell)中可以存储多位的数据(例如4位、8位、16位等),每个存储单元中可以存储的数据的位数可以称为DRAM颗粒的数据位宽。存储单元是处理器对DRAM颗粒中的数据进行访问的最小单位,处理器需要访问DRAM颗粒中的某一个存储单元时,向DRAM颗粒提供需要访问的存储单元的地址,例如Bank标识、行标识、列标识等,即可以对该存储单元的数据进行访问,例如处理器向DRAM颗粒提供的存储单元的地址为“Bank(0),R(0),C

(1)”时,处理器访问的存储单元即为DRAM颗粒中第0个Bank中第0行、第1列的存储单元。

可以理解,内存模组中共用一个片选信号的DRAM颗粒可以称为一个Rank,处理器在访问内存模组中的DRAM颗粒时,是以Rank为单位进行访问,对于同一个Rank中各DRAM颗粒,处理器总是访问相同Bank、相同行、相同列的存储单元。

可以理解,在一些实施例中,DRAM颗粒也可以包括一个同步接口,用于从处理器获取同步信号。包括同步接口的DRAM颗粒也可以称为同步动态随机存取存储器(synchronousdynamic random-access memory)颗粒,简称SDRAM颗粒。

为便于描述,以下将数据位宽为4位的DRAM颗粒称为X4颗粒、将数据位宽为8位的DRAM颗粒称为X8颗粒、将数据位宽为16位的DRAM颗粒称为X16颗粒,并将DRAM颗粒的数据位宽称为颗粒位宽。

(2)Rank位宽

Rank位宽,即是指内存模组的一个Rank位宽在单个采样周期内与处理器进行数据交换的数据位数。其中,采样周期是指内存模组和处理器进行一次数据传输的时间,通常的,在一个时钟周期包括2个采样周期。

例如,对于采用DDR4规范的ECC内存模组(以下简称DDR4 ECC内存模组),Rank位宽为72位,其中64位为数据,8位为纠错码,参考图1,DDR4 ECC内存模组在与处理器进行数据交换时,单个采样周期内交换的数据为72位。

又例如,对于采用第五代双倍数据率同步动态随机存取存储器(Double-Data-Rate Fifth Generation Synchronous Dynamic Random Access Memory,DDR5)规范的ECC内存模组(以下简称DDR5 ECC内存模组),Rank位宽为80位,其中64位为数据,16位为纠错码。特别地,采用DDR5规范的ECC内存一个Rank包括两个内存子通道(Sub-Channel),每个内存子通道在一个采样周期内与处理器进行40数据的交换其中32位为数据,8位为纠错码。参考图3,DDR5 ECC内存模组包括两个内存子通道(内存子通道A和内存子通道B),在与处理器进行数据交换时,一个内存子通道单个采样周期内交换的数据为40位,两个内存子通道共交换80位数据。

(3)突发(Burst)访问

突发(Burst)访问,是处理器访问内存模组的一种访问方式,指处理器在访问DRAM颗粒中的存储单元时,通过发送一次访问指令和一个存储单元的地址,访问DRAM颗粒中的多个存储单元的访问方式,一次突发访问过程中,在一个DRAM颗粒中访问的存储单元的数量可以称为突发长度(Burst Length,BL)。内存模组支持的BL可以是2、4、8、16等,相应地,BL长度为2、4、8、16的访问指令可以分别称为BL2访问指令、BL4访问指令、BL8访问指令、BL16访问指令。例如,参考图4,BL8访问指令中访问的地址是“Bank(0),R(0),C(0)”(第0个Bank中,第0行第0列的存储单元),则实际访问的地址为“Bank(0),R(0),C(0)至C(7)”,即访问第0个Bank中,第0行第0列到第0行第7列的存储单元。

需要说明的是,对于采用不同规范的内存模组,支持的访问指令的类型不同。例如,DDR4 ECC内存模组支持的访问指令包括BL4访问指令和BL8访问指令,一般的,为提高访问速度,处理器通常通过BL8指令访问DDR4 ECC内存模组。又例如,DDR5 ECC内存模组支持的访问指令包括BL8访问指令和BL16访问指令,类似地,为提高访问速度,处理器通常通过BL16指令访问DDR5 ECC内存模组。

需要说明的是,处理器通过突发访问的方式访问内存模组时,一次突发访问在一个Rank内对应的数据量为Rank位宽×突发长度。例如,对于DDR4 ECC内存模组,BL8访问指令对应的数据量为8组×72位/组=576位,每组数据中64位为实际访问的数据,8位为该64位实际访问数据对应的纠错码;而对于DDR5 ECC内存模组,BL16访问指令在一个Rank内对应的数据量为16组×80位/组=1280位,每组数据中64位为实际访问的数据,16位为该64位实际访问数据对应的参考纠错码。其中,BL16访问指令在一个内存子通道内对应的数据量为16组×40位/组=640位,每组数据中32位为实际访问的数据,8位为该32位实际访问数据对应的参考纠错码。

(4)错误检查和纠正

错误检查和纠正(ECC),是指处理器在访问存储器(例如内存模组)时,在写入或读取数据的同时,会同时写入或读取通过预设ECC算法(例如由处理器或存储器控制器的厂商预设的ECC算法)确定的该数据对应的参考纠错码,并在读取或写入数据后,对读取或写入的数据重新计算一个纠错码,并通过纠错码和参考纠错码的对比,来确定访问的数据是否有错误,并在确定出有错误的情况下,利用预设的ECC算法来纠正错误。

可以理解,处理器对应的ECC算法只能在处理器在每个采样周期内获取的一组数据中出错的数据位数小于预设值时,才能对获取的多位数据进行纠错,该预设值可以称为可纠错位宽。例如,主流的处理器在每个采样周期从内存模组获取的每组数据中出错的位数不超4位的情况下,都可以进行纠正,即是处理器的可纠错位宽为4。

由于处理器通常通过突发访问的形式来访问内存模组,为减少通过ECC算法进行纠检错的效率,通常将一次突发访问中的数据进为多个纠错单元,并以纠错单元为单位进行纠错。处理器或存储器控制器在进行纠错时,通过预设的ECC算法计算出纠错单元中的数据对应的纠错码,并将计算出来的纠错码与对应的参考纠错码进行对比,在纠错码与对应的参考纠错码不同时,确定该纠错单元中的数据有误,并通过预设的ECC算法,基于试错、数据反转(即将二进制数据中的0转换为1、将1转换为0)、校验等方式,纠正纠错单元中的数据。

可以理解,纠错单元是指处理器对数据进行纠错的数据范围,一个纠错单元通常包括m组数据(m=1,2,3,…),一组数据中的数据的位数为处理器的Rank位宽(DDR4 ECC内存)或Rank位宽的一半(DDR5 ECC内存)。由于处理器的可纠错位宽为4,在一个纠错单元中,发生错误的数据位数小于4m时,处理器都可以进行纠正。一个纠错单元中,处理器能够进行纠错的最大数据位数(4m)可以称为单元可纠错数据位数,例如对于采用DDR4规范的内存模组,处理器的单元可纠错数据位数为16位、对于采用DDR5规范的内存模组,处理器的单元可纠错数据位数为32位。为便于描述,以下以m=4(DDR4 ECC内存模组)和m=8(DDR4 ECC内存模组)进行介绍。

例如,参考图5A,处理器通过BL8访问指令访问DDR4 ECC内存模组的一个Rank的数据量为576位,数据组织形式为8组×72位/组(每一组中,64位为数据,8位为64位数据对应的参考纠错码),处理器可以将8组×72位/组分为两个纠错单元,即纠错单元EC0和纠错单元EC1,其中纠错单元EC0中包括第1组至第4组中的4组×72位/组数据、纠错单元EC1中包括第5组至第8组中的4组×72位/组数据。并将每个纠错单元分为18个纠错数据组,例如将纠错单元EC0分为纠错数据组A1、纠错数据组A2、……、纠错数据组A18,将纠错单元EC1分为纠错数据组B1、纠错数据组B2、……、纠错数据组B18,每个纠错数据组包括4组×4位/组数据。对于纠错单元EC0和纠错单元EC1,单元可纠错数据位数为16位,也即是说,对于DDR4 ECC内存模组,在一个纠错单元内,出错的数据不超过一个纠错数据组,都可以通过ECC算法进行纠正,其中,一个纠错数据组中的数据为4组×4位/组。

可以理解,图5A所示的纠错数据组的划分只是一种示例,在另一些实施例中也可以采用其他方式进行划分,例如将一个纠错单元划分为36个纠错数据组,每个数据组包括4组×2位/组数据或每个数据组包括2组×4位/组数据等,在此不做限定。

又例如,参考图5B,处理器通过BL16访问指令访问DDR5 ECC内存模组的一个内存子通道的数据量为640位,数据组织形式为16组×40位/组(每一组中,32位为数据,8位为32位数据对应的参考纠错码),处理器可以将一个内存子通道对应的16组×40位/组的数据分为2个纠错单元,即纠错单元EC2、纠错单元EC3,其中纠错单元EC2中包括第1组至第8组中的8组×40位/组数据、纠错单元EC3中包括第9组至第16组中的8组×40位/组数据。并将每个纠错单元分为20个纠错数据组,例如将纠错单元EC2分为纠错数据组C1、纠错数据组C2、……、纠错数据组C20,将纠错单元EC3分为纠错数据组D1、纠错数据组D2、……、纠错数据组D20,每个纠错数据组包括4组×4位/组数据。对于纠错单元EC2和纠错单元EC3,单元可纠错数据位数为32位,也即是说,对于DDR5 ECC内存模组,在一个纠错单元内,出错的数据不超过2个纠错数据组,都可以通过ECC算法进行纠正。

可以理解,图5B所示的纠错数据组的划分只是一种示例,对于不同的ECC纠错算法,也可以采用其他方式进行划分,例如将一个纠错单元划分为40个纠错数据组,每个数据组包括8组×2位/组数据或每个数据组包括2组×8位/组数据等,又例如将一个纠错单元划分为20个纠错数据组,一个纠错数据组包括8组×2位/组数据等,在此不做限定。

可以理解,针对DDR5 ECC内存的ECC算法通常是以内存子通道为纠错单元,对于每个内存子通道中的数据总是采用同的方法来进行纠错,为便于描述,以下针对DDR5 ECC内存的实施例中,仅对一个内存子通道中进行介绍。下面结合附图进行说明本申请实施例的技术方案。

由于DRAM颗粒的颗粒位宽通常小于内存模组的Rank位宽,例如DDR4 ECC内存模组的Rank位宽为72位、DDR5 ECC内存模组的Rank位宽为80位,而DRAM颗粒的颗粒位宽通常为4位、8位、16位等,因此,为了使得处理器可以同时访问与内存数据总线位宽相同的数据位数,内存模组中的一个Rank通常采用多个DRAM颗粒进行拼接,使得内存模组中每一Rank中DRAM颗粒的颗粒位宽的总和与Rank位宽相同,以便于处理器可以在一个采样周期内从各DRAM颗粒访问与颗粒位宽相同位数的数据。

例如,图6A根据本申请的一些实施例,示出了一种采用X4颗粒的内存模组1的一个Rank的结构示意图。如图6A所示,内存模组1采用DDR4规范,包括18个X4颗粒,即X4颗粒D0、X4颗粒D1、……、X4颗粒D16、X4颗粒D17。内存模组1的一个Rank通过18个X4颗粒的数据位进行拼接,得到72位的Rank位宽,即X4颗粒D0的颗粒数据位第0位至第3位与内存总线数据位的第0至3位相对应、X4颗粒D1的颗粒数据位第0位至第3位与内存总线数据位的第4至7位相对应、……、X4颗粒D17的颗粒数据位第0位至第3位与内存总线数据位的第68至71位相对应。当内存模组1中的一个X4颗粒出现故障时,处理器1个采样周期从内存模组1中读取的数据中,至多只有4位数据发生错误,不超过处理器的可纠错位宽,处理器可以通过ECC算法进行纠正。

具体地,参考图6B,处理器在通过BL8访问指令访问内存模组1中的数据时,可以访问一个Rank中每一个X4颗粒中的8个存储单元,一个存储单元访问4位数据,具有18个X4颗粒中相同行标识和列标识的存储单元中的数据组成一个组,一个组中的72位数据与内存数据总线位宽的72位一一对应,总共访问的数据量=8组×72位/组=576位数据。在一个X4颗粒出现故障时,一个纠错单元中只会有一个纠错数据组的数据出错,例如,在X4颗粒D0出现故障时,纠错单元EC0中只有纠错数据组A1中的数据可能出错、纠错单元EC1中只有纠错数据组B1中的数据可能出错,出错的数据未数至多为16位,而针对DDR4内存模组,处理器的单元可纠错数据位数为16,处理器可以通过预设的ECC算法对纠错数据组A1或纠错数据组B1中的数据进行纠错。

又例如,例如,图7A根据本申请的一些实施例,示出了一种采用X4颗粒的内存模组2的结构示意图。如图7A所示,内存模组2采用DDR5规范,内存模组2的一个内存子通道(例如内存子通道A)包括10个X4颗粒,即X4颗粒D0、X4颗粒D1、……、X4颗粒D8、X4颗粒D9。内存模组2的一个内存子通道通过10个X4颗粒的数据位进行拼接,得到40位的位宽,即X4颗粒D0的颗粒数据位第0位至第3位与内存总线数据位的第0至3位相对应、X4颗粒D1的颗粒数据位第0位至第3位与内存总线数据位的第4至7位相对应、……、X4颗粒D9的颗粒数据位第0位至第3位与内存总线数据位的第36至39位相对应。类似地,参考图7B,内存子通道B中的10个X4颗粒也可以拼接得到40位的位宽,与内存数据总线的第40位至第79位对应,2个内存子通道进行拼接即可得到80的Rank位宽。当内存模组2中的一个X4颗粒出现故障时,处理器1个采样周期从一个内存子通道中读取的数据中,至多只有4位数据发生错误,不超过处理器的可纠错位宽,处理器可以通过ECC算法进行纠正。

可以理解,对于采用DDR5规范的内存,每个内存子通道中的DRAM颗粒的数量、各DRAM颗粒与内存数据总线各数据位的对应关系相似,以下各实施例中只对一个内存子通道内数据访问方式、数据组织方式进行描述。

具体地,参考图7C,处理器在通过BL16访问指令访问内存模组2中一个Rank时,对于内存子通道A,可以访问每一个X4颗粒中的16个存储单元,一个存储单元访问4位数据,具有相同行标识和列标识的存储单元中的数据组成16个组,一个组中的40位数据与内存数据总线位宽的40位一一对应,总共访问的数据量=16组×40位/组=640位数据。在一个X4颗粒出现故障时,一个纠错单元中只会有一个纠错数据组的数据出错,例如,在X4颗粒D0出现故障时,纠错单元EC2中只有纠错数据组C1和纠错数据组C11中的数据可能出错、纠错单元EC3中只有纠错数据组D1和纠错数据组D11中的数据可能出错,出错的数据总位数至多为32位,而针对DDR5内存模组,处理器的单元可纠错数据位数为32位,处理器可以通过预设的ECC算法对纠错数据组C1、纠错数据组D1、纠错数据组E1、纠错数据组F1中的数据进行纠错。

可以理解,在处理器的地址总线位数一定的情况下,处理器可以访问的存储单元的个数也一定,从而内存模组中DRAM颗粒的颗粒位宽越大,单个存储空间存储的数据位数越多,内存模组的存储空间越大,例如,X8颗粒的存储空间为具有相同存储单元数量的X4颗粒的2倍。因此可以通过采用颗粒位宽的更大的DRAM颗粒,来提升内存模组的容量。

但是,在内存模组中采用的DRAM颗粒的颗粒位宽大于处理器的可纠错位宽时,一个DRAM颗粒发生故障时,由于内存总线数据位是与DRAM颗粒的数据位一一对应,内存总线数据位中出错的数据位数为DRAM颗粒的颗粒位宽,超过处理器的可纠错位宽,导致处理器无法基于读取的数据正常执行指令,限制了颗粒位宽大于处理器的可纠错位宽的DRAM颗粒在对数据稳定性要求较高的场景中的应用。

例如,图8A根据本申请的一些实施例,示出了一种采用X8颗粒内存模组3的一个Rank结构示意图。如图8A所示,内存模组3采用DDR4规范,一个Rank包括9个X8颗粒,即X8颗粒D00、X8颗粒D01、……、X8颗粒D08。内存模组3的一个Rank通过9个X8颗粒的数据位进行拼接,得到72位的Rank位宽,即X8颗粒D00的颗粒数据位第0位至第7位与内存总线数据位的第0位至7位相对应、X8颗粒D01的颗粒数据位第0位至第7位与内存总线数据位的第8位至15位相对应、……、X8颗粒D08的颗粒数据位第0位至第7位与内存总线数据位的第64位至71位相对应。当内存模组3中的一个X8颗粒出现故障时,处理器一个采样周期内从内存模组3读取的数据中,至多会有8位数据发生错误,超过了处理器的可纠错位宽(4位),处理器无法通过ECC算法进行纠正。

具体地,参考图8B,处理器在通过BL8访问指令访问内存模组3中的数据时,可以访问一个Rank中每一个X8颗粒中的8个存储单元,一个存储单元访问8位数据,9个X8颗粒中具有相同行标识和列标识的存储单元中的数据组成一个组,一个组的72位数据与内存数据总线的72个数据位一一对应,一个采样周期访问一组数据(即72位数据),总共访问的数据量=8组×72位/组=576位数据。在一个X8颗粒出现故障时,处理器一个采样周期从内存模组3中访问的数据中至多会有8位出错,相应的一个纠错单元中可能会有2个纠错数据组的数据出错,例如,在X8颗粒D00出现故障时,纠错单元EC0中纠错数据组A1和纠错数据组A2中的数据都可能出错、纠错单元EC1中的纠错数据组B1和纠错数据组B2中的数据都可能出错,出错的数据位数至多为32位,而对应于采用DDR4规范的内存模组,处理器的单元可纠错数据位数为16,处理器不能对出错的数据组中的数据进行纠错。

又例如,图9A根据本申请的一些实施例,示出了一种采用X8颗粒内存模组4的一个内存子通道的结构示意图。如图9A所示采用DDR5规范的内存模组4的一个内存子通道(例如内存子通道A)包括5个X8颗粒,即X8颗粒D00、X8颗粒D01、……、X8颗粒D04。内存模组4的一个内存子通道通过5个X8颗粒的数据位进行拼接,得到40位的Rank位宽,即X8颗粒D00的颗粒数据位第0位至第7位与内存总线数据位的第0位至7位相对应、X8颗粒D01的颗粒数据位第0位至第7位与内存总线数据位的第8位至15位相对应、……、X8颗粒D04的颗粒数据位第0位至第7位与内存总线数据位的第33位至39位相对应。当内存子通道A中的一个X8颗粒出现故障时,处理器一个采样周期从内存子通道A中访问的数据中至多会有8位数据发生错误,超过了处理器的可纠错位宽(4位),处理器无法通过ECC算法进行纠正。

具体地,参考图9B,处理器在通过BL16访问指令访问内存模组4中的数据时,对于内存子通道A,可以访问每一个X8颗粒中的16个存储单元,一个存储单元访问8位数据,5个X8颗粒中具有相同行标识和列标识的存储单元中的数据组成一个组,一个组的40位数据与内存数据总线的40个数据位一一对应,每个采样周期访问一个组,总共访问的数据量=16组×40位/组=576位数据。在一个X8颗粒出现故障时,一个纠错单元中可能会有4个纠错数据组的数据出错,例如,在X8颗粒D00出现故障时,纠错单元EC2中纠错数据组C1、纠错数据组C2、纠错数据组C3和纠错数据组C4中的数据都可能出错,纠错单元EC3中纠错数据组D1、纠错数据组D2、纠错数据组D3和纠错数据组D4中的数据都可能出错,出错的数据位数至多会有64位,而对应于采用DDR5规范的内存模组,处理器的单元可纠错数据位数为32,处理器不能对出错的数据组中的数据进行纠错。

为了提高采用颗粒位宽大于处理器的可纠错位宽的DRAM颗粒的内存模组的稳定性,本申请实施例提供了一种内存模组,通过增加一个Rank中DRAM颗粒的数量,使得内存模组中一个Rank中各DRAM颗粒的颗粒位宽之和大于处理器的Rank位宽,来减少处理器一次访问过程从每个DRAM颗粒中访问的存储单元的数量。并且,内存模组可以通过重新组织DRAM颗粒中的数据与处理器的内存总线数据位的对应关系,例如对从DRAM颗粒中读取的数据或存储在DRAM颗粒中的数据进行重新排列组合,使得处理器一次访问过程,从单个DRAM颗粒中读取的数据或存储在单个DRAM颗粒中的数据对应于内存总线数据位的位数,小于或等于处理器的可纠错位宽。从而在一个DRAM颗粒发生故障时,内存数据总线中出错的数据位数小于处理器的可纠错位宽,对于一个纠错单元,发生错误的数据量小于单元可纠错数据位数,进而处理器可以利用ECC算法对该发生错误的纠错数据组中的数据进行纠正,提高了内存模组的稳定性。

可以理解,由于处理器对内存模组一次突发访问对应的数据量一定,并且会从内存模组中的各个DRAM颗粒获取相等的数据量,因此,在DRAM颗粒的颗粒位宽不变的情况下,增加DRAM颗粒的数量,可以减少内存从一个DRAM颗粒访问的数据量。例如DDR4规范下,BL8访问指令访问一个Rank的数据量为576位,若该Rank采用9个X8颗粒,则需要从每个X8颗粒访问64位数据,而该Rank采用18个X8颗粒,则每个X8颗粒只需要访问32位数据。

可以理解,在内存模组中DRAM颗粒的颗粒位宽之和大于Rank位宽的情况下,DRAM颗粒的数据位不再和内存数据总线的数据位是一一对应关系,因而内存模组要重新组织DRAM颗粒中的数据与处理器的内存总线数据位的对应关系,使得传送给处理器的数据满足访问指令的要求。例如,DDR4规范对应的BL8访问指令访问的数据形式为8组×72位/组,在内存模组包括18个X8颗粒时,需要从每个X8颗粒读取4存储单元×8位/存储单元=32位数据,内存模组可以将该32数据进行重新排列,得到数据形式为8组×4位/组的数据,再将18个X8颗粒得到的18组数据形式为8组×4位/组的数据按位进行拼接,得到BL8访问指令对应的8组×72位/组的数据形式,从而内存模组可以在一个采样周期内向处理器发送一组数据(即72位数据)。

此外,由于DRAM颗粒中多个Bank出现的故障的概率较低,在本申请的另一些实施例中,也可以通过将处理器对DRAM颗粒同一个Bank的访问,转换为对DRAM颗粒中多个Bank的访问,减小处理器从一个Bank访问的数据量,使得一次访问过程中,处理器对同一个Bank访问的数据,对应于内存数据总线数据位的位数,小于处理器的可纠错位宽,进而在不增加颗粒数量的情况下提高采用颗粒位宽大于处理器的可纠错位宽的DRAM颗粒的内存模组的稳定性,具体将在下文介绍,在此不做赘述。

首先以采用DDR4规范的内存模组为例介绍本申请的技术方案。

如前所述,采用DDR4规范的内存模组的Rank位宽为72位,处理器通常通过BL8访问指令访问采用DDR4规范的内存模组中的一个Rank时,一次BL8访问指令访问的数据量为8组×72位/组,处理器一个采样周期从内存模组读取一组数据(72位数据)或向内存模组写入一组数据(72位数据),共需要8个采样周期来实现BL8访问指令。

为减少一次BL8指令访问过程中从单个X8颗粒访问的数据量,可以通过18个X8颗粒来组成内存模组的一个Rank,从而一次BL8访问指令只需从一个X8颗粒访问32位数据,即可得到BL8访问指令对应的576位数据。内存模组通过重新组织从每个X8颗粒访问的数据与从处理器接收或发送给处理器的8组×72位/组数据的对应关系,即可使得从每个X8颗粒访问的数据只对应于内存总线数据位的4位,例如将从一个X8颗粒访问的数据转换为8组×4位/组的形式,与8组×72位/组中的8组×4位/组数据相对应。从而在8组×72位/组的数据中,每组数据中只有4位数据是从同一个X8颗粒中读取或只有4位数据是存储在同一个X8颗粒中,进而在一个X8颗粒发生故障时,每组数据中至多只会有4位数据出错,未超过处理器的可纠错位宽,提高了内存模组的稳定性。

具体地,图10根据本申请的一些实施例,示出了一种内存模组5的一个Rank的结构示意图,该内存模组5采用DDR4规范,通过增加DRAM颗粒的数量的方式来解决单个DRAM颗粒故障时,由于处理器访问的数据中出错数据位数超过可纠错位宽,导致处理器无法通过ECC算法进行纠错的问题,以提高采用颗粒位宽大于处理器的可纠错位宽的DRAM颗粒的内存模组的稳定性。

如图10所示,内存模组5的一个Rank包括18个X8颗粒,地址/指令转换单元518和数据缓存模块519。18个X8颗粒可以为X8颗粒500、X8颗粒501,……,X8颗粒516、X8颗粒517,其中16个X8颗粒用于存储数据,2个X8颗粒用于存储纠错码。其中,用于存储纠错码的2个X8颗粒可以是X8颗粒500至X8颗粒517中的任意2个。

地址/指令转换单元518用于接收处理器0发送的BL8访问指令和逻辑地址A,将BL8访问指令转换为BL4访问指令、将逻辑地址A转换为物理地址B,并将得到的BL4访问指令和物理地址B输出给每一个DRAM颗粒,以访问各X8颗粒中与BL8访问指令对应的576位数据。其中,处理器0发送的BL8访问指令和逻辑地址A用于访问每个X8颗粒中,以逻辑地址A对应的存储单元为起始存储单元的8个存储单元中的数据,BL8访问指令对应的数据形式为8组×72位/组,共计576位数据;BL4访问指令用于访问各X8颗粒中,以物理地址B对应的存储单元为起始存储单元的4个存储单元中的数据,总共访问的数据量为18颗粒×4存储单元/颗粒×8位/存储单元,共计576位数据,与BL8访问指令对应的数据量相同。

具体地,在一些实施例中,处理器0通过BL8访问指令访问内存模组时,访问的地址中的列号通常为8的倍数,也即是每次访问的存储单元通常为一个Bank的某一行中的第0至7列、第8至15列、……、第1016至1023列。而通过BL4访问指令访问内存模组时,一次访问对单个X8颗粒访问的存储单元的数量为4,因此,地址/指令转换单元518可以将处理器0发送的逻辑地址A中的列标识除以2来得到物理地址B中的列标识,使得处理器0可以基于访问X8颗粒中连续的存储单元,即访问一个Bank的某一行中的第0至3列、第4至7列、……、第508至511列。

例如,参考图11,假设上述逻辑地址A为“Bank(n),R(3),C(0)”,使用BL8访问指令访问逻辑地址A即是访问各X8颗粒中,第n个Bank第3行中,第0列至第7列的存储单元中的数据,从而地址/指令转换单元518可以将BL8访问指令转换为BL4访问指令,将逻辑地址A转换为物理地址B“Bank(n),R(3),C(0)”,用于访问各X8颗粒中,第n个Bank第3行中,第0列至第3列的存储单元中的数据。

又例如,假设BL8访问指令对应的地址为逻辑地址A':“Bank(n),R(3),C(8)”,使用BL8访问指令访问逻辑地址A'即是访问各X8颗粒中,第n个Bank第3行中,第8列至第15列的存储单元中的数据,从而地址/指令转换单元518可以将BL8访问指令转换为BL4访问指令,将逻辑地址A'转换为物理地址B':“Bank(n),R(3),C(4)”,用于访问各X8颗粒中,第n个Bank第3行中,第4列至第7列的存储单元中的数据。

但是,在将逻辑地址A中列标识除以2后,处理器0只能访问到X8颗粒中每个Bank的前一半列,而无法访问后一半列,造成存储单元的浪费。为确保X8颗粒中所有的存储单元都可以被处理器0访问,内存模组5在向处理器0提供内存模组5的行数时,可以提供2倍的行数,从而地址/指令转换单元518在检测到逻辑地址A中访问的行数为内存模组5提供的行数中的后一半行时,将逻辑地址A中的列标识指向每个Bank的后一半列。

例如,假设内存模组5中每个X8颗粒的一个Bank的行数为i,列数为j,逻辑地址A为“Bank(n),R(k),(l)”,在一些实施例中,内存模组5向处理器0发送行数时,可以发送2i。进而地址/指令转换单元519在确定出i>k≥0时,即逻辑地址A访问的行为第0行到第i-1行中的一行的情况下,保持物理地址B和逻辑地址A中的Bank标识和行标识一致、将物理地址B的列标识转换为l/2;在确定出2i>k≥i时,即逻辑地址A访问的行为为第i行到第2i-1行中的一行的情况下,保持物理地址B和逻辑地址A中的Bank标识一致、将物理地址B的行标识转换为k-i,将物理地址B的列标识转换为l/2+i/2,以访问X8颗粒中每个Bank的后一半列。具体地,假设i=1024,j=1024,则逻辑地址A和物理地址B中的行地址和列地址的转换关系可以表示为如下表1。

表1一种地址/指令转换单元518将逻辑地址A转换为物理地址B的转换关系

从表1可知,地址/指令转换单元518在接收到的逻辑地址A中的行标识k为0至1023中的一个时,将列标识l转换为l/2,在行标识k为1024至2047中的一个时,将列标识l转换为l/2+1024/2,从而使得处理器0可以访问到各个Bank的所有列。

可以理解,在另一些实施例中,也可以通过其他方式将逻辑地址A转换为用于访问每个X8颗粒中的4个存储单元的物理地址B,在此不做限定。

数据缓存模块519用于重新组织访问各X8颗粒中的数据与处理器的内存总线数据位的对应关系,以将从X8颗粒中读取的数据转换为BL8指令对应的数据形式(即8组×72位/组),或将从处理器获取的BL8指令对应的8组×72位/组的数据转换18组数据形式为4存储单元×8位/存储单元(即4组×8位/组)的数据,以便于存储在各X8颗粒中。

具体地,数据缓存模块519可以将从每个X8颗粒获取的数据量为4存储单元×8位/存储单元(即4组×8位/组)数据转换为8组×4位/组的数据形式,再将各X8颗粒转换后的数据按照位进行拼接,得到与BL访问指令对应的8组×72位/组的数据,并将该8组×72位/组的数据发送给处理器0;或者将从处理器0获取的数据形式为8组×72位/组的数据拆分为18组数据形式为4组×8位/组的数据,并将各数据形式为4组×8位/组的数据存储到一个X8颗粒中、以物理地址B为起始存储单元的4个存储单元中。如此,在一次数据访问过程中,每一个X8颗粒中的数据只对应于内存数据总线的数据位中的4位,也即是在一个X8颗粒发生故障的情况下,在一个纠错单元内,最多只会有一个纠错数据组的数据发生错误,出错的数据位数至多为16位,没有超过处理器0能够纠正的数据范围,提高了内存模组的稳定性。

例如,图12A根据本申请的一些实施例,示出了一种将数据形式为4组×8位/组的数据转换为8组×4位/组的示意图。参考图12A,数据形式为4组×8位/组的数据可以看作是4行8列的数据,数据缓存模块519可以将该4行8列中的数据中,后4列的数据(第1行至第4行、第5列至第8列)移动到前4列之下,作为第5行至第8行、第1列到第4列的数据,从而得到数据形式为8组×4位/组的数据。

可以理解,图12A所示的将数据形式为4组×8位/组的数据转换为8组×4位/组只是一种示例,在另一些实施例中,也可以采用其他形式进行转换,在此不做限定。例如,参考图12B,数据缓存模块519可以将数据形式为4组×8位/组的数据中,第2列数据移动到第1列数据之下、将第4列数据移动到第3列数据之下、第6列数据移动到第5列数据之下、第8列数据移动到第7列数据之下,得到数据形式为8组×4位/组的数据。

数据缓存模块519在将从每个X8颗粒读取的4组×8位/组的数据转换为8组×4位/组的数据形式后,将18组数据形式为8组×4位/组的数据按位进行拼接,得到8组×72位/组的数据。例如,参考图12C,数据缓存模块519可以将从X8颗粒500中得到的8组×4位/组的数据作为8组×72位/组数据中的第0位至第3位,将从X8颗粒501中得到的8组×4位/组的数据作为8组×72位/组数据中的第4位至第7位,……,将从X8颗粒516中得到的8组×4位/组的数据作为8组×72位/组数据中的第64位至第67位,将从X8颗粒517中得到的8组×4位/组的数据作为8组×72位/组数据中的第68位至第71位,得到BL8指令对应的576位数据。

进一步,图13根据本申请的一些实施例,示出了一种内存模组5中一个Rank中各X8颗粒中的数据与内存总线数据位的对应关系示意图。参考图13,在一次访问过程中,数据缓存模块519可以将X8颗粒500、X8颗粒501、……、X8颗粒516、X8颗粒517中的数据分别与内存总线数据位的第0位至第3位、第4位至第7位、……、第64位至第67位、第68位至第71位对应,即每一个X8颗粒中的数据只对应于内存总线数据位的4位。从而在一个X8颗粒发生故障时,对于一个纠错单元,只有一个纠错数据组的数据会出现错误,例如,在X8颗粒500出现故障时,纠错单元EC0中只有纠错数据组A1中的数据会出现错误,出错的数据位数至多为16位,处理器0可以通过ECC算法对该出现错误的可纠错数组中的数据进行纠正,提高了采用X8颗粒的内存模组5的稳定性。

可以理解,以上X8颗粒500、X8颗粒501、……、X8颗粒516、X8颗粒317中的数据分别与内存总线数据位中的第0位至第3位、第4位至第7位、……、第64位至第67位、第68位至第71位的对应关系只是一种示例,在另一些实施例中,也可以采用其他对应方式,在此不做限定。例如,数据缓存模块519可以将X8颗粒500、X8颗粒501、……、X8颗粒516、X8颗粒517中的数据分别与内存总线数据位的第68位至第71位、第64位至第67位、……、第4位至第7位、第0位至第3位相对应。

可以理解,图10仅示例性地示出了内存模组5中一个Rank的结构示意图,在另一些实施例中,内存模组5可以包括更多的Rank,每个Rank的结构可以和图10所示的结构类似。也即是说,对于采用DDR4规范的ECC内存模组,可以包括18k个X8颗粒,k为内存模组的Rank数。

可以理解,以上以包括18个X8颗粒的内存模组5说明本申请的技术方案只是一种示例,在另一些实施例中,针对采用不同规范的内存模组,可以采用不同数量的X8颗粒、不同的数据组织方式来得到内存模组。

下面以采用DDR5规范的内存模组为例介绍本申请的技术方案。

如前所述,采用DDR5规范的内存模组的Rank位宽为80位,处理器通常通过BL16访问指令访问采用DDR5规范的内存模组,一次BL16访问指令在一个内存子通道内访问的数据量为16组×40位/组,处理器一个采样周期从内存模组的一个内存子通道读取一组数据(40位数据)或向内存模组的一个内存子通道写入一组数据(40位数据),共需要16个采样周期来实现BL16访问指令。

为减少一次BL16指令访问过程中从单个X8颗粒访问的数据量,可以通过采用10个X8颗粒来组成内存模组的一个内存子通道,从而一次BL16访问指令只需从一个X8颗粒访问64位数据,即可得到BL16访问指令在一个内存子通道对应的640位数据。内存模组通过重新组织从每个X8颗粒访问的数据与从处理器接收或发送给处理器的16组×40位/组数据的对应关系,即可使得从每个X8颗粒访问的数据只对应于内存总线数据位的4位,例如将从一个X8颗粒访问的数据转换为16组×4位/组的形式,与16组×40位/组中的16组×4位/组数据相对应。从而在16组×40位/组的数据中,每组数据中只有4位数据是从同一个X8颗粒中读取或只有4位数据是存储在同一个X8颗粒中,进而在一个X8颗粒发生故障时,每组数据中至多只会有4位数据出错,未超过处理器的可纠错位宽,提高了内存模组的稳定性。

具体地,图14A根据本申请的一些实施例,示出了一种内存模组6的一个内存子通道的结构示意图。参考图14A,该内存模组6采用DDR5规范,内存模组6的一个内存子通道包括10个X8颗粒,即X8颗粒600、X8颗粒601、……、X8颗粒608、X8颗粒609,地址/指令转换单元610和数据缓存模块611。其中,8个X8颗粒用于存储数据,2个X8颗粒用于存储纠错码。

地址/指令转换单元610用于将处理器0发送的BL16访问指令转换为BL8访问指令、将逻辑地址A转换为物理地址B,以访问每个X8颗粒中以物理地址B对应的存储单元为起始存储单元的8个存储单元,即每个X8颗粒访问8存储单元×8位/存储单元=64位数据,10个X8颗粒共访问640位数据,与BL16访问指令在一个内存子通道对应的数据量相同。

例如,假设内存模组6中每个X8颗粒的一个Bank的行数为i,列数为j,逻辑地址A为“Bank(n),R(k),(l)”,在一些实施例中,内存模组6向处理器0发送行数时,可以发送2i。进而地址/指令转换单元610在确定出i>k≥0时,即逻辑地址A访问的行为第0行到第i-1行中的一行的情况下,保持物理地址B和逻辑地址A中的Bank标识和行标识一致、将物理地址B的列标识转换为l/2;在确定出2i>k≥i时,即逻辑地址A访问的行为为第i行到第2i-1行中的一行的情况下,保持物理地址B和逻辑地址A中的Bank标识一致、将物理地址B的行标识转换为k-i,将物理地址B的列标识转换为l/2+i/2,以访问X8颗粒中每个Bank的后一半列。具体地,假设i=1024,j=1024,则逻辑地址A和物理地址B中的行地址和列地址的转换关系可以表示为如下表2。

表2一种地址/指令转换单元610将逻辑地址A转换为物理地址B的转换关系

数据缓存模块611用于重新组织访问各X8颗粒中的数据与内存总线数据位的对应关系,以将从X8颗粒中读取的数据转换为BL16指令对应的数据形式,或将或将从处理器获取的BL16指令对应的16组×40位/组的数据转换10组数据形式为8存储单元×8位/存储单元(即8组×8位/组)的数据,以便于存储在各X8颗粒中。

例如,参考图14B,数据形式为8组×8位/组的数据可以看作是8行8列的数据,数据缓存模块611可以将该8行8列中的数据中,后4列的数据(第1行至第8行、第5列至第8列)移动到前4列之下,作为第9行至第16行、第1列到第4列的数据,从而得到数据形式为16组×4位/组的数据。

可以理解,在另一些实施例中,数据缓存模块611也可以通过其他形式将8组×8位/组的数据转换为16组×4位/组的形式,在此不做限定。例如,可以将8组×8位/组的数据中,奇数列放在偶数列之下,或者将偶数列放在奇数列之下,得到16组×4位/组的数据。

进一步,图14C根据本申请的一些实施例,示出了一种内存模组6的一个内存子通道中各X8颗粒中的数据与内存总线数据位的对应关系示意图。参考图14C,在一次访问过程中,数据缓存模块611可以将X8颗粒600、X8颗粒601、……、X8颗粒608、X8颗粒609中的数据分别与内存总线数据位的第0位至第3位、第4位至第7位、……、第32位至第35位、第36位至第39位对应,即每一个X8颗粒中的数据只对应于内存总线数据位的4位。从而在一个X8颗粒发生故障时,对于一个纠错单元,只有2个纠错数据组的数据会出现错误,例如,在X8颗粒600出现故障时,纠错单元EC2中只有纠错数据组C1和纠错数据组C11中的数据会出现错误,出错的总数据位数至多为32位,而对于采用DDR5规范的内存模组,处理器的单元可纠错数据位数为32,处理器0可以通过ECC算法对该出现错误的可纠错数组中的数据进行纠正,提高了采用X8颗粒的内存模组6的稳定性。

可以理解,采用DDR5规范的内存模组包括2个独立的内存子通道,内存模组6中另一个内存子通道的结构与图14A所示的结构类似一致,在此不做赘述。也即是说,对于采用DDR5规范的内存模组,一个Rank可以包括20个X8颗粒,上述物理/指令转换单元610和上述数据缓存模块611。并且,在另一些实施例中,DDR5 ECC内存模组还可以包括多个Rank,也就是说,采用DDR5规范的ECC内存模组,可以包括20k个X8颗粒,k为内存模组包括的Rank数量。

可以理解,由于内存模组的频率较高,地址/指令转换单元518/610、数据缓存模块519/611通常是以物理器件(例如模拟器件、数字门电路等)来实现,以提高运算速度、降低延迟。但本申请对此不做限定,例如,在存在可以实现地址/指令转换单元518/610、数据缓存模块519/611功能的计算单元的情况下,也可以通过计算单元运行指令来实现。在一些实施例中,地址/指令转换单元518/610、数据缓存模块519/611又可以称为控制电路。

可以理解,前述内存模组5和内存模组6的结构只是一种示例,在另一些实施例中,内存模组5和内存模组6还可以包括更多或更少的模块,也可以合并或拆分部分模块。例如,在一些实施例中,内存模组5和内存模组6还可以包括用于提升内存模组电气特性的电阻、电容,以及其他功能模块例如模组存在的串行检测(Serial Presence Detect,SPD),用于向处理器发送内存模组的工作状态、速度、响应时间等。

如前所述,在一些实施例中,通过将处理器对DRAM颗粒同一个Bank中的访问,转换为对DRAM颗粒中多个Bank的访问,使得一次访问过程中,处理器对同一个Bank访问的数据,对应于内存数据总线数据位的位数,小于处理器的可纠错位宽,进而在不增加颗粒数量的情况下提高采用颗粒位宽大于处理器可纠错位宽的DRAM颗粒的内存模组的稳定性。

具体地,内存模组可以通过将处理器对DRAM颗粒中同一Bank中M个存储单元的访问转换为对该DRAM颗粒中N个Bank中各M/N个存储单元的访问(M为N的倍数),并且通过重新组织各Bank的数据与处理器内存总线数据位的对应关系,使到一个Bank中M/N个存储单元的数据只对应处理器的内存总线数据位的4位。如此,在一个Bank出现故障时,一个纠错单元中出错的数据位数不会超过单元可纠错数据位数,进而确保处理器可以通过ECC算法对该出现错误的的数据进行纠错,提高了内存模组的稳定性。

首先以采用DDR4规范的内存模组(M8,N=2,DRAM颗粒为X8颗粒)为例介绍本申请的技术方案。

如前所述,采用DDR4规范的内存模组的Rank位宽为72位,一个Rank可以采用9个X8颗粒来得到72位的Rank位宽。由于BL8访问指令访问采用DDR4规范的内存模组时,一次BL8访问指令访问的数据量为8组×72位/组,从而需要从一个X8颗粒中访问64位数据。内存模组可以将对同一个X8颗粒中64位数据的访问,转换为对同一X8颗粒中2个Bank的访问,9个X8颗粒共计访问18个Bank,一个Bank访问32位数据,即可得到BL8访问指令对应的8组×72位/组数据,再重新组织从每个Bank访问的数据与从处理器接收或发送给处理器的8组×72位/组数据的对应关系,即可使得从每个Bank访问的数据只对应于内存总线数据位的4位,例如将从一个Bank访问的数据转换为8组×4位/组的形式,与8组×72位/组中的8组×4位/组数据相对应。从而在8组×72位/组的数据中,每组数据中只有4位数据是从同一个Bank中读取或只有4位数据是存储在同一个Bank中,进而在一个Bank发生故障时,每组数据中至多只会有4位数据出错,未超过处理器的可纠错位宽,提高了内存模组的稳定性。

具体地,图15根据本申请的一些实施例,示出了一种内存模组7的一个Rank的结构示意图。如图15所示,该内存模组7采用DDR4规范,一个Rank包括9个X8颗粒,即X8颗粒700、X8颗粒701、……、X8颗粒708,地址/指令转换单元709和数据缓存模块710。9个X8颗粒中,8个X8颗粒用于存储数据,一个X8颗粒用于存储纠错码。

地址/指令转换单元709用于接收处理器0发送的BL8访问指令和逻辑地址A,并将BL8访问指令转换为两个BL4访问指令,将逻辑地址A转换为物理地址C1和物理地址C2,以访问各X8颗粒中与BL8指令对应的576位数据。其中,处理器0发送的BL8访问指令和逻辑地址A用于访问每个X8颗粒中逻辑地址A对应的存储单元为起始存储单元的8个存储单元中的数据,即访问数据形式为8组×72位/组的数据;物理地址C1和物理地址C2指向各X8颗粒中的两个不同的Bank,两个BL4访问指令分别访问物理地址C1对应的Bank中的4个存储单元(数据形式为4组×8位/组)和物理地址C2对应的Bank中的4个存储单元(数据形式为4组×8位/组),9个X8颗粒共对应9颗粒×2bank/颗粒×(4组×8位/组)/bank=576位数据。

具体地,在一些实施例中,假设每个X8颗粒有2N个Bank(Bank(0),Bank(1),…,Bank(2N-1))、每个Bank有M列,逻辑地址A为“Bank(x),R(y),C(z)”(即第x个Bank第y行第z列)。地址/指令转换单元709可以在x

例如,参考图16,在上述逻辑地址A为“Bank(0),R(3),C(0)”时,地址/指令转换单元709可以将逻辑地址A转换为物理地址C1:“Bank(0),R(3),C(0)”、物理地址C2:“Bank(8),R(3),C(0)”;在BL8访问指令对应的地址为逻辑地址A':“Bank(0),R(3),C(8)”时,地址/指令转换单元709可以将逻辑地址A'转换为物理地址C1':“Bank(0),R(3),C(4)”、物理地址C2':“Bank(8),R(3),C(4)”。例如,假设M=1024、N=8,每个Bank包括1024行,则逻辑地址A和物理地址C1、物理地址C2的转换关系表示为如下表3。

表3一种逻辑地址A与物理地址C1、物理地址C2的转换关系

可以理解,在另一些实施例中,在同一个X8颗粒中同时访问Bank(x)和Bank(u)(在x

数据缓存模块710用于重新组织访问各X8颗粒中的数据与处理器的内存总线数据位的对应关系,以将从X8颗粒中读取的数据转换为BL8指令对应的数据形式(即8组×72位/组的形式),或将从处理器获取的BL8指令对应的8组×72位/组的数据转换为存储于各X8颗粒中的数据的形式。

具体地,数据缓存模块710可以将从每个Bank获取的数据形式为4存储单元/Bank×8位/存储单元的数据,转换为8组×4位/组的数据形式,再将18个Bank中转换后的数据按位进行拼接,得到与BL8访问指令对应的8组×72位/组的数据,并将该8组×72位/组的数据发送给处理器0;或者将从处理器0获取的数据形式为8组×72位/组的数据拆分为9组数据形式为2Bank×4存储单元/Bank×8位/存储单元的数据,并将各数据形式为2Bank×4存储单元/Bank×8位/存储单元的数据存储到一个X8颗粒中,其中,一组数据形式为1Bank×4存储单元/Bank×8位/存储单元的数据存储在以物理地址C1对应的存储单元为起始存储单元的4个存储单元中,另一组数据形式为1Bank×4存储单元/Bank×8位/存储单元的数据存储在以物理地址C2对应的存储单元为起始存储单元的4个存储单元中。如此,在一次数据访问过程中,每一个X8颗粒中的数据只对应于内存总线数据位中的4位,也即是在一个X8颗粒发生故障的情况下,在一个纠错单元内,只会有一个纠错数据组的数据发生错误,出错的数据位数至多为16位,而针对DDR4规范的内存模组,处理器0的单元可纠错数据位数为16位,没有超过处理器0能够纠正的数据范围,处理器0可以通过ECC算法进行纠错,提高了内存模组7的稳定性。

例如,图17根据本申请的一些实施例,示出了一种数据缓存模块710数据形式为2Bank×4存储单元/Bank×8位/存储单元的数据转换为8组×8位/组的数据形式的示意图。如图17所示,数据缓存模块710可以将从X8颗粒700的Bank(0)中读取的4组×8位/组的数据、从X8颗粒700的Bank(8)中读取的4组×8位/组的数据分别看作是4行8列的数据,数据缓存模块710可以将各4行8列中的数据中,后4列的数据(第1行至第4行、第5列至第8列)移动到前4列之下,作为第5行至第8行、第1列至第4列的数据,从而得到2组数据形式为8组×4位/组的数据,再将2组数据形式为8组×4位/组的数据按位进行拼接,得到数据形式为8组×8位/组的数据,并将该数据形式为8组×8位/组的数据与处理器的内存总线数据位的第0至7位进行对应。

可以理解,以上将从各Bank中读取的4组×8位/组数据转换为8组×4位/组的转换方式只是一种示例,在另一些实施例中也可以采用其他方式,在此不做限定。

进一步,图18根据本申请的一些实施例,示出了一种内存模组7的一个Rank中各X8颗粒中的数据与内存总线数据位的对应关系示意图。参考图18,数据缓存模块710可以将X8颗粒700的两个Bank(例如Bank(0)和Bank(8))分别与内存总线数据位的第0位至第3位、第4位至第7位对应,将X8颗粒701的两个Bank(例如Bank(0)和Bank(8))分别与内存总线数据位的第8位至第11位、第12位至第15位对应,……将X8颗粒708的两个Bank(例如Bank(0)和Bank(8))分别与内存总线数据位的第64位至第67位、第68位至第71位对应。从而在一次访问过程中,每一个X8颗粒中的一个Bank的数据只对应于内存总线数据位的4位,在一个Bank发生故障时,对于一个纠错单元,只有一个纠错数据组的数据会出现错误,例如,在X8颗粒700的Bank(0)出现故障时,纠错单元EC0中只有纠错数据组A1中的数据会出现错误,出错的数据位数至多为16位,而针对采用DDR4规范的内存模组,处理器0的单元可纠错数据位数为16,处理器0可以通过ECC算法对该出现错误的可纠错数组中的数据进行纠正,提高了采用X8颗粒的ECC内存模组的稳定性。

可以理解,图15示出的内存模组7的结构只是一种示例,在另一些实施例中,内存模组7还可以包括更多或更少的模块,也可以合并或拆分部分模块。例如,在一些实施例中,内存模组7还可以包括用于提升内存模组电气特性的电阻、电容,以及其他功能模块例如模组存在的串行检测(Serial Presence Detect,SPD),用于向处理器发送内存模组的工作状态、速度、响应时间等。

可以理解,图15仅示例性地示出了内存模组7中一个Rank的结构示意图,在另一些实施例中,内存模组7可以包括更多的Rank,每个Rank的结构可以和图10所示的结构类似。也即是说,对于采用DDR4规范的ECC内存模组,可以包括9k个X8颗粒,k为内存模组的Rank数。

类似的,对于采用DDR5规范的内存模组,也可以通过本申请的技术方案来提高ECC内存模组的稳定性。

如前所述,采用DDR5规范的内存模组的Rank位宽为80位,每个内存子通道各对应40位,对应一个内存子通道,可以采用5个X8颗粒来得到一个内存子通道对应的40位位宽。由于BL16访问指令访问采用DDR5规范的内存模组时,一次BL16访问指令在一个内存子通道访问的数据量为16组×40位/组,从而需要从一个X8颗粒中访问128位数据。内存模组可以将对同一个X8颗粒中128位数据的访问,转换为对同一X8颗粒中2个Bank的访问,5个X8颗粒共计访问10个Bank,一个Bank访问64位数据,即可得到BL16访问指令对应的16组×40位/组数据,再重新组织从每个Bank访问的数据与从处理器接收或发送给处理器的16组×40位/组数据的对应关系,即可使得从每个Bank访问的数据只对应于内存总线数据位的4位。例如将从一个Bank访问的数据转换为16组×4位/组的形式,与16组×40位/组中的16组×4位/组数据相对应。从而在16组×40位/组的数据中,每组数据中只有4位数据是从同一个Bank中读取或只有4位数据是存储在同一个Bank中,进而在一个Bank发生故障时,每组数据中至多只会有4位数据出错,未超过处理器的可纠错位宽,提高了内存模组的稳定性。

具体地,图19A根据本申请的一些实施例,示出了一种内存模组8的一个内存子通道的结构示意图。如图19A所示,该内存模组8为采用DDR5规范的内存模组,内存模组8的一个内存子通道包括5个X8颗粒,即X8颗粒801、X8颗粒802、X8颗粒803和X8颗粒804,地址/指令转换单元805和数据缓存模块806。5个X8颗粒中,4个X8颗粒用于存储数据,一个X8颗粒用于存储纠错码。

地址/指令转换单元805用于接收处理器0发送的BL16访问指令和逻辑地址A,并将BL16访问指令转换为两个BL8访问指令,将逻辑地址A转换为物理地址C1和物理地址C2,以访问各X8颗粒中与BL16指令对应的640位数据。其中,处理器0发送的BL16访问指令和逻辑地址A用于访问每个X8颗粒中逻辑地址A对应的存储单元为起始存储单元的16个存储单元中的数据,即访问数据形式为16组×40位/组的数据;物理地址C1和物理地址C2指向各X8颗粒中的两个不同的Bank,两个BL8访问指令分别访问物理地址C1对应的Bank中的8个存储单元(数据形式为8组×8位/组)和物理地址C2对应的Bank中的8个存储单元(数据形式为8组×8位/组),5个X8颗粒共对应5颗粒×2bank/颗粒×(8组×8位/组)/bank=640位数据。

具体地,在一些实施例中,假设每个X8颗粒有2N个Bank(Bank(0),Bank(1),…,Bank(2N-1))、每个Bank有M列,逻辑地址A为“Bank(x),R(y),C(z)”(即第x个Bank第y行第z列)。地址/指令转换单元805可以在x

表4一种逻辑地址A与物理地址C1、物理地址C2的转换关系

可以理解,在另一些实施例中,在同一个X8颗粒中同时访问Bank(x)和Bank(u)(在x

数据缓存模块810用于重新组织访问各X8颗粒中的数据与处理器的内存总线数据位的对应关系,以将从X8颗粒中读取的数据转换为BL16指令对应的数据形式,或将从处理器获取的BL16指令对应的16组×40位/组的数据转换为存储于各X8颗粒中的数据的形式。

具体地,数据缓存模块810可以将从每个Bank获取的数据形式为8存储单元/Bank×8位/存储单元的数据,转换为16组×4位/组的数据形式,再将10个Bank中转换后的数据按位进行拼接,得到与BL访问指令对应的16组×40位/组的数据,并将该16组×40位/组的数据发送给处理器0;或者将从处理器0获取的数据形式为16组×40位/组的数据转换为9组数据形式为2Bank×8存储单元/Bank×8位/存储单元的数据,并将各数据形式为2Bank×8存储单元/Bank×8位/存储单元的数据存储到一个X8颗粒中,其中,一组数据形式为1Bank×8存储单元/Bank×8位/存储单元的数据存储在以物理地址C1对应的存储单元为起始存储单元的4个存储单元中,另一组数据形式为1Bank×8存储单元/Bank×8位/存储单元的数据存储在以物理地址C2对应的存储单元为起始存储单元的4个存储单元中。如此,在一次数据访问过程中,每一个X8颗粒中的数据只对应于内存总线数据位中的4位,也即是在一个X8颗粒发生故障的情况下,在一个纠错单元内,只会有2个纠错数据组的数据发生错误,出错的数据位数至多为32位,而针对采用DDR5规范的内存模组,处理器0的单元可纠错数据位数为32,处理器0可以通过ECC算法进行纠错,提高了内存模组的稳定性。

其中,将一个Bank中的8组×8位/组的数据转换为16组×4位/组的形式的方法可以参考前述图14B的相关描述,在此不做赘述。

进一步,图19B示出了一种内存模组8中一个内存子通道的各X8颗粒中的数据与内存总线数据位的对应关系示意图。参考图19B,数据缓存模块806可以将X8颗粒800的两个Bank(例如Bank(0)和Bank(8))分别与内存总线数据位的第0位至第3位、第4位至第7位对应,将X8颗粒801的两个Bank(例如Bank(0)和Bank(8))分别与内存总线数据位的第8位至第11位、第12位至第15位对应,……将X8颗粒804的两个Bank(例如Bank(0)和Bank(8))分别与内存总线数据位的第32位至第35位、第36位至第39位对应。从而在一次访问过程中,每一个X8颗粒中的一个Bank的数据只对应于内存总线数据位的4位,在一个Bank发生故障时,对于一个纠错单元,只有一个纠错数据组的数据会出现错误,例如,在X8颗粒800的Bank(0)出现故障时,纠错单元EC2中只有纠错数据组C1和纠错数据组C2中的数据会出现错误,出错的数据位数至多为32位,而针对采用DDR5规范的内存模组,处理器0的单元可纠错数据位数为32,处理器0可以通过ECC算法对该出现错误的可纠错数组中的数据进行纠正,提高了采用X8颗粒的ECC内存模组的稳定性。

可以理解,采用DDR5规范的内存模组包括2个独立的内存子通道,内存模组8中另一个内存子通道的结构与图19A所示的结构类似一致,在此不做赘述。也即是说,对于采用DDR5规范的内存模组,一个Rank可以包括10个X8颗粒。并且,在另一些实施例中,DDR5 ECC内存模组还可以包括多个Rank,也就是说,采用DDR5规范的ECC内存模组,可以包括10k个X8颗粒,k为内存模组包括的Rank数量。

可以理解,本申请各实施例提供的内存模组可以被实现为任意标准的内存模组,包括但不限于双列直插内存模组(Dual In-Line Memory Module,DIMM)、无缓冲双列直插式内存模组(Unbuffered Dual In-Line Memory Module,UDIMM)、带寄存器的双列直插内存模组(Registered Dual In-Line Memory Module,RDIMM)、低负载双列直插内存模组(Load Reduced Dual In-Line Memory Module,LRDIMM)等,在此不做限定。

可以理解,前述各实施例以内存模组中的内存颗粒为DRAM颗粒介绍本申请的技术方案只是一种示例,在另一些实施例中,DRAM颗粒也可以替换为其他的内存颗粒,包括但不限于RRAM颗粒、MRAM颗粒、PCRAM颗粒等,在此不做限定。

进一步,本申请实施例还提供了一种电子设备,参考图20,电子设备100包括处理器101和内存模组102。

其中,处理器101可以向内存模组102发送访问指令,例如前述BL8访问指令、BL16访问指令等,以将处理器101运行过程中的指令、数据等存储到内存模组102中,或从内存模组102中读取指令、数据。处理器101具有ECC功能,并且可纠错位宽为4。

内存模组102为ECC内存模组,例如前述各实施例提供的内存模组5、内存模组6、内存模组7、内存模组8等,可以通过对处理器101发送的BL8访问指令或BL16进行指令类型转换和地址转换,并重新组织从DRAM颗粒读取的数据与处理器101的内存总线数据位的对应关系或从处理器101读取的数据与DRAM颗粒中的存储单元的对应关系,使得处理器101通过BL8或BL16访问指令访问内存模组102时,内存模组102的一个DRAM颗粒或一个DRAM颗粒的一个Bank只对应于Rank位宽中的4位,从而确保内存模组102的一个DRAM颗粒或一个DRAM颗粒的一个Bank发生故障时,处理器101能够使用预设的ECC方法,对发生故障的DRAM颗粒中的数据进行纠正,提高了内存模组102的稳定性。

可以理解,图20所示的电子设备100的结构只是一种示例,在另一些实施例中,电子设备100还可以包括更多或更少的模块,例如可以包括用于耦接处理器101和内存模组102存储器控制器等,在此不做限定。

需要说明的是,在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或者可以与其他特征组合。

需要说明的是,本申请各实施例可以以硬件、固件、软件或其任何组合来实现。

需要说明的是,本申请各实施例中提到的各单元/模块都是逻辑单元/模块,在物理上,一个逻辑单元/模块可以是一个物理单元/模块,也可以是一个物理单元/模块的一部分,还可以以多个物理单元/模块的组合实现,这些逻辑单元/模块本身的物理实现方式并不是最重要的,这些逻辑单元/模块所实现的功能的组合才是解决本申请所提出的技术问题的关键。此外,为了突出本申请的创新部分,本申请上述各设备实施例并没有将与解决本申请所提出的技术问题关系不太密切的单元/模块引入,这并不表明上述设备实施例并不存在其它的单元/模块。

需要说明的是,在本专利的示例和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

虽然通过参照本申请的某些优选实施例,已经对本申请进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本申请的精神和范围。

相关技术
  • 一种显示模组、电子设备和显示模组的制造方法
  • 指纹模组及设有该指纹模组的电子设备
  • 一摄像模组及其电子设备及摄像模组制备方法
  • 光线发射器、飞行时间模组以及电子设备
  • 内存访问方法、交换芯片、内存模组及电子设备
  • 内存访问方法、交换芯片、内存模组及电子设备
技术分类

06120116507446