CN116783654A - 自适应错误校正以提高系统存储器可靠性、可用性和可服务性(ras) - Google Patents

自适应错误校正以提高系统存储器可靠性、可用性和可服务性(ras) Download PDF

Info

Publication number
CN116783654A
CN116783654A CN202080108203.6A CN202080108203A CN116783654A CN 116783654 A CN116783654 A CN 116783654A CN 202080108203 A CN202080108203 A CN 202080108203A CN 116783654 A CN116783654 A CN 116783654A
Authority
CN
China
Prior art keywords
memory
ecc
data
error
logic
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.)
Pending
Application number
CN202080108203.6A
Other languages
English (en)
Inventor
R·阿加瓦尔
H-M·陈
W·P·陈
W·吴
J·凌
K·贝恩斯
K·E·克里斯
D·K·比什
T·伊格扎瓦
J·G·霍尔姆
A·M·鲁多夫
V·辛格
S·曼达瓦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN116783654A publication Critical patent/CN116783654A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/78Masking faults in memories by using spares or by reconfiguring using programmable devices
    • G11C29/80Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout
    • G11C29/804Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout to prevent clustered faults
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding 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/1048Adding 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 arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/10Test algorithms, e.g. memory scan [MScan] algorithms; Test patterns, e.g. checkerboard patterns 
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/36Data generation devices, e.g. data inverters
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/44Indication or identification of errors, e.g. for repair
    • G11C29/4401Indication or identification of errors, e.g. for repair for self repair
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/74Masking faults in memories by using spares or by reconfiguring using duplex memories, i.e. using dual copies
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/78Masking faults in memories by using spares or by reconfiguring using programmable devices
    • G11C29/80Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout
    • G11C29/816Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout for an application-specific layout
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0409Online test
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/36Data generation devices, e.g. data inverters
    • G11C2029/3602Pattern generator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

存储器子系统包括具有针对提高系统中的可靠性、可用性和可服务性(RAS)动态分配的空间的存储器设备。错误校验和纠正(ECC)逻辑检测全部或一部分的存储器设备中的错误。响应于错误检测,系统可以动态地执行以下各项中的一项或多项:分配用于备用的活动存储器设备空间来备用故障存储器段;将毒模式写入故障的缓存线以将其标记为故障;执行永久故障检测(PFD)并且基于PFD检测来调整ECC的应用;或者,仅备用设备的一部分并且使另一部分活动(包括基于所备用的部分来调整ECC)。错误检测可以是基于ECC设备的位的,而错误校正可以是基于那些位和在数据设备上存储的附加位的。

Description

自适应错误校正以提高系统存储器可靠性、可用性和可服务 性(RAS)
技术领域
描述一般与存储器系统相关,并且更具体地,描述与系统存储器错误管理相关。
背景技术
随着存储器设备的制造工艺不断微缩,存储器设备密度和操作速度不断增加,所有这些都倾向于导致存储器设备的运行时间错误的增加。即使有错误校验和校正(ECC),错误的频率也可能超过校正错误的措施。
解决存储器设备中的故障的一种技术是备用,其涉及在设备中包括仅在检测到故障的情况下使用的存储器资源。对仅在发生故障时使用的资源的包括要求设备制造商在存储器设备上过度配置资源,这增加了成本。然而,不包括该资源可能导致DRAM(动态随机存取存储器)设备的降低的可靠性、可访问性和可服务性。
除了在单个设备上过度配置资源外,系统级实现还包括用来减少系统错误的过度配置。众所周知,ECC的强度对系统中提供的校验位的数量具有依赖性。为了保证许多系统实现中存储器的可用性,存储器子系统包括多个额外的存储器设备来存储ECC信息。额外的存储器设备可能显著影响系统成本。
附图说明
下面的描述包括对具有通过实施方式的示例的方式给出的说明的图的讨论。附图应通过示例的方式而不是通过限制的方式来理解。如本文所使用的,对一个或多个示例的引用应被理解为描述在本发明的至少一个实施方式中包括的特定特征、结构或特性。本文出现的诸如“在一个示例中”或“在替代示例中”的短语提供了本发明的实施方式的示例,并且不一定都指代相同的实施方式。然而,它们也不一定相互排斥。
图1是具有动态存储体备用的系统的示例的框图。
图2是存储器子系统的示例的框图,其中主机可以响应于检测存储器中的错误来执行各个校正操作。
图3是动态存储体备用的示例的框图。
图4是动态存储体备用的过程的示例的流程图。
图5是利用毒行指示存储器故障的系统的示例的框图。
图6是具有可以实现具有毒模式的操作的多个并行存储器设备的系统的示例的框图。
图7A是细分毒模式实施方式的示例的框图。
图7B是图7A的毒模式掩码的属性的表示。
图8是用于实现毒缓存线的过程的示例的流程图。
图9是基于永久故障检测来执行ECC的系统的示例的框图。
图10是永久故障检测的过程的示例的流程图。
图11是具有存储器设备的存储器模块和可以执行永久故障检测和动态备用的控制器的示例的框图,该存储器设备具有存储器的预留区域。
图12是具有边界故障备用的系统的示例的框图。
图13是具有边界故障备用的存储器模块的示例的框图。
图14是基于边界故障备用的存储器错误控制的示例的框图。
图15是边界故障备用的过程的示例的流程图。
图16是针对提高的RAS来实现存储器区域隔离的系统架构的示例的框图。
图17是具有9x4存储器模块的隔离存储器的系统架构的示例的框图。
图18是具有5x8存储器模块的隔离存储器的系统架构的示例的框图。
图19是利用隔离存储器实现ECC的过程的示例的流程图。
图20是在具有隔离存储器的系统中进行写入的过程的示例的流程图。
图21是应用矩阵来执行校验和校正的校验位生成逻辑和校正子位生成逻辑的示例的框图。
图22是管芯上错误校验和校正的示例的框图。
图23是系统级错误校验和校正的示例的框图。
图24是在其中可以实现自适应校验和校正的存储器子系统的示例的框图。
图25是在其中可以实现自适应校验和校正的计算系统的示例的框图。
图26是在其中可以实现自适应校验和校正的移动设备的示例的框图。
图27是在其中可以实现自适应校验和校正的多节点网络的示例的框图。
以下是某些细节和实施方式的描述,包括可以描绘一些或所有示例的附图的非限制性描述以及其它可能的实施方式。
具体实施方式
如本文所述,存储器子系统包括具有针对提高系统中的可靠性、可用性和可服务性(RAS)动态分配的空间的存储器设备。错误校验和纠正(ECC)逻辑检测全部或一部分的存储器设备中的错误。响应于错误检测,系统可以动态地执行以下各项中的一项或多项:分配用于备用的活动存储器设备空间来备用故障存储器段;将毒模式写入故障的缓存线以将其标记为故障;执行永久故障检测(PFD)并且基于PFD检测来调整ECC的应用;或者,仅备用设备的一部分并且使另一部分活动,包括基于备用的部分调整ECC。错误检测可以是基于ECC设备的位的,而错误校正可以是基于那些位和在数据设备上存储的附加位。
图1是具有动态存储体备用的系统的示例的框图。系统100示出了耦合到主机的存储器。主机110表示主机计算系统。主机110包括诸如处理器120和存储器控制器130的主机硬件。主机硬件还包括硬件互连和驱动器/接收机硬件,以提供在主机110和存储器150之间的互连。存储器模块150包括耦合到主机110的存储器设备160。存储器控制器130控制对存储器设备160的访问。
主机硬件支持主机软件在主机110上的执行。主机软件可以包括主机OS(操作系统)140。主机OS 140表示其它软件将在其下执行的软件平台。主机OS 140提供控制来实现与硬件互连的对接,以耦合到存储器设备160。
存储器模块150表示将多个存储器设备160连接到主机110的硬件平台。例如,存储器模块150可以是DIMM(双列直插式存储器模块)。存储器模块150可以提供路由和控制逻辑来控制在主机110和模块硬件上的存储器设备之间的信令。
在执行期间,主机OS 140提供访问存储器的请求。请求可以直接来自主机OS软件,可以是通过API(应用程序编程接口)或其它机构的请求,用于在主机OS 140下执行以请求存储器访问的程序。响应于主机存储器访问请求,存储器控制器130将存储器资源的基于主机的寻址映射到存储器设备160的物理地址位置。
存储器设备160包括阵列170,阵列170表示存储器单元的阵列。在一个示例中,阵列170被组织为多个存储体180。存储体180表示可寻址的单元组。例如,阵列170的存储器单元可以通过行地址、列地址和存储体地址来寻址。由于单独寻址存储体180的能力,可以单独访问这些存储体。在一个示例中,存储体180包括区域182。区域182表示阵列170的一部分,并且更具体地,每个存储体180的可以在运行时间动态分配以解决存储体故障的一部分。例如,区域182可以表示被预留以存储来自故障存储体的数据的一行或多行。
区域182可以被预留,因为该区域可以存储可使用的运行时间数据,但是在故障出现的情况下,可以被重新分配为预留存储器。可使用的运行时间数据是指存储器控制器130能够随时使用区域182的地址来存储数据。在一个示例中,存储器控制器130不在区域182中存储关键数据,例如系统关键数据。关键数据可以是操作系统数据、驱动器数据、配置数据或用于系统操作和稳定性的其它数据。关键数据可以与用户数据相对比,用户数据是指针对用户应用生成和使用的数据。
在一个示例中,存储器控制器130包括ECC 132,ECC 132表示主机110中用于检测和校正从存储器设备160读取的数据中的错误的错误逻辑。ECC 132可以生成用于向存储器设备160发送的写入数据的校验位。ECC 132然后可以解码来自存储器设备的传入数据和ECC位以确定数据是否包括错误。对于可校正错误(CE),ECC 132可以在将数据返回给无论是主机OS 140还是在主机OS 140下执行的应用的请求代理之前校正数据中的错误。
动态控制134表示存储器控制器130中的动态地备用容易出错的存储体的逻辑。作为对错误的检测的响应,应当校正来自有问题的存储体的错误。在一个示例中,如果存储体遇到无法校正的错误,OS应当使页离线,而不是触发动态存储体备用。当存储体被确定为具有持续故障时,该存储体可以被视为故障存储体。响应于关于存储体发生故障的确定,存储器控制器可以通过动态控制134将数据从故障存储体重新映射到一个或多个其它存储体的区域182。一个或多个其它存储体是非故障存储体或仍然良好的存储体。响应于对故障存储体的请求,存储器控制器可以将该请求映射到预留区域。
在一个示例中,响应于存储体180中的一个存储体的故障的检测,存储器控制器130可以确定该存储体和与该存储体相关联的地址应当停止使用。存储器控制器130可以指导具有故障存储体的存储器设备将故障存储体的内容复制到其它存储体。在一个示例中,存储器控制器130可以向主机OS 140动态地指示可用系统存储器地址空间的减少。在一个示例中,主机OS 140响应于来自存储器控制器130的指示来使故障存储体离线。系统存储器的减少意味着没有那么多可用于主机110的存储器空间。这种减少与具有一定数量的可用于启动的存储器并且利用未被计为可用的额外资源来备用存储器资源的系统形成对比,从而导致可用于主机的相同量的存储器。相反,主机110可以访问N个存储器设备(B*N)中B个存储体的等效存储空间,并且响应于故障和随后的重新映射,将可以访问((B*N)-1)个存储体。
在一个示例中,数据从故障存储体到被动态分配为备用空间的区域182的重新映射可以是根据打包后修复(PPR)例程的。重新映射是指将数据移动到作为备用位置的区域182,从而改变与存储器设备160内的某些数据相关联的物理寻址。
BIOS(基本输入/输出系统)112表示系统100的引导控制。BIOS 112在系统100最初上电时控制系统100。处理器120可以被配置为开始BIOS 112的执行,BIOS 112然后可以指示处理器加载将启动主机OS 140的指令。BIOS 112可以包括主机110的配置,诸如硬件初始化、配置设置、关于多少存储器可用的信息以及其它信息。在一个示例中,响应于存储体故障的检测,BIOS 112可以被更新为指示在经历存储体故障的存储器设备160中可用的更少存储容量。BIOS 112可以向主机OS 140指示该容量。
在一个示例中,主机OS 140不应在区域182中存储关键系统数据,以预留该区域用于动态备用。在一个示例中,BIOS 112可以接收关于区域182的存储器设备160的配置信息。因此,BIOS 112可以在初始化时向主机OS 140指示区域182,以指示什么类型的数据可以被存储在该区域中或者什么类型的数据不应被存储在该区域中。
图2是存储器子系统的示例的框图,其中主机可以响应于检测到存储器中的错误来执行各个校正操作。系统200表示计算系统的元件。系统200表示根据系统100的示例的系统。
主机210包括一个或多个处理器212(例如,中央处理单元(CPU)或图形处理单元(GPU)),其生成对在存储器240中存储的数据的请求。在一个示例中,存储器控制器220被集成到处理器212上或集成到片上处理器系统(SOC)上。
存储器控制器220包括I/O(输入/输出)226以连接到存储器240。I/O包括连接器、信号线、驱动器和其它硬件以将存储器设备互连到主机210。I/O 226可以包括如由命令(CMD)总线214表示的命令I/O和由DQ(数据)总线(未具体示出)表示的数据I/O。CMD总线214包括使存储器控制器220能够向存储器240发送命令(包括用来控制用于动态存储体备用的数据的移动的读取和写入命令)的命令信号线。
存储器控制器220包括命令(CMD)逻辑222以响应于由处理器212进行的操作生成用于存储器的命令。命令可以是直接执行操作的用于数据访问的命令(诸如,读取、写入、刷新或其它命令),或者是保持存储器中的数据的用于配置的命令(诸如,模式寄存器命令)。存储器控制器220包括调度器224以调度何时在操作序列中发送命令。调度器224可以控制I/O的定时以提高I/O将无错误的机会。命令的顺序可以保持存储器的高利用率以提高数据吞吐量。在一个示例中,调度器224可以根据ECC的自适应应用来管理命令的顺序和命令的寻址。
系统200示出了存储器240中的存储器设备的两个横排,横排[0]和横排[1]。横排是指共享选择线(例如,CS信号线)的存储器设备的集合或组。因此,横排中的存储器设备将并行执行操作。横排[0]和横排[l]被示为包括N个DRAM设备(DRAM[0:N-1])或DRAM。通常,具有多个横排的系统将在横排中的每个横排中具有相同数量的DRAM。
横排[0]的DRAM[0]和横排[l]的DRAM[0]被示为包括I/O 242、寄存器(REG)244和控制(CTRL)250或控制逻辑250。这样的组件将被理解为也被包括在其它DRAM中。I/O 242表示与存储器控制器220的I/O 226可比的连接硬件。I/O 242使DRAM能够连接到存储器控制器220。寄存器244表示DRAM内的一个或多个寄存器,其包括一个或多个配置寄存器,诸如模式寄存器。
控制逻辑250表示DRAM内的解码和执行命令和访问操作的控制组件。控制逻辑250使DRAM执行实施由存储器控制器220发起的访问所需的内部操作。在一个示例中,DRAM设备包括ECC 252,ECC 252表示管芯上ECC或存储器上ECC。管芯上ECC是指存储器设备本身上的使存储器设备能够在向主机发送数据之前执行SBE(单个位错误)错误校正的硬件。ECC 252在存储器设备处实现并且与存储器控制器220将实现的ECC分开。存储器240可以实现管芯上ECC并且向存储器控制器220发送数据,存储器控制器220然后可以对在通道上从所有DRAM并行接收的数据执行错误校验。
DRAM设备被示为具有多个存储体(Bank[0:(B-1)])。B可以是大于1的任何整数。变量“B”可以通过任何变量指示符代替,例如“N”。因此,DRAM设备可以说具有B个存储体或N个存储体。B通常可以是基于可用于地址存储体的位数的二进制数。从寻址的角度来看,二进制数的存储体更简单,但是出于操作的目的并不是必需的,并且可以使用任何数量的存储体。存储体260可以用作通过存储体编号单独可寻址的单独的存储体。在一个示例中,存储体260被组织在存储体组中,诸如Bank[0:3]作为BG0(存储体组0),接下来的四个存储体作为BG1,以此类推。替代地,存储体组可以是具有例如Bank[0,2,4,6]的BG0,或一些其它分组。例如,存储体组通常可以被单独访问,并且可以实现比背靠背访问相同存储体组的存储体更短的访问时间。
在一个示例中,存储体260包括区域270,其中出于在存储器单元中存储数据的目的可以不同地对待每个存储体的区域。例如,区域270可以是存储体内的地址范围。在一个示例中,区域270是每个存储体中的一个或多个最高行地址。响应于B个存储体之中的故障存储体的检测,故障存储体的内容可以在运行时间期间动态移动到区域270。
ECC引擎230表示存储器控制器220中的错误控制。利用ECC引擎230,存储器控制器220可以基于跨存储器设备的信息执行错误校正,而不是如利用ECC 252所做的那样仅在单个设备内执行错误校正。跨并行存储器设备执行ECC的能力使得存储器控制器220能够在整个设备或设备的一部分故障的情况下提供单一设备数据校正(SDDC)。在一个示例中,ECC引擎230被配置为使存储器控制器220能够执行双设备数据校正(DDDC)或自适应双设备数据校正(ADDDC)。SDDC指的是其中即使N个DRAM设备中的一个DRAM设备故障,数据加上从存储器设备接收的ECC位也允许存储器控制器220重建数据的错误校正。
DDDC指的是其中即使两个DRAM设备故障,跨锁步伙伴的数据和ECC位也允许存储器控制器220重建数据的错误校正。当ECC引擎230被配置为在多个存储器资源之间执行锁步校正时,存储器控制器220可以实施DDDC,诸如美国专利第9,697,094号中所描述的。
简而言之,可以按如下描述DDDC。锁步指的是在多个存储器资源上分配错误校正来补偿一个存储器资源中阻止对故障的存储器资源的确定性数据访问的硬故障。锁步伙伴关系指的是在其上分布或共享错误校验和校正的存储器的两个部分。存储器子系统检测第一存储器部分中的硬错误,其中第一存储器部分被设置为与第二存储器部分的锁步伙伴关系以在该对存储器资源上扩散错误校正。在一个示例中,诸如在DDDC(双设备数据校正)的实施方式中,锁步关系可以被预先配置。因此,检测到的错误导致在已识别的锁步伙伴之间共享错误校正。
ADDDC是指DDDC的具有动态更改锁步伙伴关系的能力的一种实施方式。响应于检测到硬错误,存储器子系统可以撤销在第一存储器部分和第二存储器部分之间的锁步伙伴关系并且设置新的锁步伙伴关系。在一个示例中,响应于在第二存储器部分中检测到故障或硬错误而形成锁步伙伴关系。存储器子系统可以在作为锁步伙伴的第一存储器部分和第三存储器部分之间以及在作为锁步伙伴的第二存储器部分和第四存储器部分之间创建新的锁步伙伴关系。存储器子系统还可以被配置为在更改伙伴关系时更改锁步伙伴关系的粒度。
锁步伙伴关系的动态更改可以应用于锁步的任何应用。在一个示例中,存储器控制器包括表示在存储器的部分之间的锁步关系的锁步表。部分大小可以被配置用于锁步的实施方式。利用ADDDC,可以动态地撤销和重新分配锁步伙伴关系。在一个示例中,不定义ADDDC锁步关系,直到检测到第一错误为止。对于这样的实施方式,锁步伙伴的第一分配可以被撤销和重新分配。
在一个示例中,存储器控制器220可以响应DRAM设备中的一个DRAM设备的存储体中的故障来在命令总线214上提供命令以引起数据从故障存储体到区域270的移动。在一个示例中,ECC引擎230可以基于从DRAM设备接收的数据中的错误的位置来检测DRAM内的存储体中的一个存储体的故障。在一个示例中,存储器控制器220包括永久故障检测(PFD)引擎(下面关于图9更详细地描述)。PFD引擎表示存储器控制器220内的确定存储器240中检测到的故障是永久故障(即,硬故障)还是暂时错误(软故障)的逻辑或电路。在一个示例中,响应于确定存储体具有硬故障,存储器控制器220可以触发存储体中的一个存储体到区域270中的存储空间的动态备用。
将理解,存储器240存储用于由处理器212在系统200中进行的主动操作的数据。如果存储器240不能存储尽可能多的数据,则可能必须从长期存储(系统200中未示出)中取回一些数据。因此,如果当检测到存储体故障时存在区域270中存储的数据,则在存储器240中已经更改数据的情况下,区域270中的数据可以被写回存储并且在存储器中被重写,或者在存储器240中尚未更改数据的情况下,简单地被重写。在一个示例中,存储器控制器220知道区域270并且不在区域270中存储关键系统数据。因此,存储器控制器220具有对区域270的访问并且可以在运行时间期间的任何时间将数据存储在其中,选择仅存储可以响应于存储体故障的检测而被重写的数据。
图3是动态存储体备用的示例的框图。状态302表示存储器设备的在存储体故障的检测之前的状态。状态304表示存储器设备的响应于存储体故障的检测的状态。状态302和状态304根据系统100的存储器的示例或系统200的存储器的示例提供系统状态的示例。
存储器设备310可以执行动态存储体备用,这使得能够响应于存储体故障的检测在运行时间期间动态地移动数据。存储器资源的动态分配与在引导时保留存储器容量的传统备用形成对比。通过针对备用预留存储器容量,系统使用容量将丢失,并且仅响应于故障的检测而使用。存储器设备310可以使用所有其存储容量,同时预留一个区域用于备用。对于存储器设备310,容量预留和存储体备用可以响应于故障而发生。此外,由于可以在运行时间期间动态重新映射和重新分配容量,所以动态存储体备用将不要求重新引导系统来执行备用。传统系统要求重新引导以触发备用。
状态302表示存储器设备310的不存在检测到的故障时的操作状态。主机系统将利用可用于OS(诸如主机OS 140)使用的整个存储器区域进行引导。在一个示例中,系统BIOS(诸如BIOS 112)将向OS描述静态资源亲和表(SRAT或SRAT表)中的一个或多个特殊区域。状态302将区域示为区域320。在一个示例中,区域320是顶部行或顶部Y行,其中Y是大于1的整数。
在一个示例中,区域320表示当检测到存储体故障时可以离线的地址范围。在一个示例中,BIOS向操作系统提供关于应在区域320中分配对内核操作不重要的数据的指示。在区域320中存储的数据可能在运行时间期间被迁移或删除,以针对存储体故障重新分配空间。
存储器310被示为具有32个存储体(存储体0……存储体31),这对于与双倍数据速率版本5(DDR5)标准兼容的DRAM设备来说是典型的。在一个示例中,每个存储体预留了存储体中总共65536行中的2048行。在一个示例中,区域320表示每个存储体的顶部行。例如,对于32个存储体,顶部5行地址位或上部5行地址位可以被包括在区域320中,以实现资源的重新分配来解决存储体故障。行地址的上部5位(2^5=32)可以针对32位的错误提供足够的资源。具有不同数量的存储体的其它系统配置可以预留不同数量的资源空间。将理解,行地址的上部位可以提供方便的区域来预留,但是可以分配任何可识别的区域用于动态存储体备用。
状态304表示错误330。错误330指示存储体30中的错误。在一个示例中,当系统固件或存储器控制器的错误校验逻辑检测到存储体故障时,它将通知OS:区域应当离线。OS可以执行区域320的存储器离线,以针对故障的或正在故障的存储体建立空间。在一个示例中,存储器控制器将开始复制正在故障的存储体内容或将正在故障的存储体的内容复制到“离线”或预留的存储器区域或指定区域、区域320。预留的存储器区域可以称为指定区域,因为它被指定用于数据的存储以允许动态存储体备用。
如图所示,作为内容复制的部分,映射332将数据从存储体30重新映射到存储体2。内容的复制执行存储体备用。在一个示例中,当存储体备用完成时,任何未来对故障存储体区域的访问都被存储器控制器重定向到预留的存储区域。
在一个示例中,行地址总是被映射为横排地址映射中的高地址位。因此,通道或横排地址的顶部地址区域对应于存储体的顶部地址区域。当顶部区域被预留时,每个存储体中的顶部行也被预留。在一个示例中,对于存储体备用,硬件将正在故障的存储体的内容复制到每个存储体的顶部行。在存储体备用之后,所有对故障存储体的访问都将由硬件定向到每个存储体的顶部行。硬件可以包括存储器控制器。硬件还可以包括在执行存储器访问指令的存储器设备310内的控制。硬件可以通过利用行地址的R个上部位替换存储体地址来动态备用,其中R是整数。上部行地址位的数量可以由支持的存储体数量来确定。
在一个示例中,对具有等于正在故障的存储体编号的上部行地址的正在故障的存储体(存储体30)的访问被定向到最后一个存储体(存储体31)上部行。作为具体示例,考虑存储器设备310是具有32个存储体的16Gb(千兆位)设备。因此,每个存储体将有512Mb(兆比特)。如果每行是8Kb(千比特),将有2^16个行。在32个存储体(2^5)和2^16个行的情况下,区域320可以被预留为每个存储体的(2^16)/32=(2^11)个行用于动态存储体备用。在一个示例中,区域320是被预留用于存储体备用的最上部的行(行[15:11]=5'b11111)。将存储器设备310放入横排中,超过1个横排(例如,10个设备)和子通道,总共16Mb x 8/8=16MB可以被备用复制。
状态304表示针对存储体30中错误的错误330。响应于存储体30的故障,在一个示例中,对存储体30,行[15:11]=5'b00010的访问被映射到存储体2,行[15:ll]=5'blllll。在一个示例中,对存储体30,行[15:ll]=5'b01110的访问,被映射到存储体31,行[15:ll]=5'blllll。
图4是动态存储体备用的过程的示例的流程图。过程400表示用于动态存储体备用的过程。过程400可以由系统100的实施方式或系统200的实施方式来执行。
在一个示例中,在402处,存储器设备取回要向主机发送的数据。在404处,ECC逻辑检测存储器设备的一个存储体中的存储体故障。在一个示例中,ECC逻辑表示存储器控制器中或主机中的逻辑。在一个示例中,检测错误的ECC逻辑是管芯上逻辑,其将向主机指示该故障。无论是存储器控制器检测到错误,还是存储器设备检测到错误并且报告给存储器控制器,存储器控制器都可以确定存在存储体故障。
在一个示例中,在406处,存储器控制器向主机指示存储体故障。在一个示例中,存储器控制器向主机OS指示存储体故障。在一个示例中,存储器控制器向BIOS指示存储体故障。在408处,主机OS可以响应于存储体故障的检测,使备用区域离线并且将可用存储器空间减少一个存储体。
在一个示例中,在410处,系统确定存储器中其它存储体的预留部分中是否有可用空间。在一个示例中,该确定是在使存储器资源离线之前做出的。在一个示例中,如果在412否分支处,没有可用的预留空间,则在418处,系统执行错误处理。错误处理可以包括系统故障。例如,如果另一个存储体故障已经发生并且系统已经执行动态存储体备用来重新映射到存储器的预留区域,则可能没有可用的预留空间。
如果在412是分支处,存在可用空间,在一个示例中,在414处,存储器控制器将故障存储体的内容映射到其它存储体中的预留部分。在一个示例中,在416处,存储器控制器或主机的其它部分可以跟踪地址空间的映射。逻辑地址到物理地址的映射使系统能够跟踪数据被存储在存储器资源中的位置,以用于随后访问该数据。
图5是利用毒行指示存储器故障的系统的示例的框图。系统500根据系统100的示例提供系统的示例。存储器控制器510可以称为主机控制器,或简称为控制器。存储器设备520可以包括任何类型的具有相邻行的存储器单元的存储器技术,其中数据经由字线或等同物可访问。在一个示例中,存储器设备520包括DRAM技术。存储器设备520的行通常被刷新以维持确定性状态。
存储器设备520包括存储器阵列530,存储器阵列530表示存储器单元或存储单元的阵列。阵列530被组织为存储器的多个存储体540。存储器单元存储一位数据,或存储多级单元的多个位。通常,存储器的存储体或子存储体包括独立于另一存储体或子存储体的存储器单元可寻址的存储器单元,并且因此并行可访问存储器阵列530的另一部分。
存储器设备520包括列解码器(dec)532,列解码器532表示基于访问命令将电荷施加到列的逻辑或电路。在一个示例中,列解码器532响应于列地址选通(CAS)命令来选择一列。存储器设备520包括行解码器(dec)534,行解码器534表示基于存储器访问命令将选择电压施加到行的逻辑或电路。在一个示例中,行解码器534响应于行地址选通(RAS)命令来选择一行。行解码器534表示用于多个存储体540的解码硬件。列解码器532表示用于多个存储体540的解码硬件。
存储器控制器510包括生成用于存储器设备520的命令的命令逻辑514。命令可以包括诸如写入命令或读取命令的命令。命令还可以包括激活命令、预充电命令、刷新命令或其它命令。
存储器控制器510包括管理命令序列到存储器设备520的调度和发送的调度器516。调度器516包括确定命令顺序以及命令的定时要求的逻辑。存储器控制器510作出关于要发送什么命令(包括与发送与毒模式ECC相关的写入命令的命令、与出于ECC目的而映射或动态分配资源相关的命令或与ECC相关的其它命令)的确定。在一个示例中,调度器516包括用于发送到存储器设备520的缓冲区排队命令。
存储器控制器510包括I/O(输入/输出)硬件512。I/O 512表示收发机和信号线接口硬件,以使存储器控制器510能够在一条或多条总线上连接到存储器设备520。I/O 512使存储器控制器510能够向存储器设备520发送命令。
存储器设备520包括用于与存储器控制器510的I/O 512对接的I/O 522。I/O 522具有到I/O 512的对应信号线以接收用于接收激活和刷新命令的命令和地址信息以及其它命令。在一个示例中,I/O522包括到数据总线的接口以与存储器控制器510交换数据。存储器设备520包括寄存器524,其表示存储与存储器设备520的操作相关的配置信息或值的一个或多个寄存器或存储位置。在一个示例中,寄存器524包括一个或多个模式寄存器。
存储器设备520包括控制器526,其表示存储器设备本地的控制器。控制器526包括响应于命令而执行操作的硬件逻辑。控制器526包括控制存储器设备中的硬件逻辑和控制操作和操作序列的软件或固件逻辑。控制器526管理I/O 522。在一个示例中,控制器526包括毒模式564,其表示控制器526内的将字线写为具有毒模式的故障的逻辑。
存储器控制器510包括错误逻辑518,其表示ECC逻辑和与错误的检测和校正以及响应于错误的检测的存储器资源的管理相关的其它控制逻辑。错误逻辑518可以基于来自并行的多个存储器设备520(诸如存储器模块中的多个设备)的位来执行系统级错误检测和校正。
在一个示例中,存储器设备520包括ECC逻辑528,其表示存储器设备520的管芯上ECC。将理解的是,ECC逻辑528与存储器控制器510的错误逻辑518和存储器控制器510包括的ECC逻辑分开。在存储器控制器510中,管芯上ECC的操作可以是系统级的ECC的操作的补充。管芯上ECC的操作使存储器设备520能够在向存储器控制器510发送数据之前校正SBE(单个位错误)。向控制器发送的数据在ECC逻辑528的操作之后仍然可能有错误。由错误逻辑518提供的系统级ECC可以在相同存储器通道上对来自N个存储器设备的数据进行并行操作。因此,错误逻辑518能够校正ECC逻辑528将不能校正的错误。
在一个示例中,毒模式的操作可以在系统级执行,这不影响ECC逻辑528的操作。在一个示例中,永久故障检测(下面更详细地描述)在系统级执行并且独立于ECC逻辑528。因此,PFD操作将不影响管芯上ECC的操作。
在一个示例中,系统500表示DDR5系统,其中写入存储器设备520和从存储器控制器510读取涉及512个数据位和128个ECC位的发送。在一个示例中,错误逻辑518实现ECC的应用,其具有通过使用所有128个ECC位来完全校正单个设备错误的能力。通过使用所有128个ECC位来实现SDDC,没有预留要用作系统位的ECC位。在ECC的先前应用中,已经存在可用于用作毒位来支持错误遏制的系统位。毒位指示故障的缓存线,其将去往存储器控制器510的缓存线标记为故障。在没有毒位的情况下,系统无法使用故障的缓存线的常规指示。
在一个示例中,错误逻辑518包括毒模式562,其表示错误逻辑518中的实现用于专用缓存线的毒模式的逻辑。代替提供位来指示缓存线的故障,系统500可以将毒模式写入故障的缓存线来将缓存线指示为故障。在一个示例中,响应于在缓存线中毒模式的检测,主机可以使页地址离线以避免使用故障的缓存线。
存在可以使用的毒模式的不同实施方式。在一个示例中,系统可以具有预先配置的位模式来写入缓存线。通过这样的实施方式,存在缓存线中的真实数据可以与毒模式相匹配的统计可能性。可以选择具有作为真实数据的低可能性的毒模式。在一个示例中,系统可以将毒模式掩码异或到故障的缓存线的内容上。例如,数据模式可能导致DUE(检测到的、不可校正的错误)指示,这可以由ECC实施方式的H矩阵标识。因此,错误逻辑518可以执行接收到的数据的异或以确定所得到的数据是否是DUE。这种具有仔细选择的毒模式的实施方式可以针对系统500提供鲁棒的毒模式实施方式以支持错误遏制。毒模式的实施方式可以降低错误遏制缓存线的存储器错误的静默数据率。
在一个示例中,控制器526包括实施毒线实施方式的毒模式564。在一个示例中,毒模式564表示执行由错误逻辑518指示的缓存线的毒模式写入的逻辑。毒模式可以称为毒位模式。存储体540示出了多行。存储体540示出了具有预留行和预留行542至预留行544的存储体,以指示在一个示例中系统500可以实现毒模式逻辑以及存储器设备520内ECC空间的动态存储体备用或动态分配。动态存储体备用可以根据所描述的任何示例。由于ECC错误检测而导致的资源的其它动态分配的实施方式可以根据所描述的其它示例。
行552至行554表示未被预留用于动态分配的行。无论是预留行还是非预留行,在一个示例中,存储体540可以通过用毒模式标记该行来将该行标记为离线。
在一个示例中,错误逻辑518实现毒模式562以通过故意将坏数据、毒模式写入被检测为故障的缓存线来指示“毒线”。毒数据的写入可以称为将故障模式注入缓存线。毒线提供了一种将1个ECC位预留为状态位来通知存储器控制器该线不良的替代方法。
在一个示例中,毒模式562创建毒数据以写入该行。在一个示例中,存储器控制器510向存储器设备520发送指示一行标记为故障的命令,并且毒模式564可以创建数据以写入故障行。
在一个示例中,错误逻辑518管理毒模式对故障的缓存线的应用。在一个示例中,当缓存线被来自错误检测的DUE指示检测为故障时,毒模式562或毒模式564可以将故障的数据与毒模式掩码或错误掩码异或。异或运算的结果是可以由系统用来确定点模式是否已经被识别的异或结果。根据掩码的设计,异或运算的结果对于大多数位模式可以保持DUE。存在毒掩码的应用将导致静默数据错误(SDE)模式的小概率,这将表明缓存线被误校正或误检测,而不是被毒害。但是,如果仔细选择毒模式,则概率非常低,如下文参考图7所述。
图6是具有可以实现具毒模式的操作的多个并行存储器设备的系统的示例的框图。系统600表示根据系统500的示例的系统。系统600示出了根据本文的任何示例的来自存储器模块的数据输出模式的示例。
在一个示例中,系统600示出了毒模式到数据中的实施方式。模块610表示具有标记为Device[0:9]的10个设备的存储器模块,这些设备被示出为x4设备,这是指与数据(DQ)总线的接口的信号线的数量。x4设备有四条信号线,其通常将输出特定突发长度的数据。突发长度是指将使用多少个连续的单位间隔(UI)或周期来输出或输入数据。
如图所示,系统600以BL16或16个单位间隔的突发长度操作。每个设备可以发送(对于读取操作)或接收(对于写入操作)每单位间隔4位,总共每设备每操作或事务(读取或者写入)64位。基于数据是从控制器620发送到存储器设备,还是从存储器设备发送到控制器620,去往模块610和来自模块610的位的顺序可以颠倒。不管位的朝向和突发顺序,一般来说,在一个示例中,在第一周期(突发顺序0)期间,在数据总线上发送数据位D[0:3],由数据612表示。对于第二个周期(突发顺序1),发送数据位D[4:7],依此类推,直到针对突发顺序15的数据位D[60:63]为止。
将理解,可以使用数据的任何顺序。对于不同系统中的不同数据量,可以使用不同的突发长度、不同的突发顺序、不同的数据总线接口(例如,x8或xl6)。事务的原理将保持相同,即模块610和控制器620的数据设备在数据总线上交换数据612。
系统600表示10x4模块配置的示例(指的是具有x4 DQ接口的10个存储器设备)。在这样的配置中,通常Device[0:7]将是“数据”设备,而Device[8:9]是“ECC”设备。数据设备是指用于读取或写入事务的实际用户数据。ECC设备是指存储校验位或奇偶校验位以针对数据位进行ECC解码的设备。在一个示例中,来自每个设备的64位的数据表示缓存线或缓存线的一部分(例如,128位缓存线的64位)。因此,针对每个设备的整个位集合表示单个缓存线或行的一部分的位。
在系统600中,设备0被突出显示。考虑设备0经历故障。在一个示例中,控制器620包括或使用错误控制630来执行毒模式到设备0中的错误注入632。错误注入632表示毒模式的实施方式的示例。在一个示例中,毒模式依赖于毒模式掩码来支持错误遏制。基于使用毒掩码的毒线可以是显示为DUE(可检测但是不可校正的错误)线的位模式,当与毒掩码进行异或时,该线也是DUE错误。
在一个示例中,设备0的D[0:63]表示控制器620将识别为毒线的毒模式,从而指示线的故障。响应于故障,在一个示例中,控制器620触发主机使线离线。在一个示例中,控制器620实施一种版本的ECC来校正错误。
在一个示例中,错误的双重设备故障模式可以表示出于毒模式实现目的的DUE模式。如果从存储器中读取毒线而没有额外的存储器错误,则控制器620可以检测到该模式并且报告DUE。在一个示例中,通过能够用毒数据检测毒线错误,系统600将不触发机器校验架构(MCA)逻辑来执行错误处理。
毒线可能经历在存储或读取毒数据期间翻转毒模式的位中的一个位的存储器错误,这是可能的。在一个示例中,错误控制630实施毒模式掩码,当遇到最主要的错误类型时,该掩码避免将毒数据模式转变为SDC(静默数据损坏)情况。例如,错误注入632可以表示具有任何4个突发或任何2个DQ故障是DUE的毒模式掩码。
在一个示例中,毒掩码用于现有编码数据之上。因此,可以保留包括管芯上ECC和其它例程的应用的数据编码和数据传输,并且仍然实施毒掩码。在一个示例中,错误注入632可以存储预定义的毒模式,而不管原始数据。理论上使用已知的毒模式应当等同于使用毒掩码。
毒掩码实施方式期望提供优于使用预定义数据模式的优势。首先,毒掩码的使用降低了垃圾数据(注入的毒模式数据)被解释为数据设备中卡住位的SDC情况的可能性。当注入预先确定的模式时,它可能被卡住位无意中“改变”,而使用毒掩码将已经通过简单地将掩码应用于在设备中存储的数据来解释卡住位。其次,使用毒掩码可以减少逻辑,因为在异或的情况下只需要修改非零掩码位。在一个示例中,该模式可以被限制为仅一小部分或一部分位需要被修改的地方,例如总位的大约1/5。第三,毒掩码可以允许在数据设备中保持原始数据模式。
图7A是细分毒模式实施方式的示例的框图。系统700表示应用于数据模式的毒掩码。系统700可以通过系统500的示例或系统600的示例来应用。
掩码710表示毒模式掩码。数据720表示掩码710将应用的数据。掩码710到数据720的应用可以通过存储器设备或存储器控制器。存储器控制器上的错误控制逻辑可以响应于错误的检测来控制毒模式掩码的应用。
代替使用毒位,掩码710可以应用于数据720以通过将数据720与掩码710组合计算的所得到的毒数据模式来标记缓存线有毒。计算并且将结果存储在缓存线中可以称为将坏数据注入缓存线来触发在线中的DUE错误。DUE错误可以将去往存储器控制器的线标记为垃圾行或故障的缓存线。在一个示例中,毒模式和毒模式掩码是用DRAM ECC实现的。
数据720被示为4×128位,其中每组位被组织为独立的、受ECC保护的数据,具有每128位数据32位ECC。在一个示例中,掩码710在每组128位上应用相同的毒模式掩码。掩码的示例可以是FFFF FFEE,如系统700中所示。“F”指的是十六进制数字,表示二进制“1111”,并且“E”指的是十六进制数字,表示二进制“1110”。其它样式是可能的。在DDR5系统中实施底层ECC算法的情况下,发现模式“FFFF FFEE”在毒线遇到附加存储器错误时具有低的SDC可能性。
在一个示例中,当缓存线需要中毒时,存储器控制器将生成与数据对应的ECC。整个码字将与毒模式掩码进行异或并且被写回存储器。当存在针对毒线的存储器读取请求时,如果没有错误,存储器控制器将检测错误。在检测到错误时,在一个示例中,存储器控制器将带有错误的线与毒掩码进行异或。在一个示例中,如果计算的结果是合法码字,则存储器控制器会将缓存线解释为毒线,并且将不采取进一步的行动。在一个示例中,如果计算结果不是合法的码字,则存储器控制器将记录错误事件。
系统700表示一种4X掩码方法,其可以比单独的掩码实现更稳健。额外的稳健性来自如下的事实:所有四个子缓存线都将故障并且成为SDC。如果该线在单个掩码实现中看起来是SDC,则存储器控制器可能尝试解码错误。然而,当四个线中的三个线指示DUE并且第四线指示SDC时,存储器控制器可以知道SDC指示不正确。在一个示例中,只要一个子缓存线是DUE,存储器控制器就会将整个缓存线解释为有毒的。
在一个示例中,缓存线表示细分为多个子缓存线的缓存线。多个子缓存线可以用毒位模式写入到主缓存线的每个细分。在一个示例中,主缓存线的所有细分或具有写入的毒数据的所有子缓存线将需要在毒数据模式将无法被存储器控制器识别之前经历错误。
图7B是图7A的毒模式掩码的属性的表示。表730针对图7A的毒模式掩码的实施方式提供了毒模式掩码属性的示例。列732指示故障类型。列734指示针对列732中指示的故障类型提供的覆盖。
行742指示对于单个设备故障,毒模式掩码导致每单个设备有9个SDC模式。9个SDC模式导致针对DDR5的为9/(2^64)的潜在SDC错误识别率,或者错误识别率为5E-19之1的数量级。行744指示对于任何2个DQ故障(数据总线的任何两条信号线),毒模式掩码导致100%DUE,具有0SDC指示。行746指示对于任何1b-4b错误(1位至4位的任何错误),毒模式掩码导致100% DUE,具有0SDC指示。行748指示对于任何4个突发错误(任何4个突发周期或具有错误的单位间隔),毒模式掩码导致100% DUE,具有0SDC指示。行750指示对于2个不同设备中为2b的任何错误(2个不同设备中的2个错误位),毒模式掩码导致100% DUE,具有0SDC指示。
图8是用于实现毒缓存线的过程的示例的流程图。过程800表示用ECC实施毒线的过程。过程800可以由根据系统500的示例或系统600的示例的系统执行。
系统可以在802处从存储器读取数据线,并且在804处对数据线执行ECC检测。在806处,系统确定是否存在在数据线中检测到的错误。如果在808否分支处没有检测到错误,则在810处,数据线是干净的数据线。
如果在808是分支处存在检测到的错误,则在一个示例中,存储器控制器在812处确定该错误是否匹配毒模式条件。毒模式条件指示当利用毒模式掩码计算数据线时,如果使用毒模式掩码,则结果是预期的模式。替代地,在使用预定义毒位序列而不是毒模式掩码的毒模式写入的情况下,毒模式条件指示数据线具有指示毒线的预期数据模式。
如果在814是分支处毒模式条件匹配,则在一个示例中,存储器控制器在816处将数据线识别为毒数据线。如果数据线是毒线,则存储器控制器可以忽略缓存线中的数据。因此,存储器控制器将继续操作而不使用来自毒数据线的数据。如果在814否分支处毒模式条件不匹配,则在一个示例中,存储器控制器将尝试校正错误。
在一个示例中,存储器控制器在818处开始ECC重试。在820处,存储器控制器可以从存储器中读取数据线。在822处,存储器控制器中的错误逻辑可以对数据线执行ECC校正。如果在824是分支处,利用错误校正过程校正错误,则在828处,结果是具有经校正的错误的干净存储器线。如果错误没有被校正,则在826处,系统确定数据是DUE。
图9是基于永久故障检测来执行ECC的系统的示例的框图。系统900可以是根据系统100的示例的系统,其中该系统还包括永久故障检测。
系统900包括耦合到统称为存储器设备920的N个存储器设备920[0:(N-1)]的存储器控制器910。存储器设备920包括存储器阵列922。在一个示例中,阵列922可以包括根据本文任一示例指定用于特定ECC目的的行。这些行没有在系统900中具体示出。
数据总线922将存储器设备920耦合到存储器控制器910。存储器设备920可以将全部数据的一部分提供给存储器控制器910用于读取事务。因此,数据总线924被示为具有与存储器设备920[0]相关联的部分0、与存储器设备920[1]相关联的部分1、以及与存储器设备920[N-1]相关联的部分N-1。
存储器控制器910包括ECC 930,其表示执行ECC的硬件、实现ECC操作的固件或硬件和固件的组合。固件可以控制ECC硬件的操作。ECC 930对来自存储器设备920的数据的部分[0:(N-1)]执行ECC。因此,ECC 930可以执行系统级ECC并且基于来自多个存储器设备的信息并行地执行错误校正。
ECC 930可以被认为具有检测932,其表示基于传入码字执行错误的检测的ECC逻辑。传入码字可以是从存储器设备920接收的数据位。在典型的实施方式中,N个存储器设备920将包括一个或多个专用于存储ECC位的存储器设备,而其它设备将存储用户数据。
检测932可以基于H矩阵936起作用。H矩阵提供了对传入码字的ECC操作的代码表示。如果与H矩阵的计算的结果导致H矩阵中的条目为零,则数据是干净的并且没有错误。如果存在非零校正子,则计算已经在H矩阵936内生成对应于码字中的位的列。校正934表示ECC 930内的基于检测932和来自基于H矩阵936的计算的地址位置执行数据的校正的逻辑。通常,校正934将翻转码字中与H矩阵中的非零校正子位置相对应的位。
在一个示例中,存储器控制器910包括PFD逻辑940。PFD逻辑940提供了执行永久故障检测的PFD引擎或PFD硬件或PFD电路的示例。PFD逻辑940可以称为故障检测逻辑。在一个示例中,PFD逻辑940是存储器控制器910中的固件逻辑。PFD逻辑940使存储器控制器910能够确定存储器设备920内错误的严重性。
在一个示例中,PFD引擎可以通过响应于对卡住位的检测将已知模式(例如,1010...b)写入正在故障的地址来操作。主机然后可以读回数据以确保错误是暂时的而不是永久的。为了确保正确校验地址,主机写入需要确保数据被写入阵列(例如,通过发出预充电并且然后再次打开页进行读取),而不仅仅是写入感测放大器。
更具体地,PFD逻辑940可以确定由ECC 930检测到的错误是暂时的还是永久的。暂时错误指的是在数据线的一次读取中出现但是在相同数据线的后续读取中不出现的错误。永久故障指的是无论向数据线写入什么内容,在数据线的至少一位或一个单元中持续存在的错误。这样的错误可以称为卡住位。
存储器错误可分为非永久故障和永久故障。对于永久存储器故障,PFD逻辑940可以通过对数据线进行读取和写入的组合来识别错误位置,以确定特定位置是否始终具有错误。在一个示例中,PDF逻辑940向ECC 930提供关于永久故障位置的信息以通知或增强ECC的实施。
PFD逻辑940的操作的一个示例可以是根据PFD流程950的。PFD流程950指示数据线960的初始状态。线的具体值没有任何意义,并且仅提供用于说明目的。针对说明数据线960而选择的特定位没有特别的意义,并且可以在数据线的M个位中的任何位中检测到错误。同样,提供的位仅用于说明目的。
在初始状态下,位[4:9]具有位模式“101011”。数据线960的其它位值未针对系统900指定。假定在位b7处检测到至少一个错误,PFD逻辑940可以执行位翻转位例程来检测永久故障。例如,PFD流程950可以涉及重复写入全零(WR 0)、随后写入全1(WR 1)、写入全零(WR 0),以此类推。替代地,可以使用位模式,诸如“1010……”或其它一些位模式。
响应于PFD流程950的第一个WR 0,数据线位[4:9]具有位模式'101000',其包括在位b9和b7处的错误。PFD流程950的WR 1导致数据线位[4:9](具有位模式“111111”),这指示没有位[4:9]在零处卡住。响应于PFD流程950的第二个WR 0,数据线位[4:9]具有位模式“001000”,其包括b9处的先前错误是暂时错误,而b7处的错误似乎是永久的。位翻转或以已知模式写入可以持续所需的多个周期以确定位的状态并且降低暂时错误将被确定为永久错误的可能性。因此,PFD逻辑940可以通过连续多次写入全零和全一来执行校验以检测卡住位。
在一个示例中,代替写入已知位模式,可以使用当前读取数据,或当前读取数据及其补充(即,每个位位置在后续写入时翻转)。PFD流程950没有明确指示读取,但是PFD流程950将在写入之后进行读取以允许PFD逻辑940将读取数据与写入数据进行比较。在一个示例中,PFD逻辑940仅在错误被ECC 930检测到时才操作。因此,PFD逻辑940不具有被调度或周期性操作,而是由错误检测触发。
PFD逻辑940可以创建在虚线位[(M-1):0]中所示的映射来指示在数据线960中的何处检测到永久错误(如果有的话)。在一个示例中,PFD逻辑940包括计数器942,其表示跟踪在存储器设备920中检测到的永久故障的计数器。在一个示例中,计数器942具有相关联的门限,以在达到门限错误计数时触发存储器控制器910内的错误控制来执行校正动作。在一个示例中,计数器942可以保持错误计数和错误的映射。
PF(永久故障)日志938表示由PFD 940识别的永久故障的日志或映射。PF日志938可以是虚线位[(M-1):0]中所示的映射。通过PF日志938,ECC 930可以指示在数据总线924上接收到的数据内永久位错误的位置。在一个示例中,ECC 930可以基于了解永久故障所在的位置来实现更好的校正。PFD逻辑940将识别要求校正的设备,使ECC 930能够使用错误位置信息来改进ECC校正。校正934可以进行有针对性的校正,其可以称为错误擦除。错误擦除比单纯使用ECC作为校正具有更强的覆盖。
替代地,ECC 930可以使用PF日志938来确定校正934是否已经基于了解数据总线924上的数据内的永久故障的位置而生成了正确的校正。例如,如果校正934针对数据线960生成校正数据值,其对数据位的已知卡住状态具有“位校正”,则可以确定该校正是错误的。在一个示例中,ECC 930在将数据作为经校正的数据进行传递之前确定校正934的结果是否违反任何已知的永久故障。
例如,如果PFD逻辑940向ECC 930指示存储器设备920[l]具有永久故障,则ECC930可以基于了解某个数据值将始终由存储器设备920[l]产生来调整H矩阵936的应用,在一个示例中,ECC 930可以将ECC操作仅集中在故障设备上,而不是试图对良好设备执行错误校正。通过更早地识别永久故障,系统900可以利用冗余逻辑或其它方法减轻永久故障的影响。因此,系统900可以节省用于检测不可预测的暂时故障的ECC的应用,而不是试图应用ECC来校正可预测的已知故障。
将理解,如果在PFD流程950期间没有重新产生错误并且错误不能单独由ECC校正,则该错误仍将保持不可校正。此外,PFD逻辑940应当能够检测硬错误或永久错误,这些错误应当在PFD流程950期间重新产生。即使在已经识别出坏的设备并且ECC 930仍然无法校正错误时,也可能存在极端情况或不常见的情况。即使错误仍然是不可校正的,存储器控制器910也可以知道这些错误。
图10是永久故障检测的过程的示例的流程图。过程1000表示可以由根据系统900的示例的系统执行的永久故障检测的过程。
在1002处,系统检测从存储器中读取的数据中的错误。例如,存储器控制器可以对数据执行错误校验并且检测一个或多个错误。在一个示例中,响应于错误的检测,在1004处,存储器控制器处的错误逻辑确定执行永久故障检测以获得PFD结果或PFD信息,以通知ECC在系统中的应用。
在一个示例中,系统在1006处对数据执行ECC,并且使用PFD信息与ECC。ECC的执行可以产生ECC结果,系统可以使用该结果来确定是否存在错误。在一个示例中,错误逻辑在1008处确定错误是否被ECC的应用校正。如果在1010是分支处错误被校正,在一个示例中,错误逻辑或错误控制在1012处对照PFD结果校验错误校正。因此,系统可以使用PFD结果作为ECC校正的参考。例如,ECC校正某个设备中的一个或多个错误,并且将错误校正结果与PFD结果进行比较。在1014是分支处,如果错误校正与PFD信息相匹配,则在1016处,校正是良好的。在1014否分支处,如果不匹配,则校正结果为假,并且系统可以在1018处执行错误处理例程。照此,一种实施方式使得将PFD的结果用于错误校正比较而不是用于增强错误校正的强度。
在一个示例中,在1010否分支处,如果错误未被ECC的应用校正,则错误逻辑在1020处将PFD结果与错误校正进行比较。在1022处,系统可以基于比较来确定是否可能将对数据进行进一步的错误校正。在1024否分支处,如果额外的错误校正将是不可能的,则系统可以在1026处将错误报告为DUE。在1024是分支处,如果额外的错误校正将是可能的,则在一个示例中,在1028处系统基于PFD信息来校正错误。
因此,在一个示例中,可以在主ECC检测到错误并且尝试执行校正失败的情况下使用PFD信息。如果PFD信息识别出故障设备,则可以将这种信息提供给主ECC,以使ECC能够应用该信息从故障设备中恢复。
图11是具有存储器设备(其具有存储器的预留区域)的存储器模块和可以执行永久故障检测和动态备用的控制器的示例的框图。系统1100表示根据系统100的示例的系统。
系统1100示出了具有共享控制总线(C/A(命令/地址)总线1142)和数据总线(用于通道[0]的数据总线1144[0]和用于通道[1]的数据总线1144[1])的存储器设备的系统的一个示例。存储器设备表示为DRAM(动态随机存取存储器)设备1130。每个通道有N个DRAM设备,DRAM 1130[0:(N-1)],其中N可以是任何整数。在一个示例中,N包括一个ECC DRAM设备并且其它N-1个DRAM设备是数据设备。在一个示例中,N包括两个ECC DRAM设备并且其它N-2个DRAM设备是数据设备。在一个示例中,两个单独的通道共享在控制器1140到RCD 1120之间的C/A总线1142连接。在一个示例中,单独的通道将具有单独的C/A总线。DRAM设备1130可以利用设备特定命令单独访问,并且可以利用并行命令并行访问。
RCD(注册时钟驱动器或注册时钟驱动器)1120表示DIMM(双列直插存储器模块)1110的控制器。在一个示例中,RCD 1120从控制器1140接收信息并且将信号缓冲到各个DRAM设备1130。通过缓冲来自控制器1140的输入信号,控制器仅看到RCD 1120的负载,RCD1120然后可以控制到DRAM设备1130的定时和信令。
在一个示例中,RCD 1120通过C/A总线1122[0]控制到通道[0]的DRAM设备的信号,并且通过C/A总线1122[1]控制到通道[1]的DRAM设备的信号,在一个示例中,RCD 1120具有用于单独通道的独立命令端口。在一个示例中,DIMM 1110包括用来缓冲在DRAM设备1130和控制器1140之间的数据总线信号的数据缓冲器(未示出)。数据总线1144[0]针对通道[0]的DRAM设备提供数据总线,并且数据总线1144[1]针对通道[l]的DRAM设备提供数据总线。
C/A总线1122[0]和C/A总线1122[1](统称为C/A总线1122)通常是单侧总线或单向总线,用于将命令和地址信息从控制器1140传送到DRAM设备1130。因此,C/A总线1122可以是多点总线。数据总线1144[0]和数据总线1144[1](统称为数据总线1144)常规上是双向的、点对点的总线。
在一个示例中,控制1146[0]表示启用通道[0]的DRAM 1130的信号线,并且控制1146[1]表示启用通道[1]的DRAM 1130以向控制器1140提供控制信号的信号线。控制信号可以是例如错误指示或不是数据总线1144的部分的其它信号。
在一个示例中,DRAM 1130包括ECC 1132,其表示用于DRAM设备的ECC逻辑。在一个示例中,DRAM 1130包括区域(RGN)1134,其表示针对用于ECC目的而预留的DRAM的区域或部分。在一个示例中,区域1134是针对动态存储体备用预留的区域。在一个示例中,区域1134表示预留为第2层ECC位的区域(下面更详细地描述)。
在一个示例中,控制器1140包括错误控制1150,其表示根据本文任一示例的错误控制。错误控制1150可以检测从DRAM 1130接收的数据中的错误。如图所示,每个DRAM 1130提供M位的数据作为数据总线1144的数据段(DS)。例如,在DRAM 1130[N-1]提供DS[N-1]的情况下,DRAM 1130[0]生成数据段DS[0],DRAM[1]生成DS[1],以此类推。
控制器1140接收所有数据段作为输入数据。出于错误评估或ECC的目的,数据位可以表示具有长度M*N或N*M(DRAM 1130的数量乘以由每个DRAM提供的位数)的码字。在一个示例中,控制器1140包括用于不同通道的单独的错误控制1150。如图所示,错误控制1150[0]针对通道[0]提供错误控制操作,并且差错控制1150[1]针对通道[1]提供错误控制操作。
在一个示例中,错误控制1150[0]和错误控制1150[1](统称为错误控制1150)包括执行一个或多个ECC功能的逻辑。在一个示例中,错误控制1150包括对码字执行错误校验和校正的ECC逻辑。在一个示例中,ECC逻辑基于ECC DRAM 1130中的数据以及区域1134中的数据进行操作。响应于错误的检测,错误控制1150可以实施PFD、动态备用或一些其它ECC操作。动态备用可以是存储体备用、边界备用或其它操作。错误控制操作可以根据所提供的任何示例。在一个示例中,可以一起使用ECC功能或ECC操作。
图12是具有边界故障备用的系统的示例的框图。系统1200表示根据系统1100的示例或系统100的示例的系统。系统1200示出了根据本文的任何示例的来自存储器模块的数据输出模式的示例。
在一个示例中,系统1200示出了边界备用的实施方式。模块1210表示具有标记为设备[0:9]的10个设备的存储器模块,这些设备被示出为x4设备,这是指与数据(DQ)总线的接口的信号线的数量。x4设备具有在系统1200中以16的突发长度输出数据的四条信号线。
如图所示,系统1200以BL16或16个单位间隔的突发长度操作。每个设备可以每单位间隔发送(对于读取操作)或接收(对于写入操作)4位,每个设备每次操作或事务(读取或者写入)总共64位。基于数据是从控制器1220发送到存储器设备,还是从存储器设备发送到控制器1220,去往和来自模块1210的位的顺序可以颠倒。不管位的方向和突发顺序,一般来说,在一个示例中,在第一周期(突发顺序0)期间,数据位D[0:3]在数据总线上传输,由数据1212表示。对于第二个周期(突发顺序1),数据位D[4:7]被传输,依此类推,直到突发顺序15的数据位D[60:63]为止。
将理解,可以使用数据的任何顺序。对于不同系统中的不同数据量,可以使用不同的突发长度、不同的突发顺序、不同的数据总线接口(例如,x8或xl6)。事务的原理将保持不变,即模块1210和控制器1220的数据设备在数据总线上交换数据1212。
系统1200表示10x4模块配置(指的是具有x4 DQ接口的10个存储器设备)的示例。在这样的配置中,通常Device[0:7]将是“数据”设备,而Device[8:9]是“ECC”设备。数据设备是指用于读取或写入事务的实际用户数据。ECC设备是指存储校验位或奇偶校验位以针对数据位解码ECC的设备。在一个示例中,来自每个设备的64位数据表示缓存线或缓存线的一部分(例如,128位缓存线的64位)。因此,每个设备的整个位集合表示单个缓存线或线的一部分的位。
在系统1200中,设备0被突出显示。考虑设备0的一半设备经历故障。设备[0:9]用由不同的阴影表示的两半示出。设备的一半绘有阴影,而另一半则没有。不同的阴影指示故障可能发生在边界或设备的一部分中,而不是设备的另一部分中。在一个示例中,系统1200可以通过保留故障的部分并且允许设备的另一部分继续被使用来解决一个部分中的故障。
正如整个设备可能发生故障一样,设备也可能在边界处发生故障。边界指的是基于访问或解码硬件的存储器阵列的分离。例如,x4设备可能会在设备的一半发生故障(影响设备的两条信号线或每单位间隔的两位),或者在设备的四分之一中发生故障(影响设备的一条信号线或每单位间隔的单个位)。类似地,x8设备可能在设备的一半发生故障(影响四条信号线),或者在设备的四分之一中发生故障(影响信号线中的2条信号线)。因此,设备[0:9]可以在存储器设备的一半或一部分中出现故障。
在一个示例中,控制器1220检测边界错误1232,从而指示设备[0]的一半已经发生故障。考虑到D0和D1是右半部分,并且D2和D3是左半部分(尽管根据所采取的视角,左右的名称可以颠倒),边界错误1232可以检测到设备[0]左半部分的故障。错误检测可以检测到设备[0]的左半部分故障。基于可用的ECC位,系统1200可以对数据执行错误校正以校正边界故障。在一个示例中,不是用ECC操作校正每次读取的错误,而是控制器1220的错误控制1230执行边界故障备用。
边界故障备用包括将设备[0]的故障部分(或其它部分,这取决于检测到边界故障的位置)的内容复制到ECC设备中的一个ECC设备。设备[9]的一部分被高亮显示,以指示边界错误1232的数据被复制到的空间。该复制被标识为替换1234,以指示控制器1220将设备[9]的左半部分的地址替换为设备[0]的左半部分位。虽然左半部分的位用于映射数据设备的故障的左半部分,但是将理解,不要求使左侧匹配左侧或使右侧匹配右侧。更确切地说,系统1200简单地示出了故障部分可以备用到模块1210内的不同设备。
在一个示例中,边界故障备用还包括根据新架构调整ECC的应用。如果数据部分备用到ECC设备中的一个ECC设备,则可能有更少的ECC位用于错误校验和校正的应用。在剩余位中存储的ECC值还可能需要更改,以反映系统中较少数量的位。
基于DDR5 DRAM的架构,DDR5存储器中的故障更有可能被限制在单个边界故障区域,而不是整个设备。在一个示例中,在系统1200中,当模块1210包括具有单个边界故障区域的设备时,主机通过在主机处理器或CPU上执行,可以启动边界故障备用来备用故障边界。在一个示例中,启动边界故障备用导致控制器1220中的操作发生以实施边界故障备用。错误控制1230可以表示实现边界故障备用的逻辑,这可以被认为是一种类型的动态备用。在一个示例中,边界故障备用包括将ECC算法从原始SDDC状态转移到边界故障状态,使系统能够在检测到第二个这种故障的情况下实施ECC以校正第二个检测到的边界故障。
在系统1200中,设备[9]的左侧32b块被预留用于备用边界错误1232。在一个示例中,32b的元数据被存储在设备[8]的右半块中,而32b ECC被存储在设备[8]的左半部分,并且另一个32b ECC被存储在设备[9]的右半部分。系统1200将不同类型的数据示为针对用户数据的D0、D1、D2、……;针对元数据的M0、M1、M2、……;作为ECC位的一部分的L0、L1、L2、……以及作为ECC位或奇偶校验位的另一部分的P0、P1、P2、……。系统1200将设备[9]的备用区域示为S2、S3、S6、S7、S10、S11、……,作为对应于设备[0](作为D2、D3、D6、D7、D10、D11、……)的“替代”数据。
在一个示例中,边界故障备用以正常模式运行并且不需要虚拟锁步操作。ECC覆盖可以总结如下。在一个示例中,如果PFD识别出零故障边界故障,则它可以100%校正单个边界故障。但是,如果出现单个设备故障(这意指双边界故障块),则ECC可能具有小比例的SDC。在一个示例中,如果PFD识别出一个故障边界故障,则它可以100%校正单个边界故障。它可以100%检测到一个永久边界故障和一个暂时边界故障。在一个示例中,如果PFD识别出两个故障边界故障,则它可以100%校正双边界故障。
边界故障备用可以充当在SDDC和ADDDC(其可能要求锁步操作)之间的中间状态,而不会降低性能。在一个示例中,系统应用边界故障备用来备用第一个边界故障,并且然后校正第二个边界故障。边界故障可以被识别为在存储器设备的特定部分或特定区域中的故障。边界故障可以被识别为在数据线上从正在故障的存储器设备发送的数据的特定位或特定部分的故障。正在故障的存储器设备可以被称为使其接口的一部分发生故障(指的是无法在接口的选定信号线上向接口正确提供数据的内部错误)。
当存储器设备的多个部分发生故障时,可以说整个存储器设备发生故障。例如,存储器设备可能首先在接口的一部分出现故障,随后接口另一部分的故障可能导致整个设备故障。
图13是具有边界故障备用的存储器模块的示例的框图。系统1300表示根据系统100的示例或系统1100的示例或系统1200的示例的系统。
系统1300示出了具有共享C/A总线1342和数据总线(用于通道[0]的数据总线1344[0]和用于通道[1]的数据总线1344[1])的存储器设备的系统的一个示例。存储器设备表示为DRAM(动态随机存取存储器)设备1330。每个通道有N个DRAM设备,DRAM 1330[0:(N-1)],其中N可以是任何整数。在一个示例中,N包括一个ECC DRAM设备并且其它N-1个DRAM设备是数据设备。在一个示例中,N包括两个ECC DRAM设备并且其它N-2个DRAM设备是数据设备。在一个示例中,两个单独的通道共享在控制器1340到RCD 1320之间的C/A总线1342连接。在一个示例中,单独的通道将具有单独的C/A总线。DRAM设备1330可以用设备特定命令单独访问,并且可以用并行命令并行访问。
RCD 1320表示DIMM(双列直插存储器模块)1310的控制器。在一个示例中,RCD1320从控制器1340接收信息并且将信号缓冲到各个DRAM设备1330。通过缓冲来自控制器1340的输入信号,控制器仅看到RCD 1320的负载,RCD 1320然后可以控制到DRAM设备1330的定时和信令。
在一个示例中,RCD 1320通过C/A总线1322[0]控制到通道[0]的DRAM设备的信号,并且通过C/A总线1322[1]控制到通道[1]的DRAM设备的信号。在一个示例中,RCD 1320具有用于单独通道的独立命令端口。在一个示例中,DIMM 1310包括用于缓冲在DRAM设备1330和控制器1340之间的数据总线信号的数据缓冲器(未示出)。数据总线1344[0]针对通道[0]的DRAM设备提供数据总线,并且数据总线1344[1]针对通道[l]的DRAM设备提供数据总线,
C/A总线1322[0]和C/A总线1322[1](统称为C/A总线1322)通常是单侧总线或单向总线,用于将命令和地址信息从控制器1340传送到DRAM设备1330。因此,C/A总线1322可以是多点总线。数据总线1344[0]和数据总线1344[1](统称为数据总线1344)常规上是双向的、点对点的总线。为简单起见,系统1300没有示出从DRAM到控制器1340的控制信号线。
在一个示例中,DRAM 1330包括ECC 1332,其表示用于DRAM设备的ECC逻辑。DRAM1330被示为分成具有阴影区域和非阴影区域的两半。阴影区域对应DQR,其表示右侧数据总线接口。非阴影区域对应DQL,其表示左侧数据总线接口。右或左的指定与页上的表示有关,并且可以在另一上下文中颠倒。
如图所示,DRAM 1330是x4设备,具有耦合到数据总线1344的四个信号线。DQR和DQL将设备分成x2的两个部分。在一个示例中,该设备可以分为x1的四个部分。对于x8设备,可以基于DRAM设备内的边界进行不同的分隔。边界可以对应于DRAM设备内的存储器阵列的部分之间的驱动器或访问电路装置。
在一个示例中,DRAM 1330包括预留区域,由较暗的阴影示出并且被指定为“RES”用于预留。预留区域可以是根据以上任何示例的用于动态备用的区域。根据所描述的任何示例,预留区域可以是用于基于在ECC DRAM中存储的第1层位和在预留区域中存储的第2层位的ECC的应用的预留区域。下文提供了有关基于第1层位和第2层位的ECC的更多细节。
控制器1340从DRAM 1330接收数据(统称为输入数据)。出于错误评估或ECC的目的,数据总线1344上接收到的码字包括并行DRAM的位。在一个示例中,控制器1340包括用于不同通道的单独的错误控制1350。如图所示,错误控制1350[0]针对通道[0]提供错误控制操作,并且错误控制1350[1]针对通道[1]提供错误控制操作。
在一个示例中,错误控制1350[0]和错误控制1350[1](统称为错误控制1350)包括执行一个或多个ECC功能的逻辑。虽然未明确示出,但是错误控制1350包括对码字执行错误校验和校正的ECC逻辑。在一个示例中,错误控制1350可以包括用于实现PFD、动态备用或一些其它ECC操作的逻辑。动态备用可以是存储体备用、边界备用或其它操作。错误控制操作可以根据所提供的任何示例。在一个示例中,可以一起使用ECC功能或ECC操作。
在一个示例中,DRAM 1330可以基于由设备的分开的一半示出的边界来管理。在一个示例中,错误控制1350包括边界逻辑1352,其表示用于边界备用的逻辑。边界逻辑1352可以使错误控制1350能够识别基于边界的故障。在一个示例中,边界逻辑1352使控制器1340能够分配DRAM 1330内的存储器空间以实现边界备用。控制器1340可以将数据从故障区域移动或复制到备用边界区域并且重新映射地址的使用。在一个示例中,错误控制基于从故障边界区域到备用边界区域的数据的备用生成ECC的新应用。在一个示例中,错误控制1350使控制器1340能够在系统1300的运行时间期间动态地执行边界备用。
在一个示例中,DRAM 1330包括错误校验和清理(ECS)1334。ECS 1334表示存储器设备内的硬件和逻辑,用于校验存储器阵列中的错误,利用管芯上ECC(即ECC 1332)校正错误,并且将经校正的数据写回存储器阵列。校正并且将经校正的数据写回“清理”错误阵列。
在一个示例中,ECS 1334跟踪在校验和清理过程中遇到的错误并且将错误报告给控制器1340。这样的操作可以称为ECS透明性。可以通过偏移来过滤错误的报告以指示自从将存储器设备部署到系统1300中以来的新错误。过滤可以允许存储器设备仅报告系统中的错误率,而不是报告包括制造中出现的缺陷的所有错误。在一个示例中,ECS 1334向错误控制1350提供错误跟踪信息,错误控制1350可以将该信息用于系统级的ECC的应用。
图14是基于边界故障备用的存储器错误控制的示例的框图。系统1400表示根据系统1200的示例或系统1300的示例的系统。
系统1400包括错误控制1410,其可以是根据本文任何示例的错误控制逻辑。在一个示例中,错误控制1410管理ECC在系统中的应用。错误控制1410是主机系统的存储器控制器的部分。在一个示例中,错误控制1410以SDDC模式开始运行系统1400。SDDC ECC模式可以根据由PFD 1420对错误的检测而改变。
在一个示例中,错误控制1410包括由计数器1412表示的错误计数器。计数器1412使错误控制1410能够记录在数据中检测到的错误的数量。在一个示例中,计数器1412与存储器系统内的ECS操作的执行相关联。在一个示例中,计数器1412跟与PFD单元的错误的检测相关联,并且跟踪系统中永久故障的数量。在一个示例中,计数器1412可以是表示永久故障检测单元的PFD 1420的部分。
在一个示例中,如果错误得到校正并且PFD单元未识别出任何故障设备,则系统可以继续对已校正的数据进行操作。在一个示例中,如果计数器1412达到经指派的门限并且永久故障检测单元没有识别出任何故障设备,则错误控制1410可以检查错误记录。错误记录指的是指示数据内存在错误的位置的日志或映射。如果记录的错误是边界故障(如边界区域或特定数据位块所示),则存储器控制器可以执行边界故障备用。
在系统1400中,该操作可以被视为PFD 1420确定是否存在错误。如果PFD检测到0个设备故障,则在一个示例中,系统可以应用边界故障(BF)备用1460用于一个边界故障1432的可校正错误。如果没有故障设备但是存在多个边界故障,则记录的错误超出单个边界故障1434,并且存储器控制器可以执行ADDDC 1470来校正错误。
在一个示例中,并非所有第二边界故障都将触发ADDDC 1470。如果第一和第二边界故障在相同的存储器设备中,则将需要应用ADDDC 1470。例如,如果第一边界故障是设备[4]右半块,则可以通过ECC校正错误,并且存储器控制器可以通过错误控制1410触发边界故障备用。在边界故障备用之后,如果设备[4]左半块也故障,并且错误被校正,则存储器控制器通过错误控制1410可以通过备用设备[4]进入ADDDC 1470。如果第二边界故障在另一个设备中,则系统可能需要进入服务状态或故障状态。
在一个示例中,如果PFD 1420检测到一个故障设备并且尚未达到计数器1412的错误计数门限,则存储器控制器通过错误控制1410可以决定利用边界故障备用1460来寻址一个边界故障1442的可校正错误。在一个示例中,如果PFD 1420检测到一个故障设备并且尚未达到计数器1412的错误计数门限,则存储器控制器通过错误控制1410可以决定利用ADDDC 1470来寻址一个设备故障1444的可校正错误。
如果PFD 1420检测到多于一个设备故障,则在一个示例中,存储器控制器通过错误控制1410报告DUE 1450。在一个示例中,DUE 1450可以触发错误恢复例程或服务状态。
图15是边界故障备用的过程的示例的流程图。过程1500表示可以由系统1300的示例或系统1400的示例执行的具有边界故障备用的ECC的过程。
在1502处,存储器控制器可以检测到从存储器读取的数据中的错误。在一个示例中,在1504处,存储器控制器触发永久故障检测(PFD)的执行以确定错误是否是永久故障。
在一个示例中,在1506是分支处,如果错误是永久故障,则存储器控制器在1508处确定故障是单个设备故障还是多设备故障。在1510否分支处,如果故障不是单个设备故障,则故障是多设备故障,并且在一个示例中,在1512处,存储器控制器指示DUE。
在一个示例中,在1506否分支处,如果没有永久故障,或者在1510是分支处,如果永久故障是单个设备故障,则在一个示例中,存储器控制器确定错误是边界故障还是设备故障。在DDR5存储器中,存储器故障最有可能限于单个边界区域。边界区域对于DDR5可以是32b块,或者可以是16b块。边界故障只影响最多32b个故障,这是一种在可由SDDC校正的单位错误(SBE)和可由ADDDC校正的多位错误(MBE)之间的故障的类型。如果系统在系统遇到边界故障时直接进入ADDDC,则将降低系统的CPU性能。
在一个示例中,系统具有边界故障备用的选项作为在SDDC和ADDDC之间的中间状态。如果CPU操作的执行遇到如由存储器控制器错误控制检测到的边界故障,则存储器控制器可以触发边界故障备用以备用第一边界故障。通过应用ADDDC,存储器控制器仍然可以在针对第一边界故障的边界故障备用之后校正第二边界故障。
因此,在1516否分支处,如果故障不是边界故障,则在一个示例中,存储器控制器在1518处触发ADDDC的执行。在一个示例中,在1516是分支处,如果故障是边界故障,则存储器控制器在1520处执行边界故障备用。
图16是针对提高的RAS来实现存储器区域隔离的系统架构的示例的框图。系统1600表示根据系统100的示例或系统1100的示例的系统。
系统1600示出了具有RCD 1620的DIMM 1610和存储器设备的一个示例。RCD 1620表示DIMM 1610的控制器。在一个示例中,RCD 1620从控制器1650接收信息并且在C/A总线1622上将信号缓冲到存储器设备,C/A总线1622表示如由RCD 1620控制的DIMM 1610上的命令总线。RCD 1620可以控制C/A总线1652到存储器设备的信号。C/A总线1622和C/A总线1652通常是单侧总线或单向总线以将命令和地址信息从控制器1650传送到存储器设备。
存储器设备表示为数据DRAM设备1632和ECC DRAM 1634。为简单起见,系统1600仅示出了一个通道,但是将理解,DIMM 1610可以具有多个通道。DIMM 1610包括N个数据DRAM设备,数据DRAM 1632[0:(N-1)],其中N可以是任何整数。在一个示例中,DIMM 1610包括一个ECC DRAM 1634。更具体地说,DIMM 1610不包括足够的ECC DRAM来提供实现系统1600所需的RAS覆盖。
在一个示例中,数据DRAM 1632的区域被分配或隔离以用于针对DIMM 1610应用更高级别的ECC保护。隔离区域(SQST)1636表示隔离在数据DRAM 1632内以提供附加ECC覆盖的区域。
数据总线1654表示在存储器设备和控制器1650之间交换数据的总线。数据总线1654常规上是双向、点对点总线。为了简单起见,系统1600没有示出从存储器设备到控制器1650的控制信号线。
数据DRAM 1632和ECC DRAM 1634被示为具有xM接口,具有M个数据总线引脚DQ[0:(M-1)]。M可以是任何整数,并且通常是二进制整数,例如4、8或16。每个DQ接口将在突发长度(例如,用于16个单位间隔数据交换的BL16)上传输数据位。在一个示例中,M个焊盘或引脚在突发长度上的数据输出将表示多个位,例如32位或64位。在一个示例中,位数与由存储器设备执行的内部预取相匹配。在一个示例中,位数是内部预取的一半。将理解的是,当并非所有预取数据都被使用时,可以将所有预取数据放置在感测放大器中,并且然后仅选择的数据将用于存储器访问。
控制器1650接收来自数据DRAM 1632的数据位1642和来自ECC DRAM 1634的ECC位1644共同作为数据总线1654上的输入数据。出于错误评估或ECC的目的,数据总线1654上接收到的码字包括数据DRAM的数据位1642,而来自ECC DRAM的ECC位1644提供用于解码码字。
在一个示例中,错误控制1660包括执行一个或多个ECC功能的逻辑。虽然未明确示出,但是错误控制1660包括对码字执行错误校验和校正的ECC逻辑。在一个示例中,错误控制1660可以动态隔离或分配隔离区域1636以针对系统1600提供改进的ECC。在一个示例中,隔离区域被配置在存储器设备的配置中。在一个示例中,存储器设备不知道隔离区域1636是除了存储器阵列内的另一段或地址组之外的任何东西。因此,通过读取和写入的操作的错误控制1660可以将隔离的存储器段用于ECC而无需数据DRAM 1632中的任何特定指定。
在一个示例中,系统1600通过2层ECC操作提供ECC。在一个示例中,第一层提供检测,并且第二层提供校正能力。在一个示例中,仅当第一层检测到错误时才访问第二层。更具体地,在ECC DRAM 1634中存储的数据可以是层一或第一层ECC位以提供错误检测。控制器1650可以在隔离区域1636中存储额外的ECC数据以帮助错误校正。响应于错误的检测,在一个示例中,控制器1650访问隔离区域1636来检索用于ECC校正的位。
将理解,在单个ECC DRAM 1634的情况下,DIMM 1610没有足够的ECC位来执行单个数据设备校正。例如,SDDC并非在所有情况下都能够用于5x8或9x4配置。5x8配置是指具有带x8数据接口的5个设备的存储器模块。9x4配置是指具有带x4接口的9个设备的存储器模块。常规上,每个配置将需要用于ECC位的额外的设备来提供SDDC(即6x8或10x4)。添加另一个存储芯片会增加成本。
在一个示例中,动态地隔离数据可以针对没有足够数据设备来为SDDC提供ECC位的系统配置提供足够的ECC位。这种情况可能是DIMM被设计有提供完整的SDDC实施所需的更少的设备。在一个示例中,针对ECC隔离存储器可以动态执行,作为系统经历设备故障的错误处理策略。例如,考虑被设计有足够的ECC设备用于SDDC的系统。如果该系统随后出现设备故障,则在一个示例中,系统可以使故障设备离线,隔离剩余设备上的数据区域,并且实施两层ECC来提供SDDC。与虚拟锁步模式相比,隔离区域1636的使用具有较低的性能影响。因此,隔离存储器可以支持针对DDR55x8模块、9x4模块或类似5x8模块或9x4模块的经历故障的模块的100% SDDC实施。
在一个示例中,错误控制1660实施隔离存储器ECC。在一个示例中,第1层ECC数据或第1层数据与写入数据DRAM 1632的数据并行地被存储在ECC DRAM 1634中。因此,第1层数据可以如常规上对ECC数据所做的那样附加数据。错误控制1660还可以计算第2层ECC数据或第2层数据以存储在另一个存储器位置(隔离区域1636)。在一个示例中,第1层位是由第1层位和第2层位的总位表示的全矩阵的子矩阵。因此,全矩阵可以是附加到第2层位的第1层位,而第1层位是全矩阵的子矩阵。
在一个示例中,错误控制1660不访问隔离区域1636中的存储器来进行ECC检测,并且仅响应于检测到需要校正的错误而访问数据。因此,ECC检测可以仅根据ECC DRAM 1634中的ECC位发生,而ECC校正利用ECC DRAM 1634中的位和隔离区域1636中的ECC位。
在一个示例中,错误控制1660需要针对每次写入更新隔离区域1636,以更新ECC。因此,写入操作可能导致额外的开销来利用隔离存储器实现增加的ECC。第1层ECC位的写入没有开销,因为它与数据一起发生。为了更新第2层ECC位,控制器1650读取具有第2层ECC位的存储器线(隔离区域1636),更新第2层ECC位,并且将缓存线写回数据DRAM 1632。因此,写入操作将导致一次读取和两次写入。在一个示例中,系统1600包括用于缓存第2层ECC位的缓存,这可以降低第2层写入的频率。
图17是具有9x4存储器模块的隔离存储器的系统架构的示例的框图。系统1700表示根据系统100的示例或系统1600的示例的系统。
DIMM 1710具体示出了9x4实现的配置,具有8个数据DRAM(DRAM[0:7])和一个ECCDRAM。DRAM[0:7]和ECC DRAM有x4接口(具有DQ[0:3])。系统1700为简单起见只示出一个通道,但是将理解DIMM 1710可以具有多个通道。在一个示例中,DRAM[0:7]的区域1720由阴影区域示出来表示隔离区域或针对数据DRAM内的ECC数据分配的区域。
隔离区域1720牺牲了数据DRAM中的一些数据区域以获得更高的RAS。隔离存储器增加的开销(例如,额外的写入)是为了增加RAS的性能牺牲。
数据位1742表示在数据总线1732上从DRAM[0:7]到控制器1730的数据位。ECC位1744表示在数据总线1732上从ECC DRAM到控制器1730的ECC位。响应于错误的检测,DRAM[0:7]将在数据总线1732上提供ECC位1746。
在一个示例中,系统1700通过2层ECC操作提供ECC。对于具有x4 DRAM的DIMM1710,数据位1742包括512b,并且第1层ECC位1744包括64b。在一个示例中,隔离存储器ECC利用第1层ECC H矩阵实现2层ECC,作为组合的第1层+第2层H矩阵的子矩阵。将第1层H矩阵应用为组合的第1层和第2层位的H矩阵的子矩阵确保分层检测和校正将提供期望的ECC保护。
在一个示例中,利用数据位1742和第1层ECC位1744的ECC编码的计算生成码字1。在一个示例中,利用数据位1742、第1层ECC位1744和第2层ECC位1746的ECC的计算生成码字2。通过在码字1中附加1个零元素,码字1可以是码字2的子集。在一个示例中,ECC是一种满足要求的缩短的Reed-Solomon码。
在一个示例中,第一层提供检测,并且第二层提供校正能力。在一个示例中,仅当第一层检测到错误时才访问第二层。对于单个读取命令,控制器1730可以一起读取数据位1742和ECC位1744(第1层位)。64个第1层位(4个DQ乘以BL16)可以针对单个x4设备故障提供100%的检测。控制器1730的错误控制1750可以使用数据位1742和ECC位1744通过与H矩阵的解码功能来生成第1层位的ECC校正子。
在一个示例中,如果第1层的ECC校正子为零,则错误控制1750的ECC声明数据位1742无错误。如果校正子不为零,则错误控制1750声明检测到错误。在一个示例中,区域1720共同存储额外的64个ECC位1746。响应于错误的检测,控制器1730可以读取第2层位以提供ECC位1744和ECC位1746(针对总共128位的ECC),其可以针对单个设备故障提供100%校正。
在一个示例中,错误控制1750的ECC逻辑使用数据位1742、第1层ECC位1744和第2层ECC位1746来执行与H矩阵的解码功能以生成第1层和第2层的ECC校正子。在一个示例中,对于第1层和第2层,ECC操作将直接进行校正。ECC首先识别错误位置。如果ECC无法识别错误位置,ECC可以报告可检测但是不可校正的错误(DUE)。DUE来自双设备错误。对于单个设备错误,没有DUE的情况。
图18是具有5x8存储器模块的隔离存储器的系统架构的示例的框图。系统1800表示根据系统100的示例或系统1600的示例的系统。
DIMM 1810具体示出了5x8实现的配置,具有4个数据DRAM(DRAM[0:3])和一个ECCDRAM。DRAM[0:3]和ECC DRAM有x8接口(具有DQ[0:7])。系统1800为简单起见只示出一个通道,但是将理解DIMM 1810可以具有多个通道。在一个示例中,DRAM[0:3]的区域1820由阴影区域示出来表示隔离区域或针对数据DRAM内的ECC数据分配的区域。
隔离区域1820牺牲了数据DRAM中的一些数据区域以获得更高的RAS。隔离存储器增加的开销(例如,额外的写入)是为了增加RAS的性能牺牲。
数据位1842表示在数据总线1832上从DRAM[0:3]到控制器1830的数据位。ECC位1844表示在数据总线1832上从ECC DRAM到控制器1830的ECC位。响应于错误的检测,DRAM[0:3]将在数据总线1832上提供ECC位1846。
在一个示例中,系统1800通过2层ECC操作提供ECC。对于具有x8 DRAM的DIMM1810,数据位1842包括512b,并且第1层ECC位1844包括128b。在一个示例中,隔离存储器ECC利用第1层ECC H矩阵实现2层ECC,作为组合的第1层+第2层H矩阵的子矩阵。将第1层H矩阵应用为组合的第1层和第2层位的H矩阵的子矩阵确保分层检测和校正将提供期望的ECC保护。
在一个示例中,利用数据位1842和第1层ECC位1844的ECC编码的计算生成码字1。在一个示例中,利用数据位1842、第1层ECC位1844和第2层ECC位1846的ECC的计算生成码字2。通过在码字1中附加1个零元素,码字1可以是码字2的子集。在一个示例中,ECC是一种满足要求的缩短的Reed-Solomon码。
在一个示例中,第一层提供检测,并且第二层提供校正能力。在一个示例中,仅当第一层检测到错误时才访问第二层。对于单个读取命令,控制器1830可以一起读取数据位1842和ECC位1844(第1层位)。128个第1层位(8个DQ乘以BL16)可以针对单个x8设备故障提供100%检测。控制器1830的错误控制1850可以使用数据位1842和ECC位1844通过与H矩阵的解码功能来生成第1层位的ECC校正子。
在一个示例中,如果第1层的ECC校正子为零,则错误控制1850的ECC声明数据位1842无错误。如果校正子不为零,则错误控制1850声明检测到错误。在一个示例中,区域1820共同存储额外的128个ECC位1846。响应于错误的检测,控制器1830可以读取第2层位以提供ECC位1844和ECC位1846(针对总共256位的ECC),其可以针对单个设备故障提供100%校正。
在一个示例中,错误控制1850的ECC逻辑使用数据位1842、第1层ECC位1844和第2层ECC位1846来执行与H矩阵的解码功能以生成第1层和第2层的ECC校正子。在一个示例中,对于第1层和第2层,ECC操作将直接进行校正。ECC首先识别错误位置。如果ECC无法识别错误位置,则ECC可以报告可检测但是不可校正的错误(DUE)。DUE来自双设备错误。对于单个设备错误,没有DUE的情况。
图19是利用隔离存储器实现ECC的过程的示例的流程图。过程1900表示可以由系统1700的示例或系统1800的示例执行的具有隔离数据的ECC的过程。
在1902处,存储器控制器可以从存储器中读取数据线。在一个示例中,在1904处,存储器控制器利用来自专用ECC芯片或ECC存储器设备的ECC信息对数据线执行ECC检测。在1906处,存储器控制器可以基于ECC检测来确定数据线中是否存在错误。
在1908否分支处,如果数据中没有错误,则在一个示例中,在1910处,系统基于来自数据线的干净数据继续其操作。在1909是分支处,如果数据中存在错误,则在一个示例中,存储器控制器在1912处从数据设备读取隔离数据。在一个示例中,在1914处,存储器控制器利用来自ECC芯片的ECC数据和隔离数据执行错误检测和校正。
图20是在具有隔离存储器的系统中进行写入的过程的示例的流程图。过程2000表示可以由系统1700的示例或系统1800的示例执行的用于在具有隔离的ECC数据的系统中写入存储器的过程。
在2002处,存储器控制器将数据(包括数据设备的数据和去往ECC管芯或ECC设备的ECC数据)写入存储器。在一个示例中,在2004处,存储器控制器随后从隔离存储器区域读取ECC数据。在2006处,存储器控制器更新ECC信息,并且然后将隔离ECC数据写回数据设备的隔离区域。
图21是应用矩阵来执行校验和校正的校验位生成逻辑和校正子位生成逻辑的示例的框图。H矩阵2110表示与设备上ECC一起使用的代码矩阵的16位的示例。将理解,现代计算系统中的典型操作码字包括多于16位。然而,16位H矩阵示出了ECC操作的原理,用于根据本文的任何示例的用于存储器上错误校验和校正的管芯上ECC,或者用于根据本文中的任何示例的由存储器控制器或错误控制进行的系统级ECC。
矩阵2110可以是SEC汉明码的部分,例如128位码字的汉明码。矩阵2110仅示出了16个代码,针对每个数据位[15:0]一个代码位。在一个示例中,矩阵2110的每个代码对应一个数据位。在所示示例中,每个代码包括8个校验位CB[0:7]。当从在存储器中存储的数据字和校验位计算校正子时,ECC引擎可以确定校正子是否对应于矩阵2110中的代码之一。如果ECC引擎确定校正子与代码之一匹配,则ECC引擎切换对应的数据位以校正错误。图示了校验位生成和校正子位生成的示例。
校验位生成逻辑2102表示执行ECC操作以生成校验位的逻辑。校正子位生成逻辑2104表示执行ECC操作以生成校正子位来与校验位进行比较的逻辑。图中为了图示的目的,仅示出与校验位CB[0:2]相关的逻辑,并且相应地,仅示出校正子位SB[0:2]。
如图所示,校正子可以在用于校验位生成和校正子位生成的ECC逻辑中完全被编码。在一个示例中,校验位生成2102包括接收写入数据字2120并且对代码的一位执行异或运算的异或门。例如,CB[0]的生成相对于所示的16个码字位,位D[10:0]全为1,而位D[15:11]为0。因此,在一个示例中,CB[0]的计算包括码字的位D[10:0]的与异或2122的异或运算。类似地,校正子位SB[0]的生成包括接收读取数据字2130和读取数据码字的位D[10:0]的与异或2132执行异或运算的逻辑。异或2132的输出然后与CB[0]利用异或2142进行异或来生成SB[0]。
将理解,作为技术问题,真正的异或运算只能针对两个输入存在,其中当且仅当仅输入之一为一时输出为一。然而,将异或运算的级联表示为多输入异或(表示输入的数量大于2)是常见的约定,例如用于CB[0]的异或2122和用于SB[0]的异或2132,异或运算具有交换属性,并且多对输入的异或,然后这些运算的输出的串联异或可以以任何顺序互换,结果相同。因此,异或运算具有模2加法的实际效果,也相当于奇校验检测。当输入中有奇数个1时,奇校验检测提供“1”作为输出,而当输入中有偶数个1时,输出为零。
在另一个示例中,CB[1]的生成相对于所示的16个码字位,位D[15:10]和D[4:1]是1,而位D[9:5]和D[0]是零。异或2124从一的位计算CB[1]。类似地,对于CB[2]的生成,位D[15:9]和D[2:0]为1,并且位D[8:3]为零。异或2126从一的位计算CB[2]。
校正子位生成2104表示接收读取数据字2130和校验位字2140并通过将CB计算与存储的校验位进行比较来生成校正子位的逻辑。类似地,关于所示的16个码字位的SB[1]的校正子位生成,异或2134计算D[15:10]和D[4:1]的异或,并且然后异或2144通过CB[1]与异或2134的输出的异或来计算SB[1]。类似地,关于所示的16个码字位的SB[2]的校正子位生成,异或2136计算D[15:9]和D[2:0]的异或,并且然后异或2146通过CB[2]与异或2136的输出的异或来计算SB[2]。
基于校验位和校正子位的确定,系统可以识别错误并可能翻转位,例如,对于发现与校正子位匹配的CB[7:0]的位或列。ECS系统应用这种技术对存储器地址进行清理。在一个示例中,系统应用ECC的错误检测来检测存储器错误并向存储器控制器提供错误信息以允许存储器控制器根据本文的任何示例检测错误样式并调整错误清理操作。
图22是管芯上错误校验和校正的示例的框图。系统2200为根据本文的管芯上ECC的任何示例的系统提供管芯上ECC电路的示例。主机2210包括管理对存储器2220的访问的存储器控制器或等同或替代逻辑或电路或组件。主机2210对从存储器2220读取的数据执行外部ECC。存储器2220实施管芯上ECC以在将数据发送到主机2210之前校验和校正数据。
系统2200示出存储器2220中的写入路径2232,其表示数据从主机2210写入存储器2220的路径。主机2210向存储器2220提供数据2242以写入存储器阵列2270。在一个示例中,存储器2220利用校验位生成器2222生成校验位2244以与数据一起存储在存储器中。校验位2244可以称为ECC位,并且使存储器2220能够校正在写入存储器阵列2270和从存储器阵列2270读取时可能发生的错误。数据2242和校验位2244可以作为码字被包括在2246中,其写入到存储器资源。
读取路径2234表示数据从存储器2220读取到主机2210的路径。在一个示例中,写入路径2232和读取路径2234的至少某些硬件组件是相同的硬件。在一个示例中,存储器2220响应于来自主机2210的读取命令从2252取出码字。码字可以包括数据2254和校验位2256。数据2254和校验位2256可以分别对应于写入路径2232中的数据2242和校验位2244。因此,读取可以访问数据和ECC位。应当理解,读取路径2234中的错误校正可以包括将异或(异或)树应用于对应的H矩阵来检测错误并选择性地校正错误(在单比特错误的情况下)。如本领域所理解的,H矩阵指的是汉明码奇偶校验矩阵,其示出码字的数字的线性组合如何等于零。因此,H矩阵行标识对于要成为码字的部分的分量或数字必须满足的奇偶校验方程的系数。在一个示例中,存储器2220包括校正子解码2224,其使存储器能够将校验位2256应用于数据2254来检测读取数据中的错误。校正子解码2224可以生成校正子2258以用于为读取数据生成适当的错误信息。数据2254也可以被转发到错误校正2228以校正检测到的错误。
在一个示例中,校正子解码器2224将校正子2258传递给校正子生成器2226以生成错误向量。在一个示例中,校验位生成器2222和校正子生成器2226完全由存储器设备的对应H矩阵指定。在一个示例中,如果读取数据中没有错误(例如,零校正子2258),校正子生成器2226生成无错误信号2262。在一个示例中,如果读取数据中存在多个错误(例如,不匹配对应H矩阵中的任何列的非零校正子2258),校正子生成器2226生成DUE(检测到的未校正错误)信号2264,这表示检测到的未校正错误。DUE信号2264可以指示存储器2220无法通过内部ECC校正的多位错误。
在一个示例中,如果存在单位错误(例如,与对应的H矩阵的列之一匹配的非零校正子2258),校正子生成器2226可以生成具有错误位置2260的CE(校正的错误)信号,其是到错误校正逻辑2228的校正的错误指示。错误校正2228可以将校正的错误应用到数据2254中的指定位置以生成校正的数据2266用于输出到主机2210。在一个示例中,错误校正2228还生成校验位2268,其包括读取数据的校验位。
校验位2268可以被认为是错误向量,它指示传输到主机2210的读取数据中的错误状态。应当理解,零校正子(无错误2262)条件和导致校正数据2266的校正SBE将具有相同的校验位2268,从而向主机2210指示无错误。因此,校验位2268将不提供关于存储器2220中的SBE的信息,而仅提供多位错误。在一个示例中,系统2200将校正后的数据写回存储器阵列。
在一个示例中,系统2200包括用于阵列的每个部分的内部ECC写入路径2232和内部ECC读取路径2234。在一个示例中,存储器设备2220可以包括用于它的一半I/O管脚的一条路径和用于它的另一半I/O管脚的第二路径。因此,存储器2220可以利用硬件资源执行ECC隔离以将ECC的应用分离到将由存储器设备提供的整体数据的分离子部分。
图23是系统级错误校验和校正的示例的框图。系统2300提供用于根据本文的主机侧或存储器控制器ECC的任何示例的系统的系统级ECC电路的示例。主机2310包括管理对存储器2330的访问的控制器2314或等同或替代逻辑或电路或组件。控制器2314对从存储器2330读取的数据执行外部ECC。在一个示例中,存储器2330实现管芯上ECC 2334以在通过总线2332将数据发送到主机2310之前校验和校正来自阵列2336的数据。
主机2310包括处理器2312以执行将生成对存储在存储器2330的阵列2336中的数据的请求的操作。响应于写入数据的请求,控制器2314可以通过写入路径2320生成写入命令。对于读取请求,控制器2314通过读取路径2340接收读取数据。
写入路径2320表示数据从处理器2312写入存储器2330的路径。处理器2312提供用于写入存储器2330的数据2322。在一个示例中,控制器2314利用校验位生成器2324生成校验位2326以与数据一起存储在存储器中。校验位2326可以称为ECC位,并且能够对在写入和读取存储器阵列时可能发生的错误进行错误校正。数据2322和校验位2326可以作为码字包含在2328中,其通过进入阵列2336的数据总线2332写入存储器2330。
读取路径2340表示数据从存储器2330读取到主机2310的路径。在一个示例中,写入路径2320和读取路径2340的至少某些硬件组件是相同的硬件。在一个示例中,存储器2330响应于来自主机2310的读取命令取出数据。读取码字2342表示存储在阵列2336中的数据和校验位。数据2344和校验位2346表示读取码字2342的数据和校验位。读取码字2342表示由来自设备[0:(N-1)]的数据组成的码字。在一个示例中,这些分别对应于写入路径2320中写入到读取命令的相同地址的数据2322和校验位2326。
读取路径2340包括校正子解码2352以对数据2344和校验位2346应用H矩阵计算来检测读取数据中的错误。校正子解码2352可以生成校正子2354以用于为读取数据生成适当的错误信息。数据2344也可以被转发到错误校正2328以校正检测到的错误。
在一个示例中,校正子解码器2352将校正子2354传递给校正子生成器2356以生成错误向量。在一个示例中,校验位生成器2324和校正子生成器2356完全由对应的H矩阵指定。在一个示例中,如果读取数据中没有错误(例如,零校正子2354),校正子生成器2356生成无错误信号2362。在一个示例中,如果读取数据中存在多个错误(例如,不匹配对应H矩阵中的任何列的非零校正子2354),校正子生成器2356生成DUE(检测到的未校正错误)信号2364。DUE信号2364可以指示不能通过应用ECC校正的多位错误。
在一个示例中,如果存在单位错误(例如,与对应的H矩阵的列之一匹配的非零校正子2354),校正子生成器2356可以生成具有错误位置2360的CE(校正的错误)信号,其是到错误校正逻辑2358的校正的错误指示。错误校正2358可以将校正的错误应用到数据2344中的指定位置以生成用于输出的校正的数据2366以提高到主机2312。
图24是其中可以实现自适应校验和校正的存储器子系统的示例的框图。系统2400包括计算设备中的处理器和存储器子系统的元件。
在一个示例中,存储器设备2440的控制器2450包括ECC逻辑2456。ECC逻辑2456表示存储器设备2440的管芯上ECC,以使得能够在存储器中进行错误校验和校正。在一个示例中,存储器控制器2420包括错误控制2428,其表示存储器控制器2420内的使得能够根据本文的任一示例进行关于来自存储器的数据中的错误的确定的逻辑。在一个示例中,错误控制2428可以根据本文的任何描述执行ECC。在一个示例中,错误控制2428执行自适应备用,无论是针对存储体、针对数据设备的部分还是基于多层ECC数据的ECC。在一个示例中,错误控制2428包括PFD引擎来提供永久故障检测,并且错误控制2428可以基于永久故障执行ECC。
处理器2410表示可以执行操作系统(OS)和应用程序的计算平台的处理单元,其可以统称为存储器的主机或用户。操作系统和应用程序执行导致存储器访问的操作。处理器2410可以包括一个或多个单独的处理器。每个单独的处理器可以包括单个处理单元、多核处理单元或组合。处理单元可以是诸如CPU(中央处理单元)的主处理器、诸如GPU(图形处理单元)的外围处理器或组合。存储器访问也可以由诸如网络控制器或硬盘控制器的设备启动。这种设备可以与一些系统中的处理器集成或经由总线(例如PCI express)连接到处理器或组合。系统2400可以作为SOC(片上系统)来实现,或者用独立的组件来实现。
对存储器设备的引用可以适用于不同的存储器类型。存储器设备通常指易失性存储器技术。易失性存储器是一种存储器,如果设备断电,其状态(以及因此存储在其中的数据)是不确定的。非易失性存储器是指即使设备中电,其状态也是确定的存储器。动态易失性存储器需要刷新存储在设备中的数据以保持状态。动态易失性存储器的一个示例包括DRAM(动态随机存取存储器)或一些变体,诸如同步DRAM(SDRAM)。如本文所述的存储器子系统可以与多种存储器技术兼容,诸如DDR4(双倍数据速率版本4,JESD79-4,最初由JEDEC于2012年9月发布)、LPDDR4(低功耗DDR版本4,JESD209-4,最初由JEDEC于2014年8月发布)、WIO2(Wide I/O 2(WidelO2),JESD229-2,最初由JEDEC于2014年8月发布)、HBM(高带宽存储器DRAM,JESD235A,最初由JEDEC于2015年11月发布)、DDR5(DDR第5版,最初由JEDEC于2020年7月发布)、LPDDR5(LPDDR第5版、JESD209-5,最初由JEDEC于2019年2月发布)、HBM2((HBM第2版),目前JEDEC正在讨论中),或其它或存储技术的组合,以及基于此类规范的衍生或扩展的技术。
除了易失性存储器之外,或者作为易失性存储器的替代,在一个示例中,对存储器设备的引用可以指代非易失性存储器设备,即使设备被断电,其状态也是确定的。在一个示例中,非易失性存储器设备是块可寻址存储器设备,例如NAND或NOR闪速存储器技术。存储器设备还可以包括下一代非易失性设备,例如三维交叉点(3DXP)存储器设备。3DXP可以作为字节可寻址的非易失性存储器设备或块可寻址的非易失性存储器设备进行操作。存储器设备可以包括基于存储器单元的电阻状态或存储器单元的相位来存储数据的非易失性、字节可寻址介质或块可寻址介质。在一个示例中,存储器设备可以使用硫族化物相变材料(例如,硫族化物玻璃)。在一个示例中,存储器设备可以是或包括多门限级NAND闪速存储器、NOR闪速存储器、单级或多级相变存储器(PCM)或具有开关的相变存储器(PCMS)、电阻式存储器、纳米线存储器、铁电晶体管随机存取存储器(FeTRAM)、采用忆阻器技术的磁阻随机存取存储器(MRAM)存储器或自旋转移力矩(STT)-MRAM,或上述任何一种的组合,或其它存储器。
存储器控制器2420表示系统2400的一个或多个存储器控制器电路或设备。存储器控制器2420表示响应于处理器2410的操作的执行而生成存储器访问命令的控制逻辑。存储器控制器2420访问一个或多个存储器设备2440。存储器设备2440可以是根据上述任何内容的DRAM设备。在一个示例中,存储器设备2440被组织和管理为不同的通道,其中每个通道耦合到并行耦合到多个存储器设备的总线和信号线。每个通道都可以独立操作。因此,每个通道都是独立访问和控制的,并且每个通道的定时、数据传输、命令和地址交换以及其它操作都是分开的。耦合可以指电耦合、通信耦合、物理耦合或其组合。物理耦合可以包括直接接触。电耦合包括允许组件之间的电流流动或允许组件之间的信号传输或两者的接口或互连。通信耦合包括使组件能够交换数据的连接,包括有线或无线。
在一个示例中,每个通道的设置由单独的模式寄存器或其它寄存器设置控制。在一个示例中,尽管系统2400可以被配置为具有由单个控制器管理的多个通道,或者在单个通道上具有多个控制器,但是每个存储器控制器2420管理单独的存储器通道。在一个示例中,存储器控制器2420是主处理器2410的部分,例如在与处理器相同的管芯上实现或在相同的封装空间中实现的逻辑。
存储器控制器2420包括I/O接口逻辑2422以耦合到存储器总线,例如上面提到的存储器通道。I/O接口逻辑2422(以及存储器设备2440的I/O接口逻辑2442)可以包括引脚、焊盘、连接器、信号线、迹线或电线,或连接设备的其它硬件,或这些的组合。I/O接口逻辑2422可以包括硬件接口。如图所示,I/O接口逻辑2422至少包括用于信号线的驱动器/收发机。通常,集成电路接口内的导线与焊盘、引脚或连接器耦合以在设备之间对接信号线或迹线或其它导线。I/O接口逻辑2422可以包括驱动器、接收机、收发机或终端,或其它电路或电路组合以在设备之间的信号线上交换信号。信号的交换包括发送或接收中的至少一个。虽然被示为将来自存储器控制器2420的I/O 2422耦合到存储器设备2440的I/O 2442,但是应当理解,在其中成组的存储器设备2440被并行访问的系统2400的实施方式中,多个存储器设备可以包括连接到存储器控制器2420的同一接口的I/O接口。在包括一个或多个存储器模块2470的系统2400的实施方式中,I/O 2442除了存储器设备本身上的接口硬件之外还可以包括存储器模块的接口硬件。其它存储器控制器2420将包括到其它存储器设备2440的单独接口。
存储器控制器2420和存储器设备2440之间的总线可以实现为将存储器控制器2420耦合到存储器设备2440的多条信号线。总线通常可以至少包括时钟(CLK)2432、命令/地址(CMD)2434、写入数据(DQ)和读取数据(DQ)2436,以及零个或多个其它信号线2438。在一个示例中,存储器控制器2420和存储器之间的总线或连接可以称为存储器总线。在一个示例中,存储器总线是多点总线。CMD的信号线可以称为“C/A总线”(或ADD/CMD总线,或指示命令(C或CMD)和地址(A或ADD)信息传输的一些其它名称)和用于写入和读取DQ的信号线可以称为“数据总线”。在一个示例中,独立通道具有不同的时钟信号、C/A总线、数据总线和其它信号线。因此,系统2400可以,在独立的接口路径可以被认为是单独的总线的意义上被认为具有多个“总线”。应当理解,除了明确示出的线之外,总线可以包括选通信号线、警报线、辅助线或其它信号线中的至少一种,或组合。还将理解,串行总线技术可以用于存储器控制器2420和存储器设备2440之间的连接。串行总线技术的示例是8B10B编码和高速数据传输,其中嵌入式时钟通过单个差分信号对在每个方向上传输。在一个示例中,CMD 2434表示与多个存储器设备并行共享的信号线。在一个示例中,多个存储器设备共享CMD 2434的编码命令信号线,并且每个具有单独的芯片选择(CS_n)信号线以选择单独的存储器设备。
应当理解,在系统2400的示例中,存储器控制器2420和存储器设备2440之间的总线包括辅助命令总线CMD 2434和用于承载写入和读取数据的辅助总线DQ 2436。在一个示例中,数据总线可以包括用于读取数据和用于写入/命令数据的双向线。在另一示例中,辅助总线DQ 2436可以包括用于从主机到存储器的写入和数据的单向写入信号线,并且可以包括用于从存储器到主机的读取数据的单向线。根据所选择的存储器技术和系统设计,其它信号2438可以伴随总线或子总线,例如选通线DQS。基于系统2400的设计,或者如果设计支持多种实现的实施方式,则数据总线可以具有每个存储器设备2440的更多或更少带宽。例如,数据总线可以支持具有x4接口、x8接口、xl6接口或其它接口的存储器设备。约定“xW”,其中W是指存储器设备2440的接口大小或宽度的整数,其表示与存储器控制器2420交换数据的信号线的数量。存储器设备的接口大小是关于在系统2400中每个通道可以同时使用多少存储器设备或并联耦合到相同信号线的控制因素。在一个示例中,高带宽存储器设备、宽接口设备或堆叠式存储器配置或组合可以实现更宽的接口,例如xl28接口、x256接口、x512接口、xl024接口或其它数据总线接口宽度。
在一个示例中,存储器设备2440和存储器控制器2420以突发或一系列连续数据传输的形式在数据总线上交换数据。突发对应于传输周期的数量,这与总线频率有关。在一个示例中,传输周期可以是用于在相同时钟或选通信号边沿(例如,在上升沿)上发生的传输的整个时钟周期。在一个示例中,指的是系统时钟的一个周期的每个时钟周期,被分成多个单位间隔(UI),其中每个III是一个传输周期。例如,双倍数据速率传输在时钟信号的两个边沿(例如,上升沿和下降沿)触发。一次突发可以持续配置数量的UI,这可以是存储在寄存器中的配置,也可以是动态触发的。例如,八个连续传输周期的序列可以被认为是突发长度八(BL8),并且每个存储器设备2440可以在每个UL上传输数据因此,在BL8上操作的x8存储器设备可以传输64位数据(8个数据信号线乘以突发中每条线传输的8个数据位)。应当理解,该简单示例仅是说明而非限制。
存储器设备2440表示系统2400的存储器资源。在一个示例中,每个存储器设备2440是单独的存储器管芯。在一个示例中,每个存储器设备2440可以与每个设备或管芯的多个(例如,2个)通道对接。每个存储器设备2440包括I/O接口逻辑2442,其具有由设备的实现确定的带宽(例如,x16或x8或一些其它接口带宽)。I/O接口逻辑2442使存储器设备能够与存储器控制器2420对接。I/O接口逻辑2442可以包括硬件接口,并且可以根据存储器控制器的I/O 2422,但是在存储器设备端处。在一个示例中,多个存储器设备2440并联连接到相同的命令和数据总线。在另一示例中,多个存储器设备2440并联连接到相同的命令总线,并且连接到不同的数据总线。例如,系统2400可以被配置有多个并行耦合的存储器设备2440,每个存储器设备响应命令,并且访问每个内部的存储器资源2460。对于写入操作,各个存储器设备2440可以写入整个数据字的一部分,并且对于读取操作,各个存储器设备2440可以取出整个数据字的一部分。字的其余位将由其它存储器设备并行提供或接收。
在一个示例中,存储器设备2440直接设置在计算设备的母板或主机系统平台(例如,处理器2410设置在其上的PCB(印刷电路板))上。在一个示例中,存储器设备2440可以被组织成存储器模块2470。在一个示例中,存储器模块2470表示双列直插存储器模块(DIMM)。在一个示例中,存储器模块2470表示多个存储器设备的其它组织,其共享访问或控制电路的至少一部分,其可以是独立电路、独立设备或来自主机系统平台的独立板。存储器模块2470可以包括多个存储器设备2440,并且存储器模块可以包括对到布置在它们上的所包含的存储器设备的多个单独通道的支持。在另一示例中,存储器设备2440可以诸如通过诸如多芯片模块(MCM)、封装上封装、硅通孔(TSV)或其它技术或组合并入与存储器控制器2420相同的封装中。类似地,在一个示例中,多个存储器设备2440可以并入到存储器模块2470中,存储器模块2470本身可以并入到与存储器控制器2420相同的封装中。应当理解,对于这些和其它实施方式,存储器控制器2420可以是主处理器2410的部分。
存储器设备2440各自包括一个或多个存储器阵列2460。存储器阵列2460表示数据的可寻址存储器位置或存储位置。通常,存储器阵列2460被管理为经由字线(行)和位线(行内的各个位)控制来访问的数据行。存储器阵列2460可以被组织成单独的通道、横排和存储器的存储体。通道可以是指到存储器设备2440内的存储位置的独立控制路径。横排可以指代并行地跨越多个存储器设备的公共位置(例如,不同设备内的相同行地址)。存储体可以指存储器设备2440内的存储器位置的子阵列。在一个示例中,存储器的存储体被分成子存储体,子存储体具有至少一部分共享电路(例如,驱动器、信号线、控制逻辑),从而允许单独的寻址和访问。应当理解,通道、横排、存储体、子存储体、存储体组或存储器位置的其它组织以及这些组织的组合在它们对物理资源的应用中可以重叠。例如,可以通过特定通道访问与特定存储体相同的物理存储器位置,该特定存储体还可以属于一个横排。因此,存储器资源的组织将以包容而非排他的方式被理解。
在一个示例中,存储器设备2440包括一个或多个寄存器2444。寄存器2444表示一个或多个存储设备或存储位置,它们针对存储器设备的操作提供配置或设置。在一个示例中,寄存器2444可以为存储器设备2440提供存储位置来存储供作为控制或管理操作的部分的存储器控制器2420访问的数据。在一个示例中,寄存器2444包括一个或多个模式寄存器。在一个示例中,寄存器2444包括一个或多个多用途寄存器。寄存器2444内的位置的配置可以配置存储器设备2440以不同“模式”操作,其中命令信息可以基于模式触发存储器设备2440内的不同操作。附加地或替代地,不同的模式还可以根据模式从地址信息或其它信号线触发不同的操作。寄存器2444的设置可以指示I/O设置(例如,定时、终止或ODT(管芯上终止)2446、驱动器配置或其它I/O设置)的配置。
在一个示例中,存储器设备2440包括ODT 2446作为与I/O 2442相关联的接口硬件的部分。ODT 2446可以如上所述进行配置,并且提供阻抗设置来应用于指定信号线的接口。在一个示例中,ODT 2446应用于DQ信号线。在一个示例中,ODT 2446应用于命令信号线。在一个示例中,ODT 2446应用于地址信号线。在一个示例中,ODT 2446可以应用于前述的任何组合。可以基于存储器设备是访问操作的选定目标还是非目标设备来更改ODT设置。ODT2446设置可以影响端接线上的信号的定时和反射。对ODT 2446的仔细控制可以通过改进应用阻抗和负载的匹配来实现更高速的操作。ODT 2446可以应用于I/O接口2442、2422的特定信号线(例如,用于DQ线的ODT或用于CA线的ODT),而不一定应用于所有信号线。
存储器设备2440包括控制器2450,其表示存储器设备内的控制存储器设备内的内部操作的控制逻辑。例如,控制器2450解码由存储器控制器2420发送的命令并生成内部操作来执行或满足命令。控制器2450可以被称为内部控制器,并且与主机的存储器控制器2420分开。控制器2450可以基于寄存器2444确定选择什么模式,并且基于选择的模式配置用于访问存储器资源2460的操作或其它操作的内部执行。控制器2450生成控制信号来控制存储器设备2440内的位的路由以便为所选择的模式提供适当的接口并将命令引导至适当的存储器位置或地址。控制器2450包括命令逻辑2452,其可以解码在命令和地址信号线上接收的命令编码。因此,命令逻辑2452可以是或包括命令解码器。通过命令逻辑2452,存储器设备可以识别命令并生成内部操作来执行请求的命令。
再次参考存储器控制器2420,存储器控制器2420包括命令(CMD)逻辑2424,其表示生成命令以发送到存储器设备2440的逻辑或电路。命令的生成可以是指调度前的命令,也可以是队列中准备发送的命令的准备。通常,存储器子系统中的信令包括命令内或伴随命令的指示或选择存储器设备应在其中执行命令的一个或多个存储器位置的地址信息。响应于对存储器设备2440的事务调度,存储器控制器2420可以经由I/O 2422发出命令以使存储器设备2440执行命令。在一个示例中,存储器设备2440的控制器2450接收并解码经由I/O2442从存储器控制器2420接收的命令和地址信息。基于接收到的命令和地址信息,控制器2450可以控制存储器设备2440内的逻辑和电路的操作定时来执行命令。控制器2450负责遵从存储器设备2440内的标准或规范,例如定时和信令要求。存储器控制器2420可以通过访问调度和控制实现对标准或规范的遵从。
存储器控制器2420包括调度器2430,其表示生成和排序发送到存储器设备2440的事务的逻辑或电路。从一个角度来看,存储器控制器2420的主要功能可以说是调度对存储器设备2440的存储器访问和其它事务处理。这种调度可以包括生成事务本身以实现处理器2410对数据的请求并保持数据的完整性(诸如,与刷新相关的命令)。事务可以包括一个或多个命令,并且导致在一个或多个定时周期(诸如时钟周期或单位间隔)内传输命令或数据或两者。事务可以用于诸如读取或写入或相关命令或组合的访问,并且其它事务可以包括用于配置、设置、数据完整性或其它命令或组合的存储器管理命令。
存储器控制器2420通常包括诸如调度器2430的逻辑以允许选择和排序事务来提高系统2400的性能。因此,存储器控制器2420可选择应将哪些未完成事务以何种顺序发送到存储器设备2440,这通常用比简单的先进先出算法复杂得多的逻辑来实现。存储器控制器2420管理事务到存储器设备2440的传输,并且管理与事务相关联的定时。在一个示例中,事务具有确定性定时,其可以由存储器控制器2420管理并且用于确定如何利用调度器2430调度事务。
在一个示例中,存储器控制器2420包括刷新(REF)逻辑2426。刷新逻辑2426可以用于易失性且需要刷新以保持确定性状态的存储器资源。在一个示例中,刷新逻辑2426指示刷新的位置和要执行的刷新类型。刷新逻辑2426可以触发存储器设备2440内的自刷新,或通过发送刷新命令来执行可以称为自动刷新命令的外部刷新或组合。在一个示例中,存储器设备2440内的控制器2450包括在存储器设备2440内应用刷新的刷新逻辑2454。在一个示例中,刷新逻辑2454生成内部操作来根据从存储器控制器2420接收的外部刷新来执行刷新。刷新逻辑2454可以确定刷新是否指向存储器设备2440,以及响应于命令刷新什么存储器资源2460。
图25是其中可以实现自适应校验和校正的计算系统的示例的框图。系统2500表示根据本文任何示例的计算设备,并且可以是膝上型计算机、台式计算机、平板计算机、服务器、游戏或娱乐控制系统、嵌入式计算设备或其它电子设备。
在一个示例中,存储器设备2530包括ECC 2592。ECC 2592表示存储器2530的管芯上ECC,以启用存储器中的错误校验和校正。在一个示例中,存储器控制器2522包括错误控制2594,其表示存储器控制器2522内的使得能够根据本文的任一示例进行关于来自存储器的数据中的错误的确定的逻辑。在一个示例中,错误控制2594可以根据本文的任何描述执行ECC。在一个示例中,错误控制2594执行自适应备用,无论是针对存储体、针对数据设备的部分还是基于多层ECC数据的ECC。在一个示例中,错误控制2594包括PFD引擎来提供永久故障检测,并且错误控制2594可以基于永久故障执行ECC。
系统2500包括处理器2510,可以包括任何类型的微处理器、中央处理单元(CPU)、图形处理单元(GPU)、处理核心或其它处理硬件,或其组合,以针对系统2500提供指令的处理或执行。处理器2510可以是主机处理器设备。处理器2510控制系统2500的整体操作,并且可以是或包括一个或多个可编程通用或专用微处理器、数字信号处理器(DSP)、可编程控制器、专用集成电路(ASIC)、可编程逻辑设备(PLD)或这种设备的组合。
系统2500包括引导/配置2516,其表示用于存储引导代码(例如,基本输入/输出系统(BIOS))、配置设置、安全硬件(例如,可信平台模块(TPM))或主机OS之外操作的其它系统级硬件的存储。引导/配置2516可以包括非易失性存储设备,诸如只读存储器(ROM)、闪速存储器或其它存储器设备。
在一个示例中,系统2500包括耦合到处理器2510的接口2512,其可以表示用于需要更高带宽连接的系统组件(诸如存储器子系统2520或图形接口组件2540)的更高速接口或高吞吐量接口。接口2512表示接口电路,其可以是独立组件或集成到处理器管芯上。接口2512可以作为电路集成到处理器管芯上或作为组件集成在片上系统上。在存在的情况下,图形接口2540对接到图形组件,用于向系统2500的用户提供视觉显示。图形接口2540可以是独立组件或集成到处理器管芯或片上系统上。在一个示例中,图形接口2540可以驱动向用户提供输出的高清(HD)显示器或超高清(UHD)显示器。在一个示例中,显示器可以包括触摸屏显示器。在一个示例中,图形接口2540基于存储在存储器2530中的数据或基于由处理器2510执行的操作或两者生成显示。
存储器子系统2520表示系统2500的主存储器,并且为要由处理器2510执行的代码或要在执行例程中使用的数据值提供存储。存储器子系统2520可以包括一种或多种随机存取存储器(RAM)(诸如DRAM、3DXP(三维交叉点))或其它存储器设备,或这些设备的组合。存储器2530存储和托管操作系统(OS)2532以提供用于在系统2500中执行指令的软件平台。另外,应用2534可以从存储器2530在OS 2532的软件平台上执行。应用程序2534表示具有它们自己的操作逻辑来进行一个或多个功能的执行的程序。进程2536表示向OS 2532或一个或多个应用2534或组合提供辅助功能的代理或例程。OS 2532、应用2534和进程2536提供软件逻辑来为系统2500提供功能。在一个示例中,存储器子系统2520包括存储器控制器2522,其是用于生成命令并向存储器2530发出命令的存储器控制器。应当理解,存储器控制器2522可以是处理器2510的物理部分或接口2512的物理部分。例如,存储器控制器2522可以是集成存储器控制器,集成到具有处理器2510的电路上,诸如集成到处理器管芯或片上系统上。
虽然未具体说明,但是应当理解,系统2500可包含设备之间的一个或多个总线或总线系统,诸如存储器总线、图形总线、接口总线或其它总线。总线或其它信号线可以将组件通信地或电气地耦合在一起,或者既通信又电气地耦合组件。总线可以包括物理通信线、点对点连接、桥接器、适配器、控制器或其它电路或组合。总线可以包括,例如,系统总线、外围组件互连(PCI)总线、超传输或工业标准架构(ISA)总线、小型计算机系统接口(SCSI)总线、通用串行总线(USB)或其它总线或组合。
在一个示例中,系统2500包括可以耦合到接口2512的接口2514。接口2514可以是比接口2512低速的接口。在一个示例中,接口2514表示接口电路,其可以包括独立组件和集成电路。在一个示例中,多个用户界面组件或外围组件或两者耦合到接口2514。网络接口2550为系统2500提供了在一个或多个网络上与远程设备(例如,服务器或其它计算设备)通信的能力。网络接口2550可以包括以太网适配器、无线互连组件、蜂窝网络互连组件、USB(通用串行总线)或其它有线或无线基于标准或专有接口。网络接口2550可以与远程设备交换数据,这可以包括发送存储在存储器中的数据或接收要存储在存储器中的数据。
在一个示例中,系统2500包括一个或多个输入/输出(I/O)接口2560。I/O接口2560可以包括一个或多个接口组件,用户通过这些组件与系统2500交互(例如,音频、字母数字、触觉/触摸或其它接口)。外围接口2570可以包括上文没有具体提到的任何硬件接口。外围设备通常指的是从属地连接到系统2500的设备。从属连接是系统2500提供操作在其上执行并且用户与之交互的软件平台或硬件平台或两者的一种连接。
在一个示例中,系统2500包括以非易失性方式存储数据的存储子系统2580。在一个示例中,在某些系统实施方式中,存储2580的至少某些组件可以与存储器子系统2520的组件重叠。存储子系统2580包括存储设备2584,其可以是或包括用于以非易失性方式存储大量数据的任何常规介质,诸如一个或多个磁性、固态、3DXP或基于光学的盘或其组合。存储2584以持久状态保存代码或指令和数据2586(即,尽管系统2500的电源中断,该值仍被保留)。存储2584一般可以被认为是“存储器”,尽管存储器2530通常是执行或操作存储器以向处理器2510提供指令。鉴于存储2584是非易失性的,存储器2530可以包括易失性存储器(即,如果系统2500的电力中断,则数据的值或状态是不确定的)。在一个示例中,存储子系统2580包括与存储2584对接的控制器2582。在一个示例中,控制器2582是接口2514或处理器2510的物理部分,或者可以包括处理器2510和接口2514两者中的电路或逻辑。
电源2502向系统2500的组件提供电力。更具体地,电源2502通常与系统2500中的一个或多个电力供应器2504对接以向系统2500的组件提供电力。在一个示例中,电力供应器2504包括插入墙上插座的AC到DC(交流到直流)适配器。这样的AC电力可以是可再生能源(例如,太阳能)电源2502。在一个示例中,电源2502包括DC电源,例如外部AC到DC转换器。在一个示例中,电源2502或电力供应器2504包括经由接近充电场来充电的无线充电硬件。在一个示例中,电源2502可以包括内部电池或燃料电池源。
图26是其中可以实现自适应校验和校正的移动设备的示例的框图。系统2600表示移动计算设备,诸如计算平板计算机、移动电话或智能电话、可穿戴计算设备或其它移动设备或嵌入式计算设备。应当理解,某些组件被一般性地示出,并且并非这种设备的所有组件都被示出在系统2600中。
在一个示例中,存储器2662包括ECC 2692。ECC 2692表示存储器2662的管芯上ECC,以启用存储器中的错误校验和校正。在一个示例中,存储器控制器2664包括错误控制2694,其表示存储器控制器2664内的使得能够根据本文的任一示例进行关于来自存储器的数据中的错误的确定的逻辑。在一个示例中,错误控制2694可以根据本文的任何描述执行ECC。在一个示例中,错误控制2694执行自适应备用,无论是针对存储体、针对数据设备的部分还是基于多层ECC数据的ECC。在一个示例中,错误控制2694包括PFD引擎来提供永久故障检测,并且错误控制2694可以基于永久故障执行ECC。
系统2600包括处理器2610,其执行系统2600的主要处理操作。处理器2610可以是主机处理器设备。处理器2610可以包括一个或多个物理设备,诸如微处理器、应用处理器、微控制器、可编程逻辑设备或其它处理设备。由处理器2610执行的处理操作包括应用程序和设备功能在其上执行的操作平台或操作系统的执行。处理操作包括与人类用户或其它设备的I/O(输入/输出)相关的操作、与电力管理相关的操作、与将系统2600连接到另一个设备相关的操作或组合。处理操作还可以包括与音频I/O、显示I/O或其它对接或组合有关的操作。处理器2610可以执行存储在存储器中的数据。处理器2610可以写入或编辑存储在存储器中的数据。
在一个示例中,系统2600包括一个或多个传感器2612。传感器2612表示嵌入式传感器或外部传感器的接口,或组合。传感器2612使系统2600能够监视或检测其中实施系统2600的环境或设备的一个或多个条件。传感器2612可以包括环境传感器(例如温度传感器、运动检测器、光检测器、相机、化学传感器(例如,一氧化碳、二氧化碳或其它化学传感器))、压力传感器、加速度计、陀螺仪、医学或生理学传感器(例如,生物传感器、心率监测器或其它检测生理属性的传感器)或其它传感器,或组合。传感器2612还可以包括用于诸如指纹识别系统、面部检测或识别系统或检测或识别用户特征的其它系统的生物识别系统的传感器。传感器2612应当广义地理解,而不是限制可以用系统2600实现的许多不同类型的传感器。在一个示例中,一个或多个传感器2612经由与处理器2610集成的前端电路耦合到处理器2610。在一个示例中,一个或多个传感器2612经由系统2600的另一组件耦合到处理器2610。
在一个示例中,系统2600包括音频子系统2620,其表示与向计算设备提供音频功能相关联的硬件(例如,音频硬件和音频电路)和软件(例如,驱动器、编解码器)组件。音频功能可以包括扬声器或耳机输出,以及麦克风输入。用于这种功能的设备可以集成到系统2600中,或连接到系统2600。在一个示例中,用户通过提供由处理器2610接收和处理的音频命令来与系统2600交互。
显示子系统2630表示提供视觉显示以呈现给用户的硬件(例如,显示设备)和软件组件(例如,驱动器)。在一个示例中,显示器包括供用户与计算设备交互的触觉组件或触摸屏元件。显示子系统2630包括显示接口2632,其包括用于向用户提供显示的特定屏幕或硬件设备。在一个示例中,显示接口2632包括与处理器2610分离的执行与显示相关的至少一些处理的逻辑(诸如,图形处理器)。在一个示例中,显示子系统2630包括向用户提供输出和输入这两者的触摸屏设备。在一个示例中,显示子系统2630包括向用户提供输出的高清(HD)或超高清(UHD)显示器。在一个示例中,显示子系统包括或驱动触摸屏显示器。在一个示例中,显示子系统2630基于存储在存储器中的数据或基于由处理器2610执行的操作或两者来生成显示信息。
I/O控制器2640表示与用户交互相关的硬件设备和软件组件。I/O控制器2640可以操作为管理作为音频子系统2620或显示子系统2630或两者的部分的硬件。此外,I/O控制器2640示出了连接到系统2600的附加设备的连接点,用户可以通过该连接点与系统交互。例如,可以连接到系统2600的设备可以包括麦克风设备、扬声器或立体声系统、视频系统或其它显示设备、键盘或小键盘设备、按钮/开关或用于诸如读卡器或其它设备的特定应用的其它I/O设备。
如上所述,I/O控制器2640可以与音频子系统2620或显示子系统2630或两者交互。例如,通过麦克风或其它音频设备的输入可以为系统2600的一个或多个应用程序或功能提供输入或命令。此外,可以提供音频输出来代替显示输出或作为显示输出的补充。在另一个示例中,如果显示子系统包括触摸屏,则显示设备也充当输入设备,其可以至少部分地由I/O控制器2640管理。系统2600上还可以有额外的按钮或开关,来提供由I/O控制器2640管理的I/O功能。
在一个示例中,I/O控制器2640管理诸如加速度计、相机、光传感器或其它环境传感器、陀螺仪、全球定位系统(GPS)或可包含在系统2600中的其它硬件或传感器2612的设备。输入可以是直接用户交互的部分,也向系统提供环境输入来影响其操作(诸如,过滤噪声、调整显示以进行亮度检测、为相机应用闪光灯或其它功能)。
在一个示例中,系统2600包括电力管理2650,其管理电池电源使用、电池充电以及与节电操作相关的特征。电力管理2650管理来自电源2652的电力,电源2652向系统2600的组件提供电力。在一个示例中,电源2652包括插入墙上插座的AC到DC(交流到直流)适配器。这种AC电力可以是可再生能源(例如,太阳能、基于运动的电力)。在一个示例中,电源2652仅包括可由诸如外部AC-DC转换器的DC电源提供的DC电力。在一个示例中,电源2652包括无线充电硬件以经由接近充电场来充电。在一个示例中,电源2652可以包括内部电池或燃料电池源。
存储器子系统2660包括用于在系统2600中存储信息的存储器设备2662。存储器子系统2660可以包括非易失性(如果存储器设备的电力中断则状态不改变)或易失性(如果存储器设备的电力中断则状态不确定)存储器设备,或组合。存储器2660可以存储应用程序数据、用户数据、音乐、照片、文档或其它数据以及与系统2600的应用程序和功能的执行相关的系统数据(无论是长期的还是临时的)。在一个示例中,存储器子系统2660包括存储器控制器2664(其也可以被认为是系统2600的控制的部分,并且可以潜在地被认为是处理器2610的部分)。存储器控制器2664包括生成和发布控制对存储器设备2662的访问的命令的调度器。
连接2670包括硬件设备(例如,无线或有线连接器和通信硬件,或有线和无线硬件的组合)和软件组件(例如,驱动器、协议栈),以使系统2600能够与外部设备通信。外部设备可以是单独的设备,诸如其它计算设备、无线接入点或基站,以及诸如耳机、打印机或其它设备的外围设备。在一个示例中,系统2600与外部设备交换数据以存储在存储器中或显示在显示设备上。交换的数据可以包括要存储在存储器中的数据,或者已经存储在存储器中的数据,以读取、写入或编辑数据。
连接2670可以包括多种不同类型的连接。概括地说,系统2600被示为具有蜂窝连接2672和无线连接2674。蜂窝连接2672通常指由无线运营商提供的蜂窝网络连接,诸如经由GSM(全球移动通信系统)或其变体或衍生、CDMA(码分多址)或变体或衍生、TDM(时分复用)或变体或衍生、LTE(长期演进,也称为“4G”)、5G或其它蜂窝服务标准提供蜂窝网络连接。无线连接2674指的是非蜂窝式的无线连接,并且可以包括个域网(诸如蓝牙)、局域网(诸如WiFi)或广域网(诸如WiMax)、或其它无线通信,或组合。无线通信是指通过非固体介质使用调制电磁辐射来传输数据。有线通信通过固体通信介质发生。
外围连接2680包括硬件接口和连接器,以及用于进行外围连接的软件组件(例如,驱动器、协议栈)。应当理解,系统2600既可以是其它计算设备的外围设备(“至”2682),也可以具有与其连接的外围设备(“来自”2684)。系统2600通常具有连接到其它计算设备以用于诸如管理(例如,下载、上传、改变、同步)系统2600上的内容的目的的“扩展坞”连接器。另外,扩展坞连接器可以允许系统2600连接到某些外围设备,这些外围设备允许系统2600控制内容输出,例如,到视听或其它系统。
除了专有扩展坞连接器或其它专有连接硬件之外,系统2600还可以经由通用或基于标准的连接器进行外围连接2680。常见类型可以包括通用串行总线(USB)连接器(可包括多种不同硬件接口中的任何一种)、包括迷你显示端口(MDP)的显示端口、高清晰度多媒体接口(HDMI)或其它类型。
图27是其中可以实现自适应校验和校正的多节点网络的示例的框图。系统2700表示可以应用自适应ECC的节点网络。在一个示例中,系统2700表示数据中心。在一个示例中,系统2700表示服务器场。在一个示例中,系统2700表示数据云或处理云。
节点2730包括存储器2740。节点2730包括控制器2742,其表示管理对存储器2740的访问的存储器控制器。在一个示例中,控制器2742包括错误控制(CTRL)2744,其表示根据本文任一示例的错误控制逻辑或错误控制电路。在一个示例中,错误控制2744可以根据本文的任何描述执行ECC。在一个示例中,错误控制2744执行自适应备用,无论是针对存储体、针对数据设备的部分还是基于多层ECC数据的ECC。在一个示例中,错误控制2744包括PFD引擎来提供永久故障检测,并且错误控制2744可以基于永久故障执行ECC。
一个或多个客户端2702在网络2704上向系统2700发出请求。网络2704表示一个或多个本地网络或广域网或组合。客户端2702可以是人或机器客户端,其生成系统2700执行操作的请求。系统2700执行由客户端2702请求的应用程序或数据计算任务。
在一个示例中,系统2700包括一个或多个机架,其表示容纳和互连多个计算节点的结构和互连资源。在一个示例中,机架2710包括多个节点2730。在一个示例中,机架2710托管多个刀片组件2720。托管是指提供电力、结构或机械支持以及互连。刀片2720可以指印刷电路板(PCB)上的计算资源,其中PCB容纳一个或多个节点2730的硬件组件。在一个示例中,刀片2720不包括底盘或外壳或除机架2710提供的以外的其它“盒子”。在一个示例中,刀片2720包括带有外露连接器的外壳以连接到机架2710中。在一个示例中,系统2700不包括机架2710,并且每个刀片2720包括可以堆叠或以其它方式靠近其它刀片驻留并允许节点2730互连的底盘或外壳。
系统2700包括表示节点2730的一个或多个互连器的交换结构2770。在一个示例中,交换结构2770包括多个交换机2772或路由器或其它硬件以在节点2730之间路由信号。此外,交换结构2770可以将系统2700耦合到网络2704以供客户端2702访问。除了路由设备之外,交换结构2770可以被认为包括电缆或端口或其它硬件设备以将节点2730耦合在一起。在一个示例中,交换结构2770具有一个或多个关联协议来管理通过系统2700的信号路由。在一个示例中,一个或多个协议至少部分地依赖于系统2700中使用的硬件设备。
如图所示,机架2710包括N个刀片2720。在一个示例中,除了机架2710之外,系统2700还包括机架2750。如图所示,机架2750包括M个刀片2760。M不一定与N相同;因此,可以理解,可以使用各个不同的硬件设备组件,并且在交换结构2770上一起耦合到系统2700中。刀片2760可以与刀片2720相同或相似。节点2730可以是任何类型的节点并且不一定都是相同类型的节点。系统2700不限于同质,也不限于非同质。
为简单起见,仅详细说明刀片2720[0]中的节点。然而,系统2700中的其它节点可以相同或相似。至少一些节点2730是计算节点,具有处理器(proc)2732和存储器2740。计算节点是指执行操作系统并且可以接收和处理一个或多个任务的具有处理资源(例如,一个或多个处理器)的节点。在一个示例中,至少一些节点2730是以服务器作为由处理器2732和存储器2740表示的处理资源的服务器节点。存储服务器是指具有比计算节点更多的存储资源,而不是具有用于执行任务的处理器的节点,存储服务器包括管理对存储服务器内的存储节点的访问的处理资源。
在一个示例中,节点2730包括接口控制器2734,其表示控制节点2730对交换结构2770的访问的逻辑。该逻辑可以包括用于互连到物理互连硬件的硬件资源。该逻辑可以包括管理互连的软件或固件逻辑。在一个示例中,接口控制器2734是或包括主机交换结构接口,其可以是根据本文描述的任何示例的交换结构接口。
处理器2732可以包括一个或多个单独的处理器。每个单独的处理器可以包括单个处理单元、多核处理单元或组合。处理单元可以是诸如CPU(中央处理单元)的主处理器、诸如GPU(图形处理单元)的外围处理器或组合。存储器2740可以是或包括存储器设备和存储器控制器。
一般地,关于本文的描述,在一个示例中,存储器设备包括:具有N个存储体的存储器阵列;错误校验和校正(ECC)逻辑,用于检测N个存储体中的一个存储体的存储体故障(“故障存储体”);以及将故障存储体的内容复制到其它(N-1)个存储体的指定区域,并且向主机指示(N-1)个存储体的可用存储空间的减少的控制逻辑。
在存储器设备的一个示例中,控制逻辑将故障存储体的内容复制到N个存储体中的R个最高地址以用于存储体备用。根据存储器设备的任一前述示例,在一个示例中,N为32,并且其中控制逻辑将故障存储体的内容复制到行地址的5个高位。根据存储器设备的任一前述示例,在一个示例中,控制逻辑向主机操作系统(OS)指示可用存储器空间的减少。根据存储器设备的任一前述示例,在一个示例中,向基本输入/输出系统(BIOS)指示可用存储器空间的减少的控制逻辑向主机OS指示该区域。根据存储器设备的任一前述示例,在一个示例中,主机OS将防止在该区域中存储系统关键数据。根据存储器设备的任一前述示例,在一个示例中,主机OS将使故障存储体离线。根据存储器设备的任一前述示例,在一个示例中,控制逻辑将响应于来自存储器控制器的命令复制故障存储体的内容,其中存储器控制器将对故障存储体的请求映射到该区域。根据存储器设备的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据存储器设备的任一前述示例,在一个示例中,控制逻辑是或包括控制器设备。
一般地,关于本文的描述,在一个示例中,存储器控制器包括:错误校验和校正(ECC)逻辑,用于检测存储器设备的N个存储体中的一个存储体的存储体故障(“故障存储体”);输入/输出(I/O)逻辑,用于向存储器设备发送命令以将故障存储体的内容复制到存储器设备的其它(N-1)个存储体的指定区域;和控制逻辑,用于指示(N-1)个存储体的可用存储空间的减少。
在存储器控制器的一个示例中,I/O逻辑发送命令将故障存储体的内容复制到N个存储体的R个最高地址以用于存储体备用。根据存储器控制器的任一前述示例,在一个示例中,N为32,并且其中存储器设备将故障存储体的内容复制到行地址的5个高位。根据存储器控制器的任一前述示例,在一个示例中,控制逻辑向主机操作系统(OS)指示可用存储器空间的减少。根据存储器控制器的任一前述示例,在一个示例中,向基本输入/输出系统(BIOS)指示可用存储器空间的减少的控制逻辑向主机OS指示该区域。根据存储器控制器的任一前述示例,在一个示例中,主机OS将防止在该区域中存储系统关键数据。根据存储器控制器的任一前述示例,在一个示例中,主机OS将使故障存储体离线。根据存储器控制器的任一前述示例,在一个示例中,控制逻辑将对故障存储体的请求映射到区域。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据存储器控制器的任一前述示例,在一个示例中,I/O逻辑是或包括I/O电路。
一般地,关于本文的描述,在一个示例中,一种管理存储器的错误的方法包括:检测存储器设备的N个存储体中的一个存储体的存储体故障(“故障存储体”);将故障存储体的内容复制到存储器设备的其它(N-1)个存储体的指定区域;并且指示(N-1)个存储体的可用存储空间的减少。
在该方法的一个示例中,复制内容包括将故障存储体的内容复制到N个存储体中的R个最高地址以用于存储体备用。根据该方法的任一前述示例,在一个示例中,N是32,并且其中复制内容包括将故障存储体的内容复制到行地址的5个高位。根据该方法的任一前述示例,在一个示例中,指示可用存储空间的减少包括向主机操作系统(OS)指示可用存储空间的减少。根据该方法的任一前述示例,在一个示例中,指示可用存储空间的减少包括防止主机OS在该区域中存储系统关键数据。根据该方法的任一前述示例,在一个示例中,该方法包括:使故障存储体离线。根据该方法的任一前述示例,在一个示例中,指示可用存储器空间的减少包括向基本输入/输出系统(BIOS)指示可用存储器空间的减少以向主机操作系统(OS)指示该区域。根据该方法的任一前述示例,在一个示例中,该方法包括:将对故障存储体的请求映射到区域。
一般地,关于本文的描述,在一个示例中,一种管理存储器的错误的方法包括:检测存储器设备的N个存储体中的一个存储体的存储体故障(“故障存储体”);向存储器设备发送命令来将故障存储体的内容复制到存储器设备的其它(N-1)个存储体的指定区域;并且指示(N-1)个存储体的可用存储空间的减少。
在该方法的一个示例中,发送命令包括使存储器设备将故障存储体的内容复制到N个存储体的R个最高地址以用于存储体备用。根据该方法的任一前述示例,在一个示例中,N是32,并且其中发送命令包括使存储器设备将故障存储体的内容复制到行地址的5个高位。根据该方法的任一前述示例,在一个示例中,指示可用存储空间的减少包括向主机操作系统(OS)指示可用存储空间的减少。根据该方法的任一前述示例,在一个示例中,指示可用存储空间的减少包括防止主机OS在该区域中存储系统关键数据。根据该方法的任一前述示例,在一个示例中,该方法包括:使故障存储体离线。根据该方法的任一前述示例,在一个示例中,指示可用存储器空间的减少包括:向基本输入/输出系统(BIOS)指示可用存储器空间的减少以向主机操作系统(OS)指示该区域。根据该方法的任一前述示例,在一个示例中,该方法包括:将对故障存储体的请求映射到区域。
一般地,关于本文的描述,在一个示例中,一种系统包括:存储器控制器;以及存储器设备,耦合到存储器控制器,该存储器设备包括:具有N个存储体的存储器阵列;错误校验和校正(ECC)逻辑,用于检测N个存储体中的一个存储体的存储体故障(“故障存储体”);以及控制逻辑,用于将故障存储体的内容复制到其它(N-1)个存储体的指定区域,并且向主机指示(N-1)个存储体的可用存储空间的减少。
在系统的一个示例中,控制逻辑将故障存储体的内容复制到N个存储体中的R个最高地址以用于存储体备用。根据系统的任一前述示例,在一个示例中,N为32,并且其中控制逻辑将故障存储体的内容复制到行地址的5个高位。根据系统的任一前述示例,在一个示例中,控制逻辑向主机操作系统(OS)指示可用存储器空间的减少。根据系统的任一前述示例,在一个示例中,向基本输入/输出系统(BIOS)指示可用存储器空间的减少的控制逻辑向主机OS指示该区域。根据系统的任一前述示例,在一个示例中,主机OS将防止在该区域中存储系统关键数据。根据系统的任一前述示例,在一个示例中,主机OS将使故障存储体离线。根据系统的任一前述示例,在一个示例中,控制逻辑将响应于来自存储器控制器的命令复制故障存储体的内容,其中存储器控制器将对故障存储体的请求映射到该区域。根据系统的任一前述示例,在一个示例中,该系统包括以下各项中的一项或多项:耦合到存储器控制器的主处理器;通信地耦合到主处理器的显示器;通信地耦合到主机处理器的网络接口;或为系统供电的电池。根据系统的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据系统的任一前述示例,在一个示例中,控制逻辑是或包括控制器设备。
一般地,关于本文的描述,在一个示例中,存储器设备包括:错误校验和校正(ECC)逻辑,用于检测存储器设备的缓存线中的不可校正的错误;以及写入逻辑,用于将毒位模式写入缓存线以将缓存线标记为故障缓存线。
在存储器设备的一个示例中,写入毒位模式包括执行缓存线的内容与毒掩码的异或。根据存储器设备的任一前述示例,在一个示例中,毒位模式包括用于512个数据位的掩码。根据存储器设备的任一前述示例,在一个示例中,缓存线被细分为多个子缓存线,其中写入毒位模式包括向每个细分写入毒位模式。根据存储器设备的任一前述示例,在一个示例中,毒模式包括用于4个组的128个数据位的掩码。根据存储器设备的任一前述示例,在一个示例中,相关联的存储器控制器读取缓存线,执行缓存线与毒掩码的异或以生成异或结果,并且确定异或结果是否是合法码字。根据存储器设备的任一前述示例,在一个示例中,如果异或结果是合法码字,则存储器控制器将忽略缓存线。根据存储器设备的任一前述示例,在一个示例中,如果异或结果不是合法码字,则存储器控制器将触发缓存线的错误处理。根据存储器设备的任一前述示例,在一个示例中,缓存线的内容与毒掩码的异或将导致可检测的、不可校正的错误(DUE)。根据存储器设备的任一前述示例,在一个示例中,将毒位模式写入缓存线包括将预定义的毒位模式写入缓存线。根据存储器设备的任一前述示例,在一个示例中,存储器设备包括双倍数据速率版本5(DDR5)同步动态随机存取存储器(SDRAM)设备。根据存储器设备的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据存储器设备的任一前述示例,在一个示例中,写入逻辑是或包括写入电路。
一般地,关于本文的描述,在一个示例中,存储器控制器包括:输入/输出(I/O)接口,用于耦合到存储器设备;和错误校验和校正(ECC)逻辑,用于检测存储器设备的缓存线中不可校正的错误;其中,I/O接口用于发送命令向缓存线写入毒位模式,以将缓存线标记为故障的缓存线。
在存储器控制器的一个示例中,写入毒位模式包括执行缓存线的内容与毒掩码的异或。根据存储器控制器的任一前述示例,在一个示例中,毒位模式包括用于512个数据位的掩码。根据存储器控制器的任一前述示例,在一个示例中,缓存线被细分为多个子缓存线,其中写入毒位模式包括向每个细分写入毒位模式。根据存储器控制器的任一前述示例,在一个示例中,毒模式包括用于4个组的128个数据位的掩码。根据存储器控制器的任一前述示例,在一个示例中,I/O接口用于读取缓存线,并且ECC逻辑用于执行缓存线与毒掩码的异或以产生异或结果,并且确定异或结果是否是合法的码字。根据存储器控制器的任一前述示例,在一个示例中,如果异或结果是合法码字,则存储器控制器将忽略缓存线。根据存储器控制器的任一前述示例,在一个示例中,如果异或结果不是合法码字,则存储器控制器将触发缓存线的错误处理。根据存储器控制器的任一前述示例,在一个示例中,缓存线的内容与毒掩码的异或将导致可检测的、不可校正的错误(DUE)。根据存储器控制器的任一前述示例,在一个示例中,将毒位模式写入缓存线包括将预定义的毒位模式写入缓存线。根据存储器控制器的任一前述示例,在一个示例中,存储器设备包括双倍数据速率版本5(DDR5)同步动态随机存取存储器(SDRAM)设备。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据存储器控制器的任一前述示例,在一个示例中,I/O接口是或包括I/O电路。
一般地,关于本文的描述,在一个示例中,一种方法包括:检测存储器设备的缓存线中的不可校正的错误;以及将毒位模式写入缓存线以将缓存线标记为故障的缓存线。
在该方法的一个示例中,写入毒位模式包括执行缓存线的内容与毒掩码的异或。根据该方法的任一前述示例,在一个示例中,毒位模式包括用于512个数据位的掩码。根据该方法的任一前述示例,在一个示例中,缓存线被细分为多个子缓存线,其中写入毒位模式包括向每个细分写入毒位模式。根据该方法的任一前述示例,在一个示例中,毒模式包括用于4个组的128个数据位的掩码。根据该方法的任一前述示例,在一个示例中,该方法包括:读取缓存线;执行缓存线与毒掩码的异或来生成异或结果;以及确定异或结果是否是合法码字。根据该方法的任一前述示例,在一个示例中,如果异或结果是合法码字,则忽略缓存线。根据该方法的任一前述示例,在一个示例中,如果异或结果不是合法码字,则触发缓存线的错误处理。根据该方法的任一前述示例,在一个示例中,执行缓存线的内容与毒掩码的异或将导致可检测的、不可校正的错误(DUE)。根据该方法的任一前述示例,在一个示例中,将毒位模式写入缓存线包括将预定义的毒位模式写入缓存线。根据该方法的任一前述示例,在一个示例中,存储器设备包括双倍数据速率版本5(DDR5)同步动态随机存取存储器(SDRAM)设备。
一般而言,关于本文的描述,在一个示例中,系统包括:存储器控制器;以及存储器设备,耦合到存储器控制器,该存储器设备包括错误校验和校正(ECC)逻辑,用于检测存储器设备的缓存线中的不可校正的错误;以及写入逻辑,用于将毒位模式写入缓存线以将缓存线标记为故障的缓存线。
在系统的一个示例中,写入毒位模式包括执行缓存线的内容与毒掩码的异或。根据系统的任一前述示例,在一个示例中,毒位模式包括用于512个数据位的掩码。根据系统的任一前述示例,在一个示例中,缓存线被细分为多个子缓存线,其中写入毒位模式包括向每个细分写入毒位模式。根据系统的任一前述示例,在一个示例中,毒模式包括用于4个组的128个数据位的掩码。根据系统的任一前述示例,在一个示例中,存储器控制器读取缓存线,执行缓存线与毒掩码的异或以生成异或结果,并且确定异或结果是否是合法码字。根据系统的任一前述示例,在一个示例中,如果异或结果是合法码字,则存储器控制器将忽略缓存线。根据系统的任一前述示例,在一个示例中,如果异或结果不是合法码字,则存储器控制器将触发缓存线的错误处理。根据系统的任一前述示例,在一个示例中,缓存线的内容与毒掩码的异或将导致可检测的、不可校正的错误(DUE)。根据系统的任一前述示例,在一个示例中,将毒位模式写入缓存线包括将预定义的毒位模式写入缓存线。根据系统的任一前述示例,在一个示例中,存储器设备包括双倍数据速率版本5(DDR5)同步动态随机存取存储器(SDRAM)设备。根据系统的任一前述示例,在一个示例中,该系统包括以下各项中的一项或多项:耦合到存储器控制器的主处理器;通信地耦合到主处理器的显示器;通信地耦合到主机处理器的网络接口;或为系统供电的电池。根据系统的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据系统的任一前述示例,在一个示例中,写入逻辑是或包括写入电路。
一般地,关于本文的描述,在一个示例中,存储器控制器包括:硬件输入/输出(I/O)接口,用于耦合到并联连接在存储器通道上的多个存储器设备,其中每个存储器设备向存储器控制器提供码字的一部分;错误校验和校正(ECC)逻辑,用于检测码字中的错误;以及故障检测逻辑,用于确定该错误是多个存储器设备中的至少一者中的永久故障的结果;其中ECC逻辑用于基于错误是永久故障的结果的确定来调整ECC在码字上的应用。
在存储器控制器的一个示例中,故障检测逻辑用于确定错误是永久故障的结果,包括将全零写入码字来确定是否存在不从一翻转的位,并且将全一写入到码字来确定是否有不从零翻转的位。根据存储器控制器的任一前述示例,在一个示例中,故障检测逻辑是连续多次重复写入全零和全一来检测永久故障。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑将识别为不从一翻转或不从零翻转的永久故障位。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑将把ECC在码字上的应用限制到具有错误的存储器设备。根据存储器控制器的任一前述示例,在一个示例中,在将ECC在码字上的应用限制到具有错误的存储器设备之后,如果ECC逻辑继续检测到码字中的错误,则存储器控制器是将具有永久故障的存储器设备标记为故障设备。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑用于对码字执行ECC来生成ECC结果,并且基于错误是永久故障的结果的确定来确定ECC结果是否正确。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据存储器控制器的任一前述示例,在一个示例中,I/O接口是或包括I/O电路。根据存储器控制器的任一前述示例,在一个示例中,故障检测逻辑将包括故障检测电路。
一般地,关于本文的描述,在一个示例中,一种方法包括:从并联连接在存储器通道上的多个存储器设备中的每一个接收码字的一部分;使用错误校验和校正(ECC)检测码字中的错误;确定该错误是多个存储器设备中的至少一者中的永久故障的结果;以及基于错误是永久故障的结果的确定,来调整ECC在码字上的应用。
在该方法的一个示例中,确定错误是永久故障的结果包括将全零写入码字来确定是否存在不从一翻转的位,以及将全一写入码字来确定是否存在不从零翻转的位。根据该方法的任一前述示例,在一个示例中,确定错误是永久故障的结果包括连续多次重复写入全零和全一来检测永久故障。根据该方法的任一前述示例,在一个示例中,确定位不从一翻转或位不从零翻转包括用ECC来检测位。根据该方法的任一前述示例,在一个示例中,调整ECC的应用包括将ECC在码字上的应用限制到具有错误的存储器设备。根据该方法的任一前述示例,在一个示例中,在将ECC在码字上的应用限制到具有错误的存储器设备之后,如果ECC逻辑继续检测到码字中的错误,则进一步包括:将具有永久故障的存储器设备标记为故障设备。根据该方法的任一前述示例,在一个示例中,检测错误包括:对码字执行ECC来生成ECC结果,并且基于错误是永久故障的结果的确定来确定ECC结果是否正确。
一般地,关于本文的描述,在一个示例中,一种系统包括:并联连接在存储器通道上的多个存储器设备;以及存储器控制器,耦合到存储器通道上的多个存储器设备,其中每个存储器设备向存储器控制器提供码字的一部分,存储器控制器包括:错误校验和校正(ECC)逻辑,用于检测码字中的错误;以及故障检测逻辑,用于确定该错误是多个存储器设备中的至少一者中的永久故障的结果;其中ECC逻辑用于基于错误是永久故障的结果的确定来调整ECC在码字上的应用。
在系统的一个示例中,故障检测逻辑用于确定错误是永久故障的结果,包括将全零写入码字来确定是否存在不从一翻转的位,并且将全一写入到码字来确定是否有不从零翻转的位。根据系统的任一前述示例,在一个示例中,故障检测逻辑是连续多次重复写入全零和全一来检测永久故障。根据系统的任一前述示例,在一个示例中,ECC逻辑将识别为不从一翻转或不从零翻转的永久故障位。根据系统的任一前述示例,在一个示例中,ECC逻辑将把ECC在码字上的应用限制到具有错误的存储器设备。根据系统的任一前述示例,在一个示例中,在将ECC在码字上的应用限制到具有错误的存储器设备之后,如果ECC逻辑继续检测到码字中的错误,则存储器控制器是将具有永久故障的存储器设备标记为故障设备。根据系统的任一前述示例,在一个示例中,ECC逻辑用于对码字执行ECC来生成ECC结果,并且基于错误是永久故障的结果的确定来确定ECC结果是否正确。根据系统的任一前述示例,在一个示例中,该系统包括以下各项中的一项或多项:耦合到存储器控制器的主处理器;通信地耦合到主处理器的显示器;通信地耦合到主机处理器的网络接口;或为系统供电的电池。根据系统的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据系统的任一前述示例,在一个示例中,I/O接口是或包括I/O电路。根据系统的任一前述示例,在一个示例中,故障检测逻辑将包括故障检测电路。
一般地,关于本文的描述,在一个示例中,存储器控制器包括:硬件输入/输出(I/O)接口,用于耦合到并联连接在存储器通道上的多个存储器设备,其中每个存储器设备向存储器控制器提供码字的一部分;错误校验和校正(ECC)逻辑,用于检测码字中的错误;以及确定错误限于存储器设备中的一个存储器设备的特定部分并且对存储器设备的特定部分执行故障备用并使存储器设备的另一部分活动的逻辑;其中,ECC逻辑根据备用存储器设备的特定部分来调整ECC操作。
在存储器控制器的一个示例中,码字的部分包括存储器设备的一半。根据存储器控制器的任一前述示例,在一个示例中,一半包括存储器设备的右半部分。根据存储器控制器的任一前述示例,在一个示例中,一半包括存储器设备的左半部分。根据存储器控制器的任一前述示例,在一个示例中,存储器设备具有x4接口来交换64位,并且其中逻辑对x4接口的2条信号线执行故障备用。根据存储器控制器的任一前述示例,在一个示例中,码字的部分包括存储器设备的四分之一。根据存储器控制器的任一前述示例,在一个示例中,存储器设备具有x8接口来交换64位,并且其中逻辑对x8接口的2条信号线执行故障备用。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑用于对特定部分的故障备用后的码字执行SDDC(单设备数据校正)错误校正。根据存储器控制器的任一前述示例,在一个示例中,为了使用SDDC的不可校正的错误的检测,ECC逻辑将使用ADDDC(自适应双设备数据校正)执行错误校正。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑用于检测码字中的另一个错误以指示整个存储器设备的故障,并且响应于整个存储器设备的故障,ECC逻辑用ADDDC(自适应双设备数据校正)执行错误校正。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据存储器控制器的任一前述示例,在一个示例中,确定错误被限制到特定部分的逻辑是或包括控制器设备。根据存储器控制器的任一前述示例,在一个示例中,I/O接口是或包括I/O电路。
一般地,关于本文的描述,在一个示例中,一种方法包括:从并联连接在存储器通道上的多个存储器设备中的每一个接收码字的一部分;使用错误校验和校正(ECC)检测码字中的错误;确定错误限于存储器设备中的一个存储器设备的特定部分;对存储器设备的特定部分执行故障备用,并使存储器设备的另一部分活动;以及基于备用的存储器设备的特定部分来调整ECC操作。
在该方法的一个示例中,码字的部分包括存储器设备的一半。根据该方法的任一前述示例,在一个示例中,一半包括存储器设备的右半部分。根据该方法的任一前述示例,在一个示例中,一半包括存储器设备的左半部分。根据该方法的任一前述示例,在一个示例中,存储器设备具有x4接口来交换64位,并且其中逻辑对x4接口的2条信号线执行故障备用。根据该方法的任一前述示例,在一个示例中,码字的部分包括存储器设备的四分之一。根据该方法的任一前述示例,在一个示例中,存储器设备具有x8接口来交换64位,并且其中逻辑对x8接口的2条信号线执行故障备用。根据该方法的任一前述示例,在一个示例中,该方法包括:对特定部分故障备用后的码字执行SDDC(单设备数据校正)错误校正。根据该方法的任一前述示例,在一个示例中,该方法包括:为了使用SDDC检测不可校正的错误,使用ADDDC(自适应双设备数据校正)执行错误校正。根据该方法的任一前述示例,在一个示例中,该方法包括:检测码字中的另一个错误以指示整个存储器设备的故障;以及响应于整个存储器设备的故障,使用ADDDC(自适应双设备数据校正)执行错误校正。
一般而言,关于本文的描述,在一个示例中,一种系统包括:并联连接在存储器通道上的多个存储器设备;存储器控制器,耦合到存储器通道上的多个存储器设备,其中每个存储器设备向存储器控制器提供码字的一部分,存储器控制器包括硬件输入/输出(I/O)接口,用于耦合到并联连接在存储器通道上的多个存储器设备,其中每个存储器设备用于向存储器控制器提供码字的一部分;错误校验和校正(ECC)逻辑,用于检测码字中的错误;以及用于确定错误限于存储器设备中的一个存储器设备的特定部分并且对存储器设备的特定部分执行故障备用并使存储器设备的另一部分活动的逻辑;其中,ECC逻辑基于备用存储器设备的特定部分来调整ECC操作。
在系统的一个示例中,码字的部分包括存储器设备的一半。根据系统的任一前述示例,在一个示例中,一半包括存储器设备的右半部分。根据系统的任一前述示例,在一个示例中,一半包括存储器设备的左半部分。根据系统的任一前述示例,在一个示例中,存储器设备具有x4接口来交换64位,并且其中逻辑对x4接口的2条信号线执行故障备用。根据系统的任一前述示例,在一个示例中,码字的部分包括存储器设备的四分之一。根据系统的任一前述示例,在一个示例中,存储器设备具有x8接口来交换64位,并且其中逻辑对x8接口的2条信号线执行故障备用。根据系统的任一前述示例,在一个示例中,ECC逻辑用于对特定部分的故障备用后的码字执行SDDC(单设备数据校正)错误校正。根据系统的任一前述示例,在一个示例中,为了使用SDDC的不可校正的错误的检测,ECC逻辑将使用ADDDC(自适应双设备数据校正)执行错误校正。根据系统的任一前述示例,在一个示例中,ECC逻辑用于检测码字中的另一个错误以指示整个存储器设备的故障,并且响应于整个存储器设备的故障,ECC逻辑用ADDDC(自适应双设备数据校正)执行错误校正。根据系统的任一前述示例,在一个示例中,该系统包括以下各项中的一项或多项:耦合到存储器控制器的主处理器;通信地耦合到主处理器的显示器;通信地耦合到主机处理器的网络接口;或为系统供电的电池。根据系统的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据系统的任一前述示例,在一个示例中,确定错误被限制到特定部分的逻辑是或包括控制器设备。根据系统的任一前述示例,在一个示例中,I/O接口是或包括I/O电路。
一般而言,关于本文的描述,在一个示例中,存储器控制器包括:输入/输出(I/O)接口,用于耦合到并联连接在存储器通道上的多个存储器设备,其中多个存储器设备包括存储用户数据的N个数据设备和存储ECC位(第1层位)的ECC(错误校验和校正)设备,其中每个存储器设备向存储器控制器提供码字的一部分,其中ECC设备的ECC位启用检测单个设备故障但是不校正单个设备故障;用于在数据设备中存储附加ECC位(第2层位)的控制逻辑;以及错误校验和校正(ECC)逻辑,仅基于第1层位对码字执行错误检测,并且响应于错误的检测,读取第2层位来执行错误校正。
在存储器控制器的一个示例中,N等于5,其中多个存储器设备包括具有x8接口的4个数据设备和具有x8接口的1个ECC设备。根据存储器控制器的任一前述示例,在一个示例中,N等于9,其中多个存储器设备包括具有x4接口的8个数据设备和具有x4接口的1个ECC设备。根据存储器控制器的任一前述示例,在一个示例中,第1层位是全矩阵的子矩阵,其中全矩阵包括第1层位加上第2层位。根据存储器控制器的任一前述示例,在一个示例中,对存储器设备的写入包括数据的写入、第2层位的读取和更新以及第2层位的写入。根据存储器控制器的任一前述示例,在一个示例中,存储器控制器包括:缓存,用于缓存第2层位的写入。根据存储器控制器的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据存储器控制器的任一前述示例,在一个示例中,控制逻辑是或包括控制器设备。根据存储器控制器的任一前述示例,在一个示例中,I/O接口是或包括I/O电路。
一般地,关于本文的描述,在一个示例中,一种方法包括:从存储器通道上并联连接的多个存储器设备中的每一个接收码字的一部分,其中多个存储器设备包括存储用户数据的N个数据设备以及用于存储ECC位(第1层位)的ECC(错误校验和校正)设备,其中ECC设备的ECC位能够检测单个设备故障但不能校正单个设备故障;在数据设备中存储附加的ECC位(第2层位);以及仅基于第1层位对码字执行错误检测;以及响应于错误的检测,读取第2层位来执行错误校正。
在该方法的一个示例中,N等于5,其中多个存储器设备包括具有x8接口的4个数据设备和具有x8接口的1个ECC设备。根据该方法的任一前述示例,在一个示例中,N等于9,其中多个存储器设备包括具有x4接口的8个数据设备和具有x4接口的1个ECC设备。根据该方法的任一前述示例,在一个示例中,第1层位是全矩阵的子矩阵,其中全矩阵包括第1层位加上第2层位。根据该方法的任一前述示例,在一个示例中,写入存储器设备包括写入数据、读取和更新第2层位以及写入第2层位。根据该方法的任一前述示例,在一个示例中,该方法包括:缓存对第2层位的写入。
一般地,关于本文的描述,在一个示例中,一种系统包括:在存储器通道上并联连接的多个存储器设备,包括用于存储用户数据的N个数据设备和用于存储ECC位的ECC(错误校验和校正)设备(第1层位);以及存储器控制器,耦合到存储器通道上的多个存储器设备,其中每个存储器设备向存储器控制器提供码字的一部分,其中每个存储器设备向存储器控制器提供码字的一部分,其中ECC设备的ECC位能够检测单个设备故障但不能校正单个设备故障,存储器控制器包括:控制逻辑,用于在数据设备中存储附加的ECC位(第2层位);以及错误校验和校正(ECC)逻辑,用于仅基于第1层位对码字执行错误检测,并且响应于错误的检测,读取第2层位来执行错误校正。
在系统的一个示例中,N等于5,其中多个存储器设备包括具有x8接口的4个数据设备和具有x8接口的1个ECC设备。根据系统的任一前述示例,在一个示例中,多个存储器设备包括具有x4接口的8个数据设备和具有x4接口的1个ECC设备。根据系统的任一前述示例,在一个示例中,第1层位是全矩阵的子矩阵,其中全矩阵包括第1层位加上第2层位。根据系统的任一前述示例,在一个示例中,对存储器设备的写入包括数据的写入、第2层位的读取和更新以及第2层位的写入。根据系统的任一前述示例,在一个示例中,系统包括:缓存,用于缓存第2层位的写入。根据系统的任一前述示例,在一个示例中,该系统包括以下各项中的一项或多项:耦合到存储器控制器的主处理器;通信地耦合到主处理器的显示器;通信地耦合到主机处理器的网络接口;或为系统供电的电池。根据系统的任一前述示例,在一个示例中,ECC逻辑是或包括ECC电路。根据系统的任一前述示例,在一个示例中,控制逻辑是或包括控制器设备。根据系统的任一前述示例,在一个示例中,I/O接口是或包括I/O电路。
如本文所示的流程图提供了各个过程动作的序列的示例。流程图可以指示要由软件或固件例程以及物理操作执行的操作。流程图可以说明有限状态机(FSM)的状态的实施方式的示例,其可以以硬件和/或软件实现。尽管以特定顺序或次序示出,但是除非另有说明,否则可以修改动作的次序。因此,图示的图应仅被理解为示例,并且过程可以不同的顺序执行,并且一些动作可以并行执行。此外,可以省略一个或多个动作;因此,并非所有实施方式都会执行所有动作。
就本文描述的各个操作或功能而言,它们可以被描述或定义为软件代码、指令、配置和/或数据。内容可以是直接可执行的(“对象”或“可执行”形式)、源代码或差异代码(“增量”或“补丁”代码)。本文描述的软件内容可以经由其上存储有内容的制造品来提供,或者经由操作通信接口来通过通信接口发送数据的方法来提供。机器可读存储介质可以使机器执行所描述的功能或操作,并且包括以机器(例如,计算设备、电子系统等)可访问的形式存储信息的任何机构,诸如可记录/非可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存储器设备等)。通信接口包括对接到硬连线、无线、光学等介质中的任一种以与另一设备通信的任何机构,例如存储器总线接口、处理器总线接口、互联网连接、磁盘控制器等。可以通过提供配置参数和/或发送信号来配置通信接口以使通信接口准备提供描述软件内容的数据信号。可以经由发送到通信接口的一个或多个命令或信号来访问通信接口。
本文描述的各个组件可以是用于执行所描述的操作或功能的部件。本文描述的每个组件包括软件、硬件或其组合。这些组件可以实现为软件模块、硬件模块、专用硬件(例如,专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬连线电路等。
除了本文所描述的内容之外,在不脱离本发明的范围的情况下,可以对所公开的内容和本发明的实施方式进行各种修改。因此,本文的说明和示例应解释为说明性的,而不是限制性的。本发明的范围应仅通过参考所附权利要求来衡量。

Claims (42)

1.一种存储器设备,包括:
存储器阵列,其具有N个存储体;
错误校验和校正(ECC)逻辑,其用于检测所述N个存储体中的一个存储体的存储体故障(“故障存储体”);以及
控制逻辑,其用于将所述故障存储体的内容复制到其它(N-1)个存储体的指定区域并且向主机指示所述(N-1)个存储体的可用存储空间的减少。
2.根据权利要求1所述的存储器设备,其中,所述控制逻辑用于将所述故障存储体的内容复制到所述N个存储体中的R个最高地址用于存储体备用。
3.根据权利要求2所述的存储器设备,其中,N是32,并且其中,所述控制逻辑用于将所述故障存储体的内容复制到行地址的5个高位。
4.根据权利要求1至3中任一项所述的存储器设备,其中,所述控制逻辑用于向主机操作系统(OS)指示所述可用存储空间的所述减少。
5.根据权利要求4所述的存储器设备,其中,所述控制逻辑用于向基本输入/输出系统(BIOS)指示所述可用存储空间的所述减少,以向所述主机OS指示所述区域。
6.根据权利要求5所述的存储器设备,其中,所述主机OS用于防止在所述区域中存储系统关键数据。
7.根据权利要求4所述的存储器设备,其中,所述主机OS用于使所述故障存储体离线。
8.根据权利要求1至3中任一项所述的存储器设备,其中,所述控制逻辑用于响应于来自存储器控制器的命令来复制所述故障存储体的所述内容,其中,所述存储器控制器用于将对所述故障存储体的请求映射到所述区域。
9.一种存储器设备,包括:
错误校验和校正(ECC)电路,其用于检测在所述存储器设备的缓存线中的不可校正的错误;以及
写入电路,其用于将毒位模式写入所述缓存线来将所述缓存线标记为故障的缓存线。
10.根据权利要求9所述的存储器设备,其中,写入所述毒位模式包括执行所述缓存线的内容与毒掩码的异或。
11.根据权利要求10所述的存储器设备,其中,所述毒位模式包括用于512个数据位的掩码。
12.根据权利要求10所述的存储器设备,其中,所述缓存线被细分为多个子缓存线,其中,写入所述毒位模式包括向每个细分写入毒位模式。
13.根据权利要求12所述的存储器设备,其中,所述毒模式包括用于4组128个数据位的掩码。
14.根据权利要求9至13中任一项所述的存储器设备,其中,相关联的存储器控制器用于读取所述缓存线,执行所述缓存线与所述毒掩码的异或来生成异或结果,并且确定所述异或结果是否是合法码字。
15.根据权利要求14所述的存储器设备,其中,如果所述异或结果是合法码字,则所述存储器控制器将忽略所述缓存线。
16.根据权利要求14所述的存储器设备,其中,如果所述异或结果不是合法码字,则所述存储器控制器将触发对所述缓存线的错误处理。
17.根据权利要求9至16中任一项所述的存储器设备,其中,所述缓存线的所述内容与所述毒掩码的所述异或将导致可检测的、不可校正的错误(DUE)。
18.根据权利要求9至17中任一项所述的存储器设备,其中,用于将所述毒位模式写入所述缓存线包括将预定义的毒位模式写入所述缓存线。
19.根据权利要求9至18中任一项所述的存储器设备,其中,所述存储器设备包括双倍数据速率版本5(DDR5)同步动态随机存取存储器(SDRAM)设备。
20.一种存储器控制器,包括:
硬件输入/输出(I/O)接口,其用于耦合到并行连接在存储器通道上的多个存储器设备,其中,每个存储器设备将向所述存储器控制器提供码字的一部分;
错误校验和校正(ECC)逻辑,其用于检测所述码字中的错误;以及
故障检测逻辑,其用于确定所述错误是在所述多个存储器设备中的至少一者中的永久故障的结果;
其中,所述ECC逻辑用于基于关于所述错误是永久故障的结果的确定来调整ECC在所述码字上的应用。
21.根据权利要求20所述的存储器控制器,其中,所述故障检测逻辑用于确定所述错误是永久故障的所述结果,包括将全零写入所述码字来确定是否存在不从一翻转的位,并且将全一写入所述码字来确定是否存在不从零翻转的位。
22.根据权利要求21所述的存储器控制器,其中,所述故障检测逻辑用于连续多次重复全零和全一的写入来检测所述永久故障。
23.根据权利要求20至22中任一项所述的存储器控制器,其中,所述ECC逻辑用于将不从一翻转或不从零翻转的位识别为永久故障。
24.根据权利要求20至22中任一项所述的存储器控制器,其中,所述ECC逻辑用于将ECC在所述码字上的所述应用限制到具有错误的存储器设备。
25.根据权利要求24所述的存储器控制器,其中,在将ECC在所述码字上的所述应用限制到具有错误的所述存储器设备之后,如果所述ECC逻辑继续检测到所述码字中的所述错误,则所述存储器控制器将具有永久故障的存储器设备标记为故障设备。
26.根据权利要求20至25中任一项所述的存储器控制器,其中,所述ECC逻辑用于对所述码字执行ECC来生成ECC结果,并且基于关于所述错误是永久故障的所述结果的所述确定来确定所述ECC结果是否是正确的。
27.一种存储器控制器,包括:
硬件输入/输出(I/O)接口,其用于耦合到并行连接在存储器通道上的多个存储器设备,其中,每个存储器设备用于向所述存储器控制器提供码字的一部分;
错误校验和校正(ECC)逻辑,其用于检测所述码字中的错误;以及
逻辑,其用于确定所述错误限于所述存储器设备中的一个存储器设备的特定部分并且对所述存储器设备的所述特定部分执行故障备用并且使所述存储器设备的另一部分活动;
其中,所述ECC逻辑用于基于备用所述存储器设备的所述特定部分来调整ECC操作。
28.根据权利要求27所述的存储器控制器,其中,所述码字的所述部分包括所述存储器设备的一半。
29.根据权利要求28所述的存储器控制器,其中,所述一半包括所述存储器设备的右半部分。
30.根据权利要求28所述的存储器控制器,其中,所述一半包括所述存储器设备的左半部分。
31.根据权利要求27至30中任一项所述的存储器控制器,其中,所述存储器设备具有用于交换64位的x4接口,并且其中,所述逻辑用于对所述x4接口的2条信号线执行故障备用。
32.根据权利要求27所述的存储器控制器,其中,所述码字的所述部分包括所述存储器设备的四分之一。
33.根据权利要求32所述的存储器控制器,其中,所述存储器设备具有用于交换64位的x8接口,并且其中,所述逻辑用于对所述x8接口的2条信号线执行故障备用。
34.根据权利要求27至33中任一项所述的存储器控制器,其中,所述ECC逻辑用于在所述特定部分上所述故障备用之后对所述码字执行SDDC(单设备数据校正)错误校正。
35.根据权利要求27至34中任一项所述的存储器控制器,其中,为了利用SDDC的不可校正的错误的检测,所述ECC逻辑用于利用ADDDC(自适应双设备数据校正)执行错误校正。
36.根据权利要求27至34中任一项所述的存储器控制器,其中,所述ECC逻辑用于检测所述码字中的另一错误以指示整个存储器设备的故障,并且响应于所述整个存储器设备的故障,所述ECC逻辑用于利用ADDDC(自适应双设备数据校正)执行错误校正。
37.一种存储器控制器,包括:
硬件输入/输出(I/O)接口,其用于耦合到并行连接在存储器通道上的多个存储器设备,其中,所述多个存储器设备包括用于存储用户数据的N个数据设备和用于存储ECC位(第1层位)的ECC设备,其中,每个存储器设备用于向所述存储器控制器提供码字的一部分,其中,所述ECC设备的ECC位实现检测单个设备故障但是不校正所述单个设备故障;
控制逻辑,其用于在所述数据设备中存储附加ECC位(第2层位);以及
错误校验和校正(ECC)逻辑,其用于仅基于所述第1层位来对所述码字执行错误检测,并且响应于对错误的检测,读取所述第2层位来执行错误校正。
38.根据权利要求37所述的存储器控制器,其中,N等于5,其中,所述多个存储器设备包括具有x8接口的4个数据设备和具有x8接口的1个ECC设备。
39.根据权利要求37至38中的任一项所述的存储器控制器,其中,所述多个存储器设备包括具有x4接口的8个数据设备和具有x4接口的1个ECC设备。
40.根据权利要求37至39中任一项所述的存储器控制器,其中,所述第1层位是全矩阵的子矩阵,其中,所述全矩阵包括第1层位加上第2层位。
41.根据权利要求37至40中任一项所述的存储器控制器,其中,对所述存储器设备的写入包括数据的写入、所述第2层位的读取和更新以及所述第2层位的写入。
42.根据权利要求37至41中任一项所述的存储器控制器,还包括:
缓存,其用于缓存对所述第2层位的写入。
CN202080108203.6A 2020-12-26 2020-12-26 自适应错误校正以提高系统存储器可靠性、可用性和可服务性(ras) Pending CN116783654A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2020/067075 WO2022139849A1 (en) 2020-12-26 2020-12-26 Adaptive error correction to improve for system memory reliability, availability, and serviceability (ras)

Publications (1)

Publication Number Publication Date
CN116783654A true CN116783654A (zh) 2023-09-19

Family

ID=82160045

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080108203.6A Pending CN116783654A (zh) 2020-12-26 2020-12-26 自适应错误校正以提高系统存储器可靠性、可用性和可服务性(ras)

Country Status (6)

Country Link
US (1) US20240061741A1 (zh)
KR (1) KR20230121611A (zh)
CN (1) CN116783654A (zh)
DE (1) DE112020007776T5 (zh)
NL (2) NL2035035A (zh)
WO (1) WO2022139849A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12013752B2 (en) * 2022-06-16 2024-06-18 Advanced Micro Devices, Inc. Host-level error detection and fault correction

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3322768B2 (ja) * 1994-12-21 2002-09-09 富士通株式会社 記録再生装置及び記録媒体の交代処理方法
US7694071B1 (en) * 2005-07-12 2010-04-06 Seagate Technology Llc Disk drives and methods allowing configurable zoning
US20070180186A1 (en) * 2006-01-27 2007-08-02 Cornwell Michael J Non-volatile memory management
KR100965768B1 (ko) * 2007-12-26 2010-06-24 주식회사 하이닉스반도체 반도체 메모리 소자
US8156392B2 (en) * 2008-04-05 2012-04-10 Fusion-Io, Inc. Apparatus, system, and method for bad block remapping
US8438452B2 (en) * 2008-12-29 2013-05-07 Intel Corporation Poison bit error checking code scheme
US20110289349A1 (en) * 2010-05-24 2011-11-24 Cisco Technology, Inc. System and Method for Monitoring and Repairing Memory
US9483395B2 (en) * 2010-06-02 2016-11-01 St-Ericsson Sa Asynchronous bad block management in NAND flash memory
DE102011014665A1 (de) * 2011-03-22 2012-09-27 Giesecke & Devrient Gmbh Detektieren von Angriffen auf einen portablen Datenträger
US9529547B2 (en) * 2011-10-21 2016-12-27 Freescale Semiconductor, Inc. Memory device and method for organizing a homogeneous memory
US20140006904A1 (en) * 2012-06-29 2014-01-02 Intel Corporation Encoding information in error correcting codes
JP5586712B2 (ja) * 2013-01-16 2014-09-10 株式会社東芝 ディスクアレイ制御装置およびディスクアレイ装置
US20140359198A1 (en) * 2013-05-28 2014-12-04 Apple Inc. Notification of storage device performance to host
US9354970B2 (en) * 2014-03-31 2016-05-31 Advanced Micro Devices, Inc. Method and apparatus for encoding erroneous data in an error correction code protected memory
US9195593B1 (en) * 2014-09-27 2015-11-24 Oracle International Corporation Hardware assisted object memory migration
US9697094B2 (en) * 2015-02-06 2017-07-04 Intel Corporation Dynamically changing lockstep configuration
US10042701B2 (en) * 2015-09-29 2018-08-07 Apple Inc. Storing address of spare in failed memory location
US11385797B2 (en) * 2015-10-05 2022-07-12 Micron Technology, Inc. Solid state storage device with variable logical capacity based on memory lifecycle
US20170186500A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Memory circuit defect correction
DE112017007690T5 (de) * 2017-06-27 2020-03-12 Intel Corporation Verfahren und vorrichtungen zur durchführung einer fehlerdetektion und/oder korrektur in einer speichervorrichtung
KR20190040607A (ko) * 2017-10-11 2019-04-19 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10658056B2 (en) * 2017-12-22 2020-05-19 Intel Corporation Internal copy to handle NAND program fail
KR102378819B1 (ko) * 2018-02-20 2022-03-25 삼성전자주식회사 메모리 장치
US11138064B2 (en) * 2018-12-13 2021-10-05 Micron Technology, Inc. Dynamic control of error management and signaling
US20200218599A1 (en) * 2019-01-09 2020-07-09 Hewlett Packard Enterprise Development Lp Methods and systems for smart memory data integrity checking
KR20210055346A (ko) * 2019-11-07 2021-05-17 에스케이하이닉스 주식회사 스토리지 장치 및 그 동작 방법

Also Published As

Publication number Publication date
US20240061741A1 (en) 2024-02-22
DE112020007776T5 (de) 2024-02-15
NL2029789B1 (en) 2023-06-28
WO2022139849A1 (en) 2022-06-30
NL2035035A (en) 2023-08-25
NL2029789A (en) 2022-07-20
KR20230121611A (ko) 2023-08-18

Similar Documents

Publication Publication Date Title
CN109074851B (zh) 利用额外系统位的内部错误校验和校正(ecc)
KR102553704B1 (ko) 에러 타입에 기초하는 ecc의 동적 적용
US10496473B2 (en) Extracting selective information from on-die dynamic random access memory (DRAM) error correction code (ECC)
US10459793B2 (en) Data reliability information in a non-volatile memory device
US10572343B2 (en) Targeted aliasing single error correction (SEC) code
US20170063394A1 (en) Memory device on-die error checking and correcting code
US8869007B2 (en) Three dimensional (3D) memory device sparing
EP4033362A1 (en) Distribution of error checking and correction (ecc) bits to allocate ecc bits for metadata
TW202223903A (zh) 適應性內部記憶體錯誤刷洗及錯誤處置
US11409601B1 (en) Memory device protection
CN113434330A (zh) 行可寻址且列可寻址的存储器中的动态数据的错误纠正
KR20220044015A (ko) 메모리 장치의 에러 정정 불가를 예방하는 제어기, 그것을 포함하는 메모리 시스템 및 그것의 동작 방법
CN112631822A (zh) 存储器、具有其的存储系统及其操作方法
CN114446346A (zh) 存储器装置、存储器系统及存储器系统的操作方法
NL2029789B1 (en) Adaptive error correction to improve for system memory reliability, availability, and serviceability (ras)
US10917111B2 (en) Error correction code unit and error correction method
WO2021262231A1 (en) Methods and apparatus for enhancing uber rate for storage devices

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