CN115016981A - 存储区域的设置方法、数据读取、写入方法及相关装置 - Google Patents
存储区域的设置方法、数据读取、写入方法及相关装置 Download PDFInfo
- Publication number
- CN115016981A CN115016981A CN202210682650.3A CN202210682650A CN115016981A CN 115016981 A CN115016981 A CN 115016981A CN 202210682650 A CN202210682650 A CN 202210682650A CN 115016981 A CN115016981 A CN 115016981A
- Authority
- CN
- China
- Prior art keywords
- data
- address
- error correction
- coding
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请提供一种存储区域的设置方法,适用于存储器,包括:获取存储器的猝发长度、存储器列数、应用请求数据流长度、应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址、数据流猝发个数,并根据上述相应的信息确定存储器的一个猝发长度所对应的错误校正编码位数、获取错误校正编码所保护数据的数据区域地址,以及结合预定的错误校正编码的编码区域地址确定规则,确定第一、二端编码列地址,得到错误校正编码的编码区域地址,本申请提供的存储区域的设置方法,可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性。
Description
技术领域
本发明实施例涉及集成电路技术领域,具体涉及一种存储区域的设置方法、数据读取、写入方法及相关装置。
背景技术
芯片能否持续稳定的工作取决于芯片系统上各个部件的稳定性,存储器作为主要的数据存储部件,其稳定性对整个系统至关重要,在实际工作中,存储器可以具体为动态随机存储器(DRAM),然而DRAM的存储单元容易受到外界噪声的干扰,导致数据错误,但这类错误不是永久性的,因此称为软错误。
随着半导体工艺的进步,DRAM的工作电压越来越低以及晶体管尺寸的缩小使得相邻DRAM存储单元的距离越来越近,导致DRAM的软错误变得越来越普遍,另外,在数据的传输过程中,DRAM接口上的信号也会受到外界噪声的干扰而产生软错误,由于软错误是动态错误,可能发生在芯片正常工作时的任一时刻,因此必须对软错误进行动态的检测和纠正,否则,如果读取的DRAM数据出现错误,可能导致芯片系统工作不正常,严重时引起系统复位甚至宕机。
对软错误的处理目前比较普遍的做法是采用错误校正编码(ECC)保护,然而,一方面某些不支持ECC功能的芯片无法实施现有技术中的ECC保护方案、以及某些ECC保护方案只支持特定类型的DRAM,使得现有的ECC保护方案无法对任意DRAM都通用,另一方面,无法对DRAM根据实际需求灵活选择ECC保护方案,一旦选定了ECC保护方案,DRAM中的ECC保护区域无法灵活改变。
因此,如何保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性,就成为本领域技术人员亟需解决的技术问题。
发明内容
有鉴于此,本申请实施例提供的存储区域的设置方法,可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性。
为实现上述目的,本申请实施例提供如下技术方案。
第一方面,本申请实施例提供一种存储区域的设置方法,适用于存储器,包括:
获取所述存储器的猝发长度、存储器列数、应用请求数据流长度、所述应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址;
根据所述应用请求数据流长度及所述猝发长度获取传输所述应用请求数据流所需的猝发个数,得到数据流猝发个数;
当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时;根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
第二方面,本申请实施例提供一种数据读取方法,包括:
获取数据读取命令;
当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于如第一方面任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如第一方面任一项所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码;
当利用所述读取错误校正编码校验对应的所述猝发读数据正确或者直接根据所述读取错误校正编码完成校正时,返回所述猝发读数据。
第三方面,本申请实施例提供一种数据写入方法,包括:
获取数据写入命令;
当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如第一方面任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如第一方面任一项所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址;
将所述写入错误校正编码写入所述写数据编码位地址;
将所述猝发写数据写入所述写数据地址。
第四方面,本申请实施例提供一种存储器的控制器,适于执行如第一方面任一项所述的存储区域的设置方法、如第二方面任一项所述的数据读取方法和/或如第三方面任一项所述的数据写入方法,包括:
系统总线接口控制器,适于获取寄存器配置命令、系统原始读命令或系统原始写命令,并将所述系统原始读命令转换为如第二方面任一项所述的数据读取命令并将所述存储器返回的猝发读数据发送到系统总线,或将所述系统原始写命令转换为如第三方面任一项所述的数据写入命令;
配置寄存器,适于获取并保存所述系统总线接口控制器发送的系统寄存器配置命令,保存并发送所述寄存器配置命令所包含的配置信息,还适于当接收到错误校正编码错误信息时,产生中断状态;
错误校正编码控制器,适于接收所述配置信息、所述数据读取命令和/或所述数据写入命令,并根据所述配置信息执行如第一方面任一项所述的存储区域的设置方法,根据所述数据读取命令执行如第二方面任一项所述的数据读取方法,和/或根据所述数据写入命令执行如第三方面任一项所述的数据写入方法。
第五方面,本申请实施例提供一种存储区域的设置装置,包括:
数据获取模块,适于获取所述存储器的猝发长度、存储器列数、应用请求数据流长度、所述应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址;
数据流猝发个数获取模块,适于根据所述应用请求数据流长度及所述猝发长度获取传输所述应用请求数据流所需的猝发个数,得到数据流猝发个数;
数据区域地址及编码区域地址获取模块,适于当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时;根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
第六方面,本申请实施例提供一种数据读取装置,包括:
数据读取命令获取模块,适于获取数据读取命令;
猝发读数据及读取错误校正编码获取模块,适于当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于如第一方面任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如第一方面任一项所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码;
校验模块,适于当利用所述读取错误校正编码校验对应的所述猝发读数据正确或者直接根据所述读取错误校正编码完成校正时,返回所述猝发读数据。
第七方面,本申请实施例提供一种数据写入装置,包括:
数据写入命令获取模块,适于获取数据写入命令;
写数据编码位地址获取模块,适于当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如第一方面任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如第一方面任一项所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址;
写入错误校正编码模块,适于将所述写入错误校正编码写入所述写数据编码位地址;
猝发写数据写入模块,适于将所述猝发写数据写入所述写数据地址。
第八方面,本申请实施例提供一种电子设备,包括如第四方面任一项所述的存储器的控制器或如第五方面任一项所述的存储区域的设置装置、如第六方面任一项所述的数据读取装置及如第七方面任一项所述的数据写入装置。
本申请实施例提供的存储区域的设置方法,适用于存储器,在存储区域设置时,首先获取所述存储器的猝发长度、存储器列数、应用请求数据流长度、所述应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址;根据所述应用请求数据流长度及所述猝发长度获取传输所述应用请求数据流所需的猝发个数,得到数据流猝发个数;接着当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时;根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
这样,本申请实施例提供的存储区域的设置方法,首先根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数,然后根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址,而数据列结束地址是根据实际需要确定的,可见,数据区域地址是可以根据实际需要灵活改变的;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址,可见在数据区域地址可以根据实际需要灵活改变的基础上,错误校正编码的编码区域地址也可以根据预定的所述错误校正编码的编码区域地址确定规则、数据列结束地址做出相应的改变,此时,获取到的编码区域地址和数据区域地址可以是错误校正编码保护方案所对应的完整的编码区域地址和数据区域地址,也可以是根据预定的数据列结束地址自定义的编码区域地址和数据区域地址,提高了错误校正编码(ECC)保护区域确定的灵活性,以达到最大化利用存储空间、减少损耗、提高性能的目的,因此,本申请实施例提供的存储区域的设置方法,可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为动态随机存储器在片上系统中典型应用的示意图;
图2a为动态随机存储器片外错误校正编码保护方案示意图;
图2b为动态随机存储器片上错误校正编码存储校验方案示意图;
图2c为动态随机存储器片上错误校正编码存储方案示意图;
图2d为动态随机存储器链路错误校正编码方案示意图;
图3为动态随机存储器存储阵列的逻辑示意图;
图4为本申请实施例提供的存储区域的设置方法的一流程示意图;
图5为动态随机存储器存储区域划分示意图;
图6为本申请实施例提供的数据读取方法一流程示意图;
图7为本申请实施例提供的错误校正编码缓存器的缓存行结构;
图8为本申请实施例提供的数据写入方法一流程示意图;
图9为本申请实施例提供的存储器的控制器的结构示意图;
图10为本申请实施例提供的存储区域的设置装置的结构示意图;
图11为本申请实施例提供的数据读取装置的结构示意图;
图12为本申请实施例提供的数据写入装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如前所述,芯片容易受到外界噪声的干扰产生软错误,并且软错误是动态错误,可能发生在芯片正常工作时的任一时刻,因此必须对软错误进行动态的检测和纠正,否则,如果读取的DRAM数据出现错误,可能导致芯片系统工作不正常,严重时甚至引起系统复位甚至宕机。
由于在实际工作中,存储器可以具体为动态随机存储器(DRAM),因此,以下本申请将以动态随机存储器(DRAM)为具体的实施例加以说明。
请参考图1,图1为动态随机存储器在片上系统中典型应用的示意图。
如图1所示,在一个典型的片上系统(SoC)中,DRAM控制器对内通过系统总线接口连接到系统互联总线上,例如系统互联总线可以使用ARM的AXI、ACE或者CHI等;DRAM控制器对外通过DRAM接口连接到片外的DRAM存储器,DRAM接口由片外的DRAM存储器类型决定,比如片外DRAM使用GDDR6,则使用标准的GDDR6 DRAM接口,而如果片外DRAM使用LPDDR4,则使用标准的LPDDR4 DRAM接口。
一个或者多个CPU、GPU通过系统总线接口连接到系统互联总线上,再通过DRAM控制器访问片外的DRAM存储器。所有的数据存储和通信都依赖于DRAM存储器,因此DRAM在SoC中发挥着非常核心的作用,对于数据的安全和稳定性要求非常高。
目前对软错误的处理比较普遍的做法是采用错误校正编码(ECC)保护,使用错误校正编码(ECC)对动态随机存储器(DRAM)中存储的数据进行保护是指在动态随机存储器(DRAM)中写入数据时为所写入的数据添加对应的错误校正编码(ECC),然后在读取相应数据时利用之前保存的错误校正编码(ECC)对所读取的数据进行校验,动态地纠正所读取的数据中偶发的1位或者2位软错误(取决于采用的ECC保护方案),同一种错误校正编码(ECC)保护方案针对需要保护的数据宽度不同,其编码长度也不一样,需要的保护的粒度越小,错误校正编码(ECC)开销越大,反之亦然,因此可以根据不同应用下的不同数据宽度,改变ECC编码以平衡对稳定性和开销的需求,目前比较常见的ECC保护方案包括:单比特错误校正编码(SEC),单比特错误校正两比特错误检测编码(SECDED),两比特错误校正编码(DEC),两比特错误校正三比特错误检测编码(DECTED)等,请参考表1,表1列出了SEC和SECDED在不同常见数据宽度下需要的ECC位数。
表1:常见数据宽度的SEC/SECDED编码位数
比如:SEC-32/6是指,数据宽度为32位时需要的ECC位数为6位。
由于动态随机存储器(DRAM)的接口以及动态随机存储器(DRAM)芯片的实现不一样,因此,目前各种不同类型的动态随机存储器(DRAM)对所存储数据的错误校正编码(ECC)保护方案并不一致,请参考图2a-图2d,图2a-图2d为目前不同类型的动态随机存储器(DRAM)所使用的几种不同保护方案的示意图。
请参考图2a,图2a为动态随机存储器片外错误校正编码保护方案示意图,该方案使用一块独立的动态随机存储器(DRAM)和一组独立的动态随机存储器(DRAM)接口来存储数据的ECC,配合SoC芯片上DRAM控制器中的ECC生成/校验器用来保护数据,主要用于使用标准DDR(DDR3/DDR4/DDR5)的企业服务器和数据中心芯片系统上。如图2a所示展示了一个72位DDR4使用SECDED-64/8(64位数据、8位ECC)ECC保护方案的示例,64位数据存储于4块独立的X16 DRAM中,另外为ECC添加一块独立的X8 ECCDRAM用以存储数据的ECC,该ECCDRAM通过一组独立的DDR4接口与DDR4控制器相连,从而可以同时保护DRAM存储单元和DRAM接口上引起的软错误,并且对性能没有任何影响;然而,该方案的系统设计与不带ECC保护的方案相比更加复杂,成本更高,并且需要DRAM接口提供额外的数据线来传输ECC,并且,一旦选定ECCDRAM并完成系统设计,ECC的算法也不能再改变。
请参考图2b,图2b为动态随机存储器片上错误校正编码存储校验方案示意图,如图2b所示(附图的例子中使用了SEC-128/8的ECC算法),该方案在DRAM芯片内部集成了一个片上ECC生成和校验器,并且为ECC配备专用的片上ECC存储阵列,这样,ECC的生成,存储和校验都发生在DRAM芯片内部,对SoC芯片读写数据来说是透明的,不需要在SoC芯片上增加额外的开销,对数据读写的性能也没有影响;但该方案只能保护DRAM存储单元内发生的软错误,无法校验DRAM接口读数据链路上发生的错误,且目前只有DDR5的DRAM芯片支持这种方案,对DRAM芯片的设计复杂度和成本都要求比较高,其他类型的DRAM芯片并不支持这种方式,而且ECC算法被实现在DRAM芯片中,不能由SoC芯片的设计者更改,而且也不能动态改变。
请参考图2c,图2c为动态随机存储器片上错误校正编码存储方案示意图,如图2c所示(图中示例使用了SECDED-64/8的ECC保护方案),该方案与图2b方案的区别是DRAM芯片上只有专门的片上ECC存储阵列,没有ECC生成和校验器,需要在SoC芯片上的DRAM控制器(例如HBM控制器)实现ECC的生成和校验,ECC通过专门的DRAM接口信号在DRAM和DRAM控制器之间传输(例如HBM接口中的DM信号线),这样,可以同时保护DRAM存储单元和DRAM接口上引起的软错误;但是目前只有HBMDRAM芯片支持这种方案,并且HBMDRAM接口中的DM信号用于传输ECC后,其本来的功能就无法同时支持,并且一旦DRAM接口上传输ECC的专用信号线确定,ECC保护方案就只能固定下来,比如HBM2中只能使用SECDED-64/8(64位数据、8位ECC)的ECC保护方案。
请参考图2d,图2d为动态随机存储器链路错误校正编码方案示意图,如图2d所示(图中示例使用了SECDED-128/9的ECC算法),该方案使用DRAM接口上特定的信号线上传输ECC,以达到校验DRAM接口链路上软错误的目的,该方案不需要在DRAM上增加或者划分专门的ECC存储空间;但是该方案不能校验DRAM存储单元中发生的软错误,另外也需要DRAM芯片的支持,目前只在部分LPDDR5 DRAM中使用,当然,一旦DRAM芯片选定,ECC只能采用固定的保护方案,比如LPDDR5中使用的是SECDED-128/9(128位数据、9位ECC)的ECC保护方案。
另外,除了上述当前主流DRAM数据ECC保护方案的缺点外,针对一些DRAM数据接口宽度固定、并且DRAM芯片本身不支持ECC功能的DRAM(没有特殊信号线或者没有专用ECC存储阵列),比如GDDR5/6、LPDDR4,都无法使用ECC保护方案。
综上所述,目前各种不同类型的DRAM所使用的对所存储数据的ECC保护方案中,一方面某些不支持ECC功能的芯片无法实施现有技术中的ECC保护方案、以及某些ECC保护方案只支持特定类型的DRAM,使得现有的ECC保护方案无法对任意DRAM都通用,另一方面,无法对DRAM根据实际需求灵活选择ECC保护方案,一旦选定了ECC保护方案,DRAM中的ECC保护区域无法灵活改变。
因此,如何保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性,就成为本领域技术人员亟需解决的技术问题。
为克服现有技术的缺点,本申请实施例提供的存储区域的设置方法,可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性。
为了方便理解本申请实施例所提供的存储区域的设置方法,首先介绍一下DRAM的存储阵列结构,请参考图3,图3为动态随机存储器存储阵列的逻辑示意图,如图3所示:
DRAM的存储阵列可以看成一个三维逻辑结构:由2b个块(bank)构成,每个块包含2r行,每行包含2c列,其中b,r,c分别为DRAM的块地址位数,行地址位数和列地址位数,每一行中的每一列(即图中的一个小方格)是DRAM访问的最小单位,这也是DRAM一个猝发传输的单位,由DRAM的预取大小决定,假设预取大小为p位,则一个猝发传输的数据位数也是p位,例如GDDR6的预取大小是256比特位,则GDDR6的一个猝发传输的数据位数也是256位,那么它的列宽就等于一个猝发为256比特位。
本申请提供的技术方案采用嵌入式ECC的方法,即将错误校正编码(ECC)流嵌入到数据流,并保存在与数据相同的动态随机存储器(DRAM)中,在动态随机存储器(DRAM)空间上,从逻辑上区分错误校正编码所保护数据的数据区域和错误校正编码的编码区域,但是物理上完全一致,错误校正编码(ECC)可以使用与数据读写完全相同的命令进行操作,因此,本申请提供的技术方案,在逻辑上,可以将动态随机存储器(DRAM)空间划分成三个部分:
1:错误校正编码(ECC)所保护数据的数据区域:用来存储ECC需要保护的数据,用户可以根据需求设置错误校正编码(ECC)所保护数据的数据区域的块地址标记BA,行起始地址RS和结束地址RE,列结束地址CE,例如一个8块(bank)-16384行-128列的DRAM,可以设置成:
BA=8’b00001010,RS=1024,RE=2047,CE=63
其中:8’b00001010表示8块可以用8个比特00001010来表示,00001010由低位到高位表示第0-7块,1表示保护块,0表示非保护块,00001010表示第1块和第3块为ECC所保护数据的数据区域所在的块。
RS=1024,RE=2047表示ECC所保护数据的数据区域的起始行和结束行。
CE=63表示ECC所保护数据的数据区域的列结束地址。
BA=8’b00001010,RS=1024,RE=2047,CE=63表示第1块和第3块的第1024行至2047行中0至63列属于ECC所保护数据的数据区域,第1块和第3块的第1024行至2047行称为ECC保护行。
2:错误校正编码(ECC)的编码区域:用于存储ECC所保护数据的错误校正编码,该区域可以始终位于一个ECC保护行的尾部,也可以根据其它预定的错误校正编码的编码区域地址确定规则来确定,本申请并不限制错误校正编码(ECC)的编码区域地址的确定方法,本申请以下以错误校正编码(ECC)的编码区域始终位于一个ECC保护行的尾部为具体的实施例来进行说明,错误校正编码(ECC)的编码区域的大小与错误校正编码(ECC)所保护数据的数据区域的大小以及选择的ECC保护方案有关。
假设采用的ECC保护方案中数据宽度位数和ECC编码位数分别为n和k,则一个ECC保护行中:
错误校正编码(ECC)的编码区域大小=RU{错误校正编码(ECC)所保护数据的数据区域*k/n}
其中:RU表示向上取整
例如采用SECDED-64/8的ECC编码,每64位数据需要8位ECC保护,即数据和ECC的比例为8:1,因此错误校正编码(ECC)的编码区域大小为错误校正编码(ECC)所保护数据的数据区域大小的八分之一,结合上文例子中每个ECC保护行中ECC数据保护区域的大小是64列,因此错误校正编码(ECC)的编码区域大小为8列,假设列地址位数c为7,则错误校正编码(ECC)所保护数据的数据区域占用DRAM保护行中的0-63列,错误校正编码(ECC)的编码区域占用与数据区域相对应的DRAM保护行中120-127列。
容易理解的是,一个ECC保护行中错误校正编码(ECC)的编码区域与错误校正编码(ECC)所保护数据的数据区域之和不能大于一个DRAM行的大小。
3:非错误校正编码(ECC)保护数据区域:一个ECC保护行中除开错误校正编码(ECC)的编码区域和错误校正编码(ECC)所保护数据的数据区域后,剩下的区域即为非错误校正编码(ECC)保护数据区域。该区域大小可以为0,对该区域的访问与不带嵌入式ECC保护的DRAM访问完全一样。比如上面的例子中,一个ECC保护行中的第64~119列即为非ECC保护数据区域,此外第1块和第3块的0~1023与2048~16383行,以及其它块的所有行,也属于非ECC保护数据区域。下文中为了描述方便,用一个ECC保护行中的非错误校正编码(ECC)保护数据区域来代表非错误校正编码(ECC)保护数据区域。
请参考图4,图4为本申请实施例提供的存储区域的设置方法的一流程示意图,其中,b,r,c分别为DRAM的块地址位宽,行地址位宽和列地址位宽。
如图中所示,本申请实施例提供的存储区域的设置方法包括:
步骤S40:获取所述存储器的猝发长度、存储器列数、应用请求数据流长度、所述应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址。
由上文中可知,在实际工作中,存储器可以具体为动态随机存储器(DRAM),因此,以下本申请仍以动态随机存储器(DRAM)为具体的实施例加以说明。
因为本申请提供的技术方案,在动态随机存储器(DRAM)空间从逻辑上区分错误校正编码(ECC)所保护数据的数据区域和错误校正编码(ECC)的编码区域,而物理上完全一致,ECC可以使用与数据读写完全相同的命令进行操作,因此,本申请实施例并不限制DRAM的选择,在实际应用中,可以根据实际需求,例如根据系统带宽、延时以及功耗等要求来选择所需的动态随机存储器(DRAM),动态随机存储器(DRAM)选定之后,就可以获取到与其相对应的存储器的猝发长度B字节、块地址位数b,行地址位数r和列地址位数c,相应的,可以根据列地址位数c获取到存储器列数2c,并且可以根据实际应用请求获取到应用请求数据流长度S字节,以及预先设置的错误校正编码所保护数据的数据列结束地址CE。
本文所述的预先设置的错误校正编码所保护数据的数据列结束地址CE,是指通过处理器预先向DRAM控制器中设置的数据列结束地址CE。
所有DRAM的访问都是基于猝发(burst)的,一个猝发对应的数据长度是一个DRAM列的宽度,也是DRAM的预取大小,例如上述GDDR6的预取大小是256比特位,则GDDR6的一个猝发的猝发长度B等于256比特位,即32字节。根据实际情况,应用请求数据流S字节所对应的错误校正编码(ECC)的编码猝发个数可以为1个或者多个,但是为了提高错误校正编码(ECC)的访问效率,应用请求数据流S字节所对应的所有错误校正编码(ECC)最好落在一个存储器的猝发长度B中。
因此,在一种具体的实施例中,所述错误校正编码的编码猝发个数为1个,这样可以使错误校正编码(ECC)的访问效率最大化。当然,在其他实施例中,错误校正编码的编码猝发个数也可以为2个或者多个。
以下本申请将以错误校正编码的编码猝发个数为1个作为具体的实施例加以说明。
这样,在进行存储区域的设置时,首先获取存储器的猝发长度(B)、存储器列数(2c)、应用请求数据流长度(S)、所述应用请求数据流长度对应的错误校正编码的编码猝发个数(1)和预先设置的错误校正编码所保护数据的数据列结束地址(CE)。
在一种具体的实施例中,可以根据系统中应用请求数据流的长度来确定合适的ECC保护方案,并确定动态随机存储器(DRAM)存储区域的划分。
为方便理解以下内容,请结合图5继续参考图4,图5为动态随机存储器存储区域划分示意图。
步骤S41:根据所述应用请求数据流长度及所述猝发长度获取传输所述应用请求数据流所需的猝发个数,得到数据流猝发个数。
容易理解的是,所述应用请求数据流为连续传输的应用请求数据流,结合步骤S40,应用请求数据流长度为S字节,将S个字节按照DRAM的猝发长度B字节均匀切分(一般S为B的倍数),则S字节的猝发个数:
N=S/B
(公式1)
请参考图5,图5中(1)连续数据流切分,应用请求数据流S根据DRAM的猝发长度B被切分成了N个猝发数据,即猝发0、猝发1、......、猝发N-1。
步骤S42:根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,是否能够确定所述存储器的一个所述猝发长度所对应的错误校正编码位数,如果是,则执行步骤S43、步骤S44,如果否则执行步骤S45。
根据前述获取的应用请求数据流长度(S字节)、所述存储器的猝发长度(B字节),以及所述编码猝发个数(1个猝发),判断是否能够确定所述存储器的一个所述猝发长度所对应的错误校正编码位数,如果是,则进一步确定一个猝发长度的数据需要多少(假设为x位)位数的错误校正编码进行保护。
也就是说:1个编码猝发的位数需要大于应用请求数据流长度所需要的错误校正编码的位数,即:
S/B*x≤B*8
经过运算,可以得到:
x≤B*8*B/S
具体地,根据前文关于表1相关内容的介绍可知,存在不同的ECC保护方案,为了方便结合已有的ECC保护方案,所述根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数的步骤可以包括:
根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定错误校正编码方案;
根据所述错误校正编码方案,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数。
由上文可知,为了最大化错误校正编码(ECC)的访问效率,错误校正编码的编码猝发个数为1个,即应用请求数据流长度S个字节所对应的所有的错误校正编码落在一个DRAM的猝发长度B中,因此,应用请求数据流长度S个字节所对应的所有的错误校正编码的长度小于等于B。
假设采用的ECC保护方案中数据宽度位数和ECC编码位数分别为n和k比特(具体可以参考表1),为了最大化ECC的访问效率,错误校正编码的编码猝发个数为1个,即:应用请求数据流长度S个字节所需的错误校正编码的位数<=B*8,则需满足公式:
经运算后得到:
(S*k)/n<=B或者n/k>=S/B
(公式2)
根据公式2可以看到,从性能最大化角度考虑,必须使得选择ECC算法的数据宽度位数与ECC编码位数之比大于等于应用请求数据流长度与DRAM猝发长度之比,容易理解的是,n/k比值越大,数据保护的粒度越大,数据越不安全,但所需的ECC编码位数存储空间越小;n/k越小,保护的数据粒度越小,数据越安全,但是所需的ECC编码位数存储空间也更大。
选择已有的ECC保护方案中满足要求的任何一个,从而得到错误校正编码方案,进一步地,基于错误校正编码方案,就可以确定所述存储器的一个所述猝发长度所对应的错误校正编码位。
在一种具体实施方式中,为了更好地选择错误校正编码方案,所述根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定错误校正编码方案的步骤可以包括:
根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述应用请求数据流长度对应的所述错误校正编码的编码猝发个数,获取所述存储器的可选错误校正编码方案;
获取应用请求数据流长度对应的所述错误校正编码的编码猝发中的空闲位数;
根据所述空闲位数,从所述可选错误校正编码方案中确定所述错误校正编码方案。
如前所述,根据公式2可以获取可选错误校正编码方案,在此不再赘述。
当然,如果根据公式2不能获得可选错误校正编码方案,则可以调整应用请求数据流长度S的大小来最终获取可选错误校正编码方案。
获取了可选错误校正编码方案之后,可以进一步的获取应用请求数据流长度对应的所述错误校正编码的编码猝发中的空闲位数,方法如下:
设一个猝发数据B*8位需要K位ECC来保护,如果数据宽度位数n位需要ECC编码位数k位来保护,则K:
K=((B*8)*k)/n
(公式3)
当应用请求数据流长度S个字节所对应的所有的错误校正编码最好落在一个DRAM的猝发长度B中时,即N*K<=B*8时,一个猝发错误校正编码(ECC)中最后的W位是空闲的,空闲位数W可以由公式4计算得到:
W=B*8-N*K
(公式4)
根据公式2可以获取了可选错误校正编码方案之后,可以进一步根据所获取的空闲位数,从所述可选错误校正编码方案中确定错误校正编码方案。
在可选错误校正编码方案中确定错误校正编码方案时,本申请实施例并不限制错误校正编码方案的选择,可以根据性能、存储空间以及数据稳定性等选择最适合的一种错误校正编码方案,也可以根据其它的实际需求选择一种或多种错误校正编码方案,在动态随机存储器做好硬件准备的前提下,可以实施所选择的多种错误校正编码方案。
以下本申请都以选择最适合的一种错误校正编码方案作为具体的实施例进行说明。
可见,在错误校正编码位数确定的过程中,需先确定可选的错误校正编码方案,在可选的错误校正编码方案中根据不同的需要确定错误校正编码方案,此时,确定的错误校正编码方案可以为最适合存储器的错误校正编码保护方案,也可以为根据其它实际需要确定的错误校正编码保护方案,从而可以保证错误校正编码保护方案对存储器的通用性,并且提高错误校正编码保护方案选择的灵活性。
进一步的,在灵活确定的错误校正编码保护方案的基础上获取到的存储器的一个猝发长度所对应的错误校正编码位数,也是存储器最适合的错误校正编码位数。
容易理解的是,本文所述的步骤S41和步骤S42没有严格的顺序要求,在另一实施方式中,可以获取一个猝发长度所对应的错误校正编码位数,再确定数据流猝发个数。
步骤S43:根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址。
在获取了数据流猝发个数后,可以接着获取错误校正编码所保护数据的数据区域地址。
在一种具体实施方式中,为了获取所述错误校正编码所保护数据的数据区域地址,所述根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址的步骤可以包括:
根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述错误校正编码所保护数据的可选数据区域地址;
根据所述数据列结束地址及所述可选数据区域地址获取所述错误校正编码所保护数据的数据区域地址。
这样,通过首先确定错误校正编码所保护数据的可选数据区域地址,然后基于预先设置的数据列结束地址和可选数据区域地址进一步获取错误校正编码所保护数据的数据区域地址,可以使得所得到的数据区域地址,既满足错误校正编码保护的要求,也满足预设的数据列结束地址的要求。
具体地,为了获取错误校正编码所保护数据的可选数据区域地址,可以通过以下步骤实现:
获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和;
根据所述向下整数和所述数据流猝发个数获取所述可选数据区域地址的最大列地址,得到所述可选数据区域地址。
由上文可知,将S个字节按照DRAM的猝发长度B字节均匀切分,则S字节的猝发个数为N个,在访问最大化的情况下,应用请求数据流S字节所对应的所有错误校正编码(ECC)最好落在一个存储器的猝发长度B中,即错误校正编码(ECC)的编码猝发个数为1个,因此,N个猝发数据和一个猝发ECC形成了一个数据+ECC组,而多个这样的数据+ECC组形成了一系列的逻辑组合数据-ECC流。
为方便理解,请继续参考图5,图5中的(2)选择ECC算法并做数据与ECC映射中可以看出,应用请求数据流S根据DRAM的猝发长度B被切分成了N个猝发数据,应用请求数据流S个字节所对应的所有的错误校正编码落在一个猝发ECC中,每个猝发数据对应K位的错误校正编码(ECC),因此,一个猝发ECC中有W位是空闲的;图5中的(2)中也可以看出,N个猝发数据和一个猝发ECC形成了一个数据+ECC组。
图5的(3)中可以看出,多个这样的数据+ECC组形成了一系列的逻辑组合数据-ECC流。
在一种具体的实施例中,获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和,可以具体为根据DRAM行的宽度,确定一个DRAM行上可以容纳数据+ECC组的最大个数G(即向下整数),具体的计算公式为:
G=RD{2c/(N+1)}
(公式5)
其中G即为得到的向下整数,RD表示向下取整,N+1为猝发个数,表示N个数据流猝发+1个编码猝发。
在一种具体的实施例中,可以按照以下的方式将G组数据+ECC映射到一个DRAM行上:
1、从列地址0开始,依次递增分别映射组0,组1....组G-1的数据,这些组数据的索引成为组地址。
2、从列地址2c-1开始,依次递减映射组0,组1....组G-1的ECC。
请参考图5,如图5中(4)所示,G组数据+ECC按照上述方式被映射到一个DRAM行上。
请继续参考图5,如图5中的标识(5)所示,可以看出一个DRAM行中存储区域的划分:映射数据组的低地址部分为可选的错误校正编码所保护数据的数据区域(ECC保护数据区域),映射ECC组的高地址部分为可选的错误校正编码的编码区域(ECC区域),剩余部分(如有的话)为非错误校正编码保护数据区域(非ECC保护数据区域)。
在一种具体的实施例中,根据所述向下整数和所述数据流猝发个数获取所述可选数据区域地址的最大列地址,得到所述可选数据区域地址,可以具体为:
最大列地址为:
G*N-1
其中,G为向下整数,N为数据流猝发个数。
可选的错误校正编码所保护数据的数据区域的列地址范围为:
[0,G*N-1]
(公式6)
根据上述步骤,可以方便准确地得到可选数据区域地址的最大列地址,得到可选数据区域地址,为方便进一步地在这个范围内根据实际需要,基于数据列结束地址得到所需的错误校正编码所保护数据的数据区域地址提供基础,从而能够使得最终得到的数据区域地址满足错误校正编码保护的需要,同时也满足设置要求。
容易理解的是,所述根据所述数据列结束地址及所述可选数据区域地址获取所述错误校正编码所保护数据的数据区域地址的步骤可以包括:
获取所述数据列结束地址及所述可选数据区域地址的最大列地址的最小值,得到所述错误校正编码所保护数据的数据区域地址。
在一种具体的实施例中,也可以根据实际需求,利用预先设置的错误校正编码所保护数据的数据列结束地址CE来减小ECC保护数据区域,具体的做法为:获取数据列结束地址及可选数据区域地址的最大列地址的最小值:
MIN{G*N-1,CE}
最终,得到的实际的错误校正编码所保护数据的数据区域的数据区域地址范围为:
[0,MIN{G*N-1,CE}]
(公式7)
容易理解的是,由于数据区域地址与编码区域地址相互对应,当利用预先设置的错误校正编码所保护数据的数据列结束地址CE来调整错误校正编码所保护数据的可选数据区域地址之后,相应地错误校正编码的编码区域地址的范围也会减小,而非ECC保护数据区域则会向两端增大,以保证其地址空间的连续性。
根据上述步骤,可以实现对实际的错误校正编码所保护数据的数据区域的列地址范围的灵活调整,以满足实际应用需求。
可见,通过首先获取可选的错误校正编码所保护数据的数据区域的列地址范围,然后再根据实际需求,结合预先设置的错误校正编码所保护数据的数据列结束地址CE来获取实际的错误校正编码所保护数据的数据区域的列地址范围,不仅可以实现对实际的错误校正编码所保护数据的数据区域的列地址范围的灵活调整,以满足实际应用需求,而且可以使得所得到的数据区域地址,既满足错误校正编码保护的要求,也满足预设的数据列结束地址的要求。
步骤S44:根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
容易理解的是,根据预定的错误校正编码的编码区域地址确定规则,确定编码区域地址的第一端编码列地址,可以确定所述存储器的最大存储器列数为所述编码区域地址的第一端编码列地址,也可以采用其它预定的方案来确定第一端编码列地址,比如:确定前述数据区域地址后的某一地址为第一端编码列地址,本申请实施例并不限制第一端编码列地址的确定方法。
得到第一端编码列地址后,进一步根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
容易理解的是,步骤S43和步骤S44的具体执行顺序可以根据需要调整。
在一种具体实施方式中,为了方便编码区域地址的获取,根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址的步骤可以包括:
根据预定的所述错误校正编码的编码区域地址确定规则,确定所述存储器的最大存储器列数为所述编码区域地址的第一端编码列地址;
结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述编码区域地址的可选第二端编码列地址;
结合所述第一端编码列地址,根据所述数据列结束地址及所述可选第二端编码列地址获取所述第二端编码列地址,得到所述编码区域地址。
为方便描述,本申请下面都以确定存储器的最大存储器列数为编码区域地址的第一端编码列地址为具体的实施例进行说明,此时,第一端编码列地址为:2c-1。
将第一端编码列地址确定为存储器的最大存储器列数,可以很方便地进行后续的编码区域地址的计算,同时,还方便进行数据存取时的换算,减小运算量,降低运算功耗。
具体地,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述编码区域地址的可选第二端编码列地址的步骤可以包括:
获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和;
结合所述第一端编码列地址,根据所述向下整数和所述存储器列数获取所述编码区域地址的可选第二端编码列地址。
由上文中可知,在一种具体的实施例中,获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和,可以具体为根据DRAM行的宽度,确定一个DRAM行上可以容纳数据+ECC组的最大个数G,具体的计算公式为:
G=RD{2c/(N+1)}
(公式5)
根据向下整数G及存储器列数获取所述编码区域地址的可选第二端编码列地址为:
2c-G
此时,可选的错误校正编码的编码区域为:
[2c-G,2c-1]
(公式8)
根据上述步骤,可以很直接简单地得到可选的错误校正编码的编码区域地址的列地址范围,可以在这个范围内根据实际需要,根据数据列结束地址得到所需的错误校正编码的编码区域地址。
所述结合所述第一端编码列地址,根据所述数据列结束地址及所述可选第二端编码列地址获取所述第二端编码列地址,得到所述编码区域地址的步骤包括:
根据所述数据列结束地址、所述数据流猝发个数、所述存储器列数获取可选第二端编码列结束地址;
获取所述可选第二端编码列地址及所述可选第二端编码列结束地址二者中的最大值,得到所述第二端编码列地址;
结合所述第一端编码列地址及所述第二端编码列地址,得到所述编码区域地址。
在一种具体的实施例中,也可以根据实际需求,利用预先设置的错误校正编码所保护数据的数据列结束地址CE来获取错误校正编码的实际需要的可选第二端编码列结束地址,具体为:
2c-((CE+1)/N)
然后,获取所述可选第二端编码列地址及所述可选第二端编码列结束地址二者中的最大值,得到所述第二端编码列地址,第二端编码列地址为:
MAX{2c-G,2c-((CE+1)/N)}
最后,结合第一端编码列地址及第二端编码列地址,得到所述编码区域地址,最终得到的实际的错误校正编码的编码区域地址的列地址范围为:
[MAX{2c-G,2c-((CE+1)/N)},2c-1]
(公式9)
根据上述步骤,可以很方便地实现对实际的错误校正编码的编码区域地址的列地址范围的获取。
可见,通过首先获取可选的错误校正编码的编码区域地址的列地址范围,然后再根据实际需求,利用预先设置的错误校正编码所保护数据的数据列结束地址CE来获取实际的错误校正编码的编码区域地址的列地址范围,可以实现对实际的错误校正编码的编码区域地址的列地址范围的灵活调整,以满足实际应用需求,而且可以使得所得到的编码区域地址,既满足错误校正编码保护的要求,也满足预设的数据列结束地址的要求。
请继续参考图5,如图5中(6)配置ECC保护行所示,经过DRAM行中存储区域的划分,可以得到DRAM存储区域中ECC保护数据区域、ECC区域及非ECC保护数据区域。
步骤S45:调整所述应用请求数据流长度。
当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,无法确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时,则可以调整所述应用请求数据流长度,根据调整后的应用请求数据流长度确定所述存储器的一个所述猝发长度所对应的错误校正编码位数。
当然,也可以根据调整后的应用请求数据流长度确定传输所述应用请求数据流所需的猝发个数。
可见,本申请实施例提供的存储区域的设置方法,首先根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数,然后根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址,而数据列结束地址是根据实际需要确定的,可见,数据区域地址是可以根据实际需要灵活改变的;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址,可见在数据区域地址可以根据实际需要灵活改变的基础上,错误校正编码的编码区域地址也可以根据预定的所述错误校正编码的编码区域地址确定规则、数据列结束地址做出相应的改变,此时,获取到的编码区域地址和数据区域地址可以是错误校正编码保护方案所对应的完整的编码区域地址和数据区域地址,也可以是根据预定的数据列结束地址自定义的编码区域地址和数据区域地址,提高了错误校正编码(ECC)保护区域确定的灵活性,以达到最大化利用存储空间、减少损耗、提高性能的目的,因此,本申请实施例提供的存储区域的设置方法,可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性。
当然,在其它的实施例中,也可以根据需要,采用其它的DRAM行存储区域的划分方法,本申请并不限制DRAM行存储区域的划分方法,采用其它的划分方法后,也可以相应得到DRAM行存储区的地址范围。
为清楚的理解上述步骤,现举例说明:
假设选择的DRAM为GDDR6(B=32字节,c=7),存储器列数:2c=128列,系统中应用请求连续数据流S大小为256字节,实际选择数据列结束地址CE为63,可以得到:
1、根据公式1:N=S/B=256/32=8
2、根据公式2:选择ECC算法满足(256*k)/n<=32,即n/k>=8,因此选择的ECC算法必须满足数据宽度位数是编码位数的8倍及其以上。从表1可以看到,除了SEC-32/6和SECDED-32/7以外,表1中其它算法都满足,由表可知,获取的可选的保护方案为:SEC-128/8、SECDED-128/9及SECDED-64/8。
下面是选择几种算法时,对应的W值:
3、根据公式4:
(1)、SEC-128/8:
W=B*8–N*K=256–8*16=128
其中16为:SEC-128/8算法中128位需要8位ECC保护位,B*8=256位需要16位ECC保护位(下同),计算结果为一个猝发ECC中有128位是闲置的,这种情况下这128位可以用作下一个连续流数据的ECC。
(2)、SECDED-128/9:W=B*8–N*K=256–8*18=112
计算结果为一个猝发ECC中有112位是闲置的,这种情况下这112位不能再用作下一个连续流数据的ECC(小于N*K位),因此会造成浪费。
(3)、SECDED-64/8:W=B*8–N*K=256–8*32=0,
计算结果为一个猝发ECC刚好匹配256字节的连续数据流,没有任何位是闲置的。
在一种具体的实施例中,第(3)种情况中一个猝发ECC刚好匹配256字节的连续数据流,没有任何位是闲置的,可以认为是最理想的情况,因此,可以直接选择SECDED-64/8作为最适合的ECC保护方案。
而在另一种具体的实施方式中,也可以根据实际需求,在可选的保护方案同时选择1种或几种保护方案,这样,设置相应的硬件,就可以使得硬件能够同时满足所选择的1种或几种保护方案,在实际使用时,基于需要进行选择即可。
4、根据公式5,G=RD{2c/(N+1)}=128/(8+1)=14
5、根据公式6,可选的错误校正编码所保护数据的数据区域的列地址范围为[0,111]。
6、根据公式8,可选的错误校正编码的编码区域列地址为[114,127]。
7、剩余的列地址范围[112,113]为非ECC保护数据区域。
8、实际选择数据列结束地址CE为63,因此根据公式7及公式9,实际的错误校正编码所保护数据的数据区域的列地址范围为[0,63],实际的错误校正编码的编码区域列地址范围为[120,127]。
当根据本申请提供的存储区域的设置方法完成存储器的存储区域设置之后,当利用对应的存储器进行数据读取时,为了实现对于数据以及与数据对应的错误校正编码的读取,本申请还提供一种数据读取方法,请参考图6,图6为本申请实施例提供的数据读取方法一流程示意图。
以下仍以动态随机存储器DRAM作为具体实施例进行说明。
如图6所示,本申请实施例所提供的数据读取方法包括:
步骤S60:获取数据读取命令。
当根据本申请提供的存储区域的设置方法完成存储器的存储区域设置之后,在实际执行本申请提供的数据读取方法时,同样首先获取数据读取命令,容易理解的是,数据读取命令中,包含读数据地址。
步骤S61:根据所述数据读取命令中的读数据地址,确定所述读数据地址是否位于错误校正编码所保护数据的数据区域地址中,如果是,则执行步骤S63,如果否,则执行步骤S62。
容易理解的是,本文所述的数据区域地址即为前述任意实施例所述的存储区域的设置方法的数据区域地址。
根据数据读取命令获取读数据地址,当然,读数据地址可以包括读数据块地址、读数据行地址及所述读数据列地址,这样,可以根据读数据地址获取到所对应数据读取命令中的猝发读数据,也可以根据读数据地址获取到猝发读数据对应的读取错误校正编码,以完成对猝发读数据的校验和校正。
步骤S62:根据所述数据读取命令获取并发送猝发读数据。
当根据所述数据读取命令中的读数据地址,确定所述读数据地址不在前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,即所需要读取的数据并非利用错误校正编码保护的数据,那么可以直接根据所述数据读取命令获取并发送猝发读数据,从而,可以实现对于未利用错误校正编码保护的数据的读取。
如上文中所述,本申请实施例所提供的存储区域的设置方法只从逻辑上区分错误校正编码所保护数据的数据区域和错误校正编码的编码区域,但是物理上完全一致,因此,根据本申请实施例所提供的数据读取方法所获取到的数据读取命令中的读数据地址,既可以位于错误校正编码所保护数据的数据区域地址中,也可以不在错误校正编码所保护数据的数据区域地址中,当不在错误校正编码所保护数据的数据区域地址中时,可以根据所述数据读取命令获取并发送猝发读数据,不再进行猝发读数据的校验和校正。
可见,如果读数据地址不在错误校正编码所保护数据的数据区域地址中时,利用本申请实施例提供的数据读取方法也可以执行数据读取命令。
步骤S63:根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和预先获取的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码。
当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码。
根据所述读数据地址获取所述数据读取命令的猝发读数据时,将数据读取命令发送至DRAM,获取到对应的猝发读数据后,猝发读数据被送入错误校正编码控制器中等待校验、校正。
在一种具体实施方式中,可以利用存储器控制器中的错误校正编码控制器903(示于图9中)控制数据选择器MUX9090(示于图9中),选择数据读取命令送到存储器接口控制器904(示于图9中)并通过存储器接口发往外部存储器(DRAM)。
根据所述读数据地址获取所述数据读取命令的猝发读数据的同时,根据所述读数据地址和预先获取的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码。
具体地,错误校正编码位数可以是在进行存储区域的设置的过程中确定并存储的,在进行数据读取时,直接获取即可。
为了降低读取错误校正编码在片外DRAM中的读写次数,在一种具体的实施方式中,本申请实施例所提供的数据读取方法,错误校正编码还可以存储于错误校正编码缓存器(ECC Cache)中,错误校正编码缓存器(ECC Cache)的实现方式跟普通的缓存(Cache)一样,Cache的关联度可以根据性能和面积的需求设置,本申请不做任何限制,Cache深度越深,能缓存的数据越多,对性能越好。
请参考图7,图7为本申请实施例提供的错误校正编码缓存器的缓存行结构,由图7中可知,错误校正编码缓存器中的每一缓存行由缓存标记(Cache标记)和缓存数据(Cache数据)。其中,缓存标记(Cache标记)由块地址Ba、行地址Ra、组地址Ga构成,其中,块地址和行地址的宽度由动态随机存储器DRAM的大小决定,分别为DRAM的块地址位数b,行地址位数r,组地址g的宽度由上述公式5的参数G决定,由下面公式计算得到:
g=RU{log2(G)}
(公式10)
其中:RU表示向上取整。
因此,CacheTag的宽度为b+r+g。
缓存中用于存放错误校正编码(ECC),位宽等于DRAM的一个猝发长度B*8,由上述公式3、4可知,若N*K小于等于B*8时,缓存行中有W位是闲置的,有效的ECC数据有N*K位,K0~KN-1分别对应0~N-1个猝发数据的ECC。
这样,在获取与所述猝发读数据对应的读取错误校正编码时,可以通过以下步骤实现:
根据所述读数据地址的所述读数据列地址获取读数据组地址;
当根据所述读数据块地址、所述读数据行地址及所述读数据组地址确定所述读取错误校正编码在所述错误校正编码缓存器中命中时,根据所述读数据列地址和所述错误校正编码位数,从所述错误校正编码缓存器中获取所述读取错误校正编码。
由上文中可知,读数据地址包括读数据块地址Ba、读数据行地址Ra及读数据列地址Ca,首先根据读数据列地址Ca获取读数据组地址Ga:
Ga=Ca>>log2N
(公式11)
公式11表示列地址通过二进制表示后,向右移动log2N位后,得到读数据组地址Ga的二进制表示。
当然,容易理解的是,基于读数据地址的设置方式的不同,具体运算方式会有不同。
在获取了读数据组地址Ga之后,根据所述读数据块地址Ba、所述读数据行地址Ra及所述读数据组地址Ga确定所述读取错误校正编码在错误校正编码缓存器中是否命中,如果命中,则根据读数据列地址和错误校正编码位数,错误校正编码控制器从错误校正编码缓存器缓存行中获取对应的K位读取错误校正编码并保存,可以根据下面公式确定缓存行中对应的K位读取错误校正编码的范围:
Ca[((log2N)-1):0]*K~(Ca[((log2N)-1):0]+1)*K-1
(公式12)
公式12中:Ca[M:N]表示Ca的第N到第M位代表的十进制值,比如Ca[2:0]表示Ca的第0位到第2位代表的十进制值。
可见,通过设置错误校正编码缓存器,根据数据读取命令中的读数据地址,如果在错误校正编码缓存器中命中,则可以直接读取相应的K位读取错误校正编码,而不必到片外DRAM中读取相应的K位读取错误校正编码,这样可以减少片外DRAM中ECC读取的次数,降低系统性能损耗。
当然,除了命中的情况,根据所述读数据地址和错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码的步骤,还可以包括:
当根据所述读数据块地址、所述读数据行地址及所述读数据组地址确定所述读取错误校正编码在所述错误校正编码缓存器中未命中时,根据所述读数据组地址以及所述读数据组地址与所对应的读取错误校正编码的读数据编码列地址的关系,获取所述读数据编码列地址;
根据所述读数据块地址、读数据行地址及所述读数据编码列地址生成读取错误校正编码组读取命令,根据所述读取错误校正编码组读取命令获取读取错误校正编码组;
根据所述读数据列地址、所述错误校正编码位数及所述读取错误校正编码组获取所述读取错误校正编码。
当根据所述读数据块地址、所述读数据行地址及所述读数据组地址确定所述读取错误校正编码在所述错误校正编码缓存器中未命中时,读数据组地址与所对应的读取错误校正编码的读数据编码列地址的关系可以通过下面公式表示:
Caecc=~Ga
(公式13)
公式13中:~Ga表示对Ga按位取反。
容易理解的是,读数据组地址与所对应的读取错误校正编码的读数据编码列地址的关系可以通过上述取反公式获取,是由于读数据编码列地址是从最高位开始存储,使得读数据组地址与所对应的读取错误校正编码的读数据编码列地址之间具有取反的位置关系。当存储方式改变时,具体的计算方式也会改变,计算方式可以根据具体的存储方式确定,在此不再赘述。
通过公式13,可以得到读数据编码列地址Caecc,错误校正编码控制器根据读数据块地址Ba、读数据行地址Ra及读数据编码列地址Caecc生成读取错误校正编码组读取命令,从DRAM中获取读取错误校正编码组,获取到的读取错误校正编码组中包含了DRAM的一个猝发长度B*8中所有N*K位错误校正编码数据,此时,可以根据所述读数据列地址、所述错误校正编码位数及所述读取错误校正编码组获取所述读取错误校正编码,即根据上述公式12,确定读取错误校正编码组中对应的K位读取错误校正编码的范围,从而获取到对应的K位读取错误校正编码。
具体地,请参考图9,可以利用错误校正编码控制器903控制数据选择器MUX9090发出准备好的读取错误校正编码组读取命令,从外部存储器(DRAM)中获取读取错误校正编码组。
当然,在错误校正编码控制器903生成读取错误校正编码组读取命令的同时也会通知命令调度器908暂停调度新的命令,当错误校正编码控制器903根据读取错误校正编码组读取命令获取到读取错误校正编码组之后,错误校正编码控制器903会通知命令调度器908重新开始调度新的命令。
通过上述步骤,本申请实施例提供的数据读取方法,在错误校正编码缓存器中未命中时也可以从外部DRAM中获取到相应的读取错误校正编码,以保证对猝发读数据的校验与校正。
当然,为了提高后续的处理效率,对于错误校正编码在错误校正编码缓存器中未命中的情况,获取到所述读取错误校正编码的步骤之后,还可以包括:
将所述读取错误校正编码组写入所述错误校正编码缓存器中。
这样可以使得后续的数据读取命令到来的时候,可以直接在错误校正编码缓存器中获取到相应的读取错误校正编码,而不必再访问片外DRAM,提高了数据读取的效率。
为了保证读取错误校正编码组的写入,在一种具体实施方式中,本申请实施例所提供的数据读取方法的所述读取错误校正编码组写入所述错误校正编码缓存器中的步骤,可以包括:
当所述错误校正编码缓存器未写满时,为所述读取错误校正编码组分配读取空闲缓存行,将所述读取错误校正编码组写入分配的所述读取空闲缓存行;
当所述错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定读取替换缓存行,将所述读取错误校正编码组写入所述读取替换缓存行。
当错误校正编码缓存器未写满时,为读取错误校正编码组分配读取空闲缓存行,将所述读取错误校正编码组写入分配的读取空闲缓存行中去,如果错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定读取替换缓存行,在一种具体的实施例中,预定的错误校正编码缓存器的替换原则可以为最近最少使用原则,在其他的实施例中,可以根据实际需要采用其它的替换原则,本申请对替换原则的使用不做特殊限制,确定了读取替换缓存行之后,将所述读取错误校正编码组写入所述读取替换缓存行。
错误校正编码缓存器缓存行的替换流程如下:
当错误校正编码缓存器已写满时,需要根据预定的错误校正编码缓存器的替换原则确定需要被替换的缓存行,被替换的缓存行确定之后,错误校正编码缓存器控制器会根据被替换的缓存行的块地址、行地址、组地址生成一个被替换缓存行写命令,根据被替换缓存行写命令将被替换缓存行中的数据写入片外DRAM中去,然后再为读取错误校正编码组分配读取替换缓存行,将所述读取错误校正编码组写入所述读取替换缓存行中。
经过上述步骤,可以保证在错误校正编码缓存器中所存储的数据都是根据预定的错误校正编码缓存器的替换原则所得到的满足实际需要的数据,提高了错误校正编码缓存器的利用率,同时也提高了数据读取的效率。
当然,在其他实施例中,也可以不设置错误校正编码缓存器,在此情况下,为了获取所述读取错误校正编码,可以直接根据所述读数据组地址以及所述读数据组地址与所对应的读取错误校正编码的读数据编码列地址的关系,获取所述读数据编码列地址;然后根据所述读数据块地址、读数据行地址及所述读数据编码列地址生成读取错误校正编码组读取命令,根据所述读取错误校正编码组读取命令获取读取错误校正编码组;根据所述读数据列地址、所述错误校正编码位数及所述读取错误校正编码组获取所述读取错误校正编码。
请继续参考图6,在根据上述步骤获取到了数据读取命令的猝发读数据以及猝发读数据对应的读取错误校正编码后,执行步骤S64,如果是则执行步骤S66,如果否则执行步骤S65。
步骤S64:利用所述读取错误校正编码校验对应的所述猝发读数据是否正确或者是否直接根据所述读取错误校正编码完成校正。
利用读取错误校正编码校验对应的猝发读数据,如果结果正确,或者发生可以校正的错误,对猝发读数据直接进行校正后,执行步骤S66;如果利用读取错误校正编码校验对应的猝发读数据,发生不可校正的错误时,执行步骤S65。
步骤S65:发送错误信息。
当利用读取错误校正编码校验对应的猝发读数据,发生不可校正的错误时,发送错误信息。
在一种具体实施方式中,请继续参考图9,错误校正编码控制器903会发送错误校正编码错误信息到配置寄存器902,配置寄存器902会保存该信息,并根据预定的规则,可选的产生中断信息发送到系统总线。
这样,本申请提供的数据读取方法在猝发读数据发生不可校正的错误时也可通过发送错误信息保证数据读取流程的完成。
步骤S66:返回所述猝发读数据。
当利用读取错误校正编码校验对应的猝发读数据,结果正确,或者发生可以校正的错误,对猝发读数据直接进行校正后,错误校正编码控制器将正确的猝发读数据返回到读数据缓存中去,读数据缓存按照预定的规则将猝发读数据返回给系统总线接口控制器。
可见,在本申请实施例提供的存储区域的设置方法的基础上,可以实现本申请提供的数据读取方法,并且,无论猝发数据是否在错误校正编码所保护数据的数据区域,本申请提供的数据读取方法都可以保证完成数据读取流程,并且错误校正编码所需的数据接口无需增加或占用特殊的信号线,完全兼容已有的系统功能和设计,无需增加额外的DRAM存储空间即可同时覆盖DRAM接口链路和DRAM存储单元产生的软错误。
错误校正编码缓存器的引入优化了DRAM读写的次数,降低了系统损耗、提高了系统性能。
为清楚的理解上述步骤,现举例说明:
假设选取的DRAM为8块(bank)-16384行-128列,其中:BA=8’b00001010,RS=1024,RE=2047,CE=111,B=32字节,c=7;系统中应用请求数据流S大小为256字节,选择SECDED-64/8作为ECC保护方案。
BA=8’b00001010,RS=1024,RE=2047,CE=111表示第1块和第3块的第1024行至2047行中0至111列属于ECC所保护数据的数据区域,根据上述例子计算可知,实际的错误校正编码所保护数据的数据区域的列地址范围为[0,111],实际的错误校正编码的编码区域列地址范围为[114,127],剩余区域为非错误校正编码(ECC)保护数据区域。
1、由于B=32字节,系统中应用请求数据流S大小为256字节,
根据公式1:N=S/B=256/32=8
因此,则S字节的猝发个数为8个。
2、根据公式5:G=RD{2c/(N+1)}
G=RD{2c/(N+1)}=RD{27/(8+1)}=14
因此,可以确定一个DRAM行上可以容纳数据+ECC组的最大个数G为0-13共14组。
请参考表2,表2为14组在一个DRAM保护行的列地址划分示意。
表2:14组在一个DRAM保护行的列地址划分示意
3、假设收到的数据读取命令中的读数据地址为第1块,第1024行,第5列,则读数据地址位于本申请前述实施例的存储区域的设置方法的保护数据区域地址中,可以根据公式11计算组地址:
公式11:Ga=Ca>>log2N
由于c=7,因此第5列Ca=0000101,根据公式11,N=8,向右移3位为:Ga=0000000,表示Ga为第0组。
4、将第1块、第1024行、组地址Ga=0000000送入嵌入式错误校正编码缓存器查找,如果命中,则根据公式12读取返回嵌入式错误校正编码缓存器中缓存行对应的K位ECC并保存,公式12为:
Ca[((log2N)-1):0]*K~(Ca[((log2N)-1):0]+1)*K-1
设一个猝发数据需要K位ECC来保护,根据公式3:
K=((B*8)*k)/n
K=32*8*8/64=32
Ca[((log2N)-1):0]=Ca[(3-1):0]=Ca[2:0]
即为取Ca第0-2位代表的值,由Ca=0000101,第0-2位为101,10进制为5,那么K位ECC的取值范围为:
5*K~(5+1)*K-1=160~191
根据取值范围160~191,将该缓存行中的160~191比特位对应的ECC取出并保存。
5、将第1块、第1024行、组地址Ga=0000000送入嵌入式错误校正编码缓存器查找,如果未命中,则根据公式13计算Ga对应的列地址:
公式13:Caecc=~Ga
Ga=0000000,按位取反即为:
Caecc=1111111
换算成10进制为127列
根据第1块,第1024行,第127列取出DRAM中对应的读取错误校正编码组并返回,获取到的读取错误校正编码组中包含了DRAM的一个猝发长度B*8中所有N*K位错误校正编码数据。
6、获取到返回的第1块,第1024行,第127列的读取错误校正编码组后,因为第127列对应的是0-7组所有的错误校正编码,所以,再根据公式12算出返回的第127列中所需的ECC对应的比特位:
Ca[((log2N)-1):0]*K~(Ca[((log2N)-1):0]+1)*K-1
设一个猝发数据需要K位ECC来保护,根据公式3:
K=((B*8)*k)/n
K=32*8*8/64=32
Ca[((log2N)-1):0]=Ca[(3-1):0]=Ca[2:0]
即为取Ca第0-2位代表的值,由Ca=0000101,第0-2位为101,10进制为5,那么K位ECC的取值范围为:
5*K~(5+1)*K-1=160~191
根据取值范围160~191,将第127列的160~191比特位对应的ECC取出并保存。
7、根据数据读取命令中的读数据地址读取并返回数据读取命令的猝发读数据,利用获取到的相应的K位错误校正编码校验、校正猝发读数据,如果结果正确或直接根据读取错误校正编码完成校正时,返回猝发读数据,当利用读取错误校正编码校验对应的猝发读数据错误或者根据读取错误校正编码无法完成校正时,发送错误信息。
8、为返回的读取错误校正编码组在错误校正编码缓存器中分配新的缓存行,如果错误校正编码缓存器未写满,直接分配读取空闲缓存行,将读取错误校正编码组写入分配的读取空闲缓存行;当错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定读取替换缓存行,将所述读取错误校正编码组写入读取替换缓存行。
当然,当根据本申请提供的存储区域的设置方法完成存储器的存储区域设置之后,除了需要实现对于数据的读取,还要实现对于数据的存储,在此基础上,本申请还同时提供适于该存储区域的设置方法的数据写入方法,请参考图8,图8为本申请实施例提供的数据写入方法一流程示意图。以下仍以动态随机存储器DRAM作为具体实施例进行说明。
如图中所示,本申请实施例所提供的数据写入方法包括:
步骤S80:获取数据写入命令。
当根据本申请提供的存储区域的设置方法完成存储器的存储区域设置之后,在实际执行本申请提供的数据写入方法时,首先获取数据写入命令,该数据写入命令中,包含了写数据地址,当然也包含要写入的数据。
步骤S81:根据所述数据写入命令中的写数据地址,确定所述写数据地址是否位于错误校正编码所保护数据的数据区域地址中,如果是,则执行步骤S83,如果否,则执行步骤S82。
当然,本文所述的数据区域地址即为前述任意实施例所述的存储区域的设置方法的数据区域地址。
根据数据写入命令获取写数据地址,所述写数据地址可以包括写数据块地址、写数据行地址及写数据列地址。从而,可以将数据写入命令中的猝发写数据写入到对应的写数据地址,也可以将数据写入命令中猝发写数据对应生成的错误校正编码写入到对应的写数据地址。
步骤S82:根据所述数据写入命令写入猝发写数据。
当根据所述数据写入命令中的写数据地址,确定所述写数据地址不在错误校正编码所保护数据的所述数据区域地址中时,则直接根据所述数据写入命令写入猝发写数据。
如上文中所述,本申请实施例所提供的存储区域的设置方法只从逻辑上区分错误校正编码所保护数据的数据区域和错误校正编码的编码区域,但是物理上完全一致,因此,根据本申请实施例所提供的数据写入方法所获取到的数据写入命令中的写数据地址,既可以位于错误校正编码所保护数据的数据区域地址中,也可以不在错误校正编码所保护数据的数据区域地址中,当不在错误校正编码所保护数据的数据区域地址中时,可以根据所述数据写入命令直接将猝发写数据写入数据写入命令中的写数据地址,并且不再根据猝发写数据生成对应的错误校正编码。
可见,如果写数据地址不在错误校正编码所保护数据的数据区域地址中时,利用本申请实施例提供的数据读取方法也可以执行数据写入命令。
步骤S83:根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和预先获取的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址。
容易理解的是,错误校正编码位数可以是在进行储区域的设置的过程中确定并存储的,在进行数据读取时,直接获取的。
当接收到数据写入命令和其对应的猝发写数据时,具体可以为当存储器(DRAM)控制器中错误校正编码控制器903(示于图9中)接收到来自命令调度器908(示于图9中)的一个数据写入命令和其对应的猝发写数据时,会根据猝发写数据计算对应的K位写入错误校正编码;同时根据所述写数据地址和预先存储的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址。
在一种具体实施方式中,所述写入错误校正编码适于存储于错误校正编码缓存器中;
根据所述写数据地址和预先存储的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址的步骤可以包括:
根据所述写数据列地址获取写数据组地址;
当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中命中时,根据所述写数据列地址和所述错误校正编码位数,在所述错误校正编码缓存器中获取所述写数据编码位地址;
所述将所述写入错误校正编码写入所述写数据编码位地址的步骤包括:
将所述写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址。
为了降低片外DRAM中的读写次数,在一种具体的实施方式中,本申请技术方案还可以提供错误校正编码缓存器(ECC Cache),用于存储错误校正编码,错误校正编码缓存器(ECC Cache)的实现方式跟普通的缓存(Cache)一样,Cache的关联度可以根据性能和面积的需求设置,本申请不做任何限制,Cache深度越深,能缓存的数据越多,对性能越好。因此,所述写入错误校正编码还适于存储于错误校正编码缓存器中。
具体错误校正编码缓存器的缓存行结构可以参考图7,在此不再赘述,在获取写数据编码位地址时,对于本申请实施例所提供的数据区域地址和编码区域地址的关系,首先,将写数据列地址Ca按照上述公式11转换成写数据组地址Ga,然后根据写数据块地址、写数据行地址及写数据组地址在错误校正编码缓存器中查找,如果在错误校正编码缓存器中命中,则根据上述公式12,计算出在错误校正编码缓存器的缓存行中的K位错误校正编码所对应的写数据编码位地址,公式11及公式12的详情请参考上文具体介绍,此处不再赘述。
当然,在其他实施例中,可以根据其他公式获取写数据编码位地址。
在另一种具体实施方式中,在不设置错误校正编码缓存器时,可以直接根据上述公式获取写数据编码位地址,并且可以根据所述写数据组地址以及所述写数据组地址与所对应的写入错误校正编码的写数据编码列地址的关系,获取所述写数据编码列地址;然后根据所述写数据块地址、写数据行地址及所述写数据编码列地址、写数据编码位地址生成相应的写入命令,根据所述写入命令将写入错误校正编码写入相应的写数据编码位地址中。
步骤S84:将所述写入错误校正编码写入所述写数据编码位地址。
得到写入错误校正编码和写数据编码位地址后,将写入错误校正编码写入写数据编码位地址。
容易理解的是,在设置错误校正编码缓存器时,将所述写入错误校正编码写入所述写数据编码位地址的步骤,可以包括:
将所述写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址。
这样,当确定写数据块地址、写数据行地址及写数据组地址在错误校正编码缓存器中命中时,可以通过计算获取写数据编码位地址,然后将写入错误校正编码写入写数据编码位地址,这样可以减少片外DRAM的访问次数,降低系统性能损耗。
在将所述写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址的步骤之后,还可以包括:
当所述错误校正编码缓存器的缓存行写满时,将所述缓存行写入到所述数据写入命令中的写数据地址所对应的前述任一实施例所述的存储区域的设置方法的所述编码区域地址的写数据编码列地址中。
将写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址的步骤之后,如果根据公式12,即:
Ca[((log2N)-1):0]
计算得到的值等于N-1,表示该写入错误校正编码已经是组内的最后一个猝发数据,即写入错误校正编码所在错误校正编码缓存器的缓存行已经写满,当缓存行已经写满时,在缓存行保存数据的同时,需要将写满的缓存行写入到所述数据写入命令中的写数据地址所对应的如前述任一实施例所述的存储区域的设置方法的所述编码区域地址的写数据编码列地址中。
写入的方法包括错误校正编码会生成一个写入错误校正编码组写入命令,写入错误校正编码组写入命令中的写入块地址和写入行地址由缓存标记中块地址、行地址获取,写入列地址根据缓存标记中组地址根据公式13计算得到,所包含的数据就是缓存行中所包含的数据,错误校正编码控制器会控制数据选择器发送写入错误校正编码组写入命令,将写满的缓存行写入到所述数据写入命令中的写数据地址所对应的如前述任一实施例所述的存储区域的设置方法的所述编码区域地址的写数据编码列地址中。
这样,错误校正编码缓存器的缓存行已经写满时,可以同时将缓存行的数据保存在错误校正编码缓存器及片外DRAM中,在提高数据读取效率的同时,也保证了数据的安全性。
进一步地,为了更全面地实现保护,当设置错误校正编码缓存器时,根据所述写数据地址和预先存储的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址的步骤还可以包括:
根据所述写数据列地址获取写数据组地址;
当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中未命中、且所述数据写入命令为所述写数据块地址、所述写数据行地址及所述写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,在所述错误校正编码缓存器中为所述写入错误校正编码分配写入缓存行,将所述写入错误校正编码写入所述写入缓存行。
根据数据写入命令的猝发写数据计算写入错误校正编码之后,将写数据列地址Ca按照上述公式11转换成写数据组地址Ga后,根据写数据块地址、写数据行地址及写数据组地址在错误校正编码缓存器中查找,如果在错误校正编码缓存器中未命中时,若根据公式12:
Ca[((log2N)-1):0]
计算得到的值等于0,表示数据写入命令是错误校正编码缓存器的缓存行的第一个猝发命令,错误校正编码控制器会根据写数据块地址、写数据行地址及写数据组地址在错误校正编码缓存器为写入错误校正编码分配一个写入缓存行,并直接将计算得到的写入错误校正编码写入到由公式12计算得到的写入缓存行中的位置范围内。
这样,当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中未命中、且所述数据写入命令为所述写数据块地址、所述写数据行地址及所述写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,直接在错误校正编码缓存器为写入错误校正编码分配一个写入缓存行,可以使数据写入方法的执行流程变得更加简单,同时也可以减少片外DRAM的访问次数,降低系统性能损耗。
具体地,基于不同的情况,在所述错误校正编码缓存器中,为所述写入错误校正编码分配写入缓存行的步骤可以包括:
当所述错误校正编码缓存器未写满时,为所述写入错误校正编码分配所述写入空闲缓存行,所述写入空闲缓存行即为所述写入缓存行;
当所述错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定写入替换缓存行,为所述写入错误校正编码分配所述写入替换缓存行,所述写入替换缓存行即为所述写入缓存行。
当错误校正编码缓存器未写满时,为写入错误校正编码分配写入空闲缓存行,此时,写入空闲缓存行即为写入缓存行;当错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定写入替换缓存行,在一种具体的实施例中,预定的错误校正编码缓存器的替换原则可以为最近最少使用原则,在其他的实施例中,可以根据实际需要采用其它的替换原则,本申请对替换原则的使用不做特殊限制,确定了写入替换缓存行之后,为写入错误校正编码分配写入替换缓存行,此时,写入替换缓存行即为写入缓存行。
错误校正编码缓存器缓存行的替换流程如下:
当错误校正编码缓存器已写满时,需要根据预定的错误校正编码缓存器的替换原则确定需要被替换的缓存行,被替换的缓存行确定之后,错误校正编码缓存器控制器会根据被替换的缓存行的块地址、行地址、组地址生成一个被替换缓存行写命令,根据被替换缓存行写命令将被替换缓存行中的数据写入片外DRAM中去,然后再为写入错误校正编码分配写入替换缓存行,此时,写入替换缓存行即为写入缓存行,将写入错误校正编码写入所述写入缓存行中。
经过上述步骤,可以保证在错误校正编码缓存器中所存储的数据都是根据预定的错误校正编码缓存器的替换原则所得到的满足实际需要的数据,提高了错误校正编码缓存器的利用率,同时也提高了数据读取的效率。
在另一种具体实施方式中,本申请实施例所述的数据写入方法,所述写入错误校正编码存储于错误校正编码缓存器中时,所述根据所述写数据地址和预先存储的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址的步骤还可以包括:
根据所述写数据列地址获取写数据组地址;
当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中未命中、且所述数据写入命令不是所述写数据块地址、所述写数据行地址及所述写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,根据所述写数据组地址以及所述写数据组地址与所对应的写入错误校正编码的写数据编码列地址的关系,获取所述写数据编码列地址;
根据所述写数据块地址、写数据行地址及所述写数据编码列地址生成写入错误校正编码组读取命令,根据所述写入错误校正编码组读取命令获取写入错误校正编码组,将所述写入错误校正编码写入所述写入错误校正编码组;
在所述错误校正编码缓存器中为所述写入错误校正编码组分配所述写入缓存行,并将包括所述写入错误校正编码的写入错误校正编码组写入所述写入缓存行中。
根据数据写入命令的猝发写数据计算写入错误校正编码之后,将写数据列地址Ca按照上述公式11转换成写数据组地址Ga后,根据写数据块地址、写数据行地址及写数据组地址在错误校正编码缓存器中查找,如果在错误校正编码缓存器中未命中时,若根据公式12:
Ca[((log2N)-1):0]
计算得到的值不等于0,表示数据写入命令不是错误校正编码缓存器的缓存行的第一个猝发命令,此时,错误校正编码控制器根据写数据组地址以及所述写数据组地址与所对应的写入错误校正编码的写数据编码列地址的关系,获取写数据编码列地址,具体可以根据公式13获取到写数据编码列地址,然后错误校正编码控制器根据写数据块地址、写数据行地址及写数据编码列地址生成写入错误校正编码组读取命令,错误校正编码控制器控制数据选择器发送写入错误校正编码组读取命令到片外DRAM中,读取并返回写入错误校正编码组到错误校正编码控制器中,根据上述公式12,确定写入错误校正编码组中对应的K位写入错误校正编码的范围,将写入错误校正编码写入相应的K位写入错误校正编码组中。
为包含写入错误校正编码的写入错误校正编码组在错误校正编码缓存器中为写入错误校正编码组分配写入缓存行,并将包括所述写入错误校正编码的写入错误校正编码组写入所述写入缓存行中。
当然,包含写入错误校正编码的写入错误校正编码组所在的错误校正编码缓存器的缓存行已经写满时,在缓存行保存数据的同时,也会将写满的缓存行写入到所述数据写入命令中的写数据地址所对应的如前述任一实施例所述的存储区域的设置方法的所述编码区域地址的写数据编码列地址中去,具体过程请见上文中所述,此处不再赘述。
为写入错误校正编码组分配写入缓存行时,如果错误校正编码缓存器未写满时,为写入错误校正编码组分配写入空闲缓存行,此时,写入空闲缓存行即为写入缓存行;当错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定写入替换缓存行,此时,写入替换缓存行即为写入缓存行;具体过程请见上文中所述,此处不再赘述。
公式11、公式12、公式13的具体计算公式及计算过程请见上文中所述,此处不再赘述。
通过上述步骤,本申请实施例提供的数据写入方法,在错误校正编码缓存器中未命中且数据写入命令不是写数据块地址、所述写数据行地址及写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,可以从外部DRAM中获取到相应的写入错误校正编码组,将计算所得写入错误校正编码存入写入错误校正编码组中,并将写入错误校正编码组保存到错误校正编码缓存器的缓存行中,如果缓存行已写满,则根据预定的替换原则执行错误校正编码缓存器的替换流程,可以保证在错误校正编码缓存器中所存储的数据都是根据预定的错误校正编码缓存器的替换原则所得到的满足实际需要的数据,提高了错误校正编码缓存器的利用率,同时也提高了数据读取的效率。
当然,如果在不设置错误校正编码缓存器的情况下,可以直接将计算所得写入错误校正编码存入外部DRAM中。
在将所述写入错误校正编码写入所述写数据编码位地址同时,请继续参考图8,步骤S85:将所述猝发写数据写入所述写数据地址。
动态随机存储器(DRAM)控制器中错误校正编码控制器903(示于图9中)接收到来自命令调度器908(示于图9中)的一个数据写入命令和其对应的猝发写数据后,当根据数据写入命令中的写数据地址,确定写数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码后,根据数据写入命令的写数据地址,将数据写入命令对应的猝发写数据写入到写数据地址对应的DRAM存储区域中。
当然,在上述过程中,在错误校正编码控制器903生成写入错误校正编码组写入命令、写入错误校正编码组读取命令的同时也会通知命令调度器908暂停调度新的命令,当写入错误校正编码组写入命令、写入错误校正编码组读取命令执行完成之后,错误校正编码控制器903会通知命令调度器908重新开始调度新的命令。
可见,在本申请实施例提供的存储区域的设置方法的基础上,可以实现本申请提供的数据写入方法,并且,无论数据写入命令中的写数据地址是否在错误校正编码所保护数据的数据区域,本申请提供的数据写入方法都可以保证完成数据写入流程,并且错误校正编码所需的数据接口无需增加或占用特殊的信号线,完全兼容已有的系统功能和设计,无需增加额外的DRAM存储空间即可同时覆盖DRAM接口链路和DRAM存储单元产生的软错误。
错误校正编码缓存器903的引入也优化了DRAM读写的次数,降低了系统损耗、提高了系统性能。
容易理解的是,前述各个方法的实现需要具体的硬件设备的保证,因此,为了保证前述各个实施例所述的方法的实现,本申请实施例还提供一种存储器的控制器,该存储器的控制器可以支持本申请实施例提供的存储区域的设置方法、本申请实施例提供的数据读取方法或者数据写入方法。
请参考图9,图9为本申请实施例提供的存储器的控制器的结构示意图;如图所示,该存储器的控制器适于执行如前述任一实施例所述的存储区域的设置方法、如前述任一实施例所述的数据读取方法和/或如前述任一实施例所述的数据写入方法,包括:
系统总线接口控制器901,适于获取寄存器配置命令、系统原始读命令或系统原始写命令,并将所述系统原始读命令转换为如前述任一实施例所述的数据读取命令并将所述存储器返回的猝发读数据发送到系统总线,或将所述系统原始写命令转换为如前述任一实施例所述的数据写入命令;
配置寄存器902,适于获取并保存所述系统总线接口控制器发送的系统寄存器配置命令,保存并发送所述寄存器配置命令所包含的配置信息,还适于当接收到错误校正编码错误信息时,产生中断状态;
错误校正编码控制器903,适于接收所述配置信息、所述数据读取命令和/或所述数据写入命令,并根据所述配置信息执行如前述任一实施例所述的存储区域的设置方法,根据所述数据读取命令执行如前述任一实施例所述的数据读取方法,和/或根据所述数据写入命令执行如前述任一实施例所述的数据写入方法。
所述配置寄存器适于获取并保存所述系统总线接口控制器发送的系统寄存器配置命令,保存并发送所述寄存器配置命令所包含的配置信息,所述配置信息包括存储器错误校正编码所保护区域的数据块地址、数据行起始地址、数据行结束地址、数据列结束地址、应用请求数据流长度及存储器的猝发长度。
容易理解的是,本申请实施例所提供的存储器的控制器,可以只能够执行存储区域的设置方法、数据读取方法以及数据写入方法中的至少一种,那么可以通过设置多个控制器的方式保证其他方法的实现,当然,本申请实施例所提供的控制器也可以能够执行上述三种方法,这样在接收到不同的命令时,按照不同的命令完成不同方法的执行。为方便描述,本申请实施例以同一控制器能够实现3种方法进行论述:
执行前述任一实施例所述的存储区域的设置方法时,配置寄存器902接收来自系统总线接口控制器901的寄存器配置命令,配置寄存器902保存寄存器配置命令中的配置信息,并将配置信息发送给错误校正编码控制器903,错误校正编码控制器903保存配置信息,并按照配置信息在逻辑上区分外部存储器中错误校正编码(ECC)所保护数据的数据区域以及错误校正编码(ECC)的编码区域。
执行如前述任一实施例所述的数据读取方法时,错误校正编码控制器903接收到来自系统总线接口控制器901的数据读取命令时,首先根据预先存储的配置信息判断数据读取命令中的数据地址是否位于错误校正编码所保护数据数据区域地址中,如果在则错误校正编码控制器903控制完成前述实施例所述的数据读取过程,如果不在,则直接根据数据读取命令中的数据地址从外部存储器中读取猝发读数据。
执行如前述任一实施例所述的数据写入方法时,错误校正编码控制器903接收到来自系统总线接口控制器901的数据写入命令时,首先根据预先存储的配置信息判断数据写入命令中的数据地址是否位于错误校正编码所保护数据数据区域地址中,如果在则错误校正编码控制器903控制完成前述实施例所述的数据写入过程,如果不在,则直接根据数据写入命令中的数据地址将猝发写数据写入到外部存储器中。
这样,通过对存储器的控制器的设置,就可以实现对于各种不同的存储器的存储区域的设置,以及实现对于数据的读取和写入,因此,可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性,并且错误校正编码所需的数据接口无需增加或占用特殊的信号线,完全兼容已有的系统功能和设计,无需增加额外的存储器的存储空间即可同时覆盖存储器接口链路和存储器存储单元产生的软错误。
在一种具体的实施例中,为了优化存储器读写的次数,本申请实施例所提供的存储器的控制器还可以包括以下三者中的至少一者:
读数据缓存905,适于获取来自所述存储器的猝发读数据,并发送给所述系统总线接口控制器901;
写数据缓存906,适于获取并缓存来自系统总线接口控制器901发送的猝发写数据,并将所述猝发写数据发送到存储器;
错误校正编码缓存器907,适于缓存错误校正编码。
这样,可以将错误校正编码存储到错误校正编码缓存器907中,以减少外部存储器的访问次数,还可以根据实际需求预先确定替换原则,按照预先确定的替换原则替换更新错误校正编码缓存器907中缓存行中存储的信息,以保证错误校正编码缓存器907中缓存行中的存储信息都是满足实际需求的,可见,错误校正编码缓存器907的引入优化了存储器读写的次数,降低了系统损耗、提高了系统性能。
在一种具体的实施例中,存储器的控制器还包括:
命令调度器908,适于接收和缓存来自所述系统总线接口控制器901的如前述任一实施例所述的数据读取命令及如前述任一实施例所述的数据写入命令,并按照预定的规则进行调度,以保证存储器的效率得到充分发挥,并将数据读取命令及数据写入命令发送至所述错误校正编码控制器903。
在一种具体的实施例中,存储器的控制器还包括:
存储器接口控制器904,适于将命令及数据做适于存储器的转换,并转发来自存储器的数据。
MUX(数据选择器)909,适于根据预定的规则选择并传输数据。图中包含3个MUX,分别为MUX9090,MUX9091及MUX9092。
综上所述,本申请实施例提供的存储器的控制器可以支持本申请实施例提供的存储区域的设置方法,以及本申请实施例提供的数据读取方法及数据写入方法,因此可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性,并且错误校正编码所需的数据接口无需增加或占用特殊的信号线,完全兼容已有的系统功能和设计,无需增加额外的存储器的存储空间即可同时覆盖存储器接口链路和存储器存储单元产生的软错误。
上文描述了本申请实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本申请实施例披露、公开的实施例方案。
本申请实施例还提供一种存储区域的设置装置,请参考图10,图10为本申请实施例提供的存储区域的设置装置的结构示意图,该装置可以认为是为实现本申请实施例提供的存储区域的设置方法所需设置的功能模块,包括:
数据获取模块1000,适于获取所述存储器的猝发长度、存储器列数、应用请求数据流长度、所述应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址;
数据流猝发个数获取模块1001,适于根据所述应用请求数据流长度及所述猝发长度获取传输所述应用请求数据流所需的猝发个数,得到数据流猝发个数;
数据区域地址及编码区域地址获取模块1002,适于当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时;根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
在一种具体的实施例中,数据区域地址及编码区域地址获取模块1002,适于根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址包括:
可选数据区域地址获取单元,适于根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述错误校正编码所保护数据的可选数据区域地址;
数据区域地址获取单元,适于根据所述数据列结束地址及所述可选数据区域地址获取所述错误校正编码所保护数据的数据区域地址。
在进一步的实施例中,所述可选数据区域地址获取单元,适于根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述错误校正编码所保护数据的可选数据区域地址包括:
获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和;
根据所述向下整数和所述数据流猝发个数获取所述可选数据区域地址的最大列地址,得到所述可选数据区域地址。
在进一步的实施例中,所述数据区域地址获取单元,适于根据所述数据列结束地址及所述可选数据区域地址获取所述错误校正编码所保护数据的数据区域地址包括:
获取所述数据列结束地址及所述可选数据区域地址的最大列地址的最小值,得到所述错误校正编码所保护数据的数据区域地址。
在一种具体的实施例中,数据区域地址及编码区域地址获取模块1002,适于根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址包括:
第一端编码列地址确定单元,适于根据预定的所述错误校正编码的编码区域地址确定规则,确定所述存储器的最大存储器列数为所述编码区域地址的第一端编码列地址;
可选第二端编码列地址获取单元,适于结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述编码区域地址的可选第二端编码列地址;
编码区域地址获取单元,适于结合所述第一端编码列地址,根据所述数据列结束地址及所述可选第二端编码列地址获取所述第二端编码列地址,得到所述编码区域地址。
在进一步的实施例中,所述可选第二端编码列地址获取单元,适于结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述编码区域地址的可选第二端编码列地址包括:
获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和;
结合所述第一端编码列地址,根据所述向下整数和所述存储器列数获取所述编码区域地址的可选第二端编码列地址。
在进一步的实施例中,所述编码区域地址获取单元,适于结合所述第一端编码列地址,根据所述数据列结束地址及所述可选第二端编码列地址获取所述第二端编码列地址,得到所述编码区域地址包括:
根据所述数据列结束地址、所述数据流猝发个数、所述存储器列数获取可选第二端编码列结束地址;
获取所述可选第二端编码列地址及所述可选第二端编码列结束地址二者中的最大值,得到所述第二端编码列地址;
结合所述第一端编码列地址及所述第二端编码列地址,得到所述编码区域地址。
在一种具体的实施例中,数据区域地址及编码区域地址获取模块1002,适于根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数包括:
错误校正编码方案确定单元,适于根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定错误校正编码方案;
错误校正编码位数确定单元,适于根据所述错误校正编码方案,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数。
在进一步的实施例中,所述错误校正编码方案确定单元,适于根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定错误校正编码方案包括:
根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述应用请求数据流长度对应的所述错误校正编码的编码猝发个数,获取所述存储器的可选错误校正编码方案;
获取应用请求数据流长度对应的所述错误校正编码的编码猝发中的空闲位数;
根据所述空闲位数,从所述可选错误校正编码方案中确定所述错误校正编码方案。
在一种具体的实施例中,所述错误校正编码的编码猝发个数为1个。
在一种具体的实施例中,所述存储区域的设置装置还包括:
应用请求数据流长度调整模块,适于当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,无法确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时,调整应用请求数据流长度。
综上所述,本申请实施例提供一种存储区域的设置装置,该装置可以实现本申请实施例提供的存储区域的设置方法,首先根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数,然后根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址,而数据列结束地址是根据实际需要确定的,可见,数据区域地址是可以根据实际需要灵活改变的;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址,可见在数据区域地址可以根据实际需要灵活改变的基础上,错误校正编码的编码区域地址也可以根据预定的所述错误校正编码的编码区域地址确定规则、数据列结束地址做出相应的改变,此时,获取到的编码区域地址和数据区域地址可以是错误校正编码保护方案所对应的完整的编码区域地址和数据区域地址,也可以是根据预定的数据列结束地址自定义的编码区域地址和数据区域地址,提高了错误校正编码(ECC)保护区域确定的灵活性,以达到最大化利用存储空间、减少损耗、提高性能的目的,因此,本申请实施例提供的存储区域的设置方法,可以保证错误校正编码保护方案对存储器的通用性,提高错误校正编码保护方案选择以及错误校正编码保护区域确定的灵活性。
本申请实施例还提供一种数据读取装置,请参考图11,图11为本申请实施例提供的数据读取装置的结构示意图,该装置可以认为是为实现本申请实施例提供的数据读取方法所需设置的功能模块,包括:
数据读取命令获取模块1100,适于获取数据读取命令;
猝发读数据及读取错误校正编码获取模块1101,适于当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码;
校验模块1102,适于当利用所述读取错误校正编码校验对应的所述猝发读数据正确或者直接根据所述读取错误校正编码完成校正时,返回所述猝发读数据。
在一种具体的实施例中,所述校验模块1102,适于当利用所述读取错误校正编码校验对应的所述猝发读数据正确或者直接根据所述读取错误校正编码完成校正时,返回所述猝发读数据还包括:
当利用所述读取错误校正编码校验对应的所述猝发读数据错误或者根据所述读取错误校正编码无法完成校正时,发送错误信息。
在一种具体的实施例中,所述读数据地址包括读数据块地址、读数据行地址及所述读数据列地址。
在一种具体的实施例中,所述读取错误校正编码还适于存储于错误校正编码缓存器中;
所述猝发读数据及读取错误校正编码获取模块1101,适于当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码包括:
读数据组地址获取单元,适于根据所述读数据地址的所述读数据列地址获取读数据组地址;
读取错误校正编码获取单元一,适于当根据所述读数据块地址、所述读数据行地址及所述读数据组地址确定所述读取错误校正编码在所述错误校正编码缓存器中命中时,根据所述读数据列地址和所述错误校正编码位数,从所述错误校正编码缓存器中获取所述读取错误校正编码。
在进一步的实施例中,所述所述猝发读数据及读取错误校正编码获取模块1101,适于当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码还包括:
读数据编码列地址获取单元,适于当根据所述读数据块地址、所述读数据行地址及所述读数据组地址确定所述读取错误校正编码在所述错误校正编码缓存器中未命中时,根据所述读数据组地址以及所述读数据组地址与所对应的读取错误校正编码的读数据编码列地址的关系,获取所述读数据编码列地址;
读取错误校正编码组获取单元,适于根据所述读数据块地址、读数据行地址及所述读数据编码列地址生成读取错误校正编码组读取命令,根据所述读取错误校正编码组读取命令获取读取错误校正编码组;
读取错误校正编码获取单元二,适于根据所述读数据列地址、所述错误校正编码位数及所述读取错误校正编码组获取所述读取错误校正编码。
在进一步的实施例中,所述读取错误校正编码获取单元二,适于根据所述读数据列地址、所述错误校正编码位数及所述读取错误校正编码组获取所述读取错误校正编码之后包括:
写入单元,适于将所述读取错误校正编码组写入所述错误校正编码缓存器中。
在进一步的实施例中,所述写入单元,适于将所述读取错误校正编码组写入所述错误校正编码缓存器中包括:
读取空闲缓存行分配单元,适于当所述错误校正编码缓存器未写满时,为所述读取错误校正编码组分配读取空闲缓存行,将所述读取错误校正编码组写入分配的所述读取空闲缓存行;
读取替换缓存行分配单元,适于当所述错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定读取替换缓存行,将所述读取错误校正编码组写入所述读取替换缓存行。
在进一步的实施例中,所述猝发读数据及读取错误校正编码获取模块1101,还适于读数据地址不在如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据读取命令获取并发送猝发读数据。
综上所述,本申请实施例提供的数据读取装置,在本申请实施例提供的存储区域的设置方法的基础上,可以实现本申请提供的数据读取方法,并且,无论猝发数据是否在错误校正编码所保护数据的数据区域,本申请提供的数据读取方法都可以保证完成数据读取流程,并且错误校正编码所需的数据接口无需增加或占用特殊的信号线,完全兼容已有的系统功能和设计,无需增加额外的DRAM存储空间即可同时覆盖DRAM接口链路和DRAM存储单元产生的软错误。
错误校正编码缓存器的引入也优化了DRAM读写的次数,降低了系统损耗、提高了系统性能。
本申请实施例还提供一种数据写入装置,请参考图12,图12为本申请实施例提供的数据写入装置的结构示意图,该装置可以认为是为实现本申请实施例提供的数据写入方法所需设置的功能模块,包括:
数据写入命令获取模块1200,适于获取数据写入命令;
写数据编码位地址获取模块1201,适于当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址;
写入错误校正编码模块1202,适于将所述写入错误校正编码写入所述写数据编码位地址;
猝发写数据写入模块1203,适于将所述猝发写数据写入所述写数据地址。
在一种具体的实施例中,所述写数据地址包括写数据块地址、写数据行地址及所述写数据列地址。
在一种具体的实施例中,所述写入错误校正编码还适于存储于错误校正编码缓存器中;
所述写数据编码位地址获取模块1201,适于当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址包括:
写数据组地址获取单元,适于根据所述写数据列地址获取写数据组地址;
写数据编码位地址获取单元,适于当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中命中时,根据所述写数据列地址和所述错误校正编码位数,在所述错误校正编码缓存器中获取所述写数据编码位地址;
所述写入错误校正编码模块1202,适于将所述写入错误校正编码写入所述写数据编码位地址包括:
写入错误校正编码单元,适于将所述写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址。
在进一步的实施例中,所述写入错误校正编码单元,适于将所述写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址还包括:
当所述错误校正编码缓存器的缓存行写满时,将所述缓存行写入到所述数据写入命令中的写数据地址所对应的如前述任一实施例所述的存储区域的设置方法的所述编码区域地址的写数据编码列地址中。
在一种具体的实施例中,所述写入错误校正编码还适于存储于错误校正编码缓存器中;
所述写数据编码位地址获取模块1201,适于当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址还包括:
所述写数据组地址获取单元,适于根据所述写数据列地址获取写数据组地址;
写入缓存行分配单元,适于当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中未命中、且所述数据写入命令为所述写数据块地址、所述写数据行地址及所述写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,在所述错误校正编码缓存器中为所述写入错误校正编码分配写入缓存行,将所述写入错误校正编码写入所述写入缓存行。
在进一步的实施例中,所述写入缓存行分配单元,适于在所述错误校正编码缓存器中,为所述写入错误校正编码分配写入缓存行包括:
写入空闲缓存行分配单元,适于当所述错误校正编码缓存器未写满时,为所述写入错误校正编码分配所述写入空闲缓存行,所述写入空闲缓存行即为所述写入缓存行;
写入替换缓存行分配单元,适于当所述错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定写入替换缓存行,为所述写入错误校正编码分配所述写入替换缓存行,所述写入替换缓存行即为所述写入缓存行。
在一种具体的实施例中,所述写入错误校正编码还适于存储于错误校正编码缓存器中;
所述写数据编码位地址获取模块1201,适于当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如前述任一实施例所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址还包括:
所述写数据组地址获取单元,适于根据所述写数据列地址获取写数据组地址;
写数据编码列地址获取单元,适于当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中未命中、且所述数据写入命令不是所述写数据块地址、所述写数据行地址及所述写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,根据所述写数据组地址以及所述写数据组地址与所对应的写入错误校正编码的写数据编码列地址的关系,获取所述写数据编码列地址;
写入单元,适于根据所述写数据块地址、写数据行地址及所述写数据编码列地址生成写入错误校正编码组读取命令,根据所述写入错误校正编码组读取命令获取写入错误校正编码组,将所述写入错误校正编码写入所述写入错误校正编码组;
分配单元,适于在所述错误校正编码缓存器中为所述写入错误校正编码组分配所述写入缓存行,并将包括所述写入错误校正编码的写入错误校正编码组写入所述写入缓存行中。
在一种具体的实施例中,所述写数据编码位地址获取模块1201,还适于当根据所述数据写入命令中的写数据地址,确定所述写数据地址不在如前述任一实施例所述的存储区域的设置方法的所述数据区域地址中时,则根据所述数据写入命令写入猝发写数据。
综上所述,本申请实施例提供的数据写入装置,在本申请实施例提供的存储区域的设置方法的基础上,可以实现本申请提供的数据写入方法,并且,无论数据写入命令中的写数据地址是否在错误校正编码所保护数据的数据区域,本申请提供的数据写入方法都可以保证完成数据写入流程,并且错误校正编码所需的数据接口无需增加或占用特殊的信号线,完全兼容已有的系统功能和设计,无需增加额外的DRAM存储空间即可同时覆盖DRAM接口链路和DRAM存储单元产生的软错误。
错误校正编码缓存器的引入优化了DRAM读写的次数,降低了系统损耗、提高了系统性能。
本申请实施例还提供一种电子设备,包括如前述任一实施例所述的存储器的控制器或如前述任一实施例所述的存储区域的设置装置、如前述任一实施例所述的数据读取装置及如前述任一实施例所述的数据写入装置。
虽然本申请实施例披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。
Claims (32)
1.一种存储区域的设置方法,其特征在于,适用于存储器,包括:
获取所述存储器的猝发长度、存储器列数、应用请求数据流长度、所述应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址;
根据所述应用请求数据流长度及所述猝发长度获取传输所述应用请求数据流所需的猝发个数,得到数据流猝发个数;
当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时;根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
2.如权利要求1所述的存储区域的设置方法,其特征在于,所述根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址的步骤包括:
根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述错误校正编码所保护数据的可选数据区域地址;
根据所述数据列结束地址及所述可选数据区域地址获取所述错误校正编码所保护数据的数据区域地址。
3.如权利要求2所述的存储区域的设置方法,其特征在于,所述根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述错误校正编码所保护数据的可选数据区域地址的步骤包括:
获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和;
根据所述向下整数和所述数据流猝发个数获取所述可选数据区域地址的最大列地址,得到所述可选数据区域地址。
4.如权利要求2所述的存储区域的设置方法,其特征在于,所述根据所述数据列结束地址及所述可选数据区域地址获取所述错误校正编码所保护数据的数据区域地址的步骤包括:
获取所述数据列结束地址及所述可选数据区域地址的最大列地址的最小值,得到所述错误校正编码所保护数据的数据区域地址。
5.如权利要求1所述的存储区域的设置方法,其特征在于,所述根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址的步骤包括:
根据预定的所述错误校正编码的编码区域地址确定规则,确定所述存储器的最大存储器列数为所述编码区域地址的第一端编码列地址;
结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述编码区域地址的可选第二端编码列地址;
结合所述第一端编码列地址,根据所述数据列结束地址及所述可选第二端编码列地址获取所述第二端编码列地址,得到所述编码区域地址。
6.如权利要求5所述的存储区域的设置方法,其特征在于,所述结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数,获取所述编码区域地址的可选第二端编码列地址的步骤包括:
获取所述存储器列数与猝发个数的比值向下取整的向下整数,所述猝发个数包括所述数据流猝发个数和所述编码猝发个数之和;
结合所述第一端编码列地址,根据所述向下整数和所述存储器列数获取所述编码区域地址的可选第二端编码列地址。
7.如权利要求5所述的存储区域的设置方法,其特征在于,所述结合所述第一端编码列地址,根据所述数据列结束地址及所述可选第二端编码列地址获取所述第二端编码列地址,得到所述编码区域地址的步骤包括:
根据所述数据列结束地址、所述数据流猝发个数、所述存储器列数获取可选第二端编码列结束地址;
获取所述可选第二端编码列地址及所述可选第二端编码列结束地址二者中的最大值,得到所述第二端编码列地址;
结合所述第一端编码列地址及所述第二端编码列地址,得到所述编码区域地址。
8.如权利要求1所述的存储区域的设置方法,其特征在于,所述根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数的步骤包括:
根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定错误校正编码方案;
根据所述错误校正编码方案,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数。
9.如权利要求8所述的存储区域的设置方法,其特征在于,所述根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定错误校正编码方案的步骤包括:
根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述应用请求数据流长度对应的所述错误校正编码的编码猝发个数,获取所述存储器的可选错误校正编码方案;
获取应用请求数据流长度对应的所述错误校正编码的编码猝发中的空闲位数;
根据所述空闲位数,从所述可选错误校正编码方案中确定所述错误校正编码方案。
10.一种数据读取方法,其特征在于,包括:
获取数据读取命令;
当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于如权利要求1-9任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码;
当利用所述读取错误校正编码校验对应的所述猝发读数据正确或者直接根据所述读取错误校正编码完成校正时,返回所述猝发读数据。
11.如权利要求10所述的数据读取方法,其特征在于,包括:
当利用所述读取错误校正编码校验对应的所述猝发读数据错误或者根据所述读取错误校正编码无法完成校正时,发送错误信息。
12.如权利要求11所述的数据读取方法,其特征在于,所述读数据地址包括读数据块地址、读数据行地址及所述读数据列地址。
13.如权利要求12所述的数据读取方法,其特征在于,所述读取错误校正编码还适于存储于错误校正编码缓存器中;
所述根据所述读数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码的步骤包括:
根据所述读数据地址的所述读数据列地址获取读数据组地址;
当根据所述读数据块地址、所述读数据行地址及所述读数据组地址确定所述读取错误校正编码在所述错误校正编码缓存器中命中时,根据所述读数据列地址和所述错误校正编码位数,从所述错误校正编码缓存器中获取所述读取错误校正编码。
14.如权利要求13所述的数据读取方法,其特征在于,所述根据所述读数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码的步骤还包括:
当根据所述读数据块地址、所述读数据行地址及所述读数据组地址确定所述读取错误校正编码在所述错误校正编码缓存器中未命中时,根据所述读数据组地址以及所述读数据组地址与所对应的读取错误校正编码的读数据编码列地址的关系,获取所述读数据编码列地址;
根据所述读数据块地址、读数据行地址及所述读数据编码列地址生成读取错误校正编码组读取命令,根据所述读取错误校正编码组读取命令获取读取错误校正编码组;
根据所述读数据列地址、所述错误校正编码位数及所述读取错误校正编码组获取所述读取错误校正编码。
15.如权利要求14所述的数据读取方法,其特征在于,所述根据所述读数据列地址、所述错误校正编码位数及所述读取错误校正编码组获取所述读取错误校正编码的步骤之后包括:
将所述读取错误校正编码组写入所述错误校正编码缓存器中。
16.如权利要求15所述的数据读取方法,其特征在于,所述将所述读取错误校正编码组写入所述错误校正编码缓存器中的步骤包括:
当所述错误校正编码缓存器未写满时,为所述读取错误校正编码组分配读取空闲缓存行,将所述读取错误校正编码组写入分配的所述读取空闲缓存行;
当所述错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定读取替换缓存行,将所述读取错误校正编码组写入所述读取替换缓存行。
17.如权利要求10所述的数据读取方法,其特征在于,所述读数据地址不在如权利要求1-9任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据读取命令获取并发送猝发读数据。
18.一种数据写入方法,其特征在于,包括:
获取数据写入命令;
当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如权利要求1-9任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址;
将所述写入错误校正编码写入所述写数据编码位地址;
将所述猝发写数据写入所述写数据地址。
19.如权利要求18所述的数据写入方法,其特征在于,所述写数据地址包括写数据块地址、写数据行地址及写数据列地址。
20.如权利要求19所述的数据写入方法,其特征在于,所述写入错误校正编码还适于存储于错误校正编码缓存器中;
所述根据所述写数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址的步骤包括:
根据所述写数据列地址获取写数据组地址;
当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中命中时,根据所述写数据列地址和所述错误校正编码位数,在所述错误校正编码缓存器中获取所述写数据编码位地址;
所述将所述写入错误校正编码写入所述写数据编码位地址的步骤包括:
将所述写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址。
21.如权利要求20所述的数据写入方法,其特征在于,所述将所述写入错误校正编码写入所述错误校正编码缓存器中的所述写数据编码位地址的步骤之后,还包括:
当所述错误校正编码缓存器的缓存行写满时,将所述缓存行写入到所述数据写入命令中的写数据地址所对应的如权利要求1-9任一项所述的存储区域的设置方法的所述编码区域地址的写数据编码列地址中。
22.如权利要求21所述的数据写入方法,其特征在于,所述写入错误校正编码还适于存储于错误校正编码缓存器中;
所述根据所述写数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址的步骤还包括:
根据所述写数据列地址获取写数据组地址;
当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中未命中、且所述数据写入命令为所述写数据块地址、所述写数据行地址及所述写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,在所述错误校正编码缓存器中为所述写入错误校正编码分配写入缓存行,将所述写入错误校正编码写入所述写入缓存行。
23.如权利要求22所述的数据写入方法,其特征在于,所述在所述错误校正编码缓存器中,为所述写入错误校正编码分配写入缓存行的步骤包括:
当所述错误校正编码缓存器未写满时,为所述写入错误校正编码分配所述写入空闲缓存行,所述写入空闲缓存行即为所述写入缓存行;
当所述错误校正编码缓存器已写满时,根据预定的错误校正编码缓存器的替换原则确定写入替换缓存行,为所述写入错误校正编码分配所述写入替换缓存行,所述写入替换缓存行即为所述写入缓存行。
24.如权利要求23所述的数据写入方法,其特征在于,所述写入错误校正编码还适于存储于错误校正编码缓存器中;
所述根据所述写数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址的步骤还包括:
根据所述写数据列地址获取写数据组地址;
当确定所述写数据块地址、所述写数据行地址及所述写数据组地址在所述错误校正编码缓存器中未命中、且所述数据写入命令不是所述写数据块地址、所述写数据行地址及所述写数据组地址所对应的所述错误校正编码缓存器的缓存行的第一个猝发命令时,根据所述写数据组地址以及所述写数据组地址与所对应的写入错误校正编码的写数据编码列地址的关系,获取所述写数据编码列地址;
根据所述写数据块地址、写数据行地址及所述写数据编码列地址生成写入错误校正编码组读取命令,根据所述写入错误校正编码组读取命令获取写入错误校正编码组,将所述写入错误校正编码写入所述写入错误校正编码组;
在所述错误校正编码缓存器中为所述写入错误校正编码组分配所述写入缓存行,并将包括所述写入错误校正编码的写入错误校正编码组写入所述写入缓存行中。
25.如权利要求18所述的数据写入方法,其特征在于,当根据所述数据写入命令中的写数据地址,确定所述写数据地址不在如权利要求1-9任一项所述的存储区域的设置方法的所述数据区域地址中时,则根据所述数据写入命令写入猝发写数据。
26.一种存储器的控制器,其特征在于,适于执行如权利要求1-9任一项所述的存储区域的设置方法、如权利要求10-17任一项所述的数据读取方法和/或如权利要求18-25任一项所述的数据写入方法,包括:
系统总线接口控制器,适于获取寄存器配置命令、系统原始读命令或系统原始写命令,并将所述系统原始读命令转换为如权利要求10-17任一项所述的数据读取命令并将所述存储器返回的猝发读数据发送到系统总线,或将所述系统原始写命令转换为如权利要求18-25任一项所述的数据写入命令;
配置寄存器,适于获取并保存所述系统总线接口控制器发送的系统寄存器配置命令,保存并发送所述寄存器配置命令所包含的配置信息,还适于当接收到错误校正编码错误信息时,产生中断状态;
错误校正编码控制器,适于接收所述配置信息、所述数据读取命令和/或所述数据写入命令,并根据所述配置信息执行如权利要求1-9任一项所述的存储区域的设置方法,根据所述数据读取命令执行如权利要求10-17任一项所述的数据读取方法,和/或根据所述数据写入命令执行如权利要求18-25任一项所述的数据写入方法。
27.如权利要求26所述的存储器的控制器,其特征在于,还包括以下三者中的至少一者:
读数据缓存,适于获取来自所述存储器的猝发读数据,并发送给所述系统总线接口控制器;
写数据缓存,适于获取并缓存来自系统总线接口控制器发送的猝发写数据,并将所述猝发写数据发送到存储器;
错误校正编码缓存器,适于缓存错误校正编码;
所述配置寄存器适于获取并保存所述系统总线接口控制器发送的系统寄存器配置命令,保存并发送所述寄存器配置命令所包含的配置信息,所述配置信息包括存储器错误校正编码所保护区域的数据块地址、数据行起始地址、数据行结束地址、数据列结束地址、应用请求数据流长度及存储器的猝发长度。
28.如权利要求27所述的存储器的控制器,其特征在于,还包括:
命令调度器,适于接收和缓存来自所述系统总线接口控制器的如权利要求10-17任一项所述的数据读取命令及如权利要求18-25任一项所述的数据写入命令,并按照预定的规则进行调度,以保证存储器的效率得到充分发挥,并将数据读取命令及数据写入命令发送至所述错误校正编码控制器。
29.一种存储区域的设置装置,其特征在于,适用于存储器,包括:
数据获取模块,适于获取所述存储器的猝发长度、存储器列数、应用请求数据流长度、所述应用请求数据流长度对应的错误校正编码的编码猝发个数和预先设置的错误校正编码所保护数据的数据列结束地址;
数据流猝发个数获取模块,适于根据所述应用请求数据流长度及所述猝发长度获取传输所述应用请求数据流所需的猝发个数,得到数据流猝发个数;
数据区域地址及编码区域地址获取模块,适于当根据所述应用请求数据流长度、所述存储器的猝发长度,以及所述编码猝发个数,确定所述存储器的一个所述猝发长度所对应的错误校正编码位数时;根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址,获取所述错误校正编码所保护数据的数据区域地址;根据预定的所述错误校正编码的编码区域地址确定规则,确定所述编码区域地址的第一端编码列地址,结合所述第一端编码列地址,根据所述数据流猝发个数、所述编码猝发个数、所述存储器列数和所述数据列结束地址获取所述编码区域地址的第二端编码列地址,得到所述编码区域地址。
30.一种数据读取装置,其特征在于,包括:
数据读取命令获取模块,适于获取数据读取命令;
猝发读数据及读取错误校正编码获取模块,适于当根据所述数据读取命令中的读数据地址,确定所述读数据地址位于如权利要求1-9任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述读数据地址获取所述数据读取命令的猝发读数据,并根据所述读数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取与所述猝发读数据对应的读取错误校正编码;
校验模块,适于当利用所述读取错误校正编码校验对应的所述猝发读数据正确或者直接根据所述读取错误校正编码完成校正时,返回所述猝发读数据。
31.一种数据写入装置,其特征在于,包括:
数据写入命令获取模块,适于获取数据写入命令;
写数据编码位地址获取模块,适于当根据所述数据写入命令中的写数据地址,确定所述写数据地址位于如权利要求1-9任一项所述的存储区域的设置方法的所述数据区域地址中时,根据所述数据写入命令的猝发写数据计算写入错误校正编码,并根据所述写数据地址和如权利要求1-9任一项所述的存储区域的设置方法中的错误校正编码位数,获取所述写入错误校正编码的写数据编码位地址;
写入错误校正编码模块,适于将所述写入错误校正编码写入所述写数据编码位地址;
猝发写数据写入模块,适于将所述猝发写数据写入所述写数据地址。
32.一种电子设备,其特征在于,包括如权利要求26-28任一项所述的存储器的控制器或如权利要求29所述的存储区域的设置装置、如权利要求30所述的数据读取装置及如权利要求31所述的数据写入装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210682650.3A CN115016981B (zh) | 2022-06-16 | 2022-06-16 | 存储区域的设置方法、数据读取、写入方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210682650.3A CN115016981B (zh) | 2022-06-16 | 2022-06-16 | 存储区域的设置方法、数据读取、写入方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115016981A true CN115016981A (zh) | 2022-09-06 |
CN115016981B CN115016981B (zh) | 2023-05-09 |
Family
ID=83075702
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210682650.3A Active CN115016981B (zh) | 2022-06-16 | 2022-06-16 | 存储区域的设置方法、数据读取、写入方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115016981B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115499104A (zh) * | 2022-10-24 | 2022-12-20 | 上海泰矽微电子有限公司 | 一种芯片die间的通信方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101036131A (zh) * | 2004-11-22 | 2007-09-12 | 英特尔公司 | 支持时间上多路复用的纠错编码的存储器事务猝发操作和存储器组件 |
CN102656566A (zh) * | 2009-12-17 | 2012-09-05 | 国际商业机器公司 | 固态存储系统中的数据管理 |
KR20140055737A (ko) * | 2012-11-01 | 2014-05-09 | 삼성전자주식회사 | 메모리 모듈, 그것을 포함하는 메모리 시스템, 그것의 구동 방법 |
CN114138544A (zh) * | 2021-12-03 | 2022-03-04 | 海光信息技术股份有限公司 | 数据读取、写入方法及装置、软错误处理系统 |
-
2022
- 2022-06-16 CN CN202210682650.3A patent/CN115016981B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101036131A (zh) * | 2004-11-22 | 2007-09-12 | 英特尔公司 | 支持时间上多路复用的纠错编码的存储器事务猝发操作和存储器组件 |
CN102656566A (zh) * | 2009-12-17 | 2012-09-05 | 国际商业机器公司 | 固态存储系统中的数据管理 |
KR20140055737A (ko) * | 2012-11-01 | 2014-05-09 | 삼성전자주식회사 | 메모리 모듈, 그것을 포함하는 메모리 시스템, 그것의 구동 방법 |
CN114138544A (zh) * | 2021-12-03 | 2022-03-04 | 海光信息技术股份有限公司 | 数据读取、写入方法及装置、软错误处理系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115499104A (zh) * | 2022-10-24 | 2022-12-20 | 上海泰矽微电子有限公司 | 一种芯片die间的通信方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115016981B (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11282552B2 (en) | Memory buffer with data scrambling and error correction | |
US8539312B2 (en) | Memory system and method using a memory device die stacked with a logic die using data encoding, and system using the memory system | |
US8245109B2 (en) | Error checking and correction (ECC) system and method | |
US7636833B2 (en) | Method for selecting memory busses according to physical memory organization information associated with virtual address translation tables | |
US7433218B1 (en) | Flash memory module | |
JP6101807B2 (ja) | 高信頼性メモリコントローラ | |
WO2007136447A2 (en) | Non-volatile memory error correction system and method | |
US7984363B2 (en) | Integrated circuit device including a circuit to generate error correction code for correcting error bit for each of memory circuits | |
US11113145B2 (en) | Memory device, semiconductor device, and semiconductor system | |
US20080189481A1 (en) | Methods and systems for storing data based on a reliability requirement | |
US11218165B2 (en) | Memory-mapped two-dimensional error correction code for multi-bit error tolerance in DRAM | |
US20230236934A1 (en) | Instant write scheme with dram submodules | |
US20040225944A1 (en) | Systems and methods for processing an error correction code word for storage in memory components | |
US5138705A (en) | Chip organization for an extendable memory structure providing busless internal page transfers | |
US20230094634A1 (en) | Memory system and data processing system including the same | |
CN115016981B (zh) | 存储区域的设置方法、数据读取、写入方法及相关装置 | |
US8045405B2 (en) | Memory system, memory device and command protocol | |
US7392347B2 (en) | Systems and methods for buffering data between a coherency cache controller and memory | |
CN116457761A (zh) | 一种存储装置、存储控制装置及片上系统 | |
US9940260B1 (en) | System and method for controlling optimized access to memory device having three-dimensional stacked structure | |
US20210191811A1 (en) | Memory striping approach that interleaves sub protected data words | |
US10312943B2 (en) | Error correction code in memory | |
US10379971B2 (en) | Single and double chip space | |
CN111736760B (zh) | 一种动态随机存储方法及系统 | |
EP4202939A1 (en) | Memory system and method of operating the same |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |