Distribution of error checking and correction (ECC) bits to allocate ECC bits for metadata

Split-line access in memory systems distributes ECC bits across multiple devices, addressing the challenge of limited ECC bandwidth in high-density memory devices by reducing ECC requirements and freeing up capacity for metadata, thus enhancing system functionality and performance.

JP2025176029AActive Publication Date: 2025-12-03INTEL CORP
View PDF 6 Cites 0 Cited by

Patent Information

Application Number
JP2025135521
Authority / Receiving Office
JP · JP
Patent Type
Applications
Current Assignee / Owner
Priority Date
2021-01-22
Filing Date
2025-08-15
Publication Date
2025-12-03
Estimated Expiration
2041-09-24

AI Technical Summary

Technical Problem

Increasing memory device density and shrinking feature sizes lead to higher runtime errors, necessitating increased ECC bandwidth that leaves no room for system-level metadata in traditional architectures, and existing solutions like retired memory areas incur performance and capacity penalties.

Method used

Implementing split-line access, which divides data into sub-portions across parallel memory resources, reducing the number of ECC bits required for error correction and freeing up capacity for metadata by distributing ECC bits across multiple devices.

Benefits of technology

This approach maintains full ECC capability while providing additional metadata bits, reducing performance impact and memory capacity usage, enabling enhanced system functionality without compromising data security.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 2025176029000001_ABST
    Figure 2025176029000001_ABST
Patent Text Reader

Abstract

To provide a memory controller and a system for memory access that reduce the number of ECC (error checking and correction) bits required in a memory system.SOLUTION: In a computing system, a memory subsystem includes multiple memory resources connected in parallel. The memory subsystem splits a portion of data into multiple sub-portions. When the data is split into smaller portions, the system needs fewer ECC (error checking and correction) bits to provide the same level of ECC protection. The portion of data includes N ECC bits for error correction, and the sub-portions each include a sub-portion of (N-M) ECC bits for error correction. The system can then use M bits of data for non-ECC purposes, such as metadata.SELECTED DRAWING: Figure 9
Need to check novelty before this filing date? Find Prior Art

Description

[Technical Field]

[0001] The description relates generally to memory systems, and more particularly to system management of error correction bits and data storage. [Background technology]

[0002] Increases in memory device density and operating speeds, coupled with shrinking feature sizes in memory device manufacturing processes, tend to cause an increase in runtime errors in memory devices. Memory systems use error checking and correction (ECC) to correct errors that might otherwise cause system failure. Dynamic random access memory (DRAM) devices are frequently used in modules such as dual in-line memory modules (DIMMs), which contain multiple DRAM devices connected in parallel. Memory systems using DIMMs often look to offer single-device data correction (SDDC), which can correct failures across DRAM devices in a DIMM.

[0003] Upcoming memory device standards anticipate increased internal prefetching and longer burst lengths, resulting in greater data bandwidth per memory device access transaction (e.g., read or write). For many bits per transaction, traditional architectures use all of the available ECC bandwidth for ECC. With all the additional bits used for ECC, the system has no available bits available for system-level purposes other than ECC. [Brief explanation of the drawings]

[0004] The following description includes discussion of figures having illustrations given as examples of implementations. The figures should be understood as examples, not as limitations. As used herein, reference to one or more examples should be understood as a description of specific functions, structures, or characteristics included in at least one implementation of the invention. Phrases such as "in one example" or "in an alternative example" appearing herein provide examples of implementations of the invention, and do not necessarily all refer to the same implementation. However, they are not necessarily mutually exclusive.

[0005] [Figure 1] FIG. 1 is a block diagram of an example system with split-line access control.

[0006] [Figure 2] FIG. 1 is a block diagram of an example system that enables split-line access to selectively free up ECC capacity for metadata.

[0007] [Figure 3] FIG. 1 is a block diagram of an example system with split-line access that applies burst chopping.

[0008] [Figure 4] FIG. 1 is a block diagram of an example system architecture for split-line access of a dual-rank 10x4 memory module.

[0009] [Figure 5] FIG. 10 is a flow diagram of an example process for partitioning data among parallel memory resources to perform error correction.

[0010] [Figure 6] FIG. 10 is a block diagram of an example of check bit generation logic and syndrome bit generation logic for applying matrices to perform detection and correction based on split-line ECC.

[0011] [Figure 7] FIG. 1 is a block diagram of an example of system-level error detection and correction.

[0012] [Figure 8] FIG. 1 is a block diagram of an example memory subsystem capable of implementing split-line memory access.

[0013] [Figure 9] FIG. 1 is a block diagram of an example computing system capable of implementing split-line memory access.

[0014] [Figure 10] FIG. 1 is a block diagram of an example mobile device capable of implementing split-line memory access.

[0015] [Figure 11] FIG. 1 is a block diagram of an example multi-node network capable of implementing split-line memory access.

[0016] Specific details and implementation descriptions are provided below, including non-limiting illustrations of figures that may show some or all of the examples and other potential implementations. DETAILED DESCRIPTION OF THE INVENTION

[0017] As described herein, a memory subsystem includes multiple memory resources connected in parallel, including a first memory resource and a second memory resource. The memory subsystem can divide a portion of data into multiple sub-portions. With smaller divisions, the system requires fewer ECC (Error Checking and Correcting) bits to provide the same level of ECC protection. Dividing data into sub-portions and storing them in parallel memory resources can be referred to as split-line access. A portion of data can include N ECC bits for error correction, and each sub-portion can include a sub-portion of (NM) ECC bits for error correction. The system can thereby use the M bits of data for non-ECC purposes, such as metadata.

[0018] DRAM (Dynamic Random Access Memory) devices compatible with the upcoming Double Data Rate Version 5 (DDR5) standard of the Joint Electron Device Engineering Council (JEDEC, now the JEDEC Solid State Technology Association) have a four data bus signal line interface (DQ[0:3]). Such devices can be referred to as x4 devices, referring to their four DQ (data) signal line interface. A DIMM (Dual In-Line Memory Module) or other memory module contains multiple memory devices, such as DRAM devices, connected in parallel to process access commands. Parallel memory devices typically share a command bus and have separate data bus interfaces.

[0019] DIMMs can be identified by the number and device type of memory devices contained on the board (e.g., printed circuit board (PCB)) that makes up the module. Examples include a 10x4 DIMM, which refers to a DIMM with 10 parallel devices, each with a x4 interface. The data bus would therefore have 40 signal lines. A 10x4 DIMM typically contains eight memory devices for user data or data that directly controls the execution and operation of the device, and two memory devices for system data such as ECC data and metadata.

[0020] Each DDR5 x4 DRAM device provides 64 bits of data per access transaction (e.g., read or write), exchanging 4 bits per UI in 16-unit interval (UI) bursts or burst length 16 (BL16). For a DDR5 10x4 DIMM, eight data devices would provide 512 bits (8 x 64), and two ECC devices (also called redundant devices) would provide 128 bits (2 x 64). To provide single-device data correction (SDDC), which can enable full correction of device failures in x4 DDR5, 128 bits of ECC are required to recover the loss of 64 bits. With only two redundant devices, all non-data bits or all ECC bandwidth can be used for the 10x4 DIMM, leaving no system bits for metadata.

[0021] One solution to free up memory storage space for the system would be to simply use fewer ECC bits. The risk of an entire device failing is small, meaning that the increased system functionality from the metadata can be considered a reasonable tradeoff for the rare case of a transient multi-bit error within the device that could render the error uncorrectable. In some system architectures, RAS (reliability, accessibility, and maintainability) requirements make such a solution unacceptable.

[0022] Another solution that could retain full ECC capability and provide additional metadata bits would be to store the additional bits in a retired memory area. The retired memory reserves space or capacity within the data device for system bits, such as metadata bits or ECC bits. The system can use the retired area for either ECC bits or metadata bits.

[0023] Retired memory provides capacity at the expense of a performance penalty. Using retired memory for ECC, 64 bits of ECC can be stored on one redundant device on the DIMM (enough to detect SDDC errors but not correct them), and the 64 bits of ECC can be distributed within the retired memory space or area in the data device, leaving 64 bits available for metadata on the other redundant device. Error detection can be achieved with the 64 bits from the ECC device, and in response to detecting an error, the system can retrieve the retired data and perform error correction. Thus, each read request results in one read if no errors are detected and two reads in the rare case that an error is detected. However, a write request results in a data write and a read-modified-write (RMW) of the retired ECC data, resulting in two writes and one read.

[0024] In addition to the performance penalty, retired memory can incur a capacity penalty. By effectively retiring data from an additional redundant device distributed across eight data devices, up to approximately one-eighth of the memory capacity can be used in retired memory for metadata. It may be possible to retire less memory, but this would still result in a reduced capacity penalty.

[0025] The described split-line access may be referred to as "split-line access for metadata" (SLAM) if the split-line access frees memory capacity for use as system metadata. Metadata use includes trusted domain extensions (TDX), in-memory directories, two-level memory (2LM) functions, or other metadata use. Metadata use refers to non-ECC system use of data capacity that is not user data.

[0026] In one example, split-line accesses can be performed through multiple parallel memory resources. The description herein generally describes the use of two parallel memory resources, essentially splitting a line access in half across the two resources. Split-line accesses can reduce the number of ECC bits required for SDDC by reducing the number of bits provided by a single device. For example, splitting a cache line into two different ranks doubles the number of devices used to store the cache line, reducing the number of bits per memory device in half.

[0027] In the DDR5 example above, a two-rank x4 DIMM can have 32 bits per DRAM. Therefore, for SDDC, the system only needs to correct 32 bits, which cuts the number of ECC bits required in half. Since 64 bits of ECC are required per cache line, 64 bits will be left over to use as metadata bits.

[0028] Thus, if the number of bits required for SDDC for a normal portion of data is N, the number of bits required for SDDC for a half or sub-portion of data may be (NM) / 2, where M is a number representing the reduced bit requirement for the same level of ECC if the data is spread across more memory devices.

[0029] 1 is a block diagram of an example system with split-line access control. System 100 shows memory coupled to a host. Host 110 represents a host computing system. Host 110 includes host hardware, such as processor 120 and memory controller 130. The host hardware also includes hardware interconnect and driver / receiver hardware for providing interconnection between host 110 and memory 150. Memory 150 includes parallel memory resources, resource 152 and resource 154, coupled to host 110. Memory controller 130 controls access to memory 150.

[0030] The host hardware supports the execution of host software on the host 110. The host software may include a host OS (operating system) 140. The host OS 140 represents the software platform on which other software executes. The host OS 140 provides the control that allows it to interface with the hardware interconnect for coupling to the memory device 160.

[0031] Memory 150 represents a hardware platform that connects one or more memory devices to host 110. For example, memory 150 may be or include a DIMM (dual in-line memory module) or multiple DIMMs, each of which may contain multiple memory devices. Memory 150 may provide routing and control logic for controlling signaling between host 110 and memory device hardware.

[0032] During execution, host OS 140 provides requests to access memory. Requests may come directly from host OS software via an API (Application Programming Interface) or other mechanism for programs running on host OS 140 to request memory access. In response to host memory access requests, memory controller 130 maps host-based addressing of memory resources to physical address locations in memory 150.

[0033] In one example, memory controller 130 includes ECC 132, which represents error logic within host 110 that detects and corrects errors in data read from memory 150. ECC 132 can generate check bits for write data to send to memory 150. ECC 132 can then decode the incoming data from the memory device and the ECC bits to determine whether the data contains errors. In the case of a correctable error (CE), ECC 132 can correct the error in the data before returning the data to the requesting agent, whether that be host OS 140 or an application running under host OS 140.

[0034] SLAM control 134 represents logic within memory controller 130 for providing split-line access to one or more lines of memory within a parallel memory resource. In one example, SLAM control 134 enables dynamic application of split-line access to selected regions of memory 150.

[0035] Memory 150 includes resource 152 in parallel with resource 154. In one example, resource 152 and resource 154 represent different ranks of memory. In one example, the different ranks can be portions of a multi-rank DIMM. For example, a two-rank DIMM can be implemented with a DRAM device that supports one DRAM accessed as two different portions. As another example, a memory module can include multiple DRAM packages that support different ranks. In one example, resource 152 and resource 154 represent different DIMMs. In one example, resource 152 and resource 154 represent alternative partitioning of memory, such as by device or bank, that can provide a reduction in ECC bits required for split-line access. Resource 152 can be referred to as a first memory resource and resource 154 can be referred to as a second memory resource, although the designations can be reversed.

[0036] Resource 152 is shown as having region 162, which may represent a region or line of memory. For example, region 162 may represent a word line or a cache line. In one example, region 162 represents a division of memory that is different from a word line. Region 162 includes ECC bits to provide error correction for bits in region 162.

[0037] In one example, system 100 supports the selective use of split-line access. Thus, regions of memory accessed with split-line access can be selected on a region-by-region basis, and the entire resource is not necessarily subject to split-line access. In one example, resource 152 includes region 162, which is not accessed with split-line access, and region 172, which is accessed with split-line access. Region 172 will be paired with region 174 of resource 154 for split-line access.

[0038] In a split-line access, memory controller 130 stores only a sub-portion of the bits of a line in the parallel resources. System 100 depicts only two parallel resources, resource 152 and resource 154. System 100 can include more than two parallel resources. In one example, system 100 can split a line in more than two ways. The logistics of splitting a line in more than two ways can introduce complexity into the system. Despite the added complexity, splitting a line to increase ECC coverage can be accomplished in a similar manner as described herein.

[0039] The examples herein focus primarily on splitting a line among two parallel resources. In one example, there may be more than two parallel resources, and the system may choose from among multiple available resources to choose a split pair.

[0040] In one example, region 172 includes ECC and metadata (MD). Similarly, region 174 includes ECC and metadata. The combined user data of regions 172 and 174 may be equal to the amount of user data in region 162, but the combined amount of ECC of regions 172 and 174 may be less than the ECC of region 162. The ECC savings may enable system 100 to provide the metadata shown in regions 172 and 174. The combined total of the metadata and ECC of regions 172 and 174 would be equal to the amount of ECC of region 162 if the portion were split between the two resources.

[0041] BIOS (Basic Input / Output System) 112 represents the boot control for system 100. BIOS 112 controls system 100 when system 100 is first powered on. Processor 120 can be configured to begin executing BIOS 112 and can then instruct the processor to load instructions that start host OS 140. BIOS 112 can include configuration for host 110, such as hardware initialization, configuration settings, information about the amount of memory available, and other information. In one example, memory controller 130 and BIOS 112 can exchange information related to regions in memory 150 that can be accessed with split-line access.

[0042] The SLAM control 134 of the memory controller 130 may represent control logic for providing split-line access. The control logic may include logic executing on hardware resources of the memory controller 130. The memory controller 130 may be or include a processor or processing hardware for executing logic for managing access to the memory 150.

[0043] In one example, SLAM control 134 decides to split access to region 170, which represents an area that may be the same as region 162. Instead of storing region 170 entirely in resource 152, region 170 is shown grayed out. Region 170 may be replaced by resource 152 and divided sub-regions that span resource 152. Region 172 represents one sub-region, and region 174 represents the other sub-region. Region 170 requires N check bits for ECC, but regions 172 and 174 each require some small number of check bits or ECC bits, which may be represented as N bits. Thus, each region may store (N) / 2 ECC bits and M / 2 metadata bits, for a total of M metadata bits for region 170. In one example, M is equal to 1 / 2N, but could be a different fraction of N.

[0044] 2 is a block diagram of an example system that enables split-line access to selectively free up ECC bandwidth for metadata. DIMM 210 represents a DIMM that does not apply split-line access. DIMM 230 represents a DIMM that implements split-line access. DIMM 230 can be controlled with SLAM control 220 to enable splitting of lines among different ranks of the DIMM. DIMM 230 can be an example of memory 150 of system 100.

[0045] DIMM 210 represents Rank 0 and Rank 1, where a rank contains X devices connected in parallel (Devices [0:(X-1)]). Generally, a memory rank refers to memory devices that share an enable signal that allows the devices to respond in parallel to memory access commands. Despite sharing an enable or trigger signal, devices within a rank can be accessed with a per-device accessibility (PDA) operation that selects an individual device, such as for configuration.

[0046] Rank 0 of DIMM 210 is shown as having portion 212, which may be, for example, a word line stored in devices [0:(X-1)] of rank 0. In one example, DIMM 210 includes two redundant devices per rank, with portion 212 having user data in devices [0:(X-3)] and ECC in devices [(X-2):(X-1)]. For purposes of portion 212, the data in portion 212 is not stored in rank 1.

[0047] In one example, SLAM control 220 stores the entire portion of data in DIMM 230 such that two sub-portions are spread across rank 0 and rank 1. In DIMM 230, portion 232 represents one half of the entire portion, like portion 212 in DIMM 210. Portion 234 represents the other half of the portion. Thus, the entire portion of data is between portion 232 and portion 234. In one example, based on the architecture of DIMM 230, dividing the portions into rank 0 and rank 1 means that the same ECC protection can be provided with fewer ECC bits. Thus, portion 232 includes metadata (MD) bits in device [X-1], and portion 234 includes metadata (MD) bits in device [X-1]. The ECC bits in device [X-2] of portion 232 and device [X-2] of portion 234 are sufficient for the same level of ECC protection as the ECC bits in device [(X-2):(X-1)] of DIMM 210.

[0048] In one example, SLAM control 220 can explicitly configure different memory regions for enabling or disabling split-line access, thus applying split-line access only when necessary in the system. Split-level access can therefore limit performance impact for areas where whole-device error correction, security, and other features (such as 2LM) are implemented.

[0049] Consider the example of a rank in a DIMM 230 of a DDR DRAM device. The SLAM control 220 can provide 100% SDDC while providing full-featured support for server CPUs that require metadata. The performance impact of a split-line access implementation or design can be limited to the area that uses metadata. By reducing the number of bits required for ECC, split-line access can simply replace ECC bits with metadata bits, or replace ECC bandwidth with metadata bandwidth. Therefore, split-line access can reduce or eliminate the extra memory capacity required for retired memory.

[0050] Split-level access can operate on the principle that if a cache line read fetches less data from each memory device, the number of ECC bits required to correct a device failure can be reduced. In DDR5, traditionally, each read fetches 64 bits of data from each x4 DRAM device, with eight DRAMs used to access the entire 512-bit cache line. In DDR5 with split-line access, in one example, the access is split across twice as many DRAMs, with 16 DRAMs accessed for the full 512 bits of data, and each DRAM device providing only 32 bits of data. If a DRAM device fails, only 32 bits may need to be corrected. Instead of 128 bits of ECC to correct a 64-bit failure, 64 bits of ECC is needed to correct the 32 bits. Thus, the system can selectively free up 64 bits for use as metadata instead of using bits for ECC.

[0051] It will be appreciated that splitting data among two different ranks can have a performance impact due to "rank switching" overhead on the DDR bus. The option to selectively treat memory regions with split-line access allows the system to choose between options for performance, security, and system functionality. Performance can be selected by not splitting data among parallel resources, but it may be necessary to have lower error correction capabilities (lower data security) to enable the use of additional system functionality. A system can select data security by guaranteeing error correction, which may sacrifice system functionality by using all available bits for ECC, or security by using data hiding to enable full ECC and system functionality. System functionality can be selected at the expense of performance by using either hiding or split-line access, or at the expense of data security by replacing ECC bits with metadata bits.

[0052] In one example, a system central processing unit (CPU) or host (typically via a memory controller) can support split-line access by a memory region. In one example, a memory region can be dynamically enabled for split-line access at runtime based on application needs. In one example, an operating system (OS) dynamically allocates unused memory pages to a SLAM region at runtime and initiates a SLAM transition with assistance from platform firmware. In one example, selecting a memory region for split-line access may require performing a data copy and ECC remapping (to divide the data among parallel memory resources). In one example, the platform firmware can invoke a hardware flow to perform the data copy and ECC remapping for the region transitioning to split-line access. In one example, the hardware flow can leverage existing CPU capabilities and thus provide split-level access based on capabilities already supported in existing server CPU systems.

[0053] One feature of server CPU systems that may be mentioned is ADDDC (adaptive double data device correction), which refers to an architecture for data sharing among parallel memory resources to address device failure conditions. The split-line access described herein can be considered to have a similar architecture to ADDDC, potentially reusing the capabilities of a system that supports ADDDC to implement the described split-line access. It will be understood that ADDDC is an error management response to the detection of an error condition, whereas split-line access is not implemented in response to error detection, but can be selectively activated to enable system functionality.

[0054] ADDDC and split-line access can be based on the concept of lockstep data distribution or lockstep configuration or lockstep partners. Lockstepping traditionally refers to distributing error-correcting data across multiple memory resources to compensate for a hard failure of one memory resource that prevents deterministic data access to the shared, failed memory resource. Lockstepping allows for compensation for hard failures because the distribution of data results in lower ECC requirements for error correction. While lockstepping in split-line access can refer to distributing data across multiple memory resources to reduce ECC requirements to free up bits for other uses, ADDDC distributes data because a hard failure makes bits unavailable.

[0055] 3 is a block diagram of an example system with split-line access that applies burst chop. System 300 represents a system according to example system 100. System 300 shows an example data output pattern from the parallel ranks according to any of the examples of split-line access described.

[0056] Rank 310 represents a memory device within a rank, such as a device on a memory module, and the rank includes 10 devices labeled Devices [0:9]. The devices are designated as x4 devices, which refers to the number of signal lines that interface with the data (DQ) bus. A x4 device has four signal lines that output data over a burst length of 16 in system 300. System 300 represents a burst-chop implementation, requiring only eight BL16 cycles to exchange data.

[0057] As shown, system 300 operates with a burst length of BL16, or 16 unit intervals. Each device can send (for a read operation) or receive (for a write operation) 4 bits per unit interval, for a total of 64 bits per device per operation or transaction (either read or write). System 300 specifically shows a read transaction, with device arrows representing the burst order and signal lines output in sequential order from the device to controller 330.

[0058] Regardless of bit orientation and burst order, in general, in one example, during the first cycle (burst cycle 0), data bits D[0:3] are transmitted on the data bus and are represented by data 312. In the second cycle (burst cycle 1), data bits D[4:7] are transmitted, and so on, up to data bits D[28:31] in burst cycle 7. Typically, devices in rank 310 may continue to provide data until transmitting data bits D[60:63] in burst cycle 15. In burst chop, no data is exchanged during chopped burst cycle BL[8:15].

[0059] Rank 320 also represents a memory device within the rank, such as a device on a memory module, and includes 10 devices labeled Devices [0:9]. The devices are shown as x4 devices with BL16, and rank 320 implements burst chop with data 322. Similar to data 312 of rank 310, for data 322 of rank 320, during the first cycle (burst cycle 0), the first four bits of data are sent on the data bus, followed by the next four bits, and so on, until all bits are transferred.

[0060] Instead of representing data 322 as data bits D[0:3] in burst cycle 0, data bits D[4:7] in burst cycle 1, etc., data 322 can be considered a second portion of data 312. Thus, for burst cycle 0, data 322 represents data bits D[32:35], and the device transfers data bits D[36:39] during burst cycle 1, and so on, up to data bits D[60:63] in burst cycle 7. In burst chop, no data is exchanged during chopped burst cycle BL[8:15].

[0061] It will be understood that any data ordering can be used. The order of bits to and from ranks 310 and 320 can be reversed based on whether data is being sent from controller 330 to the memory device or from the memory device to controller 330. Different burst lengths, different burst orders, and different data bus interfaces (e.g., x8 or x16) can be used for different amounts of data in different systems. The principles of transactions will remain the same for data devices in ranks 310 and controller 330 exchanging data 312 on the data bus, and for data devices in ranks 320 and controller 330 exchanging data 322 on the data bus.

[0062] System 300 illustrates two half cache line accesses per rank using burst chop. In one example, a memory controller performs a memory access of one half of data from rank 310 or other parallel memory resource and another half of data from rank 320 or other parallel memory resource.

[0063] The burst chop mode is inefficient for memory accesses and results in some bandwidth loss. To limit the bandwidth loss, the application of split line access can be limited to regions of memory that require metadata. In one example, SLAM enables dynamic selection of memory regions that can be accessed in SLAM mode or split line access mode (where a cache line is accessed from two ranks or other parallel memory resources) or normal mode (where a cache line is accessed from a single rank or single memory resource). In one example, the system can apply optimized rank turnaround to enable fast turnaround of the burst chop mode. Fast turnaround can reduce the performance impact of the burst chop mode.

[0064] System 300 represents an example of a 10x4 module configuration, referring to 10 memory devices in a x4DQ interface. In such a configuration, typically, devices [0:7] may be "data" devices and devices [8:9] are "ECC" devices. Data devices refer to the actual user data for a read or write transaction. ECC devices refer to devices that store check or parity bits for decoding the ECC of the data bits. In one example, 64 bits of data from each device represent a cache line or word line, or a portion of a cache line (e.g., 64 bits of a 512-bit cache line). Thus, the entire set of bits from each device represents the bits of a single line or portion of a line.

[0065] System 300 indicates different types of data as D0, D1, D2, ... for user data in Device[0:7], P0, P1, P2, ... as ECC or parity bits, and M0, M1, M2, ... for metadata bits. In system 300, in one example, the data bits of Device[8] of Rank 310 include ECC bits P[0:31], and the data bits of Device[8] of Rank 320 include ECC bits P[32:63]. In one example, the data bits of Device[9] of Rank 310 include metadata bits M[0:31], and the data bits of Device[9] of Rank 320 include metadata bits M[32:63].

[0066] System 300 includes SLAM control 332 in controller 330 to represent the system 300's ability to provide selective split-line access. Based on SLAM control 332, controller 330 can make access requests for specific data to only one rank (either rank 310 or rank 320), while making requests for other data to both ranks (both rank 310 and rank 320). When making a specific data request, controller 330 can know that half of the data will come from each rank in a burst chop. Controller 330 schedules operations according to which data is being accessed, whether it is split-level access data or regular data.

[0067] 4 is a block diagram of an example system architecture for split-line access of a dual-rank 10x4 memory module. System 400 represents a system according to example system 100 or example system 300.

[0068] DIMM 410 illustrates a two-rank 10x4 implementation, with each rank having eight data DRAMs, DRAM[0:7], one ECC DRAM, and one metadata DRAM. All data DRAMs, DRAM[0:7], ECC DRAMs, and metadata DRAMs are shown with a x4 interface with DQ[0:3]. In one example, instead of a two-rank DIMM, system 400 can include two separate DIMMs in parallel.

[0069] In one example, rank 0 DRAM is connected to data bus 420, with data DRAM providing data bits 422, ECC DRAM providing ECC bits 424, and metadata DRAM providing metadata (MD) bits 426. In one example, rank 1 DRAMs are connected to data bus 430, with data DRAMs providing data bits 432, ECC DRAMs providing ECC bits 434, and metadata DRAMs providing metadata (MD) bits 436.

[0070] Split line data 428 represents one half of the data in Rank 0, and split line data 438 represents the other half of the data in Rank 1. Controller 440 represents a controller of a host device that controls memory access to DIMM 410. Error control 442 represents the ability of controller 440 to perform ECC on the data bits based on the ECC bits. For data on data bus 420 that is not treated as split line data, error control 442 may perform ECC on the data bits based on the ECC stored in Rank 0. For data on data bus 430 that is not split line data, error control 442 may perform ECC on the data bits based on the ECC stored in Rank 1. In either case, the ranks may be treated separately. In such an example, a DRAM identified as a metadata DRAM may store ECC data for non-split line data.

[0071] In one example, the split control 444 determines to store data as split data between two ranks to free up ECC capacity for metadata. In one example, the split control 444 determines to split data of rank 0 among rank 0 and rank 1. In one example, the split control 444 determines to split data of rank 1 among rank 0 and rank 1.

[0072] 5 is a flow diagram of an example process for partitioning data among parallel memory resources to perform error correction. Process 500 represents an example process for applying split-line access to parallel memory resources according to any example herein. Process 500 represents an example process that may be performed by a memory controller according to systems 100, 300, and 400.

[0073] In one example, the controller identifies a memory portion to control with a split access by referencing a division of data in a parallel memory resource at 502. In one example, the controller performs a split memory data access on the identified portion at 504. The memory data access can be a read or a write at 506.

[0074] For write accesses, in the write branch at 506, in one example, the controller calculates the ECC of the individual sub-portions at 508. The ECC calculation may be calculated separately for different sub-portions, and the ECC bit pattern may be different from the ECC for all data stored in one memory resource as opposed to distributed across multiple resources. When data is split among parallel resources, there are fewer ECC bits. Thus, for split data accesses, there are bits available for metadata. In one example, the controller generates metadata for the sub-portions at 510. The controller can write the individual sub-portions with the ECC data and metadata at 512.

[0075] For a read access, in the read branch at 506, in one example, the controller reads individual sub-portions of the desired data instead of reading all of the data from one memory resource at 514. The controller calculates ECC for the separate sub-portions at 516. In one example, the controller decodes metadata for the sub-portions at 518.

[0076] 6 is a block diagram of an example of check bit generation logic and syndrome bit generation logic for applying matrices to perform detection and correction based on split-line ECC. H matrix 610 represents a simplified example of ECC application by a memory controller for system ECC.

[0077] H matrix 610 represents an example of a 16-bit code matrix for use with ECC on a device. It will be understood that typical operational code words in modern computing systems include more than 16 bits. However, the 16-bit H matrix illustrates the principles of ECC operation for on-die ECC used for on-memory error detection and correction by any example herein, or for system-level ECC by a memory controller or error control by any example herein.

[0078] Matrix 610 can be a portion of a SEC Hamming code, such as a Hamming code for a 128-bit codeword. Matrix 610 shows only 16 codes, one code bit for each of the data bits [15:0]. In one example, each code in matrix 610 corresponds to one data bit. In the example shown, each code includes eight check bits CB[0:7]. When a syndrome is calculated from the data word and check bits stored in memory, the ECC engine can determine whether the syndrome corresponds to one of the codes in matrix 610. If the ECC engine determines that the syndrome matches one of the codes, the ECC engine toggles the corresponding data bit to correct the error. Examples of check bit generation and syndrome bit generation are shown.

[0079] Check bit generation logic 602 represents logic for performing ECC operations to generate check bits. Syndrome bit generation logic 604 represents logic for performing ECC operations to generate syndrome bits for comparison with the check bits. For purposes of illustration in the drawings, only logic for check bits CB[0:2] is shown, and correspondingly, only syndrome bits SB[0:2] are shown.

[0080] As shown, the syndrome can be fully encoded with ECC logic for check bit generation and syndrome bit generation. In one example, check bit generation 602 includes an XOR gate for receiving write data word 620 and performing an XOR operation on one bit of the code. For example, generation of CB[0] for 16 codeword bits is shown, where bits D[10:0] are all ones, but bits D[15:11] are zeros. Thus, in one example, calculation of CB[0] includes an XOR operation of bits D[10:0] of the codeword in XOR 622. Similarly, generation of syndrome bit SB[0] includes logic for receiving read data word 630 and performing an XOR operation of bits D[10:0] of the read data codeword in XOR 632. The output of XOR 632 is then XORed with CB[0] in XOR 642 to generate SB[0].

[0081] As a technical matter, it will be understood that a true XOR operation can only exist for two inputs, with the output being 1 if and only if one of the inputs is 1. However, it is common convention to represent a cascade of XOR operations as a multi-input XOR (meaning a number of inputs greater than 2), such as XOR622 for CB[0] and XOR632 for SB[0]. The XOR operation is commutative, meaning that you can perform an XOR of multiple pairs of inputs, and then serially XOR the outputs of these operations in any order to obtain the same result. Thus, the XOR operation has the effective effect of modulo-2 addition, which is also equivalent to odd parity detection. Odd parity detection provides a "1" as the output if there is an odd number of 1s in the inputs, and an output of zero if there is an even number of 1s in the inputs.

[0082] In another example, the generation of CB[1] for 16 codeword bits is shown, where bits D[15:10] and bits D[4:1] are 1, but bits D[9:5] and D[0] are zero. XOR 624 calculates CB[1] from the 1 bits. Similarly, in the generation of CB[2], bits D[15:9] and D[2:0] are 1, and bits D[8:3] are zero. XOR 626 calculates CB[2] from the 1 bits.

[0083] Syndrome bit generation 604 represents logic that receives read data word 630 and check bit word 640 and generates syndrome bits by comparing the CB calculation with the stored check bits. Similarly, syndrome bit generation for SB[1] for 16 codeword bits is shown, with XOR 634 XORing D[15:10] and D[4:1], after which XOR 644 calculates SB[1] by XORing CB[1] with the output of XOR 634. Similarly, syndrome bit generation for SB[2] for 16 codeword bits is shown, with XOR 636 XORing D[15:9] and D[2:0], after which XOR 646 calculates SB[2] by XORing CB[2] with the output of XOR 636.

[0084] Based on the determination of the check bits and syndrome bits, the system can identify errors and potential flip bits, for example, for bits or columns of CB[7:0] that are found to match the syndrome bits. The ECS system applies such techniques to perform scrubbing of memory addresses. In one example, the system applies ECC error detection to detect memory errors and provides the error information to a memory controller, allowing the memory controller to detect error patterns and adjust error scrubbing operations according to any example herein.

[0085] 7 is a block diagram of an example of system-level error detection and correction. System 700 provides an example of system-level ECC circuitry for a system according to any of the examples of host-side or memory controller ECC herein. Host 710 includes controller 714, or equivalent or alternative logic, circuitry, or components, that manages access to memory 730. Controller 714 performs external ECC on data read from memory 730. In one example, memory 730 implements on-die ECC 734 that checks and corrects data from array 736 before sending the data to host 710 via bus 732.

[0086] The host 710 includes a processor 712 for performing operations to generate requests for data stored in the array 736 of the memory 730. In response to a data write request, the controller 714 can generate a write command via a write path 720. For a read request, the controller 714 receives read data via a read path 740.

[0087] Write path 720 represents the path of data written from processor 712 to memory 730. Processor 712 provides data 722 for writing to memory 730. In one example, controller 714 generates check bits 726 in check bit generator 724 for storage with the data in memory. Check bits 726 may be referred to as ECC bits and allow for error correction of errors that may occur in writing to and reading from the memory array. Data 722 and check bits 726 may be included as a code word in 728 that is written to memory 730 via data bus 732 to array 736.

[0088] Read path 740 represents the path of data read from memory 730 to host 710. In one example, at least certain hardware components of write path 720 and read path 740 are the same hardware. In one example, memory 730 fetches data in response to a read command from host 710. Read codeword 742 represents the data and check bits stored in array 736. Data 744 and check bits 746 represent the data and check bits of read codeword 742. Read codeword 742 represents a codeword made up of data from devices [0:(N-1)]. In one example, these correspond to data 722 and check bits 726, respectively, written to write path 720 to the same address of a read command.

[0089] In one example, write codeword 728 is provided to multiple parallel resources for split-line access. In a split-line access, in one example, controller 714 can generate metadata 772. Thus, write codeword 728 can include metadata 772 for storage in memory 730. In one example, in a split-line access, metadata 772 can be provided to a host along with the data. In one example, the metadata can bypass error correction 758.

[0090] The read path 740 includes a syndrome decode 752 for applying an H-matrix calculation to the data 744 and check bits 746 to detect errors in the read data. The syndrome decode 752 can generate a syndrome 754 that is used to generate appropriate error information for the read data. The data 744 can also be forwarded to an error correction 758 for correction of detected errors.

[0091] In one example, the syndrome decode 752 sends the syndrome 754 to a syndrome generator 756 to generate an error vector. In one example, the check bit generator 724 and the syndrome generator 756 are fully specified by a corresponding H matrix. In one example, if there are no errors in the read data (e.g., a zero syndrome 754), the syndrome generator 756 generates a no error signal 762. In one example, if there are multiple errors in the read data (e.g., a non-zero syndrome 754 that does not match any column of the corresponding H matrix), the syndrome generator 756 generates a DUE (detected uncorrected error) signal 764. The DUE signal 764 can indicate a multi-bit error that could not be corrected by applying ECC.

[0092] In one example, if there is a single-bit error (e.g., a non-zero syndrome 754 matching one column of the corresponding H matrix), the syndrome generator 756 can generate a CE (corrected error) signal with the error location 760, which is an indication of the corrected error to the error correction logic 758. The error correction 758 can apply the corrected error to the specified location in the data 744 to generate corrected data 766 for output to be provided to the processor 712.

[0093] 8 is a block diagram of an example memory subsystem that can implement split-line memory access. System 800 includes elements of a processor and memory subsystem of a computing device. System 800 is an example system according to examples of system 100 or system 300.

[0094] In one example, the controller 850 of the memory device 840 includes ECC logic 856. The ECC logic 856 represents on-die ECC of the memory device 840 to enable error detection and correction in the memory. In one example, the memory controller 820 includes error control 828, representing logic in the memory controller 820 to enable determination of errors in data from the memory, according to any example herein. In one example, the error control 828 can perform ECC according to any description herein. In one example, the memory controller 820 includes a split control (CTRL) 892 to control access to the memory device 840 as a parallel resource with split line access, according to any example herein. The split control enables providing data to multiple resources, which frees up data capacity that can be used as metadata instead of ECC data. In one example, the memory array 860 includes split data 890 to represent the split data according to any example herein. In one example, the memory device 840 includes a burst chop 862 to perform burst chop on the split access data.

[0095] Processor 810 represents a processing unit of a computing platform that may run an operating system (OS) and applications, which may collectively be referred to as a host or user of memory. The OS and applications perform operations that result in memory accesses. Processor 810 may include one or more separate processors. Each of the separate processors may include a single processing unit, a multi-core processing unit, or a combination thereof. A processing unit may be a primary processor such as a central processing unit (CPU), a peripheral processor such as a graphics processing unit (GPU), or a combination thereof. Memory accesses may also be initiated by devices such as a network controller or hard disk controller. Such devices may be integrated with or attached to the processor in some systems via a bus (e.g., PCI Express), or a combination thereof. System 800 may be implemented as a system-on-chip (SoC) or with standalone components.

[0096] References to memory devices can apply to different memory types. Memory devices often refer to volatile memory technologies. Volatile memory is memory whose state (and therefore the data stored in it) is indeterminate when power is removed from the device. Non-volatile memory refers to memory whose state is determinate even when power is removed from the device. Dynamic volatile memory requires that the data stored in the device be refreshed to maintain its state. An example of dynamic volatile memory includes DRAM (Dynamic Random Access Memory) or some variants such as Synchronous DRAM (SDRAM). The memory subsystems described herein may be based on DDR4 (Double Data Rate Version 4, JESD79-4, first published by JEDEC (Joint Electron Device Engineering Council, now JEDEC Solid State Technology Association) in September 2012), LPDDR4 (Low Power DDR Version 4, JESD209-4, first published by JEDEC in August 2014), WIO2 (Wide I / O 2 (WideIO2), JESD229-2, first published by JEDEC in August 2014), HBM (High Bandwidth Memory DRAM, JESD235A, first published by JEDEC in November 2015), DDR5 (DDR Version 5, first published by JEDEC in July 2020), LPDDR5 (LPDDR Version 5, JESD209-5, first published by JEDEC in February 2019), HBM2 (HBM Version 2, currently under discussion by JEDEC), or other combinations of memory technologies, and technologies based on derivatives or extensions of such specifications.

[0097] In one example, in addition to or instead of volatile memory, the memory module may be a persistent memory DIMM or nonvolatile system memory, which refers to nonvolatile memory connected to a system memory bus. Such memory devices may include three-dimensional cross-point (3DXP) memory devices. 3DXP can operate as a byte-addressable nonvolatile memory device or a block-addressable nonvolatile memory device. The memory device may include a nonvolatile byte-addressable or block-addressable medium that stores data based on the resistance state of a memory cell or the phase of a memory cell. In one example, the memory device may use a chalcogenide phase change material (e.g., chalcogenide glass). In one example, the system memory device may be or include NAND flash memory, NOR flash memory, single- or multi-level phase change memory (PCM) or switched phase change memory (PCMS), resistive memory, nanowire memory, ferroelectric transistor random access memory (FeTRAM), magnetoresistive random access memory (MRAM) memory incorporating memristor technology, or spin-transfer-transfer (STT)-MRAM, or any combination of the above, or other memories.

[0098] The memory controller 820 represents one or more memory controller circuits or devices for the system 800. The memory controller 820 represents control logic that generates memory access commands in response to the execution of operations by the processor 810. The memory controller 820 accesses one or more memory devices 840. The memory devices 840 can be DRAM devices according to any of the above-mentioned specifications. In one example, the memory devices 840 are organized and managed as different channels. Each channel is coupled to buses and signal lines that couple multiple memory devices in parallel. Each channel is independently operable. Thus, each channel is independently accessed and controlled, and timing, data transfer, command and address exchange, and other operations are separate for each channel. Coupling can refer to electrical coupling, communicative coupling, physical coupling, or a combination thereof. Physical coupling can include direct contact. Electrical coupling includes interfaces or interconnections that allow electrical flow between components, signal transmission between components, or both. Communicative coupling includes connections, including wired or wireless, that allow components to exchange data.

[0099] In one example, the configuration of each channel is controlled by a separate mode register or other register setting. In one example, each memory controller 820 manages a separate memory channel, although system 800 can be configured to have multiple channels managed by a single controller or multiple controllers on a single channel. In one example, memory controller 820 is part of host processor 810, such as logic implemented on the same die or in the same package space as the processor.

[0100] The memory controller 820 includes I / O interface logic 822 that couples to a memory bus, such as the memory channel mentioned above. The I / O interface logic 822 (and the I / O interface logic 842 of the memory device 840) may include pins, pads, connectors, signal lines, traces, or wires, or other hardware that connects to the device, or a combination thereof. The I / O interface logic 822 may include a hardware interface. As shown, the I / O interface logic 822 includes at least drivers / transceivers for the signal lines. Generally, wires in an integrated circuit interface couple with pads, pins, or connectors to interface with signal lines or traces or other wires between devices. The I / O interface logic 822 may include drivers, receivers, transceivers, terminations, or other circuits or combinations of circuits for exchanging signals on signal lines between devices. The exchange of signals includes at least one of sending or receiving. Although shown coupling I / O 822 from memory controller 820 to I / O 842 of memory device 840, it is understood that in implementations of system 800 where groups of memory devices 840 are accessed in parallel, multiple memory devices may include I / O interfaces to the same interface of memory controller 820. In implementations of system 800 that include one or more memory modules 870, I / O 842 may include interface hardware of the memory modules in addition to interface hardware on the memory devices themselves. Other memory controllers 820 include separate interfaces to other memory devices 840.

[0101] The bus between the memory controller 820 and the memory devices 840 may be implemented as multiple signal lines coupling the memory controller 820 to the memory devices 840. The bus may typically include at least a clock (CLK) 832, a command / address (CMD) 834, and write data (DQ) and read data (DQ) 836, as well as zero or more other signal lines 838. In one example, the bus or connection between the memory controller 820 and the memory may be referred to as a memory bus. In one example, the memory bus is a multi-drop bus. The CMD signal line may be referred to as a “C / A bus” (or ADD / CMD bus, or some other designation indicating the transfer of command (C or CMD) and address (A or ADD) information), and the write and read DQ signal lines may be referred to as a “data bus.” In one example, independent channels have different clock signals, C / A buses, data buses, and other signal lines. Thus, the system 800 may be considered to have multiple “buses” in the sense that independent interface paths may be considered separate buses. It will be understood that in addition to the lines explicitly shown, the bus can include at least one of a strobe signal line, an alert line, an auxiliary line, or other signal lines, or a combination thereof. It will also be understood that serial bus technology can be used for the connection between the memory controller 820 and the memory devices 840. An example of a serial bus technology is the transmission of high-speed data with 8B10B encoding and an embedded clock over a single differential pair of signals in each direction. In one example, CMD 834 represents a signal line shared with multiple memory devices in parallel. In one example, multiple memory devices share the encoding command signal line of CMD 834, each with a separate chip select (CS_n) signal line for selecting an individual memory device.

[0102] It will be appreciated that in the example system 800, the bus between the memory controller 820 and the memory devices 840 includes an auxiliary command bus CMD 834 and an auxiliary bus DQ 836 for communicating write data and read data. In one example, the data bus may include bidirectional lines for read data and write / command data. In another example, the auxiliary bus DQ 836 may include a unidirectional write signal line for writes and data from the host to the memory, and a unidirectional line for read data from the memory to the host. Depending on the selected memory technology and system design, other signals 838 may accompany the bus or sub-buses, such as a strobe line DQS. Depending on the design of the system 800, or the implementation if a design supports multiple implementations, the data bus may have more or less bandwidth per memory device 840. For example, the data bus may support memory devices with a x4 interface, a x8 interface, a x16 interface, or other interface. The W in the designation "xW" is an integer that refers to the interface size or width of the memory device 840, representing the number of signal lines for exchanging data with the memory controller 820. The interface size of a memory device is a controlling factor as to how many memory devices can be used simultaneously per channel or coupled in parallel to the same signal lines in system 800. In one example, high bandwidth memory devices, wide interface devices, or stacked memory configurations, or a combination thereof, can enable the use of wider interfaces, such as a x128 interface, a x256 interface, a x512 interface, a x1024 interface, or other data bus interface widths.

[0103] In one example, the memory devices 840 and the memory controller 820 exchange data over the data bus in bursts, or a series of consecutive data transfers. A burst corresponds to the number of transfer cycles associated with the bus frequency. In one example, a transfer cycle can be a full clock cycle of transfers occurring on the same clock or strobe signal edge (e.g., rising edge). In one example, a full clock cycle, which refers to a cycle of a system clock, is divided into multiple unit intervals (UIs). Each UI is a transfer cycle. For example, a double data rate transfer triggers on both edges (e.g., rising and falling) of a clock signal. A burst can last for a configured number of UIs. This can be a configuration stored in a register or triggered on the fly. For example, a series of eight consecutive transfer periods can be considered a burst length of 8 (BL8), with each memory device 840 transferring data in each UI. Thus, a x8 memory device operating at BL8 can transfer 64 bits of data (8 data signal lines x 8 data bits transferred per line via the burst). It will be understood that this simple example is illustrative only and not limiting.

[0104] Memory devices 840 represent memory resources for system 800. In one example, each memory device 840 is a separate memory die. In one example, each memory device 840 may interface with multiple (e.g., two) channels per device or die. Each memory device 840 includes I / O interface logic 842 with a bandwidth determined by the device's implementation (e.g., x16 or x8 or some other interface bandwidth). The I / O interface logic 842 allows the memory device to interface with memory controller 820. The I / O interface logic 842 may include a hardware interface and may follow the I / O 822 of the memory controller, but at the memory device end. In one example, multiple memory devices 840 are connected in parallel to the same command and data bus. In another example, multiple memory devices 840 are connected in parallel to the same command bus and to different data buses. For example, system 800 may be configured with multiple memory devices 840 coupled in parallel. Each memory device accesses its internal memory resources 860 in response to commands. For a write operation, each memory device 840 can write a portion of the entire data word, and for a read operation, each memory device 840 can fetch a portion of the entire data word, with the remaining bits of the word being provided or received in parallel by other memory devices.

[0105] In one example, memory device 840 is disposed directly on a motherboard of a computing device or a host system platform (e.g., a PCB (printed circuit board) on which processor 810 is disposed). In one example, memory device 840 may be organized into memory module 870. In one example, memory module 870 represents a dual in-line memory module (DIMM). In one example, memory module 870 represents another organization of multiple memory devices for sharing at least a portion of access or control circuitry, which may be a separate circuit, device, or board from the host system platform. Memory module 870 may include multiple memory devices 840, and memory modules may include support for multiple separate channels to the memory devices disposed therein. In another example, memory device 840 may be integrated into the same package as memory controller 820, such as by techniques such as multi-chip module (MCM), package-on-package, through-silicon via (TSV), or other techniques or combinations thereof. Similarly, in one example, multiple memory devices 840 may be incorporated into a memory module 870, which may itself be incorporated into the same package as memory controller 820. It will be understood that in these and other implementations, memory controller 820 may be part of host processor 810.

[0106] Each memory device 840 includes one or more memory arrays 860. Memory arrays 860 represent addressable memory locations or storage locations of data. Typically, memory arrays 860 are managed as rows of data and accessed via control of wordlines (rows) and bitlines (individual bits within a row). Memory arrays 860 may be organized as separate channels, ranks, and banks of memory. A channel may refer to an independent control path to storage locations within memory device 840. A rank may refer to a common location across multiple memory devices in parallel (e.g., the same row address in different devices). A bank may refer to a sub-array of memory locations within memory device 840. In one example, a bank of memory is divided into sub-banks with at least some of the shared circuitry (e.g., drivers, signal lines, control logic) for the sub-bank, allowing for separate addressing and access. It will be understood that channels, ranks, banks, sub-banks, groups of banks, or other organizations of memory locations, and combinations of such organizations, may overlap in their application to physical resources. For example, the same physical memory location may be accessed through a particular channel as a particular bank, which may also belong to a rank. Thus, the organization of memory resources will be understood inclusively, rather than exclusively.

[0107] In one example, memory device 840 includes one or more registers 844. Register 844 represents one or more storage devices or memory locations that provide configuration or settings for operation of the memory device. In one example, register 844 can provide memory locations in memory device 840 for storing data accessed by memory controller 820 as part of control or management operations. In one example, register 844 includes one or more mode registers. In one example, register 844 includes one or more general-purpose registers. Configuration of locations in register 844 can configure memory device 840 to operate in different “modes.” Command information can trigger different operations in memory device 840 based on the mode. Additionally or alternatively, different modes can trigger different operations from address information or other signal lines depending on the mode. Settings in register 844 can indicate configuration of I / O settings (e.g., timing, termination or ODT (on-die termination) 846, driver configuration, or other I / O settings).

[0108] In one example, the memory device 840 includes an ODT 846 as part of the interface hardware associated with the I / O 842. The ODT 846 may be configured as described above and may provide an impedance setting applied to the interface to designated signal lines. In one example, the ODT 846 is applied to the DQ signal lines. In one example, the ODT 846 is applied to the command signal lines. In one example, the ODT 846 is applied to the address signal lines. In one example, the ODT 846 may be applied to any combination of the foregoing. The ODT setting may be changed based on whether the memory device is the selected target or non-target device of an access operation. The ODT 846 setting may affect the timing and reflection of signaling on the termination lines. Careful control over the ODT 846 may enable faster operation with better matching of the applied impedance and load. The ODT 846 may be applied to certain signal lines of the I / O interface 842, 822 (e.g., an ODT for the DQ lines or an ODT for the CA lines), but not necessarily to all signal lines.

[0109] The memory device 840 includes a controller 850, which represents control logic within the memory device for controlling internal operations within the memory device. For example, the controller 850 decodes commands sent by the memory controller 820 and generates internal operations to execute or satisfy the commands. The controller 850 may be referred to as an internal controller and is separate from the host's memory controller 820. The controller 850 can determine which mode is selected based on the register 844 and configure operations for accessing the memory resource 860 or internal execution of other operations based on the selected mode. The controller 850 generates control signals to control the routing of bits within the memory device 840 to provide the appropriate interface for the selected mode and to send commands to the appropriate memory locations or addresses. The controller 850 includes command logic 852 that can decode command encodings received on the command and address signal lines. Thus, the command logic 852 may be or include a command decoder. Using the command logic 852, the memory device can identify commands and generate internal operations to execute the requested commands.

[0110] Referring back to memory controller 820, memory controller 820 includes command (CMD) logic 824, which represents logic or circuitry for generating commands to be sent to memory device 840. Generating a command may refer to preparing a command before scheduling or a queued command for transmission. Generally, signaling within a memory subsystem includes address information within or accompanying a command to indicate or select one or more memory locations where the memory device should execute the command. In response to scheduling a transaction for memory device 840, memory controller 820 can issue a command via I / O 822 to cause memory device 840 to execute the command. In one example, controller 850 of memory device 840 receives and decodes command and address information received from memory controller 820 via I / O 842. Based on the received command and address information, controller 850 can execute the command by controlling the timing of operations of logic and circuits within memory device 840. Controller 850 is responsible for compliance with standards or specifications within memory device 840, such as timing and signaling requirements. The memory controller 820 can implement compliance with a standard or specification by scheduling and controlling access.

[0111] The memory controller 820 includes a scheduler 830, which represents logic or circuitry for generating and ordering transactions to be sent to the memory device 840. From one perspective, the primary function of the memory controller 820 can be said to be scheduling memory accesses and other transactions to the memory device 840. Such scheduling may include generating the transactions themselves to implement requests for data by the processor 810 and to maintain data integrity (e.g., using refresh-related commands). A transaction may include one or more commands and thus may result in the transfer of commands, data, or both in one or more timing cycles, such as a clock cycle or unit interval. A transaction may be for an access, such as a read or write or related command, or a combination thereof. Other transactions may include memory management commands for configuration, settings, data integrity, or other commands or a combination thereof.

[0112] The memory controller 820 typically includes logic, such as a scheduler 830, to enable transaction selection and ordering to improve performance of the system 800. Thus, the memory controller 820 can select which of the outstanding transactions should be sent to the memory device 840 and in what order. This is typically achieved using logic that is much more complex than a simple first-in, first-out algorithm. The memory controller 820 manages the transmission of transactions to the memory device 840 and manages the timing associated with the transactions. In one example, transactions have deterministic timing. This timing can be managed by the memory controller 820 and used in determining how to schedule transactions in the scheduler 830.

[0113] In one example, memory controller 820 includes refresh (REF) logic 826. Refresh logic 826 is used for memory resources that are volatile and may need to be refreshed to maintain a deterministic state. In one example, refresh logic 826 indicates the location of a refresh and the type of refresh to perform. Refresh logic 826 can trigger a self-refresh within memory device 840 or can perform an external refresh (which may be referred to as an auto-refresh command) by sending a refresh command, or a combination thereof. In one example, controller 850 within memory device 840 includes refresh logic 854 for applying the refresh within memory device 840. In one example, refresh logic 854 generates internal operations to perform the refresh according to the external refresh received from memory controller 820. Refresh logic 854 can determine whether a refresh is directed to memory device 840 and which memory resource 860 to refresh in response to the command.

[0114] 9 is a block diagram of an example computing system that can implement split-line memory access. System 900 represents a computing device according to any example herein, and may be a laptop computer, a desktop computer, a tablet computer, a server, a gaming or entertainment control system, an embedded computing device, or other electronic device. System 900 represents a system according to example systems 100 or 300.

[0115] In one example, memory controller 922 includes split control 992 for controlling access to memory 930 as a parallel resource with split line access according to any example herein. According to any example herein, split control enables providing data to multiple resources, which frees up data capacity that can be used as metadata instead of ECC data. In one example, memory 930 includes split data 938 to represent split data according to any example herein.

[0116] System 900 includes a processor 910, which may include any type of microprocessor, central processing unit (CPU), graphics processing unit (GPU), processing core, or other processing hardware, or combination thereof, that provides processing or execution of instructions for system 900. Processor 910 may be a host processor device. Processor 910 controls the overall operation of system 900 and may be or include one or more programmable general-purpose or application-specific microprocessors, digital signal processors (DSPs), programmable controllers, application-specific integrated circuits (ASICs), programmable logic devices (PLDs), or combinations of such devices.

[0117] System 900 includes boot / config 916, which represents storage for storing boot code (e.g., basic input / output system (BIOS)), configuration settings, security hardware (e.g., trusted platform module (TPM)), or other system-level hardware that operates outside of the host OS. Boot / config 916 may include a non-volatile storage device, such as read-only memory (ROM), flash memory, or other memory device.

[0118] In one example, system 900 includes an interface 912 coupled to processor 910, which may represent a higher speed or high throughput interface for system components requiring a higher bandwidth connection, such as memory subsystem 920 or graphics interface component 940. Interface 912 represents an interface circuit that may be a standalone component or integrated into a processor die. Interface 912 may be integrated on the processor die as a circuit or integrated into a system-on-chip as a component. When present, graphics interface 940 interfaces to a graphics component for providing a visual display to a user of system 900. Graphics interface 940 may be a standalone component or integrated into the processor die or system-on-chip. In one example, graphics interface 940 can drive a high-definition (HD) display or an ultra-high-definition (UHD) display that provides output to a user. In one example, the display may include a touchscreen display. In one example, graphics interface 940 generates a display based on data stored in memory 930, based on operations performed by processor 910, or both.

[0119] Memory subsystem 920 represents the main memory of system 900 and provides storage for data values ​​used in the execution of code or routines executed by processor 910. Memory subsystem 920 may include one or more memory devices, such as one or more types of random access memory (RAM), such as DRAM, 3DXP (three-dimensional crosspoint), or other memory devices, or a combination of such devices. Memory 930 stores and hosts, among other things, an operating system (OS) 932 to provide a software platform for the execution of instructions within system 900. Additionally, applications 934 may execute on the software platform of OS 932 from memory 930. Applications 934 represent programs. Such programs have their own operating logic for performing one or more functions. Processes 936 represent agents or routines that provide auxiliary functionality to OS 932 or one or more applications 934, or a combination thereof. OS 932, applications 934, and processes 936 provide the software logic to provide functionality for system 900. In one example, memory subsystem 920 includes memory controller 922, which is a memory controller that generates and issues commands to memory 930. It will be understood that memory controller 922 may be a physical part of processor 910 or a physical part of interface 912. For example, memory controller 922 may be an integrated memory controller that is integrated into circuitry with processor 910, such as integrated into a processor die or system-on-chip.

[0120] Although not specifically shown, it is understood that system 900 may include one or more buses or bus systems between devices, such as a memory bus, a graphics bus, an interface bus, or others. A bus or other signal line may communicatively or electrically couple components to each other, or may communicatively and electrically couple components. A bus may include a physical communication line, a point-to-point connection, a bridge, an adapter, a controller, or other circuit, or a combination thereof. A bus may include, for example, one or more of a system bus, a Peripheral Component Interconnect (PCI) bus, a HyperTransport Architecture bus or Industry Standard Architecture (ISA) bus, a Small Computer System Interface (SCSI) bus, a Universal Serial Bus (USB), or other bus, or a combination thereof.

[0121] In one example, system 900 includes interface 914, which may be coupled to interface 912. Interface 914 may be a slower interface than interface 912. In one example, interface 914 represents an interface circuit, which may include standalone components and integrated circuits. In one example, multiple user interface components and / or peripheral components are coupled to interface 914. Network interface 950 provides system 900 with the ability to communicate with remote devices (e.g., servers or other computing devices) over one or more networks. Network interface 950 may include an Ethernet adapter, a wireless interconnection component, a cellular network interconnection component, a Universal Serial Bus (USB) or other wired or wireless standards-based or proprietary interface. Network interface 950 can exchange data with remote devices. Such exchange may include transmitting data stored in memory or receiving data stored in memory.

[0122] In one example, system 900 includes one or more input / output (I / O) interfaces 960. I / O interface 960 may include one or more interface components through which a user interacts with system 900 (e.g., audio, alphanumeric, haptic / touch, or other interface modalities). Peripheral interface 970 may include any hardware interface not specifically mentioned above. Peripherals generally refer to devices that connect dependently to system 900. A dependent connection is one in which system 900 provides a software or hardware platform on which operations are performed and by which a user interacts.

[0123] In one example, system 900 includes a storage subsystem 980 for storing data in a nonvolatile manner. In one example, in a particular system implementation, at least certain components of storage 980 may overlap with components of memory subsystem 920. Storage subsystem 980 includes storage device 984, which may be or include any conventional medium for storing large amounts of data in a nonvolatile manner, such as one or more magnetic disks, solid-state disks, NAND, 3DXP disks, or optical-based disks, or a combination thereof. Storage 984 holds code or instructions and data 986 in a persistent state (i.e., values ​​are retained even when power to system 900 is interrupted). While storage 984 may be generally considered to be “memory,” memory 930 is typically an execution or operating memory for providing instructions to processor 910. While storage 984 is nonvolatile, memory 930 may include volatile memory (i.e., the value or state of the data is indeterminate when power to system 900 is interrupted). In one example, storage subsystem 980 includes a controller 982 for interfacing with storage 984. In one example, controller 982 may be a physical part of interface 914 or processor 910, or may include circuitry or logic in both processor 910 and interface 914.

[0124] The power source 902 provides power to the components of the system 900. More specifically, the power source 902 typically interfaces with one or more power supplies 904 in the system 900 to provide power to the components of the system 900. In one example, the power supply 904 includes an AC-DC (alternating current-to-direct current) adapter for plugging into a wall outlet. Such an AC power source can be a renewable energy (e.g., solar-powered) power source 902. In one example, the power source 902 includes a DC power source, such as an external AC-DC converter. In one example, the power source 902 or the power supply 904 includes wireless charging hardware for charging via proximity to a charging magnetic field. In one example, the power source 902 can include an internal battery or fuel cell power source.

[0125] 10 is a block diagram of an example mobile device that can implement split-line memory access. System 1000 represents a mobile computing device, such as a computing tablet, a mobile phone or smartphone, a wearable computing device, or other mobile or embedded computing device. While certain of these components are generally shown, it is understood that not all components of such a device are shown in system 1000. System 1000 represents a system according to examples of system 100 or system 300.

[0126] In one example, the memory controller 1064 includes a split control 1092 for controlling access to the memory 1062 as a parallel resource with split line access according to any example herein. According to any example herein, the split control enables providing data to multiple resources and frees up data capacity that can be used as metadata instead of ECC data. In one example, the memory 1062 includes a split data 1094 to represent the split data according to any example herein.

[0127] The system 1000 includes a processor 1010 that performs the primary processing operations of the system 1000. The processor 1010 may be a host processor device. The processor 1010 may include one or more physical devices, such as a microprocessor, an application processor, a microcontroller, a programmable logic device, or other processing means. The processing operations performed by the processor 1010 include the execution of an operating platform or operating system on which applications and device functions run. The processing operations include operations related to I / O (input / output) with a human user or other devices, operations related to power management, operations related to connecting the system 1000 to another device, or a combination thereof. The processing operations may also include operations related to audio I / O, display I / O, or other interfacing methods, or a combination thereof. The processor 1010 may execute data stored in memory. The processor 1010 may write or edit data stored in memory.

[0128] In one example, system 1000 includes one or more sensors 1012. Sensors 1012 represent embedded sensors or interfaces to external sensors, or a combination thereof. Sensors 1012 enable system 1000 to monitor or detect one or more conditions of the environment or device in which system 1000 is implemented. Sensors 1012 may include environmental sensors (such as temperature sensors, motion detectors, light detectors, cameras, chemical sensors (e.g., carbon monoxide sensors, carbon dioxide sensors, or other chemical sensors)), pressure sensors, accelerometers, gyroscopes, medical or physiological sensors (e.g., biosensors, heart rate monitors, or other sensors for detecting physiological attributes), or other sensors, or combinations thereof. Sensors 1012 may also include sensors for biometric authentication systems, such as fingerprint recognition systems, face detection or recognition systems, or other systems that detect or recognize user characteristics. Sensors 1012 should be understood broadly and not as a limitation on the many different types of sensors that may be implemented with system 1000. In one example, the one or more sensors 1012 couple to the processor 1010 via front-end circuitry integrated into the processor 1010. In one example, the one or more sensors 1012 couple to the processor 1010 via another component of the system 1000.

[0129] In one example, system 1000 includes an audio subsystem 1020 that represents hardware (e.g., audio hardware and audio circuitry) and software (e.g., drivers, codecs) components associated with providing audio functionality to a computing device. Audio functionality may include speaker or headphone output and microphone input. Devices for such functionality may be integrated into or connected to system 1000. In one example, a user interacts with system 1000 by providing audio commands that are received and processed by processor 1010.

[0130] The display subsystem 1030 represents hardware (e.g., display device) and software components (e.g., drivers) that provide a visual display for presentation to a user. In one example, the display includes a tactile component or touchscreen element through which a user interacts with the computing device. The display subsystem 1030 includes a display interface 1032 that includes a particular screen or hardware device used to provide a display to a user. In one example, the display interface 1032 includes logic separate from the processor 1010 (such as a graphics processor) for performing at least some processing related to the display. In one example, the display subsystem 1030 includes a touchscreen device that provides both output and input to a user. In one example, the display subsystem 1030 includes a high-definition (HD) display or an ultra-high-definition (UHD) display that provides output to a user. In one example, the display subsystem includes or drives a touchscreen display. In one example, the display subsystem 1030 generates display information based on data stored in memory, based on operations performed by the processor 1010, or both.

[0131] The I / O controller 1040 represents hardware devices and software components related to interaction with a user. The I / O controller 1040 may operate to manage hardware that is part of the audio subsystem 1020 or the display subsystem 1030, or both. In addition, the I / O controller 1040 represents connection points for additional devices that connect to the system 1000 through which a user may interact with the system. For example, devices that may be attached to the system 1000 may include a microphone device, a speaker or stereo system, a video system or other display device, a keyboard or keypad device, buttons / switches, or other I / O devices for use with specific applications, such as a card reader, or other devices.

[0132] As mentioned above, I / O controller 1040 can interact with audio subsystem 1020, display subsystem 1030, or both. For example, input through a microphone or other audio device may provide input or commands for one or more applications or functions of system 1000. Additionally, audio output may be provided instead of or in addition to display output. In another example, if the display subsystem includes a touchscreen, the display device also functions as an input device that may be managed, at least in part, by I / O controller 1040. Additional buttons or switches may also be present on system 1000 to provide I / O functions managed by I / O controller 1040.

[0133] In one example, I / O controller 1040 manages devices such as accelerometers, cameras, light or other environmental sensors, gyroscopes, global positioning systems (GPS), or other hardware or sensors 1012 that may be included in system 1000. The inputs may be part of direct user interaction, as well as providing environmental input to the system to affect its operation (such as filtering noise, adjusting the display for brightness detection, applying a flash for a camera, or other functions).

[0134] In one example, the system 1000 includes a power management 1050 that manages battery power usage and functions related to battery charging and power-saving operation. The power management 1050 manages power from a power source 1052 that provides power to the components of the system 1000. In one example, the power source 1052 includes an AC-DC (alternating current-to-direct current) adapter for plugging into a wall outlet. Such an AC power source can be a renewable energy source (e.g., solar power, motion-based power). In one example, the power source 1052 includes only DC power, which can be provided by a DC power source such as an external AC-DC converter. In one example, the power source 1052 includes wireless charging hardware for charging via proximity to a charging magnetic field. In one example, the power source 1052 can include an internal battery or a fuel cell power source.

[0135] The memory subsystem 1060 includes a memory device 1062 for storing information in the system 1000. The memory subsystem 1060 may include non-volatile (state remains unchanged when power is removed from the memory device) or volatile (state becomes indeterminate when power is removed from the memory device) memory devices, or a combination thereof. The memory 1060 may store application data, user data, music, photos, documents, or other data, as well as system data (whether long-term or temporary) related to the execution of applications and functions of the system 1000. In one example, the memory subsystem 1060 includes a memory controller 1064 (which may also be considered part of the control unit of the system 1000 and potentially part of the processor 1010). The memory controller 1064 includes a scheduler that generates and issues commands to control access to the memory device 1062.

[0136] Connections 1070 include hardware devices (e.g., wireless or wired connectors and communications hardware or a combination of wired and wireless hardware) and software components (e.g., drivers, protocol stacks) to enable system 1000 to communicate with external devices. The external devices may be other computing devices, separate devices such as wireless access points or base stations, and peripherals such as headsets, printers, or other devices. In one example, system 1000 exchanges data with the external devices for storage in memory or for display on a display device. The exchanged data may include data to be stored in memory or data already stored in memory for reading, writing, or editing.

[0137] Connection 1070 may include multiple different types of connections. For generalization, system 1000 is shown with cellular connection 1072 and wireless connection 1074. Cellular connection 1072 generally refers to a cellular network connection provided by a wireless carrier, such as provided via GSM (Global System for Mobile Communications) or a variant or derivative thereof, or CDMA (Code Division Multiple Access) or a variant or derivative thereof, TDM (Time Division Multiplexing) or a variant or derivative thereof, LTE (Long Term Evolution, also known as "4G"), 5G, or other cellular service standards. Wireless connection 1074 refers to a non-cellular wireless connection and may include a personal area network (such as Bluetooth), a local area network (such as WiFi), or a wide area network (such as WiMax), or other wireless communications, or a combination thereof. Wireless communications refers to the transfer of data through the use of modulated electromagnetic radiation over a non-solid medium. Wired communications occur via a solid communications medium.

[0138] Peripheral connections 1080 include hardware interfaces and connectors as well as software components (e.g., drivers, protocol stacks) for making peripheral connections. It will be understood that system 1000 may comprise peripheral devices that are peripheral to other computing devices (“out” 1082) and connected to system 1000 (“from” 1084). System 1000 typically has a “docking” connector for connecting to other computing devices for purposes such as managing (e.g., downloading, uploading, modifying, synchronizing) content on system 1000. Additionally, the docking connector may enable system 1000 to connect to certain peripherals that allow system 1000 to control content output to, for example, an audiovisual system or other system.

[0139] In addition to proprietary docking connectors or other proprietary connection hardware, system 1000 may make peripheral connections 1080 via common or standards-based connectors. Common types may include Universal Serial Bus (USB) connectors (which may include any of a number of different hardware interfaces), MiniDisplayPort (MDP), DisplayPort including High-Definition Multimedia Interface (HDMI®), or other types.

[0140] 11 is a block diagram of an example multi-node network that can implement split-line memory access. System 1100 represents a network of nodes that can apply adaptive ECC. In one example, system 1100 represents a data center. In one example, system 1100 represents a server farm. In one example, system 1100 represents a data cloud or a processing cloud.

[0141] Node 1130 of system 1100 represents a system according to examples of system 100 or system 300. Node 1130 includes memory 1140. Node 1130 includes controller 1142, which represents a memory controller for managing access to memory 1140. In one example, controller 1142 includes split control (CTRL) 1144 for controlling access to memory 1140 as a parallel resource with split-line access, according to any example herein. Split control enables providing data to multiple resources, freeing up data capacity that can be used as metadata instead of ECC data, according to any example herein. In one example, memory 1140 includes split data 1146, which represents split data, according to any example herein.

[0142] One or more clients 1102 make requests to the system 1100 via a network 1104. The network 1104 represents one or more local networks, wide area networks, or a combination thereof. The clients 1102 may be human or machine clients that generate requests for the performance of operations by the system 1100. The system 1100 executes the application or data computation tasks requested by the clients 1102.

[0143] In one example, the system 1100 includes one or more racks, which represent structural and interconnection resources for housing and interconnecting multiple compute nodes. In one example, the rack 1110 includes multiple nodes 1130. In one example, the rack 1110 hosts multiple blade components 1120. Hosting refers to providing power, structural or mechanical support, and interconnection. A blade 1120 can refer to computing resources on a printed circuit board (PCB), where the PCB houses the hardware components of one or more nodes 1130. In one example, the blade 1120 does not include a chassis or housing or other "box" other than that provided by the rack 1110. In one example, the blade 1120 includes a housing with exposed connectors for connecting to the rack 1110. In one example, the system 1100 does not include a rack 1110, but rather includes a chassis or housing for each blade 1120 that is stacked with or otherwise in close proximity to other blades and enables interconnection of the nodes 1130.

[0144] The system 1100 includes a fabric 1170 that represents one or more interconnects for the nodes 1130. In one example, the fabric 1170 includes multiple switches 1172 or routers or other hardware for routing signals between the nodes 1130. Additionally, the fabric 1170 can couple the system 1100 to the network 1104 for access by the clients 1102. In addition to routing equipment, the fabric 1170 can be considered to include cables or ports or other hardware equipment for coupling the nodes 1130 together. In one example, the fabric 1170 has one or more associated protocols for managing the routing of signals through the system 1100. In one example, the protocol or protocols depend at least in part on the hardware equipment used in the system 1100.

[0145] As shown, rack 1110 includes N blades 1120. In one example, in addition to rack 1110, system 1100 includes rack 1150. As shown, rack 1150 includes M blades 1160, where M is not necessarily the same as N. Thus, it will be understood that a variety of different hardware equipment components may be used and coupled together in system 1100 over fabric 1170. Blades 1160 may be the same as or similar to blades 1120. Nodes 1130 may be any type of node and need not all be the same type of node. System 1100 is not limited to being homogeneous or non-homogeneous.

[0146] For simplicity, only the nodes within blade 1120[0] are shown in detail. However, the other nodes in system 1100 can be the same or similar. At least some of the nodes 1130 are compute nodes with processors (proc) 1132 and memory 1140. A compute node refers to a node that runs an operating system and has processing resources (e.g., one or more processors) that can receive and process one or more tasks. In one example, at least some of the nodes 1130 are server nodes with servers as processing resources represented by processors 1132 and memory 1140. A storage server refers to a node that has more storage resources than a compute node; rather than having processors to execute tasks, a storage server includes processing resources to manage access to the storage nodes within the storage server.

[0147] In one example, the node 1130 includes an interface controller 1134 that represents logic for controlling access by the node 1130 to the fabric 1170. The logic may include hardware resources for interconnecting to physical interconnect hardware. The logic may include software or firmware logic for managing the interconnect. In one example, the interface controller 1134 is or includes a host fabric interface, which may be a fabric interface according to any example described herein.

[0148] The processor 1132 may include one or more separate processors. Each of the separate processors may include a single processing unit, a multi-core processing unit, or a combination thereof. The processing unit may be a primary processor such as a CPU (Central Processing Unit), a peripheral processor such as a GPU (Graphics Processing Unit), or a combination thereof. The memory 1140 may be or include a memory device and a memory controller.

[0149] Generally, with respect to the description herein, in one example, a memory controller includes a hardware input / output (I / O) interface coupled to a plurality of memory resources including a first memory resource and a second memory resource; and control logic that distributes a portion of data from the first memory resource as a first half of the first memory resource and a second half of the second memory resource, the portion of data including N error detection and correction (ECC) bits for providing error correction for the portion of data, the first half and the second half each including (NM) / 2 ECC bits for providing error correction for the half, and the control logic distributes M non-ECC bits between the first half and the second half.

[0150] In one example of a memory controller, the portion of data includes a word line. According to the above examples of memory controllers, in one example, the control logic performs the first half access using a burst chop of data from the first memory resource and the second half access using a burst chop of data from the second memory resource. According to the above examples of memory controllers, in one example, the first memory resource includes a first rank and the second memory resource includes a second rank. According to the above examples of memory controllers, in one example, the first memory resource includes a first dual in-line memory module (DIMM) and the second memory resource includes a second DIMM. In one example, the memory resources include 10x4 dynamic random access memory (DRAM) devices. In one example, N is equal to 2×M. In one example, N is equal to 64 ECC bits for providing error correction of 512 data bits, and M is equal to 32 data bits for providing error correction of 256 data bits. In one example, the M non-ECC bits include metadata bits. In one example, the M metadata bits include two-level memory (2LM) bits, trusted domain extension (TDX) bits, or in-memory directory bits. In one example, the N ECC bits provide single-device data correction (SDDC) for the portion of data, and the (NM) / 2 ECC bits provide SDDC for one half of the data. According to the above examples of memory controllers, in one example, the memory resources include synchronous dynamic random access memory (SDRAM) devices that comply with the Double Data Rate version 5 (DDR5) standard.

[0151] In general, with respect to the description herein, in one example, a method includes: dividing a line of data into two half-lines of data into a first half-line and a second half-line, the line of data including N error detection and correction (ECC) bits for providing error correction for the line of data; calculating first (NM) / 2 error detection and correction (ECC) bits for the first half-line and second (NM) / 2 ECC bits for the second half-line; generating first M / 2 metadata bits for the first half-line and second M / 2 metadata bits for the second half-line; and storing the first half-line with the first (NM) / 2 ECC bits and the M / 2 metadata bits in a first memory resource and storing the second half-line with the second (NM) / 2 ECC bits and the second M / 2 metadata bits in a second memory resource separate from the first memory resource.

[0152] In one example of the method, the line of data comprises a word line. According to each of the above example of the method, in one example, storing the first half line in the first memory resource and storing the second half line in the second memory resource comprises performing a data write using burst chop. According to each of the above example of the method, in one example, the first memory resource comprises a first rank and the second memory resource comprises a second rank. According to each of the above example of the method, in one example, the first memory resource comprises a first dual in-line memory module (DIMM) and the second memory resource comprises a second DIMM. According to each of the above example of the method, in one example, the first memory resource and the second memory resource comprise 10x4 dynamic random access memory (DRAM) devices. According to each of the above example of the method, in one example, N is equal to 2×M. According to the above example methods, in one example, N equals 64 ECC bits to provide error correction of 512 data bits, and M equals 32 data bits to provide error correction of 256 data bits. According to the above example methods, in one example, the M metadata bits include two-level memory (2LM) bits, trusted domain extension (TDX) bits, or in-memory directory bits. According to the above example methods, in one example, the N ECC bits provide single-device data correction (SDDC) for the portion of data, and the (NM) / 2 ECC bits provide SDDC for a half-line of data.

[0153] In general, with respect to the description herein, in one example, a system includes a memory including a memory including a first memory resource and a second memory resource, and a memory controller coupled to the memory, the memory controller including control logic to distribute a portion of data from the first memory resource as a first half of the first memory resource and a second half of the second memory resource, the portion of data including N error detection and correction (ECC) bits for providing error correction for the portion of data, the first half and the second half each including (NM) / 2 ECC bits for providing error correction for the half, and the control logic distributes M non-ECC bits between the first half and the second half.

[0154] According to the above system examples, in one example, the portion of data includes a word line. According to the above system examples, in one example, the control logic performs accesses of the first half portion using burst chopping of data from the first memory resource and performs accesses of the second half portion using burst chopping of data from the second memory resource. According to the above system examples, in one example, the first memory resource includes a first rank and the second memory resource includes a second rank. According to the above system examples, in one example, the first memory resource includes a first dual in-line memory module (DIMM) and the second memory resource includes a second DIMM. According to the above system examples, in one example, the plurality of memory resources include 10x4 dynamic random access memory (DRAM) devices. According to the above system examples, in one example, N is equal to 2×M. According to the above example systems, in one example, N is equal to 64 ECC bits to provide error correction for 512 data bits, and M is equal to 32 data bits to provide error correction for 256 data bits. According to the above example systems, in one example, the M metadata bits include two-level memory (2LM) bits, trusted domain extension (TDX) bits, or in-memory directory bits. According to the above example systems, in one example, the N ECC bits provide single-device data correction (SDDC) for the portion of the data, and the (NM) / 2 ECC bits provide SDDC for one half of the data. According to the above example systems, in one example, the memory resource includes a synchronous dynamic random access memory (SDRAM) device compliant with the double data rate version 5 (DDR5) standard.

[0155] The flow diagrams shown herein provide example sequences of various process actions. The flow diagrams may depict operations performed by software or firmware routines as well as physical operators. The flow diagrams may depict example implementations of states of a finite state machine (FSM), which may be implemented in hardware and / or software. Although shown in a particular sequence or order, the order of operations can be changed unless otherwise noted. Therefore, the illustrated diagrams should be understood as examples only, and processes can be performed in a different order and some operations can be performed in parallel. Additionally, one or more actions can be omitted, and therefore, not all implementations perform all actions.

[0156] To the extent that various operations or functions are described herein, they may be described or defined as software code, instructions, configurations, and / or data. Content may be directly executable ("object" or "executable" format), source code, or differential code ("delta" or "patch" code). The software content described herein may be provided via a product on which the content is stored or via a method of operating a communications interface to transmit data through the communications interface. A machine-readable storage medium can cause a machine to perform the described functions or operations and includes any mechanism for storing information in a form accessible by a machine (e.g., computing device, electronic system, etc.), such as recordable / non-recordable media (e.g., read-only memory (ROM), random access memory (RAM), magnetic disk storage media, optical storage media, flash memory devices, etc.). A communications interface includes any mechanism for interfacing with either a hardwired, wireless, optical, etc. medium for communicating with another device, such as a memory bus interface, a processor bus interface, an Internet connection, a disk controller, etc. The communications interface may be configured to provide data signals describing software content by providing configuration parameters and / or sending signals to prepare the communications interface. The communications interface may be accessed via one or more commands or signals sent to the communications interface.

[0157] The various components described herein can be means for performing the described operations or functions. Each component described herein includes software, hardware, or a combination thereof. A component can be implemented as a software module, a hardware module, dedicated hardware (e.g., application-specific hardware, application-specific integrated circuits (ASICs), digital signal processors (DSPs), etc.), an embedded controller, a hardwired circuit, etc.

[0158] In addition to what is described herein, various modifications can be made to the disclosed subject matter and implementations of the invention without departing from their scope. Accordingly, the descriptions and examples herein should be interpreted in an illustrative, rather than a limiting, sense. The scope of the invention should be determined solely by reference to the claims that follow. Other possible claims are claimed. [Item 1] a hardware input / output (I / O) interface coupled to a plurality of memory resources including a first memory resource and a second memory resource; control logic for distributing a portion of data from the first memory resource as a first half of the first memory resource and a second half of the second memory resource, the portion of data including N error detection and correction (ECC) bits for providing error correction for the portion of data, and the first half and the second half each including (NM) / 2 ECC bits for providing error correction for the half; Equipped with the control logic distributes M non-ECC bits between the first half and the second half. Memory controller. [Item 2] the portion of data includes a word line; Item 1. The memory controller of item 1. [Item 3] the control logic performs the first half access using a burst chop of data from the first memory resource and the second half access using a burst chop of data from the second memory resource. Item 1. The memory controller of item 1. [Item 4] the first memory resource includes a first rank, and the second memory resource includes a second rank; Item 1. The memory controller of item 1. [Item 5] the first memory resource includes a first dual in-line memory module (DIMM), and the second memory resource includes a second DIMM; Item 1. The memory controller of item 1. [Item 6] the plurality of memory resources including 10x4 dynamic random access memory (DRAM) devices; Item 1. The memory controller of item 1. [Item 7] N is equal to 2 × M, Item 1. The memory controller of item 1. [Item 8] N is equal to 64 ECC bits to provide error correction for 512 data bits, and M is equal to 32 data bits to provide error correction for 256 data bits. Item 7. The memory controller of item 7. [Item 9] the M non-ECC bits include metadata bits; Item 1. The memory controller of item 1. [Item 10] the N ECC bits provide single-device data correction (SDDC) for the portion of data, and the (NM) / 2 ECC bits provide SDDC for half of the data. Item 1. The memory controller of item 1. [Item 11] the memory resource includes a synchronous dynamic random access memory (SDRAM) device conforming to the double data rate version 5 (DDR5) standard; Item 1. The memory controller of item 1. [Item 12] dividing a line of data into two half-lines of data into a first half-line and a second half-line, the line of data including N error detection and correction (ECC) bits for providing error correction for the line of data; calculating first (NM) / 2 error detection and correction (ECC) bits for the first half-line and second (NM) / 2 ECC bits for the second half-line; generating first M / 2 metadata bits for the first half-line and second M / 2 metadata bits for the second half-line; storing the first half-line with the first (NM) / 2 ECC bits and the M / 2 metadata bits in a first memory resource and storing the second half-line with the second (NM) / 2 ECC bits and the second M / 2 metadata bits in a second memory resource separate from the first memory resource; 1. A method for memory access comprising: [Item 13] the lines of data include word lines; Item 13. The method according to item 12. [Item 14] storing the first half-line in the first memory resource and the second half-line in the second memory resource includes performing a data write using burst chops; Item 13. The method according to item 12. [Item 15] the first memory resource includes a first rank, and the second memory resource includes a second rank; Item 13. The method according to item 12. [Item 16] the first memory resource includes a first dual in-line memory module (DIMM), and the second memory resource includes a second DIMM; Item 13. The method according to item 12. [Item 17] the first memory resource and the second memory resource include 10x4 dynamic random access memory (DRAM) devices; Item 13. The method according to item 12. [Item 18] N is equal to 2×M, where N is equal to 64 ECC bits to provide error correction for 512 data bits, and M is equal to 32 data bits to provide error correction for 256 data bits. Item 13. The method according to item 12. [Item 19] the M metadata bits include a two-level memory (2LM) bit, a trusted domain extension (TDX) bit, or an in-memory directory bit; Item 13. The method according to item 12. [Item 20] the N ECC bits provide single-device data correction (SDDC) for the portion of data, and the (NM) / 2 ECC bits provide SDDC for a half-line of data. Item 13. The method according to item 12.

Claims

1. a hardware input / output (I / O) interface coupled to a memory including a first memory resource and a second memory resource; control logic for distributing data as a first sub-portion of the first memory resource and a second sub-portion of the second memory resource, the data including N error detection and correction (ECC) bits for providing error correction for the data, the first sub-portion and the second sub-portion including ECC bits for providing error correction for the first sub-portion and the second sub-portion, respectively, the combined number of the ECC bits for the first sub-portion and the second sub-portion being less than N; Equipped with the control logic distributes non-ECC bits between the first sub-portion and the second sub-portion. Memory controller.

2. the first sub-portion and the second sub-portion each include (N-M) / 2 of the ECC bits; the control logic distributes the M non-ECC bits between the first sub-portion and the second sub-portion. The memory controller of claim 1 .

3. the control logic performs the first sub-portion access using a burst chop of data from the first memory resource and the second sub-portion access using a burst chop of data from the second memory resource; 3. The memory controller according to claim 1.

4. the first memory resource includes a first rank and the second memory resource includes a second rank; The memory controller according to claim 1 .

5. the non-ECC bits include metadata bits; The memory controller of claim 1 .

6. a memory including a first memory resource and a second memory resource; a memory controller coupled to the memory; Equipped with The memory controller control logic for distributing data as a first sub-portion of the first memory resource and a second sub-portion of the second memory resource, the data including N error detection and correction (ECC) bits for providing error correction for the data, the first sub-portion and the second sub-portion including ECC bits for providing error correction for the first sub-portion and the second sub-portion, respectively, the combined number of the ECC bits for the first sub-portion and the second sub-portion being less than N; Including, the control logic distributes non-ECC bits between the first sub-portion and the second sub-portion. A system for memory access.

7. the first sub-portion and the second sub-portion each include (N-M) / 2 of the ECC bits; the control logic distributes the M non-ECC bits between the first sub-portion and the second sub-portion. The system of claim 6.

8. the control logic performs the first sub-portion access using a burst chop of data from the first memory resource and the second sub-portion access using a burst chop of data from the second memory resource; 8. The system according to claim 6 or 7.

9. the first memory resource includes a first rank and the second memory resource includes a second rank; A system according to any one of claims 6 to 8.

10. the non-ECC bits include metadata bits; 10. A system according to any one of claims 6 to 9.

Citation Information

Patent Citations

  • Memory system

    JP1980087358A

  • memory

    JP1990156380A

  • Transparent ECC memory system

    JP2005528712A

  • Multi rank sdram control method and sdram controller

    JP2018160104A

  • Using dual channel memory as single channel memory with command address recovery

    US20190205225A1