FR3033927B1 - Groupement des niveaux de lecture pour des performances de memoire flash accrues - Google Patents

Groupement des niveaux de lecture pour des performances de memoire flash accrues Download PDF

Info

Publication number
FR3033927B1
FR3033927B1 FR1652158A FR1652158A FR3033927B1 FR 3033927 B1 FR3033927 B1 FR 3033927B1 FR 1652158 A FR1652158 A FR 1652158A FR 1652158 A FR1652158 A FR 1652158A FR 3033927 B1 FR3033927 B1 FR 3033927B1
Authority
FR
France
Prior art keywords
word line
read
word lines
error count
reading
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
FR1652158A
Other languages
English (en)
Other versions
FR3033927A1 (fr
Inventor
Seyhan Karakulak
Anthony Dwayne WEATHERS
Richard David Barndt
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
HGST Netherlands BV
Western Digital Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/664,768 external-priority patent/US9720754B2/en
Application filed by HGST Netherlands BV, Western Digital Technologies Inc filed Critical HGST Netherlands BV
Publication of FR3033927A1 publication Critical patent/FR3033927A1/fr
Application granted granted Critical
Publication of FR3033927B1 publication Critical patent/FR3033927B1/fr
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1072Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in multilevel memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/08Address circuits; Decoders; Word-line control circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3418Disturbance prevention or evaluation; Refreshing of disturbed memory data
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3418Disturbance prevention or evaluation; Refreshing of disturbed memory data
    • G11C16/3427Circuits or methods to prevent or reduce disturbance of the state of a memory cell when neighbouring cells are read or written
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/02Detection or location of defective auxiliary circuits, e.g. defective refresh counters
    • G11C29/021Detection or location of defective auxiliary circuits, e.g. defective refresh counters in voltage or current generators
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/02Detection or location of defective auxiliary circuits, e.g. defective refresh counters
    • G11C29/022Detection or location of defective auxiliary circuits, e.g. defective refresh counters in I/O circuitry
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/02Detection or location of defective auxiliary circuits, e.g. defective refresh counters
    • G11C29/028Detection or location of defective auxiliary circuits, e.g. defective refresh counters with adaption or trimming of parameters
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/44Indication or identification of errors, e.g. for repair
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/12Group selection circuits, e.g. for memory block selection, chip selection, array selection
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/14Word line organisation; Word line lay-out
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0409Online test

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Read Only Memory (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)

Abstract

L'invention concerne une table de décomptes d'erreurs qui est générée en se basant sur la lecture de lignes de mots d'un dispositif à mémoire flash, la table stockant un décompte d'erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective utilisée pour lire les lignes de mots. Une pluralité de groupes de lignes de mots décalés sont générés en se basant sur la table de décomptes d'erreurs, chaque groupe associant une tension de décalage de niveau de lecture différente à une pluralité d'adresses de ligne de mots. Un dispositif de stockage est configuré pour lire les cellules de mémoire en utilisant une tension de décalage de niveau de lecture d'un groupe de lignes de mots décalé généré associé à une adresse de ligne de mots des cellules de mémoire à lire. Après un point prédéterminé dans un cycle de vie d'un bloc de mémoire respectif, la table est régénérée et une pluralité de groupes de lignes de mots décalés sont régénérés en se basant sur la table de décomptes d'erreurs régénérée.

Description

GROUPEMENT DES NIVEAUX DE LECTURE POUR DES PERFORMANCES DE MEMOIRE FLASH ACCRUES
CONTEXTE
[0001] La présente invention porte sur la récupération d’informations auprès de dispositifs à mémoire flash tels que les disques électroniques (SSD). Les disques électroniques (SSD) à bas prix sont généralement fabriqués en utilisant une mémoire flash à cellule multiniveau (MLC) pour une capacité de données accrue, mais les dispositifs à mémoire MLC sont parfois moins fiables que les mémoires flash à cellule mononiveau (SLC). Les fabricants de SSD grand public ont modéré ces problèmes en employant certains algorithmes de répartition de l’usure. Même avec la capacité de données accrue des MLC, l’utilisation des MLC dans les applications professionnelles devient plus coûteuse en raison de sa diminution disproportionnellement élevée dans le temps de cycles de programmation/effacement (P/E) dûe aux contraintes accrues (causant l’usure) nécessaires pour la lecture, la programmation et l’effacement de la mémoire flash, entraîne une dégradation graduelle de l’endurance.
RESUME
[0002] L’ invention concerne un procédé de récupération d’informations stockées dans une mémoire flash. Selon différents aspects, le procédé peut inclure la lecture d’un premier exemple de lignes de mots d’un bloc de mémoire, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en vue de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective, la génération d’une table de décomptes d’erreurs en se basant sur les décomptes d’erreurs produits, la table de décomptes d’erreurs indexant chaque décompte d’erreurs produit par un identifiant de ligne de mots correspondant et une tension respective des différentes tensions de niveau de lecture utilisées pour produire le décompte d’erreurs, et la configuration d’un dispositif de stockage pour réaliser les opérations de lecture en utilisant des tensions de niveau de lecture sélectionnées sur la base des décomptes d’erreurs de la table de décomptes d’erreurs. D’autres aspects incluent des systèmes, des appareils et des produits de programme informatique correspondants pour la mise en œuvre du procédé mis en œuvre sur ordinateur.
[0003] Dans différents aspects, un dispositif de stockage de données peut comprendre une pluralité de dispositifs à mémoire flash, chaque dispositif à mémoire flash comprenant une pluralité de blocs de mémoire et un contrôleur connecté à la pluralité de dispositifs à mémoire flash. Le contrôleur peut être configuré pour lire un premier exemple de lignes de mots du dispositif à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes afin de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective, générer une table de décomptes d’erreurs en se basant sur les décomptes d’erreurs produits, la table de décomptes d’erreurs indexant chaque décompte d’erreurs produit par un identifiant de ligne de mots correspondant et l’une respective parmi les tensions de niveau de lecture différentes, et sélectionner les tensions de niveau de lecture pour les futures opérations de lecture en se basant sur les décomptes d’erreurs de la table de décomptes d’erreurs.
[0004] Dans différents aspects, un procédé peut comprendre la lecture d’un premier exemple de lignes de mots d’un dispositif à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à une adresse de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes afin de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective, la génération d’une table de décomptes d’erreurs en se basant sur les décomptes d’erreurs produits, la table de décomptes d’erreurs indexant chaque décompte d’erreurs produit par une adresse de ligne de mots correspondante et l’une respective parmi les tensions de niveau de lecture différentes, la formation d’une pluralité de groupes de lignes de mots en se basant sur la table de décomptes d’erreurs, chaque groupe associant l’une respective parmi les tensions de niveau de lecture différentes à une pluralité d’adresses de ligne de mots, et la configuration d’un dispositif de stockage pour lire les cellules de mémoire en utilisant une tension de niveau de lecture d’un groupe de lignes de mots généré correspondant à une adresse de ligne de mots des cellules de mémoire à lire.
[0005] Il est entendu que d’autres configurations de la présente invention ressortiront facilement de la description suivante pour les personnes compétentes dans l’art, description dans laquelle diverses configurations de la présente invention sont indiquées et décrites à titre d’illustration. Comme il sera constaté, la présente invention est capable d’adopter des configurations autres et différentes et ses nombreux détails peuvent être modifiés sous différents autres aspects, le tout sans s’écarter du domaine d’application de la présente invention. Par conséquent, les dessins et la description détaillée sont à considérer de nature illustrative et non restrictive.
BREVE DESCRIPTION DES DESSINS
[0006] La Figure 1 est un exemple de diagramme de quatre distributions possibles de tension de seuil de cellule (Vt) et de niveaux de lecture de programme associés pour un groupe de cellules de mémoire dans une mémoire flash à cellule multiniveau (MLC).
[0007] La Figure 2A représente un exemple de détermination de probabilité pour une page bit de poids faible (LSB) en utilisant trois niveaux de lecture.
[0008] La Figure 2B représente un exemple de détermination de probabilité pour une page à bit de poids fort (MSB) d’une mémoire flash MLC en utilisant trois niveaux de lecture.
[0009] La Figure 3 représente un exemple de variations de tension de niveau de lecture optimal pour de multiples lignes de mots d’un bloc de mémoire.
[0010] La Figure 4 représente un exemple de table de décomptes d’erreurs pour un exemple de plage de valeurs de décalage de niveau de lecture pour de multiples lignes de mots.
[0011] Les Figures 5A à 5C représentent des graphiques d’exemples de décalages de niveau de lecture optimal pour des blocs de mémoire soumis à des cycles.
[0012] La Figure 6 représente un synoptique d’un exemple d’algorithme destiné à générer des groupes de lignes de mots décalés.
[0013] La Figure 7 représente un schéma de procédé d’un premier exemple de processus de génération de groupes de lignes de mots décalés.
[0014] La Figure 8 représente un schéma de procédé d’un deuxième exemple de processus de génération de groupes de lignes de mots décalés.
[0015] La Figure 9 représente un exemple de canal de mémoire flash modélisé sous la forme d’un canal sans mémoire discret (DMC) avec des entrées binaires et des sorties K-aires.
[0016] Les Figures 10A à 10C représentent un exemple de graphes d’interpolation linéaire pour le calibrage d’exemples de niveaux de lecture et/ou de décalages de niveau de lecture.
[0017] Les Figures 10D à 10F représentent un exemple de graphes d’interpolation linéaire pour le recalibrage d’exemples de niveaux de lecture et/ou de décalages de niveau de lecture.
[0018] Les Figures 11A et 11B représentent des exemples de modes d’optimisation du niveau de lecture.
[0019] La Figure 12 représente un schéma de procédé d’un exemple de processus de calibrage des niveaux de lecture pour la lecture d’une pluralité de cellules de mémoire dans un dispositif de stockage.
[0020] La Figure 13 représente un schéma de procédé d’un exemple de processus de calibrage des niveaux de lecture pour la récupération de données.
[0021] La Figure 14 représente un schéma de procédé d’un exemple de processus de régénération d’une pluralité de groupes de lignes de mots décalés optimaux en se basant sur la régénération et la réindexation d’une table de décomptes d’erreurs.
[0022] La Figure 15 est un synoptique représentant les composants d’un exemple de système de stockage de données.
DESCRIPTION DETAILLEE
[0023] La description détaillée énoncée ci-dessous est conçue pour être une description de diverses configurations de la présente invention et n’est pas destinée à représenter uniquement les configurations dans lesquelles la présente invention peut être mise en œuvre. Les dessins joints sont incorporés ici et font partie intégrante de la description détaillée. La description détaillée inclut des détails spécifiques visant à fournir une compréhension approfondie de la présente invention. Il apparaîtra cependant aux personnes compétentes dans l’art que la présente invention peut être mise en œuvre sans ces détails spécifiques. Dans certaines circonstances, des structures et des composants sont représentés sous une forme synoptique afin d’éviter un masquage des concepts de la présente invention. Les composants identiques sont pourvus de numéros de référence identiques afin de faciliter la compréhension.
[0024] Dans un dispositif à mémoire flash, par exemple avec une architecture NAND, les cellules de mémoire sont groupées en chaînes, chaque chaîne étant composée d’un ensemble de transistors branchés en série entre un transistor à sélection de drain (raccordé à une ligne de bit respective d’un bloc de mémoire) un transistor à sélection de source (raccordé à une ligne de distribution de tension de référence). Chaque cellule de mémoire contient un transistor MOS à gâchette flottante. Lors de la programmation d’une cellule de mémoire, des électrons sont injectés dans la gâchette flottante, par exemple au moyen de l’effet tunnel Fowler-Nordheim (F-N) et/ou d’injection d’électrons chauds. Le caractère non volatile de la cellule est dû aux électrons maintenus à l’intérieur de la gâchette flottante. Les bits sont stockés en piégeant la charge sur la gâchette flottante (un conducteur électriquement isolé) qui stocke une valeur logique définie par sa tension de seuil (tension requise pour faire conduire la cellule), laquelle est proportionnelle à la charge électrique stockée. Lorsqu’une cellule de mémoire est effacée, les électrons dans la gâchette flottante de la cellule sont arrachés par effet tunnel (un courant de tunnel) de la gâchette flottante vers, par exemple, la source et/ou le substrat.
[0025] Lorsqu’une mémoire flash est soumise à des cycles (c’est-à-dire programmée et effacée de manière répétitive), ses qualités physiques changent. L’implantation et le retrait répétés d’électrons sur la gâchette flottante par exemple, respectivement pendant les opérations de programmation et d’effacement, ont pour effet que certains électrons excédentaires sont capturés dans le dispositif. De même, lorsqu’une ou plusieurs cellules sont programmées, les cellules voisines peuvent subir une injection de charge inattendue et indésirable vers leurs gâchettes flottantes, ce qui entraîne une corruption des données qui y sont stockées. A titre d’exemple, des électrons peuvent fuir dans les cellules voisines après une contrainte prolongée dûe aux tensions au niveau des gâchettes des cellules voisines. Les tensions de seuil de ces cellules de mémoire peuvent éventuellement prendre des valeurs différentes (supérieures ou inférieures) aux valeurs attendues, ce qui provoque des erreurs lors de la lecture des données. Le dommage causé devient généralement une fonction de l’intensité (par exemple la tension) et de la durée du champ ; ce qui revient à dire que la programmation de la mémoire flash à des conditions de tension de seuil élevée augmente le taux de dommages résultant à la fois des processus de programmation et d’effacement, car elle nécessite des champs appliqués pendant une durée plus longue et/ou à un niveau plus élevé. L’ajout d’un nombre suffisant d’électrons, par exemple, peut modifier une cellule d’un état effacé en un état programmé.
[0026] Dans divers modes de réalisation, les cellules de mémoire sont disposées sur une galette en une matrice de colonnes (lignes de bits) et de lignes (lignes de mots). L’adresse d’une cellule de mémoire représente l’intersection d’une ligne de bits et d’une ligne de mots correspondant à (par exemple indexant) la cellule de mémoire. Une mémoire flash peut en outre être composée de blocs, chaque bloc étant divisé en pages. Dans certains modes de réalisation de mémoire MLC, chaque ligne de cellules de la mémoire flash est composée de 2 pages : une page LSB et une page MSB. Si un bloc comprend 128 pages, il peut alors posséder 64 lignes de cellules, chaque ligne comprenant deux pages. Chaque ligne peut présenter un comportement différent, car lorsque des cellules se trouvent physiquement ensemble dans une puce, elles sont soumises aux variations de tensions et de résistances ainsi que d’autres caractéristiques dans le cadre du processus de fabrication.
[0027] En architecture NAND, il a été constaté que le problème de la dégradation est particulièrement problématique, car chaque transistor dans la chaîne de cellules lues (par exemple au niveau d’une ligne de bits) reçoit une contrainte de tension élevée, même si un nombre inférieur à la totalité des cellules de cette chaîne (par exemple à un emplacement dans la ligne de bits correspondant à une ligne de mots désignée) peut être lu à un instant quelconque. Du fait de la dégradation, lorsqu’elles sont programmées, les cellules de certaines lignes (lignes de mots) sont plus éloignées de leurs valeurs attendues (par exemple une tension attendue mesurée au niveau d’une ligne de bits correspondante) que d’autres. Il a été observé que ces variations peuvent être associées à des lignes de mots individuelles. Par conséquent, la technologie selon l’invention caractérise ces variations comme une valeur mesurable et fournit un mécanisme pour compenser les variations à l’exécution. S’il est constaté, par exemple, que les tensions de cellule dans une ligne de mots se décalent (par exemple en résultat d’un processus de caractérisation), une polarisation (par exemple une tension de décalage) peut alors être introduite pendant l’opération de programmation ou de lecture qui suit pour corriger la tension programmée ou la valeur lue. La non-linéarité des valeurs de programmation réelles entre les cellules dans les différentes lignes de mots peut ainsi être réduite, ce qui réduit à son tour les erreurs lors de la lecture des cellules.
[0028] La même polarisation ne convient cependant pas nécessairement pour une correction uniforme des erreurs liées à la lecture à travers un bloc ou une puce particuliers. De plus, le stockage de valeurs de polarisation pour chaque ligne de mots ou bloc peut rapidement consommer de la mémoire utile pour le stockage et peut devenir ingérable et/ou affecter les performances en nécessitant de nombreuses consultations pour appliquer la polarisation correcte à chaque opération de lecture. Par conséquent, la technologie selon l’invention fournit un mécanisme pour déterminer et associer les valeurs de polarisation à des groupes de lignes de mots, les valeurs de polarisation étant optimisées pour le taux d’erreurs de lecture le plus faible possible pour la lecture des lignes de mots au sein d’un groupe. La technologie selon l’invention fournit en outre un mécanisme pour optimiser les valeurs de polarisation sur la durée de vie des cellules de mémoire. Les valeurs de polarisation peuvent ainsi être stockées et rappelées efficacement, et corrigées si nécessaire, améliorant ainsi la fiabilité et l’endurance de l’architecture globale de la cellule de mémoire flash, rendant la mémoire flash adaptée aux applications professionnelles.
[0029] La Figure 1 est un exemple de diagramme de quatre distributions possibles de tension de seuil de cellule (Vr) (401, 410, 420 et 430) et de niveaux de lecture de programme associés (seuils L0, L1 et L2) pour un groupe de cellules de mémoire dans une mémoire flash à cellule multiniveau (MLC), conformément à un aspect de la technologie selon l’invention. La mémoire flash NAND MLC fournit plus d’un bit par cellule en choisissant entre de multiples niveaux de charge électrique (niveau de lecture) à appliquer à la gâchette flottante de ses cellules en vue d’obtenir de multiples états de conductivité, chacun se produisant à un seuil de tension Vt différent. Comme illustré dans la Figure 1, une cellule NAND MLC est capable de stocker un état parmi quatre (niveaux de charge) par cellule, produisant deux bits logiques d’information par cellule : le bit de poids fort (MSB) et le bit de poids faible (LSB). Ces deux bits peuvent constituer les pages MSB et LSB d’un bloc de mémoire.
[0030] La Figure 1 représente les courbes de distribution de densité de probabilité 400 pour un groupe de cellules de mémoire (par exemple dans un bloc) programmées aux niveaux de données L0, Ll, L2 et L3. Les distributions 401, 410, 420 et 430 correspondent aux courbes de distribution de densité de probabilité respectivement pour les niveaux de données LO, Ll, L2 et L3. Chaque niveau de données est séparé par un niveau de tension de seuil correspondant. Dans l’exemple représenté, les niveaux de tension de seuil sont identifiés comme le seuil LO, le seuil Ll et le seuil L2. Les niveaux de tension de seuil sont utilisés par un détecteur de seuil (par exemple à l’intérieur de la mémoire flash) en tant que « niveaux de lecture » pour déterminer, par exemple, s’il convient de lire un signal de lecture en considérant qu’il se trouve dans la distribution 401, 410, 420 ou 430. Les quatre distributions de cellule 401, 410, 420 et 430 de la Figure 1 peuvent être obtenues à partie de données de laboratoire.
[0031] Pour garantir que toutes les cellules dans une distribution conduiront, une tension de niveau de lecture supérieure à la distribution est appliquée. Dans les divers exemples décrits ici, un premier niveau de lecture RL1 correspond à la tension de seuil L0, un deuxième niveau de lecture RL2 correspond à la tension de seuil Ll et un troisième niveau de lecture RL3 correspond à la tension de seuil L2. A cet égard, la tension RL1 amènera les cellules dans la distribution L0 à conduire, la tension RL2 amènera les cellules dans la distribution Ll à conduire, la tension RL3 amènera les cellules dans la distribution L2 à conduire, etc. Lorsque quatre états seulement sont disponibles, comme représenté par la Figure 1, la tension RL3 n’amènera aucune cellule dans la distribution L3 à conduire. Dans certains modes de réalisation, cela produira un xO binaire dans le LSB pour ces cellules. Pour N distributions, il y aura généralement N-l niveaux de lecture. Dans l’exemple représenté, il existe quatre distributions (états) et trois niveaux de lecture. Il est toutefois entendu qu’il peut exister huit, seize ou même plus de distributions sans s’écarter du domaine d’application de la technologie selon l’invention.
[0032] La Figure 2A représente un exemple de détermination de probabilité pour une page LSB en utilisant trois niveaux de lecture RL1, RL2 et RL3, conformément à un aspect de la technologie selon l’invention. Dans l’exemple représenté, un premier niveau de lecture 202 (« RL2 ») est utilisé dans une première lecture d’une page LSB pour déterminer les niveaux de programmation putatifs pour les cellules de mémoire de la page LSB. Plusieurs lectures virtuelles sont initiées afin de déterminer une probabilité pour que les cellules de mémoire aient été réellement programmées aux niveaux de programmation putatifs observés.
[0033] Dans l’exemple représenté, les cellules de mémoire sont lues en utilisant un deuxième niveau de lecture 204 inférieur au premier niveau de lecture 202 et un troisième niveau de lecture 206 supérieur au premier niveau de lecture 202. Une première région de programme Bj contient une ou plusieurs cellules possédant une valeur programmée entre le premier niveau de lecture 202 et le deuxième niveau de lecture 204, et une deuxième région de programme 82 comprend une ou plusieurs cellules possédant une valeur programmée entre le premier niveau de lecture 202 et le troisième niveau de lecture 206. Les différentes régions entre les niveaux de lecture peuvent ici être désignées comme des « bacs ». Dans divers aspects, une valeur de confiance peut être calculée pour chaque bac en se basant sur le nombre de cellules de mémoire se trouvant dans le bac en comparaison d’un ou de plusieurs autres bacs. Une valeur de confiance peut être déterminée pour un bac en se basant sur une zone 208 sous la courbe de distribution du bac. La valeur de confiance est alors attribuée à chaque cellule de mémoire dans le bac correspondant. Comme cela sera décrit plus loin, les valeurs de confiance peuvent inclure des logarithmes du rapport de vraisemblance.
[0034] La Figure 2B représente un exemple de détermination de la probabilité pour une page MSB de la mémoire flash MLC en utilisant trois niveaux de lecture RL1, RL2 et RL3. Conformément à des aspects de la technologie selon l’invention, un niveau de lecture initial 202 peut être appliqué à une ou plusieurs cellules de mémoire pour obtenir une valeur LSB pour chaque cellule de mémoire. Dans l’exemple représenté, le niveau de lecture 202 est choisi comme lieu de transition d’état entre les distributions du bit codé 1 et du bit codé 0 afin de réduire au minimum un taux d’erreurs binaires (BER) attendu. Les niveaux de lecture choisis pour minimiser le BER sont appelés les niveaux de lecture optimaux.
[0035] En s’appuyant sur la valeur du LSB, un premier niveau de lecture 202 peut être déterminé pour la lecture d’un niveau de programme putatif pour le MSB. Une fois que le premier niveau de lecture 202 est déterminé et le niveau de programme lu, de multiples lectures suivantes peuvent être initiées pour déterminer une probabilité pour que la cellule de mémoire fût réellement programmée au niveau de programme putatif observé. Par conséquent, chaque cellule peut être associée à une région de programme (bac) ao, ai, a2, 03, 04, 05, et 06 correspondant au niveau auquel il a été constaté que la cellule conduit ou ne conduit pas lorsqu’une ou plusieurs des lectures suivantes sont appliquées.
[0036] La Figure 3 représente un exemple de variations de tension de niveau de lecture optimal pour de multiples lignes de mots d’un bloc de mémoire, conformément à des aspects de la technologie selon l’invention. Un bloc de mémoire peut comprendre jusqu’à 64 lignes de mots (ou plus). Les résultats obtenus en laboratoire ont indiqué que les niveaux de lecture optimaux (par exemple RL1, RL2 ou RL3) peuvent varier d’une ligne de mots à l’autre.
Dans l’exemple représenté, trois niveaux de lecture RL1, RL2 et RL3 sont réglés de manière optimale à leurs valeurs respectives pour lire les cellules de mémoire dans les courbes de distribution de densité de probabilité correspondant aux niveaux de données LO, Ll, L2 et L3. Il s’avère cependant que les valeurs ou tensions de ces niveaux de lecture optimaux changent en rapport avec chaque ligne de mots. Les niveaux de lecture optimaux pour la ligne de mots 1, par exemple, sont décalés vers la droite, en ayant une valeur légèrement accrue, alors que la ligne de mots 64 est décalée vers la gauche en ayant une valeur légèrement réduite. Comme cela sera décrit plus loin, chacun de ces décalages de tension pour chaque niveau de lecture peut être représenté sous la forme de valeurs de polarisation, ou de décalages du niveau de lecture, par rapport à une tension de niveau de lecture primaire correspondante.
[0037] La Figure 4 représente un exemple de table de décomptes d’erreurs 400 pour un exemple de plage de valeurs de décalage de niveau de lecture pour de multiples lignes de mots, conformément à divers aspects de la technologie selon l’invention. Comme expliqué ci-dessus, le niveau de lecture optimal utilisé pour lire un état particulier de la cellule de mémoire peut varier d’une ligne de mots à l’autre, illustrant le fait que chaque ligne de mots peut posséder un ensemble unique de caractéristiques par rapport à chaque autre. Les variations des niveaux de lecture optimaux entre les lignes de mots peuvent être représentées en modifiant un niveau de lecture primaire d’une polarisation particulière, également appelé ici « décalage de niveau de lecture ». Le décalage de niveau de lecture peut être différent pour chaque ligne de mots et/ou chaque bloc et/ou chaque puce de mémoire. À cet égard, de multiples décalages peuvent être appliqués : un pour chaque ligne de mots, un pour chaque bloc et/ou un pour chaque puce de mémoire.
[0038] Chaque ligne de la table 400 est représentative d’une ligne de mots différente, alors que chaque colonne est représentative d’une valeur de décalage de niveau de lecture différente. Chaque ligne de mots d’un bloc peut être représentée dans la table. Les décomptes d’erreurs énumérés dans l’exemple de table sont les décomptes d’erreurs produites lors de la lecture de la ligne de mots correspondante à la valeur de décalage correspondante. Les décomptes d’erreurs peuvent être indexés par ligne de mots et par valeur de décalage de niveau de lecture. Les valeurs de décalage de niveau de lecture sont représentées en « tops » par rapport à une tension de niveau de lecture primaire. Dans certains modes de réalisation, un top sur deux peut être l’équivalent de 25 mV. De plus, il peut exister une table différente pour chaque tension de niveau de lecture. La table illustrée peut être pour RL1, par exemple, alors qu’une table différente fournit les décomptes d’erreurs pour la lecture des mêmes lignes de mots avec RL2 et une table différente fournit les décomptes d’erreurs pour la lecture des mêmes lignes de mots avec RL3.
[0039] La table peut être générée initialement en se basant sur des données obtenues en laboratoire. Dans au moins un exemple, la table de décomptes d’erreurs peut être générée en se basant sur la lecture des lignes de mots d’un bloc de mémoire, chaque ligne de mots étant lue de multiple en utilisant une tension de niveau de lecture choisie modifiée pour chaque lecture par une tension de décalage différente. Par conséquent, un décompte d’erreurs est produit pour chaque tension de décalage et la table est générée pour l’indexage des décomptes d’erreurs par ligne de mots et tensions de décalage respectives.
[0040] Les Figures 5A à 5C représentent des graphiques d’exemples de décalages de niveau de lecture optimal pour des blocs de mémoire soumis à des cycles, conformément à divers aspects de la technologie selon l’invention. Comme expliqué ci-dessus, les cellules de mémoire peuvent connaître une certaine dégradation lorsqu’elles sont soumises à des cycles. Par conséquent, les distributions L0, Ll, L2 et/ou L3 peuvent dériver ou s’écarter des valeurs attendues et de nouveaux niveaux de lecture optimaux sont nécessaires pour lire les cellules à leurs nouvelles valeurs avec des erreurs minimales. Dans les exemples illustrés, les valeurs de décalage de niveau de lecture optimal sont tracées pour les 128 lignes de mots (0-127) d’un bloc de mémoire pour les niveaux de lecture primaires RL1, RL2 et RL3. La Figure 5A est représentative d’exemples de lecture de pages MSB en utilisant RL1, et représente comment les valeurs de décalage de niveau de lecture peuvent varier entre 18 et 12 tops avant de se stabiliser à 14 tops pour les numéros de ligne de mots les plus élevés. La Figure 5B est représentative des exemples de lecture de pages LSB en utilisant RL2. La Figure 5B représente comment un décalage plus grand (c’est-à-dire 18 tops) est nécessaire aux numéros de ligne de mots les plus bas (par exemple au début d’un bloc) qu’aux numéros de ligne de mots les plus élevés (par exemple à la fin d’un bloc). Le décalage de niveau de lecture à appliquer à RL2 est généralement considéré comme ayant une valeur décroissante, de 18 tops pour la ligne de mots 0, à 10 tops pour la ligne de mots 120, et finalement à 4 tops à la ligne de mots 127. La Figure 5C suit un modèle similaire.
[0041] La Figure 6 représente un synoptique d’un exemple d’algorithme destiné à générer des groupes de lignes de mots décalés, conformément à divers aspects de la technologie selon l’invention. L’algorithme 602 peut être mis en œuvre sous la forme d’un programme informatique (par exemple des instructions exécutées sur un dispositif de traitement informatique), d’un matériel électronique et de combinaisons des deux. Le stockage des valeurs de décalage nécessaires à la fourniture des niveaux de lecture optimaux pour la lecture des cellules de mémoire dans chacune des 128 lignes de mots, par exemple, en utilisant trois (ou plus) niveaux de lecture différents occuperait un espace mémoire important. Par conséquent, la technologie selon l’invention met en œuvre un algorithme de profilage de niveau de lecture 602 qui réduit la quantité de valeurs de décalage (ou de niveaux de lecture) qu’il est nécessaire de stocker tout en produisant une réduction du taux d’erreurs binaires proche de l’optimal dans les opérations de lecture de la mémoire. Les algorithmes de profilage du niveau de lecture 602 réduisent le nombre de décalages de niveau de lecture stockés sans pour autant dégrader les taux d’erreurs binaires produits par les opérations de lecture correspondantes qui pourraient augmenter les défauts de décodage matériel ou logiciel.
[0042] L’exemple d’algorithme de regroupement de niveau de lecture 602 utilise comme entrées les conditions aux limites initiales, par exemple sous la forme d’une division initiale de lignes de mots pour un bloc et la table de décomptes d’erreurs 400 décrite précédemment. Chaque division de lignes de mots définie par les conditions aux limites forme un ensemble de groupes de lignes de mots candidats (entrée), chacun constitué d’adresses de ligne de mots consécutives. Les conditions aux limites initiales peuvent désigner, par exemple, quatre groupes candidats, avec le groupe 1 en tant que lignes de mots 0-31, le groupe 2 en tant que lignes de mots 32-63, le groupe 3 en tant que lignes de mots 64-95 et le groupe 4 en tant que lignes de mots 96-127. Ces groupes candidats définissent les conditions aux limites initiales qu’utilisera l’algorithme 600 pour analyser les taux d’erreurs et pour finalement générer les conditions aux limites optimales pour former des groupes de lignes de mots décalés optimaux (sortie) à utiliser dans les opérations de lecture durant le fonctionnement d’un dispositif de stockage.
[0043] L’exemple d’algorithme 602 utilise la table 400 et les conditions aux limites initiales et délivre en sortie des groupes de lignes de mots décalés optimaux. Chaque groupe de lignes de mots décalé optimal délivré en sortie par l’algorithme 602 contient une portion consécutive du nombre total de lignes de mots utilisée en entrée comme partie des conditions initiales (par exemple 128 lignes de mots). Les limites des groupes de lignes de mots décalés optimaux délivrées en sortie par l’algorithme 602 peuvent être identiques ou non aux conditions aux limites initiales, et dans de nombreux cas elles seront différentes. Chaque groupe de lignes de mots décalé optimal contient des lignes de mots groupées consécutivement appariées avec une tension de décalage optimale correspondante pour le groupe. Les groupes peuvent être triés consécutivement pour ce qui concerne leurs lignes de mots.
[0044] Chaque appariement de chaque groupe de lignes de mots décalé optimal à chaque tension de décalage optimale respective est sélectionné automatiquement par l’algorithme pour un décompte d’erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots décalés et les groupes en tant qu’ensemble. L’ensemble de groupes de lignes de mots décalés optimaux généré par l’algorithme 400 est généralement généré, au moins en partie, en se basant sur l’indexage itératif de la table 400 en s’appuyant sur l’emplacement de la ligne de mots et les valeurs de décalage pour chaque ensemble initial de groupes de lignes de mots afin de déterminer un meilleur décompte d’erreurs ajusté, ou normalisé, pour chaque groupe en sortie. Par conséquent, l’algorithme de regroupement de niveau de lecture 602 délivre en sortie des groupes de lignes de mots décalés optimaux (par exemple sous la forme de limites pour chaque groupe) et les décalages de niveau de lecture optimaux (ou niveaux de lecture) pour chaque groupe offrant la plus faible dégradation du taux d’erreurs binaires, par exemple en se basant sur la table d’entrée 400.
[0045] La Figure 7 représente un schéma de procédé d’un premier exemple de processus 700 de génération de groupes de lignes de mots décalés, conformément à divers aspects de la technologie selon l’invention. A des fins d’explication, les divers blocs de l’exemple de processus 700 sont écrits ici en se référant aux composants et/ou processus décrits ici. Le ou les plusieurs blocs du processus 700 peuvent être mis en œuvre, par exemple, par un ou plusieurs processeurs comprenant, par exemple, le contrôleur 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être mis en œuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins d’explication, les blocs de l’exemple de processus 700 sont décrits comme apparaissant en série ou de manière linéaire. De multiples blocs de l’exemple de processus 700 peuvent cependant apparaître en parallèle. En outre, il n’est pas nécessaire que les blocs de l’exemple de processus 700 soient exécutés dans l’ordre indiqué et/ou l’exécution d’un ou de plusieurs des blocs de l’exemple de processus 700 n’est pas nécessaire.
[0046] Conformément à divers modes de réalisation, les blocs du processus 700 sont mis en œuvre par l’algorithme de regroupement de niveau de lecture 602. A cet égard, les blocs du processus 700, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque niveau de lecture possible utilisé dans un dispositif à mémoire. Les blocs du processus 700 peuvent, par exemple, être exécutés pour générer des groupes de lignes de mots décalés optimaux pour RL1, RL2 et RL3 en se basant sur la table 400 et les conditions aux limites d’entrée. Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant des appariements de valeur de décalage différents peuvent être générés pour chaque niveau de lecture différent. De plus, les blocs du processus 700 peuvent être exécutés pour générer des groupes différents pour des blocs et/ou puces différents. Le processus 700 peut être mis en œuvre durant la configuration d’un dispositif de stockage, avant ou pendant son utilisation.
[0047] En général, pour chaque condition aux limites initiale, le processus 700 exécute un certain nombre d’étapes itératives afin de sélectionner automatiquement les limites de groupe optimales et les décalages de niveau de lecture optimal correspondants pour chaque groupe qui présente le plus faible accroissement du taux d’erreurs binaires global en comparaison du taux d’erreurs binaires optimal, tel qu’il est déterminé par une table d’entrée 400 correspondante. Pour un nombre donné de groupes candidats définis par les conditions aux limites, l’algorithme 600 peut sélectionner deux groupes consécutifs k et k+1 et, en commençant par le premier élément du premier groupe jusqu’au dernier élément du deuxième groupe, considérer toutes les paires de divisions consécutives possibles.
[0048] Dans l’exemple illustré, les lignes de mots d’un bloc sont divisées en groupes candidats (702). Dans un exemple dans lequel 128 lignes de mots sont utilisées, le bloc peut être divisé en quatre groupes candidats, avec le groupe 1 en tant que lignes de mots 0-15, le groupe 2 en tant que lignes de mots 16-31, le groupe 3 en tant que lignes de mots 32-63, le groupe 4 en tant que lignes de mots 64-79, etc. Comme décrit précédemment, la division des groupes peut être représentée sous forme de limites des groupes. Le processus 600 sélectionne alors un ensemble de groupes candidats consécutifs (704). Les groupes 1 et 2 peuvent être sélectionnés, par exemple, formant ainsi un ensemble de lignes de mots entre 0 et 31. Des permutations de multiples sous-groupes consécutifs de l’ensemble sont envisagées (706). Des permutations de deux sous-groupes sont envisagées dans divers exemples ici, un plus grand nombre de sous-groupes peut cependant être envisagé. Du fait que, dans l’exemple indiqué, les sous-groupes sont consécutifs et les lignes de mots à l’intérieur du groupe sont consécutives, le nombre maximum de permutations pour n lignes de mots sera n-1 permutations. Les permutations d’un exemple d’ensemble de lignes de mots couvrant 0-31 peuvent inclure { [0, 1-31], [0-1, 2-31], [0-3, 4-31] ... [0-30, 31] }.
[0049] L’exemple de processus 700 est représenté sous la forme d’un algorithme min-moyenne. Cela veut dire que pour chaque permutation possible, le décompte d’erreurs moyen est calculé en se basant sur une table d’erreurs correspondante et ensuite les sous-groupes au sein des permutations sont comparés pour sélectionner ceux ayant le plus petit décompte d’erreurs. A cet égard, les décomptes d’erreurs pour chaque sous-groupe sont calculés en utilisant tous les décalages de niveau de lecture disponibles en se basant sur la table de décomptes d’erreurs 400, et les niveaux de lecture qui offrent les plus petits décomptes d’erreurs pour chaque permutation sont déterminés. Dans l’exemple représenté, le processus 700 commence à (ou sélectionne) une première permutation (708) et ensuite, pour chaque sous-groupe au sein de la permutation (710), recherche le décompte d’erreurs total correspondant au sous-groupe pour chaque valeur de décalage représentée dans la table d’entrée 400 (712). Le décompte d’erreurs total peut être trouvé, par exemple, en indexant la table 400 sur une première valeur de décalage représentée dans la table 400 et chaque ligne de mots au sein d’un premier (z-1) sous-groupe pour déterminer les décomptes d’erreurs pour chaque ligne de mots au sein du sous-groupe, et ensuite en additionnant les décomptes d’erreurs déterminés. Les décomptes d’erreurs totaux pour les autres valeurs de décalage représentées par la table 400 sont déterminés de la même manière, et les sommes obtenues des décomptes d’erreurs sont comparées afin d’identifier la valeur de décalage ayant le plus petit décompte d’erreurs pour le sous-groupe. La valeur de décalage identifiée est ensuite sélectionnée et associée au sous-groupe (714). Le même processus est appliqué au sous-groupe suivant de la permutation.
[0050] Le processus précédent est répété (716), en redémarrant au bloc 708, jusqu’à ce qu’une valeur de décalage soit associée à chaque sous-groupe de chaque permutation, chaque sous-groupe étant également associé à un décompte d’erreurs total correspondant à la valeur de décalage associée. Le Tableau 1, ci-dessous, contient des exemples d’associations de décalage pour trois permutations de deux sous-groupes.
Tableau 1
Exemple d’associations de décalage pour les permutations sélectionnées [0051] Une fois que les valeurs de décalage sont associées à chaque sous-groupe de chaque permutation, le processus 700 sélectionne une permutation ayant le plus petit décompte d’erreurs total (718). Le plus petit décompte d’erreurs total peut être le décompte d’erreurs total des deux sous-groupes au sein de la permutation, ou encore du premier ou du deuxième sous-groupe, suivant la mise en œuvre de l’algorithme utilisé. Dans divers exemples, le décompte d’erreurs total cumulé entre toutes les lignes de mots (des deux sous-groupes) est utilisé pour comparer les permutations. Le processus 700 se poursuit en sélectionnant le premier sous-groupe et son décalage correspondant de la permutation sélectionnée en tant que paire optimale (720).
[0052] Le processus 700 continue en sélectionnant un troisième groupe candidat et répète les étapes précédentes avec le deuxième sous-groupe et le troisième groupe candidat. Dans l’exemple illustré, le processus 700 détermine s’il existe plus de groupes d’entrée candidats (722). S’il existe un prochain groupe candidat (par exemple les lignes de mots 32-47 dans l’exemple ci-dessus), le deuxième sous-groupe de la permutation identifiée au bloc 718 est alors sélectionné et remis en facteur dans l’algorithme avec le groupe candidat suivant (724). Dans l’exemple ci-dessus, si le premier sous-groupe contient les limites de ligne de mots de 0-22 générées en se basant sur des premier et deuxième groupes candidats (possédant les limites de ligne de mots 0-31), alors le deuxième sous-groupe possédant les lignes de mots 23-31 sera utilisé dans le prochain ensemble de groupes candidats conjointement avec la prochaine entrée de groupe candidat suivant dans l’algorithme. Par conséquent, dans l’exemple ci-dessus, l’ensemble de groupes candidats suivant inclurait un groupe candidat possédant les lignes de mots 23-31 et un groupe candidat possédant les lignes de mots 32-47. Si un groupe candidat suivant n’existe pas, alors l’algorithme peut sélectionner le deuxième
sous-groupe et son décalage correspondant de la permutation identifiée dans le bloc 718 en tant que paire optimale finale (726).
[0053] Le processus 700 peut être répété jusqu’à ce que les limites de groupe obtenues ne changent plus d’une itération à la suivante, ou jusqu’à avoir atteint un certain nombre d’itérations. Chaque itération peut être exécutée en utilisant les mêmes conditions aux limites initiales, les conditions aux limites de sortie produites à la fin du bloc 726 ou des conditions aux limites nouvelles/différentes. L’aléation peut également être introduite dans le processus 700. Il est possible, par exemple, de générer des permutations qui contiennent des sous-groupes qui ne se trouvent pas dans un quelconque ordre particulier. Un premier sous-groupe peut inclure les lignes de mots 13-31 et un deuxième sous-groupe peut inclure les lignes de mots 0-12.
[0054] Bien que l’exemple de processus 700 est représenté sous la forme d’un algorithme min-moyenne, d’autres types d’algorithmes peuvent être mis en œuvre. Un algorithme min-max peut être mis en œuvre, par exemple. Ainsi, le bloc 712 peut être modifié de manière à, pour chaque sous-groupe au sein de la permutation (710), rechercher le décompte d’erreurs maximum de toutes les lignes de mots dans le sous-groupe pour chaque valeur de décalage (712). Le décompte d’erreurs maximum peut être trouvé, par exemple, en indexant la table 400 d’après une première valeur de décalage et en comparant le décompte d’erreurs indexé par la première valeur de décalage et chaque ligne de mots dans le sous-groupe (par exemple les lignes de mots 0, 1, 2 et 3 dans le premier sous-groupe de permutation {[0-3], [4-31]}). Les décomptes d’erreurs maximums trouvés pour chacune des valeurs de décalage sont ensuite comparés et la valeur de décalage correspondant au minimum de tous les décomptes d’erreurs maximums est ensuite sélectionnée et associée au sous-groupe (714). Le même processus peut être appliqué au sous-groupe suivant de la permutation. Un avantage de la mise en œuvre par le processus 700 d’un algorithme min-max inclut le maintien des erreurs au-dessous d’une capacité maximale du codage de correction d’erreur utilisé par le dispositif de stockage pour corriger les erreurs.
[0055] Dans certains aspects, la technologie selon l’invention peut inclure la mise en œuvre de blocs ou d’étapes différents de ceux/celles développés ci-dessus en rapport avec l’exemple de processus 700. En utilisant les conditions aux limites initiales et la table 400, le processus 700 délivre en sortie des limites pour des groupes de lignes de mots décalés optimaux, y compris les niveaux de lecture optimaux pour chaque groupe offrant, par exemple, le moins de dégradation du taux d’erreurs binaires pour chaque ligne de mots dans chaque groupe par rapport aux valeurs optimales dans la table 400.
[0056] La Figure 8 représente un schéma de procédé d’un deuxième exemple de processus 800 de génération de groupes de lignes de mots décalés, conformément à divers aspects de la technologie selon l’invention. A des fins d’explication, les divers blocs de l’exemple de processus 800 sont décrits en se référant aux composants et/ou processus décrits ici. Le ou les plusieurs blocs du processus 800 peuvent être mis en œuvre, par exemple, par un ou plusieurs processeurs comprenant, par exemple, le contrôleur de mémoire flash 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être mis en œuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins d’explication, les blocs de l’exemple de processus 800 sont décrits comme apparaissant en série ou de manière linéaire. De multiples blocs de l’exemple de processus 800 peuvent cependant apparaître en parallèle. En outre, il n’est pas nécessaire que les blocs de l’exemple de processus 800 soient exécutés dans l’ordre indiqué et/ou l’exécution d’un ou de plusieurs des blocs de l’exemple de processus 800 n’est pas nécessaire.
[0057] Conformément à divers modes de réalisation, les blocs du processus 800 correspondent à, ou complètent, un ou plusieurs des blocs du processus 700. A cet égard, une portion des blocs du processus 800 peut être exécutée par l’algorithme 600. Les blocs du processus 800, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque niveau de lecture possible utilisé dans un dispositif à mémoire. Les blocs du processus 800 peuvent être exécutés, par exemple, en vue de générer des groupes de lignes de mots décalés optimaux pour RL1, RL2 et RL3 en se basant sur la table 400 et les conditions aux limites d’entrée. Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant des appariements de valeur de décalage différents peuvent être générés pour chaque niveau de lecture différent. De plus, les blocs du processus 800 peuvent être exécutés pour générer des groupes différents pour des blocs et/ou puces différents. Le processus 800 peut être mis en œuvre durant la configuration d’un dispositif de stockage, avant ou pendant son utilisation.
[0058] Dans l’exemple illustré, un système conforme à la technologie selon l’invention fournit une tension de niveau de lecture suffisante pour lire une majorité de cellules de mémoire qui sont programmées à un niveau de programmation prédéterminé (802). Dans certains modes de réalisation, chaque cellule de mémoire est une cellule de mémoire non-volatile multiniveau configurée pour être programmée à un niveau de programmation parmi quatre. Les premier et quatrième niveaux de programmation, par exemple, peuvent être associés à des premières valeurs de bit (par exemple représentatives d’un 0 ou d’un 1 binaire d’un bit de poids fort) et les deuxième et troisième niveaux de programmation peuvent être associés aux deuxièmes valeurs de bit (par exemple représentatives d’un 0 ou d’un 1 binaire d’un bit de poids faible). Comme décrit précédemment, lorsqu’une tension est appliquée à une cellule de mémoire à un niveau de lecture particulier (par exemple RL1, RL2, RL3) correspondant au niveau de programme de la cellule, la cellule conduira en indiquant le niveau de programme.
[0059] Le système divise une pluralité de lignes de mots de mémoire en une pluralité de groupes de lignes de mots optimaux, chaque groupe de lignes de mots étant associé à un parmi une pluralité de décalages de niveau de lecture normalisés (804). Chacun des groupes de lignes de mots optimaux est constitué de lignes de mots triées dans l’ordre consécutif d’un bloc de mémoire, les lignes de mots d’un premier des groupes précédant ici les lignes de mots d’un deuxième des groupes. A cet égard, chaque décalage est normalisé pour un meilleur taux d’erreurs résultant de l’utilisation du décalage avec la tension de niveau de lecture pour lire les lignes de mots d’un groupe de lignes de mots correspondant. Dans certains modes de réalisation, la division de la pluralité de lignes de mots en les groupes de lignes de mots optimaux inclut la sélection des permutations respectives des sous-groupes de ligne de mots consécutifs à partir d’un ensemble prédéterminé de groupes candidats de lignes de mots en se basant sur un décompte d’erreurs total minimum associé aux permutations respectives (par exemple les blocs 702-706 de la Figure 7). Ainsi, chacun des sous-groupes de lignes de mots consécutifs est associé à un décalage de niveau de lecture correspondant à un minimum des décomptes d’erreurs associés à une pluralité de décalages de niveau de lecture possibles.
[0060] En se référant à la Figure 7 en tant qu’exemple, les premier et deuxième groupes de lignes de mots consécutifs peuvent être sélectionnés à partir de l’ensemble prédéterminé de groupes de lignes de mots candidats (704). Comme décrit précédemment, les groupes de lignes de mots candidats peuvent être basés sur les conditions aux limites initiales. Une pluralité de permutations de sous-groupe peuvent ensuite être réalisées pour les premier et deuxième groupes consécutifs de lignes de mots (706) sélectionnés, chaque permutation de sous-groupe comprenant de multiples sous-groupes de lignes de mots consécutifs de lignes de mots couvrant les premier et deuxième groupes de lignes de mots consécutifs. Pour chaque sous-groupe de lignes de mots d’une permutation de sous-groupe respective, un décalage de niveau de lecture respectif peut être sélectionné parmi les décalages de niveau de lecture possibles, de telle sorte que lorsqu’il est utilisé avec la tension de niveau de lecture pour lire les lignes de mots dans le sous-groupe de lignes de mots, le décalage de niveau de lecture respectif génère le plus petit décompte d’erreurs pour le sous-groupe de lignes de mots (714). La pluralité de permutations de sous-groupe ayant un décompte d’erreurs total le plus bas pour les sous-groupes de lignes de mots consécutifs dans la permutation de sous-groupe peut être sélectionnée (718). Par conséquent, la pluralité de groupes de lignes de mots peut être basée au moins en partie sur un ou plusieurs décalages de niveau de lecture correspondant à la pluralité de permutations de sous-groupe sélectionnée.
[0061] Dans certains modes de réalisation, la division de la pluralité de lignes de mots en la pluralité de groupes de lignes de mots comprend la sélection des permutations respectives des sous-groupes de lignes de mots consécutifs depuis l’intérieur d’un ensemble prédéterminé de groupes de lignes de mots candidats en se basant sur un minimum de décomptes d’erreurs maximums associés aux permutations respectives, chacun des sous-groupes de lignes de mots consécutifs étant associé à un décalage de niveau de lecture correspondant à un minimum des décomptes d’erreurs maximums associés à une pluralité de décalages de niveau de lecture possibles. A titre d’exemple, pour chaque sous-groupe de lignes de mots, le système peut déterminer un décompte d’erreurs maximum généré pour une ligne de mots dans le sous-groupe de lignes de mots lorsque chacun des décalages de niveau de lecture possibles est utilisé avec la tension de niveau de lecture pour lire les lignes de mots du sous-groupe de lignes de mots. Un décalage de niveau de lecture correspondant au minimum des nombres maximums déterminés peut ensuite être sélectionné à partir de la pluralité de décalages de niveau de lecture possibles. Pour chaque permutation de sous-groupe, un décompte d’erreurs maximum des décalages de niveau de lecture sélectionnés correspondant aux sous-groupes de lignes de mots de la permutation de sous-groupe est déterminé. La permutation de sous-groupe ayant le minimum des décomptes d’erreurs maximums déterminés pour la permutation de sous-groupes est ensuite sélectionnée (voir par exemple 718).
[0062] Dans une ou plusieurs des mises en œuvre ci-dessus, chaque sous-groupe de lignes de mots consécutif d’une permutation respective peut être généré en se basant sur un entrelacement de lignes de mots consécutives au sein de l’ensemble prédéterminé de groupes de lignes de mots candidats. L’entrelacement peut être utilisé pour introduire l’aléation. Un premier sous-groupe de lignes de mots dans une permutation de sous-groupe peut contenir, par exemple, les lignes de mots 14-31, suivi par un deuxième sous-groupe qui contient les lignes de mots 0-13. Dans une permutation de sous-groupe qui contient trois sous-groupes, un premier sous-groupe de lignes de mots de la permutation peut contenir les lignes de mots 4-6, un deuxième sous-groupe de lignes de mots de la permutation peut contenir les lignes de mots 0-3 et un troisième sous-groupe de lignes de mots de la permutation peut contenir les lignes de mots 7-32.
[0063] De plus, chaque décalage de niveau de lecture normalisé respectif peut être généré (par exemple en utilisant l’un quelconque des modes de réalisation ci-dessus) en se basant sur l’indexage d’une table des taux d’erreurs, chaque taux d’erreurs dans la table étant indexé sur la base d’un décalage de niveau de lecture respectif et d’une ligne de mots respective. Ainsi, la table peut être indexée par une pluralité de lignes de mots consécutives afin d’identifier les décalages de niveau de lecture correspondants ayant un taux d’erreurs le plus faible pour chaque ligne de mots consécutive et de déterminer un groupe de lignes de mots consécutives qui, lorsqu’il est associé à un décalage identifié unique, présente un taux d’erreurs minimum possible pour le groupe de lignes de mots consécutives.
[0064] Une fois que les groupes de lignes de mots ont été générés, la pluralité de décalages de niveau de lecture normalisés sont associés à leurs groupes de lignes de mots optimaux respectifs et stocks pour être utilisés dans la lecture des cellules de mémoire pendant le fonctionnement du dispositif de stockage (806). À cet égard, le processus précédent sélectionne automatiquement les limites de groupe optimales et les décalages de niveau de lecture optimaux correspondants pour chaque groupe qui présente la plus petite augmentation du taux d’erreurs binaires global en comparaison du taux d’erreurs binaires optimal.
[0065] Un grand nombre des caractéristiques décrites ci-dessus des exemples de processus 700 et 800 ainsi que les caractéristiques et applications apparentées peuvent être mises en œuvre sous la forme de processus logiciels qui sont spécifiés sous la forme d’un ensemble d’instructions enregistré sur un support de stockage lisible par ordinateur (également appelé support lisible par ordinateur). Lorsque ces instructions sont exécutées par une ou plusieurs unités de traitement (par exemple un ou plusieurs processeurs, noyaux de processeurs ou autres unités de traitement), elles amènent les unités de traitement à réaliser les actions indiquées dans les instructions. Des exemples de supports lisibles par ordinateur incluent, sans exhaustivité, les CD-ROM, les disques à mémoire flash, les mémoires RAM, les disques durs, les EPROM, etc. Les supports lisibles par ordinateur n’incluent pas les ondes porteuses ni les signaux électroniques transmis sans fil ou sur des connexions filaires.
[0066] Dans les applications de contrôle de parité à faible densité (LDPC), un logarithme du rapport de vraisemblance (LLR) peut inclure le logarithme d’un rapport entre la probabilité pour qu’un bit soit à « 0 » ou à « 1 ». Le LLR peut couvrir une plage prédéterminée. Dans certains modes de réalisation par exemple, un LLR peut couvrir la plage de -255 à +255. Un LLR peut généralement indiquer qu’un signal lu de la cellule de mémoire est vraisemblablement un bit à 0, et un LLR négatif peut généralement indiquer qu’un signal lu de la cellule de mémoire est vraisemblablement un bit à 1. Le LLR peut être associé à la valeur du bit lue auprès de la cellule de mémoire. Un bit associé à un LLR égal à 5 peut être un zéro binaire avec plus de vraisemblance qu’un bit auquel est attribué un LLR égal à 1. Un bit auquel est attribué un LLR égal à 0 peut être un 0 ou un 1 binaire avec la même vraisemblance.
[0067] Si, à un certain niveau de lecture, un bit à 0 est lu depuis une cellule de mémoire, un LLR positif peut alors être attribué. Si un bit à 1 est lu, alors une valeur négative peut être attribuée. Dans une cellule de mémoire multiniveau comprenant deux bits, il existe de multiples nivaux potentiels de distribution de cellule (par exemple L0, Ll, L2 et L3). La distinction d’un 1 binaire et d’un 0 binaire dans une lecture d’un MSB peut nécessiter des déterminations parmi de multiples limites de niveau de lecture. Dans l’exemple de la Figure 1, la distinction entre 0 et un 1 nécessite de déterminer si la cellule conduit à l’intérieur des deux distributions du centre Ll et L2 (par exemple pour un Ox binaire), ou dans les distributions extrêmes L0 et L3 (par exemple pour un lx binaire). Par conséquent, de multiples niveaux de lecture peuvent intervenir (par exemple RL0 et RL2) pour effectuer cette détermination.
[0068] La Figure 9 représente un exemple de canal de mémoire flash 900 modélisé sous la forme d’un canal sans mémoire discret (DMC) avec des entrées binaires et des sorties Blaires, conformément à des aspects de la technologie selon l’invention. Dans cet exemple, les sorties K-aires correspondent aux K régions de programme de cellule (bacs) qui peuvent être identifiées avec de multiples lectures. Le modèle du canal 900 fournit une définition pour un logarithme du rapport de vraisemblance (LLR). En utilisant ce modèle, le LLR peut être défini comme suit :
(D
[0069] Dans certains modes de réalisation, il peut être supposé que toutes les entrées ont la même probabilité ; dans ce cas, l’expression de l’équation (1) devient : (2)
[0070] En se référant à la Figure 2A, si K=2 pour un page LSB lue, les K régions sont désignées sous la forme relaya.} , τ τ i > · , . . j & i i o’ 1 j, je LLR pour la région ai de la Figure 2A étant donne par : (3)
[0071] En se référant à la Figure 2B, dans le cas où K=7 pour une page MSB lue, les régions peuvent être désignées sous la forme : (4)
[0072] Le niveau de lecture peut être réglé avant chacune des N lectures. Une table de conversion peut être utilisée pour déterminer le nombre de niveaux de lecture et les valeurs des niveaux de lecture en se basant sur le nombre de bacs à utiliser lors de la détermination des valeurs de LLR pour les cellules de mémoire. Un dispositif à mémoire flash peut recevoir une instruction pour lire la page LSB ou MSB en utilisant les niveaux de lecture stockés. Comme décrit précédemment, pour créer les bacs, un premier niveau de lecture est utilisé pour déterminer une valeur putative des cellules et ensuite de multiples lectures (par exemple une série de lecture) sont effectuées pour déterminer les valeurs LLR associées. Dans certains aspects, les niveaux de lecture sont déterminés en faisant varier le premier niveau de lecture d’un décalage prédéterminé (par exemple stocké) associé à un bac respectif. Ce décalage peut être différent des décalages qui sont déterminés par la technologie selon l’invention.
[0073] Les transitions dans les données lues sont analysées en vue de déterminer quelle région contient le seuil de tension (Vt) de chaque cellule de mémoire. Par conséquent, le premier niveau de lecture peut être stocké (par exemple temporairement) et une région peut être déterminée en se basant sur une valeur binaire (par exemple positive ou négative) lue depuis la cellule de mémoire, puis les différences entre le premier niveau de lecture et les niveaux de lecture suivants initiés par un contrôleur de mémoire. Les niveaux de lecture peuvent ou non être modifiés dans un ordre prédéterminé. Si les niveaux de lecture sont modifiés dans un ordre prescrit, seul le niveau de lecture précédent peut être stocké et la région de programme de la cellule déterminée à chaque lecture suivante. Si toutes les lectures sont effectuées (par exemple immédiatement), une table de conversion peut être utilisée pour déterminer les bacs en se basant sur les valeurs binaires reçues. Une fois déterminé, un numéro de bac peut être déterminé pour chaque région de programme de la cellule. Le LLR attribué au bac peut être appliqué à toutes les cellules se trouvant à l’intérieur du bac. Pour chaque cellule de mémoire, le numéro de bac est mis en correspondance avec une valeur de LLR dans une table de conversion.
[0074] Conformément à ce qui précède, pour un niveau de lecture primaire (par exemple RL1, RL2 ouRL3), le nombre de bacs sera égal au nombre de lectures plus un. Par conséquent, une table générée pour les valeurs de LLR peut comprendre 8 colonnes correspondant aux 8 bacs. Dans cet exemple, une page MSB peut comprendre deux lignes, comme indiqué dans le Tableau 2 :
Tableau 2 [0075] L’emplacement du niveau de lecture primaire par rapport au Tableau 2 se trouve entre le bac 3 et le bac 4. Une table générée pour la page LSB peut ne nécessiter qu’une seule ligne, comme indiqué dans le Tableau 3 :
Tableau 3
[0076] Comme décrit précédemment, des décalages (ou valeurs de polarisation) peuvent être mis en œuvre en association avec les niveaux de lecture primaires (par exemple RL1, RL2, RL3) afin d’obtenir un niveau de lecture optimal ayant un faible taux d’erreurs binaires. Les valeurs de décalage peuvent être définies globalement, par exemple pour une puce ou un bloc, ou individuellement pour chaque ligne de mots. Chaque ligne de mots peut posséder des caractéristiques différentes et/ou uniques qui amènent chaque ligne de mots à présenter plus ou moins d’erreurs durant les opérations de lecture. Par conséquent, en vue d’obtenir le meilleur taux d’erreurs - le taux d’erreurs minimum - le niveau de lecture optimal doit être déterminé. Dans certains aspects, les niveaux de lecture optimaux pour une ligne de mots peuvent être déterminés par des données obtenues en laboratoire. Dans divers exemples décrits ici, la ligne de mots peut être lue à des décalages différents et le décompte d’erreurs pour chaque lecture placé dans une table en vue d’une comparaison ultérieure. Bien que ces données obtenues en laboratoire puissent être utiles pour une portion du cycle de vie de la mémoire, les caractéristiques des cellules de mémoire changent au cours du temps et les données ne seront peut-être plus très utiles pour obtenir le meilleur taux d’erreurs après une période donnée du cycle de vie des cellules de mémoire.
[0077] Différentes tables 400, par exemple, peuvent être stockées dans la mémoire pour chaque niveau de lecture (par exemple RL1, RL2 ou RL3) et pour de multiples périodes différentes dans la durée de vue attendue de la mémoire, de sorte qu’un dispositif peut obtenir un taux d’erreurs binaires quasi-optimal pendant toute sa durée de vie attendue. Les données obtenues en laboratoire peuvent cependant ne pas s’appliquer à chaque puce, à chaque bloc ou même à chaque forme de dégradation qui peut être subie par les lignes de mots ou cellules de mémoire individuelles pendant la durée de vie du dispositif. Par conséquent, la technologie selon l’invention fournit un mécanisme de calibrage dynamique (par exemple au moment de l’exécution) des niveaux de lecture en estimant des niveaux de lecture et/ou décalages optimaux pendant le fonctionnement du dispositif à mémoire.
[0078] Les Figures 10A à 10C représentent un exemple de graphes d’interpolation linéaire pour le calibrage d’exemples de niveaux de lecture et/ou de décalages de niveau de lecture, conformément à divers aspects de la technologie selon l’invention. Les graphes sont représentatifs de la manière dont un algorithme de la technologie selon l’invention détermine un nouveau décalage calibré pour les opérations de lecture. En se référant aux tableaux 2 et 3 ci-dessus, chaque graphe trace une valeur de LLR calculée par rapport aux valeurs de décalage prédéterminées associées à chaque bac. Par conséquent, l’axe X représente une plage de valeurs de décalage négatives et positives par rapport à un décalage nul non calibré 902. Dans l’exemple représenté, le décalage non calibré 1002 (marqué « 0 ») correspond au niveau de lecture « central » correspondant (par exemple RL1, RL2 ou RL3) utilisé pour déterminer initialement le niveau programmé d’une cellule de mémoire, avant qu’elle soit relue par les niveaux de lecture « supplémentaires » utilisés pour générer les bacs.
[0079] Chacun des bacs couvre 6 tops sur l’axe X, conformément à un montant fixe. Dans l’exemple représenté, les décalages sont espacés uniformément de 6 tops. Les décalages 0 à +6 sur l’axe X correspondent au bac 4, les décalages +7 à +12 correspondent au bac 5, les décalages +13 à +18 correspondent au bac 6 et les décalages +19 à +24 correspondent au bac 7. De même, les décalages 0 à -6 sur l’axe X correspondent au bac 3, les décalages -7 à -12 correspondent au bac 2, les décalages -13 à -18 correspondent au bac 2 et les décalages -19 à -24 correspondent au bac 0. Les valeurs de LLR correspondantes placées dans les bacs sont respectivement tracées au niveau des valeurs de décalage -21, -15, -9, -3, +3, +9, +15 et +21. Ces valeurs de décalage sont uniquement fournies à titre d’exemple et d’autres valeurs de décalage peuvent être utilisées, conformément au mode de réalisation particulier de la mémoire.
[0080] Une fois que les cellules de mémoire d’une ligne de mots ou d’un bloc sont lues et les LLR déterminés, la technologie selon l’invention attribue les LLR aux bacs pour chacun des RL1, RL2 et RL3 dans une table, comme indiqué dans les Tableaux 2 et 3 ci-dessus. L’interpolation linéaire des valeurs de LLR entre les bacs correspondants (par exemple 0-7) est ensuite utilisée pour déterminer un point de passage par zéro (1004) des valeurs de LLR représentées. A cet égard, les valeurs de LLR dans une ligne de la table sont balayées afin de déterminer où se trouve le point de passage par zéro. En considération de la Figure 10A et du Tableau 1 ci-dessus, le point de passage par zéro (904) pour RL1 se trouve entre le bac 5 et le bac 6, qui possèdent respectivement les valeurs de LLR -38 et 5. Une valeur de décalage (1006) sur l’axe X correspondant au point de passage par zéro (1004) est sélectionnée en tant que valeur de décalage calibrée pour le niveau de lecture correspondant (par exemple RL1, RL2 ou RL3). Dans la Figure 10A, la valeur de décalage calibrée est déterminée être approximativement égale à +14 tops (par exemple +175mV, chaque top étant égal à 25mV). Dans la Figure 10B, la valeur de décalage calibrée est déterminée être approximativement égale à +12 tops. Dans la Figure 10C, la valeur de décalage calibrée est déterminée être approximativement égale à +10 tops.
[0081] Une valeur de décalage calibrée peut être déterminée pour chaque niveau de lecture (par exemple RL1, RL2 ou RL3), comme indiqué ci-dessus. Dans certains modes de réalisation, les valeurs de décalage calibrées peuvent remplacer les valeurs de décalage existantes pour des lignes de mots individuelles ou être utilisées pour les ajuster, ou globalement pour un bloc ou une ou plusieurs puces. Dans certains modes de réalisation, la tension de décalage calibrée remplace un décalage de niveau de lecture précédemment associé à un groupe de lignes de mots décalé déterminé par les processus 700 et/ou 800, par exemple. Dans certains aspects, le décalage de niveau de lecture associé précédemment sera ajusté par la tension calibrée.
[0082] Dans de tels cas, il n’est pas nécessaire de déterminer les tensions de décalage calibrées en se basant sur les valeurs de LLR pour toutes les cellules de mémoire d’un bloc, d’une puce ou d’un groupe, mais elles peuvent plutôt être déterminées en se basant sur les valeurs de LLR attribuées aux bacs en s’appuyant sur une portée d’une ou de plusieurs lignes de mots sélectionnées, portions d’une ligne de mots, un ou plusieurs mots de code et similaire. Dans certains modes de réalisation, les valeurs de décalage calibrées peuvent être stockées en plus des décalages déterminés pour un groupe de lignes de mots et additionnées au moment d’une opération de lecture au décalage attribué au groupe de lignes de mots et à tout décalage global éventuellement disponible.
[0083] Les niveaux de lecture peuvent être calibrés en utilisant la procédure ci-dessus à des points spécifiques au cours de la durée de vie attendue d’un dispositif à mémoire flash. La procédure de calibrage peut être exécutée, par exemple, lorsqu’un bloc a été soumis à un nombre prédéterminé de cycles de programmation/effacement. La procédure de calibrage peut être exécutée dans un « mode héroïque », par exemple en réponse à un décompte d’erreurs produit en association avec une opération de lecture satisfaisant à un seuil prédéterminé de décompte d’erreurs. Le seuil prédéterminé peut être défini en considération d’un ou de plusieurs mots de code, lignes de mots, blocs ou une combinaison de ceux-ci, pour une opération de lecture unique ou pour de multiples opérations de lecture au cours d’une période. Dans certains modes de réalisation, le seuil prédéterminé des erreurs peut inclure l’échec de la lecture ou du décodage d’une ou de plusieurs cellules de mémoire qui font l’objet de l’opération de lecture. À titre d’exemple, le décompte d’erreurs produites peut être supérieur à ce que peut gérer le schéma d’ECC associé au dispositif à mémoire flash.
[0084] En réponse à l’identification d’une ligne de mots associée à un décompte d’erreurs excessivement élevé (satisfaisant au seuil), un contrôleur de mémoire flash ou un composant de celui-ci qui met en œuvre la technologie selon l’invention peut lire les cellules de mémoire dans une ou plusieurs lignes de mots cousines de la ligne de mots identifiée afin de générer les valeurs de LLR pour les bacs respectifs, et déterminer une nouvelle valeur de décalage calibrée pour la lecture des lignes de mots en utilisant le processus d’interpolation linéaire du LLR précédent. Si les lignes de mots voisines peuvent être lues et que leur décodage réussit, la nouvelle valeur de décalage calibrée peut alors être utilisée dans une tentative de récupération d’une lecture des cellules de mémoire dans la ligne de mots identifiée. La ligne de mots identifiée peut alors être relue en utilisant le niveau de lecture réglé à (par exemple ajusté par) la valeur de décalage calibrée.
[0085] De même, un mot de code (par exemple couvrant des lignes de mots ou une portion d’une ligne de mots) soumis à une opération de lecture peut être identifié comme possédant un taux d’erreurs qui satisfait à un seuil d’erreur, par exemple si toutes les tentatives de décodage du mot de code peuvent avoir échoué. En réponse à l’identification du mot de code, le contrôleur de mémoire flash ou son composant qui met en œuvre la technologie selon l’invention peut lire les cellules de mémoire dans un ou plusieurs autres mots de code voisins du mode de code identifié afin de générer les valeurs de LLR et déterminer la nouvelle valeur de décalage calibrée en utilisant le processus d’interpolation du LLR précédent. Si les mots de code voisins peuvent être lus et que leur décodage réussit, la nouvelle valeur de décalage calibrée peut alors être utilisée dans une tentative de récupération du mot de code ayant échoué. Le mode de code identifié peut ensuite être relu en utilisant le niveau de lecture réglé à (par exemple ajusté par) la valeur de décalage calibrée.
Tableau 4
[0086] Le Tableau 4 ci-dessus représente les valeurs de LLR mises à jour pour chaque bac, après le calibrage des décalages de niveau de lecture respectifs correspondant aux valeurs de LLR des Tableaux 2 et 3. Comme permet de le constater le Tableau 4, le point de passage par zéro (1004) se trouve à présent entre les bacs 3 et 4 pour les trois niveaux de lecture. Les Figures 10D à 10F représentent un exemple de graphes d’interpolation linéaire pour le recalibrage d’exemples de niveaux de lecture et/ou de décalages de niveau de lecture, conformément à divers aspects de la technologie selon l’invention. Après avoir effectué l’ajustement des niveaux de lecture conformément au processus décrit ci-dessus en rapport avec les Figures 10A à 10C, le ou les niveaux de lecture ajustés peuvent ensuite être recalibrés afin de vérifier ou affiner le calibrage en utilisant le même processus. Les valeurs de LLR résultantes sont supposées converger éventuellement vers un décalage nul, comme indiqué par le Tableau 4 et les graphes des Figures 10D à 10F.
[0087] Les Figures 11A et 11B représentent des exemples de modes d’optimisation du niveau de lecture, conformément à divers aspects de la technologie selon l’invention. L’architecture de la mémoire flash peut être configurée de telle sorte qu’un sous-ensemble de données contient de multiples canaux 1102 de mémoire, chaque canal 1102 contenant par exemple un ou plusieurs blocs de mémoire 1104. Chaque bloc 1104 adressable par chaque canal 1102 est en outre adressable par les pages 1106. Dans les exemples représentés, chaque canal adresse un bloc de mémoire unique, chaque bloc comprenant 256 pages (par exemple les pages 0-255). Comme décrit précédemment, une page 1106 peut être représentée physiquement par une ligne de mots, les termes page et ligne de mots peuvent de ce fait être utilisés de manière interchangeable.
[0088] Dans certains modes de réalisation, comme illustré par la Figure 11 A, une tension de décalage peut être associée globalement 1108 à tous les blocs et à toutes les pages adressables par les canaux de mémoire. Dans ce mode de réalisation, la même valeur de décalage est un décalage « global » utilisé lors de la lecture des cellules de mémoire de toute page ou tout bloc associé à la pluralité de canaux de mémoire. Par conséquent, le décalage global peut être calibré en utilisant l’une quelconque des techniques décrites ici. Dans certains modes de réalisation, comme illustré par la Figure 1 IB, de multiples décalages 1110 peuvent être utilisés, chaque valeur de décalage étant associée à chaque page (ligne de mots), par exemple en associant chaque valeur de décalage à l’adresse d’une page. La même valeur de décalage associée à l’adresse d’une page peut être utilisée pour chaque page parmi tous les canaux de mémoire. Ces « décalages de page » peuvent être relatifs aux décalages globaux en ce qu’un décalage global sera appliqué (et ajusté suivant le besoin) à toutes les pages, et les décalages globaux seront modifiés par les décalages de page correspondants à mesure que chaque page est lue.
[0089] La Figure 12 représente un schéma de procédé d’un exemple de processus 1200 de calibrage des niveaux de lecture pour la lecture d’une pluralité de cellules de mémoire dans un dispositif de stockage, conformément à divers aspects de la technologie selon l’invention. A des fins d’explication, les divers blocs de l’exemple de processus 1200 sont décrits ici en se référant aux composants et/ou aux processus décrits ici. Le ou les plusieurs blocs du processus 1200 peuvent être mis en œuvre, par exemple, par un ou plusieurs processeurs comprenant, par exemple, le contrôleur de mémoire flash 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être mis en œuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins d’explication, les blocs de l’exemple de processus 1200 sont décrits comme apparaissant en série, ou de manière linéaire. De multiples blocs de l’exemple de processus 1200 peuvent cependant apparaître en parallèle. En outre, il n’est pas nécessaire que les blocs de l’exemple de processus 1200 soient exécutés dans l’ordre indiqué et/ou l’exécution d’un ou de plusieurs des blocs de l’exemple de processus 1200 n’est pas nécessaire.
[0090] Conformément à divers modes de réalisation, les blocs du processus 1200 correspondent ou complètent le processus décrit en rapport avec la Figure 9 et les Figures 10A à 10F. Les blocs du processus 1200, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque niveau de lecture possible utilisé dans un dispositif à mémoire. Les blocs du processus 1200 peuvent être exécutés, par exemple, pour générer, ajuster et/ou calibrer des lignes de mots ou des groupes de lignes de mots décalés pour RL1, RL2 et RL3. Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant des appariements de valeur de décalage différents peuvent être générés pour chaque niveau de lecture différent. De plus, les blocs du processus 1200 peuvent être exécutés pour générer, ajuster et/ou calibrer des décalages pour différents groupes, différents blocs et/ou puces. Le processus 1200 peut être mis en œuvre pendant la configuration d’un dispositif de stockage, avant ou pendant son utilisation.
[0091] Dans l’exemple représenté, un système conforme à la technologie selon l’invention fournit une tension de niveau de lecture suffisante pour lire une majorité des cellules de mémoire qui sont programmées à un niveau de programmation prédéterminé (1202). Comme décrit précédemment, les cellules de mémoire peuvent être des cellules de mémoire non-volatile mononiveau ou multiniveau configurées pour être programmées à un à quatre niveaux de programmation. Les premier et quatrième niveaux de programmation, par exemple, peuvent être associés à des premières valeurs binaires (par exemple représentatives d’un 0 ou d’un 1 binaire d’un bit de poids fort) et les deuxième et troisième niveaux de programmation peuvent être associés aux deuxièmes valeurs binaires (par exemple représentatives d’un 0 ou d’un 1 binaire d’un bit de poids faible). Comme décrit précédemment, lorsque la tension est appliquée à une cellule de mémoire à un niveau de lecture particulier (par exemple RL1, RL2, RL3) correspondant au niveau de programme de la cellule, la cellule conduira en indiquant le niveau de programme.
[0092] Après une période prédéterminée dans un cycle de vie d’un dispositif à mémoire, des valeurs de fiabilité correspondant à une pluralité de lectures d’une ou de plusieurs des cellules de mémoire sont générées (1204). Dans cet exemple, chacune des lectures emploie une variation de la tension de niveau de lecture, et chaque valeur de fiabilité générée indique une probabilité pour qu’un état de sortie des cellules de mémoire soit égal à un état programmé prédéterminé, une plage de valeurs de fiabilité couvrant des valeurs négatives et positives. Comme décrit précédemment, pour la pluralité de valeurs de fiabilité, une valeur de fiabilité positive peut indiquer qu’un état de sortie correspondant est un 0 binaire, et une valeur de fiabilité négative peut indiquer qu’un état de sortie correspondant est un 1 binaire.
[0093] Après avoir généré les valeurs de fiabilité, une tension de décalage est identifiée, le décalage par rapport à la tension de niveau de lecture (1206). Dans les exemples représentés des Figures 10A à 10C, le décalage correspond à un point de passage par zéro 1004 dans la plage des valeurs de fiabilité (par exemple des Tableaux 2 et/ou 3).
[0094] Après l’identification de la tension de décalage (par exemple pour le niveau de lecture), la tension de niveau de lecture est réglée à une tension calibrée en se basant sur la tension de décalage (1208). Conformément à divers aspects de la technologie selon l’invention, le réglage de la tension de niveau de lecture à la tension calibrée peut inclure, par exemple en association avec une opération de lecture, la récupération de la tension de décalage identifiée auprès d’un emplacement stocké et le réglage de la tension de niveau de lecture par la tension de décalage identifiée afin de lire les cellules de mémoire. Dans certains modes de réalisation, l’opération de lecture est effectuée sur les cellules de mémoire parmi une pluralité de canaux de mémoire, chaque canal étant configuré pour adresser un ou plusieurs blocs de mémoire.
[0095] En se référant à la Figure 11 A, la tension de décalage identifiée peut être associée à tous les blocs et toutes les pages adressables par la pluralité de canaux de mémoire de sorte que le niveau de lecture est ajusté par la tension de décalage identifiée lors de la lecture des cellules de mémoire d’une page ou d’un bloc quelconque associé à la pluralité de canaux de mémoire. En se référant à la Figure 1 IB, la tension de décalage identifiée peut être associée à l’adresse d’une page et le niveau de lecture ajusté par la tension de décalage identifiée lors de la lecture des cellules de mémoire associées à l’adresse de page par le biais de l’un quelconque de la pluralité de canaux de mémoire, chaque adresse de page adressable par le biais de la pluralité de canaux de mémoire étant associée à une tension de décalage différente.
[0096] De plus, le processus de calibrage peut être appliqué pour mettre à jour les décalages pour les lignes de mots individuelles ou pour mettre à jour les décalages associés à des groupes de lignes de mots optimaux. Une pluralité de décalages de niveau de lecture prédéterminés peuvent être stockés, par exemple, chaque décalage de niveau de lecture prédéterminé étant associé à un groupe de lignes de mots pour une utilisation avec une tension de niveau de lecture respective lors de la lecture des cellules de mémoire dans le groupe. Pour un groupe de lignes de mots respectif, le décalage de niveau de lecture précédemment associé au groupe peut être mis à jour avec la tension de décalage identifiée. Par conséquent, en association avec une opération de lecture, le décalage de niveau de lecture mise à jour peut être récupéré depuis son emplacement stocké (par exemple une table de conversion) pour régler la tension de niveau de lecture à la tension calibrée et la nouvelle tension calibrée utilisée pour lire le groupe de lignes de mots respectif.
[0097] La Figure 13 représente un schéma de procédé d’un exemple de processus 1300 de calibrage des niveaux de lecture pour la récupération de données, conformément à divers aspects de la technologie selon l’invention. Le processus de calibrage 1200 précédent peut en outre être appliqué pour récupérer des données qui ne peuvent pas être lues ou décodées. Dans l’exemple de mode de réalisation représenté dans la Figure 13, pendant une opération de lecture, une ou plusieurs lignes de mots ou mots de code sont identifiés comme étant associés à un taux d’erreurs qui satisfait à un seuil d’erreur (1302). La lecture d’une ligne de mots ou d’un mot de code, par exemple, peut produire un décompte d’erreurs de données trop élevé pour pouvoir être géré par le codage de correction d’erreur. A cet égard, l’opération de lecture peut ne pas être capable de lire les données stockées au niveau de l’une ou des plusieurs lignes de mots identifiées.
[0098] En réponse à l’identification de la ou des lignes de mots ou mots de code, le processus 1200 de la Figure 12, ou un ou plusieurs blocs de celui-ci, peut être invoqué afin de récupérer les données auprès de l’une ou des plusieurs lignes de mots. À cet égard, les cellules de mémoire dans une ou plusieurs lignes de mots ou mots de code voisins de la ou des lignes de mots ou mots de code identifiés sont lues en vue de générer la pluralité de valeurs de fiabilité décrites ci-dessus en rapport avec les Figures 10A à 10C (1304). Après que les valeurs de fiabilité soient générées, la nouvelle tension de décalage calibrée est identifiée (par exemple celle qui correspond à un point de passage par zéro 1004 dans la plage des valeurs de fiabilité) et la tension de niveau de lecture est réglée/ajustée à la nouvelle tension de décalage calibrée (1306). La ou les lignes de mots ou mots de code identifiés sont ensuite relus en utilisant la nouvelle tension de niveau de lecture calibrée (1308).
[0100] La Figure 14 représente un schéma de procédé d’un exemple de processus 1400 de régénération d’une pluralité de groupes de lignes de mots décalés optimaux en se basant sur la régénération et la réindexation d’une table de décomptes d’erreurs, conformément à divers aspects de la technologie selon l’invention. À des fins d’explication, les divers blocs de l’exemple de processus 1400 sont écrits ici en se référant aux composants et/ou processus décrits ici. Le ou les plusieurs blocs du processus 1400 peuvent être mis en œuvre, par exemple, par un ou plusieurs processeurs comprenant, par exemple, le contrôleur de mémoire flash 1501 de la Figure 15 ou encore un ou plusieurs composants ou processeurs du contrôleur 1501. Dans certains modes de réalisation, un ou plusieurs des blocs peuvent être mis en œuvre séparément des autres blocs et par un ou plusieurs processeurs ou contrôleurs différents. Toujours à des fins d’explication, les blocs de l’exemple de processus 1400 sont décrits comme apparaissant en série ou de manière linéaire. De multiples blocs de l’exemple de processus 1400 peuvent cependant apparaître en parallèle. En outre, il n’est pas nécessaire que les blocs de l’exemple de processus 1400 soient exécutés dans l’ordre indiqué et/ou l’exécution d’un ou de plusieurs des blocs de l’exemple de processus 1400 n’est pas nécessaire.
[0101] Conformément à divers modes de réalisation, les blocs du processus 1400 correspondent à ou complètent un ou plusieurs blocs des processus 700, 800, 1300 et/ou 1200, et/ou des processus décrits en rapport avec la Figure 9 et les Figures 10A à 10F. Les blocs du processus 1400, ou un sous-ensemble de ceux-ci, peuvent être exécutés pour chaque niveau de lecture possible utilisé pour lire les cellules de mémoire dans un dispositif à mémoire. Ces cellules de mémoire sont configurées pour être programmées à une pluralité de niveaux de programmation, chaque niveau de programmation étant déterminé enlisant les cellules de mémoire à une tension de niveau de lecture respective. Les blocs du processus 1400 peuvent être exécutés pour générer, ajuster et/ou calibrer les décalages pour les lignes de mots ou groupes de lignes de mots pour RL1, RL2 et RL3. Une portion des blocs du processus 1400 peut être exécutée par l’algorithme 602. Dans divers aspects, des groupes de lignes de mots décalés de différentes tailles et/ou ayant différents appariements de valeur de décalage peuvent être générés pour chaque niveau de lecture différent. De plus, les blocs du processus 1400 peuvent être exécutés pour générer, ajuster et/ou calibrer les décalages pour différents groupes, pour différents blocs et/ou puces. Le processus 1400 peut être mis en œuvre pendant la configuration d’un dispositif de stockage, avant ou pendant son utilisation.
[0102] Dans l’exemple représenté, un système conforme à la technologie selon l’invention génère une table de décomptes d’erreurs en se basant sur la lecture d’un premier exemple de lignes de mots d’un bloc de mémoire (1402). La table 400 est un exemple d’une table de décomptes d’erreurs qui peut être générée par la technologie selon l’invention. Comme décrit précédemment, pour générer une nouvelle table, chaque ligne de mots peut être lue plusieurs fois en utilisant une tension de niveau de lecture modifiée par une tension de décalage différente afin de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective. Chaque lecture peut produire un décompte d’erreurs pour chaque tension de décalage. La table est générée de telle sorte que les lignes de la table correspondent aux lignes de mots et les colonnes correspondent aux valeurs de décalage. La table indexe chaque décompte d’erreurs produit par un identifiant de ligne de mots correspondant (par exemple une adresse de ligne de mots ou une adresse de ligne de mots partielle) et l’une respective parmi les tensions de niveau de lecture différentes (par exemple un niveau de lecture modifié par une tension de décalage respective ou la tension de décalage). Les décomptes d’erreurs qui sont générés peuvent ensuite être indexés par ligne de mots et tensions de niveau de lecture respectives.
[0103] En complément ou en variante, un premier exemple de lignes de mots d’un bloc de mémoire peut être lu, chaque ligne de mots étant lue plusieurs fois en utilisant des tensions de niveau de lecture différentes afin de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective. Chaque ligne de mots est associée à un identifiant de ligne de mots (par exemple une adresse de la ligne de mots). La table de décomptes d’erreurs peut ensuite être générée en se basant sur les décomptes d’erreurs produits, la table de décomptes d’erreurs indexant chaque décompte d’erreurs produit par un identifiant de ligne de mots correspondant et l’une respective parmi les différentes tensions de niveau de lecture utilisées pour produire le décompte d’erreurs.
[0104] En association avec la configuration d’un dispositif de stockage mettant en œuvre la technologie selon l’invention, une pluralité de groupes de lignes de mots décalés optimaux sont formés (par exemple par l’algorithme 602) en se basant sur la table de décomptes d’erreurs et une division initiale de la pluralité de lignes de mots (1404). Les groupes de lignes de mots peuvent être formés en se basant sur les identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, chaque groupe de lignes de mots associant l’une respective des tensions de niveau de lecture différentes à une pluralité de lignes de mots sur lesquelles doivent être effectuées les opérations de lecture. Comme décrit précédemment en rapport avec les processus 700 et 800 et aussi les Figures 7 et 8, chaque groupe de lignes de mots décalé optimal peut inclure une portion groupée consécutivement des lignes de mots appariées avec une tension de décalage correspondante, les appariements étant sélectionnés pour un décompte d’erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots décalés. A cet égard, une table de décomptes d’erreurs peut être indexée par des lignes de mots et les tensions de décalage de niveau de lecture respectives afin de déterminer les décomptes d’erreurs maximums et/ou minimums possibles pour chacune des lignes de mots, et ensuite les lignes de mots organisées en groupes consécutifs, chacun apparié avec une valeur de décalage qui produit la plus petite dégradation possible du décompte d’erreurs (en comparaison des lignes de mots individuelles) pour les groupements.
[0105] Après la génération des groupes de lignes de mots optimaux (y compris les tensions de décalage correspondantes), le dispositif de stockage est configuré pour effectuer des opérations de lecture sur les lignes de mots respectives des groupes de lignes de mots en utilisant les tensions de décalage de niveau de lecture sélectionnées pour les groupes de lignes de mots en se basant sur le décomptes d’erreurs dans la table de décomptes d’erreurs (1406). Par conséquent, en association avec la lecture des cellules de mémoire d’une ligne de mots particulière d’un groupe de lignes de mots décalé, la tension de décalage associée au groupe de lignes de mots décalé respectif peut être identifiée et les cellules de mémoire lues en utilisant la tension de décalage identifiée. Dans divers modes de réalisation, la tension de décalage identifiée modifie la tension de niveau de lecture respective pour lire les cellules de mémoire avec moins d’erreurs que si la tension de niveau de lecture respective n’était pas modifiée.
[0106] Après un point prédéterminé dans un cycle de vie du bloc de mémoire (par exemple un point auquel les cellules de mémoire dans le bloc de mémoire produisent un taux d’erreurs binaires supérieur à un seuil prédéterminé ou ont été soumises à un nombre prédéterminé de cycles de programmation/effacement), les groupes de lignes de mots optimaux, y compris leurs valeurs de décalage associées, peuvent être recalibrés. A cet égard, la table de décomptes d’erreurs est régénérée (1408). La table de décomptes d’erreurs peut être régénérée en se basant sur la lecture d’un deuxième échantillon de lignes de mots correspondant à l’identifiant de lignes de mots utilisé pour indexer la table de décomptes d’erreurs. A titre d’exemple, la table de décomptes d’erreurs peut être régénérée en se basant sur la relecture de la pluralité de lignes de mots d’un bloc de mémoire, par exemple, dans les conditions actuelles (par exemple les niveaux de tension) du dispositif à mémoire.
[0107] Dans certains modes de réalisation, avant que la table de décomptes d’erreurs est régénérée, les niveaux de lecture et/ou les tensions de décalage utilisés pour générer la table peuvent être calibrés. En se référant brièvement à la Figure 13 et au processus 1300, des valeurs de fiabilité correspondant à de multiples lectures autour d’une tension de niveau de lecture respective peuvent être générées, une tension calibrée pour la tension de niveau de lecture identifiée (par exemple une tension de décalage pour calibrer les niveaux de lecture existants) et le dispositif de stockage configuré pour relire la pluralité de lignes de mots du bloc de mémoire en se basant sur la tension calibrée en association avec la tension de niveau de lecture. Par conséquent, chacune des lectures peut utiliser une variation de la tension de niveau de lecture et chaque valeur de fiabilité générée peut être indicative d’une probabilité pour qu’un état de sortie des cellules de mémoire est égal à un état programmé prédéterminé (par exemple le logarithme du rapport de vraisemblance). Une plage de valeurs de fiabilité peut couvrir les valeurs négatives et positives. La tension de décalage mise à jour identifiée pour relire les lignes de mots peut correspondre à un point de passage par zéro dans la plage des valeurs de fiabilité.
[0108] Les tensions de niveau de lecture différentes utilisées pour générer la table de décomptes d’erreurs initiale peuvent être mises à jour pour produire des tensions de niveau de lecture mises à jour. Chacune des tensions de niveau de lecture différentes peut, par exemple, être ajustée par la tension calibrée. A cet égard, chacune des lignes de mots du deuxième échantillon est lue de multiples fois en utilisant les tensions de niveau de lecture mises à jour afin de produit un décompte d’erreurs mis à jour. La table de décomptes d’erreurs peut ensuite être régénérée à partir des décomptes d’erreurs mis à jour produits. Par conséquent, la table de décomptes d’erreurs peut être mise à jour pour indexer chaque décompte d’erreurs mis à jour produit par un identifiant de ligne de mots correspondant et l’une respective parmi les tensions de niveau de lecture mises à jour utilisées pour produire les décomptes d’erreurs mis à jour.
[0109] Une fois que la table de décomptes d’erreurs est régénérée, les groupes de lignes de mots décalés optimaux sont régénérés en se basant sur l’indexage de la table de décomptes d’erreurs régénérée par les lignes de mots et les tensions de décalage de niveau de lecture (1410). Les groupes de lignes de mots décalés optimaux peuvent être régénérés de la manière décrite par un ou plusieurs blocs du processus 700 et/ou du processus 800.
[0110] Un grand nombre des caractéristiques décrites ci-dessus des exemples de processus 1200, 1300 et 1400 ainsi que les caractéristiques et applications apparentées peuvent être mises en œuvre sous la forme de processus logiciels qui sont spécifiés sous la forme d’un ensemble d’instructions enregistré sur un support de stockage lisible par ordinateur (également appelé support lisible par ordinateur). Lorsque ces instructions sont exécutées par une ou plusieurs unités de traitement (par exemple un ou plusieurs processeurs, noyaux de processeurs ou autres unités de traitement), elles amènent les unités de traitement à réaliser les actions indiquées dans les instructions. Des exemples de supports lisibles par ordinateur incluent, sans exhaustivité, les CD-ROM, les disques à mémoire flash, les mémoires RAM, les disques durs, les EPROM, etc. Les supports lisibles par ordinateur n’incluent pas les ondes porteuses ni les signaux électroniques transmis sans fil ou sur des connexions filaires.
[OUI] La Figure 15 est un synoptique représentant les composants d’un exemple de système de stockage de données 1500 (par exemple un disque électronique) conforme à divers modes de réalisation de la technologie selon l’invention. Le système de stockage de données 1500 peut inclure un contrôleur de stockage de données 1501, un support de stockage 1502 et un dispositif à mémoire flash 1503. Le contrôleur 1501 peut utiliser le support de stockage 1502 pour le stockage temporaire des donnes et des informations utilisées pour gérer le système de stockage de données 1500. Le contrôleur 1501 peut inclure plusieurs composants internes (non illustrés) tels qu’un ou plusieurs processeurs, une mémoire morte, une interface pour composant de mémoire flash (par exemple un multiplexeur destiné à gérer le transport des instructions et des données le long d’une liaison série avec le dispositif à mémoire flash 1503), une interface d’E/S, un circuit de correction d’erreur et similaire. Dans certains aspects, un ou plusieurs éléments du contrôleur 1501 peuvent être intégrés dans une puce unique. Dans d’autres aspects, les éléments peuvent être mis en œuvre sur deux composants discrets ou plus.
[0112] Le contrôleur 1501, ou encore un ou plusieurs des composants qu’il contient, peut être configuré pour exécuter un code ou des instructions en vue de réaliser les opérations et la fonctionnalité décrites ici. A titre d’exemple, le contrôleur 1501 peut être configuré pour réaliser des opérations destinées à gérer les mises en correspondance de flux et d’adresse de demande et pour effectuer les calculs et générer les commandes. Le processeur du contrôleur 1501 peut servir à surveiller et à commander le fonctionnement des composants dans le contrôleur de stockage de données 1501. Le processeur peut être un microprocesseur à usage général, un microcontrôleur, un processeur de signal numérique (DSP), un circuit intégré à application spécifique (ASIC), un réseau logique programmable sur site (FPGA), un composant logique programmable (PLD), un contrôleur, une machine d’état, une logique à portes, des composants physiques discrets ou une combinaison de ce qui précède. Une ou plusieurs séquences d’instructions peuvent être stockées sous la forme d’un microprogramme sur une ROM à l’intérieur du contrôleur 1501 et/ou de son processeur. Une ou plusieurs séquences d’instructions peuvent être stockées dans un logiciel et lues depuis le support de stockage 1502, le dispositif à mémoire flash 1503 ou reçues de la part du dispositif hôte 1510 (par exemple par le biais d’une interface d’hôte). La ROM, le support de stockage 1502, le dispositif à mémoire flash 1503 représentent des exemples de supports lisibles par machine ou par ordinateur sur lesquels peuvent être stockées les instructions/le code exécutables par le contrôleur 1501 et/ou son processeur. Les supports lisibles par machine ou par ordinateur peuvent désigner de manière générale tout support tangible et/ou non temporaire utilisé pour fournir des instructions au contrôleur 1501 et/ou à son processeur, y compris à la fois les supports volatiles, tels que la mémoire dynamique utilisée pour le support de stockage 1502 ou pour les mémoires tampons à l’intérieur du contrôleur 1501, et les supports non-volatiles, tel que les supports électroniques, les supports optiques et les supports magnétiques.
[0113] Par conséquent, le système de stockage de données 1500 peut en outre inclure une interface d’hôte 1505. L’interface d’hôte 1505 est configurée pour être connectée à un dispositif hôte 1510, afin de recevoir les données envoyées depuis le dispositif hôte 1510 et lui envoyer des données. L’interface d’hôte 1505 peut inclure à la fois des connexions électriques et physiques destinées à la connexion opérationnelle du dispositif hôte 1510 au contrôleur 1501. L’interface d’hôte 1505 est configurée pour communiquer les données, les adresses et les signaux de commande entre le dispositif hôte 1510 et le contrôleur 1501. Ainsi, le contrôleur 1501 est configuré pour stocker les données reçues de la part du dispositif hôte 1510 dans le dispositif à mémoire flash 1503 en réponse à une commande d’écriture de la part du dispositif hôte 1510, et pour lire les données stockées dans la mémoire flash 1503 et transférer les données lues au dispositif hôte 1510 par le biais de l’interface d’hôte 1505 en réponse à une commande de lecture de la part du dispositif hôte 1510.
[0114] Le dispositif hôte 1510 représente tout dispositif configuré pour être connecté au système de stockage de données 1500 et pour stocker les données dans un système de stockage de données 1500. Le dispositif hôte 1510 peut être un système de traitement informatique tel qu’un ordinateur personnel, un serveur, une station de travail, un ordinateur portable, un PDA, un Smartphone et similaire. En variante, le dispositif hôte 1510 peut être un dispositif électronique tel qu’un appareil photographique numérique, un lecteur audio numérique, un enregistreur vidéo numérique et similaire.
[0115] Dans certains aspects, le support de stockage 1502 représente la mémoire volatile servant au stockage temporaire des données et des informations utilisées pour la gestion du système de stockage de données 1500. Conformément à un aspect de la présente invention, le support de stockage 1502 est une mémoire vive (RAM) telle qu’une RAM à double débit de données (DDR). D’autres types de RAM peuvent également être utilisés pour mettre en œuvre le support de stockage 1502. Le support de stockage 1502 peut être mis en œuvre en utilisant un module de RAM unique ou de multiples modules de RAM. Bien que le support de stockage 1502 est représenté distinct du contrôleur 1501, les personnes compétentes dans l’art reconnaîtront que le support de stockage 1502 peut être incorporé dans le contrôleur 1501 sans s’écarter du domaine d’application de la présente invention. En variante, le support de stockage 1502 peut être une mémoire non-volatile telle qu’un disque magnétique, une mémoire flash, un SSD périphérique et similaire.
[0116] Comme décrit également dans la Figure 2, le système de stockage de données 1500 peut également comprendre un bus. Le bus peut employer une norme d’interface appropriée, incluant sans exhaustivité, SATA (Serial Advanced Technology Attachment -Rattachement technologique évolué série), ATA (Advanced Technology Attachment -Rattachement technologique évolué), SCSI (Small Computer System Interface - Interface système de petit ordinateur), PCI étendue (PCI-X), Fibre Channel (canal à fibres), SAS (Serial Attached SCSI - SCSI à rattachement série), SD (Secure Digital - Numérique sécurisé), EMMC (Embedded Multi-Media Card - Carte multimédia incorporée), UFS (Universal Flash Storage - Stockage flash universel) et PCIe (Peripheral Component Interconnect Express - Interconnexion de composant périphérique express).
[0117] Le dispositif hôte 1510 et le système de stockage de données 1500 peuvent se trouver en communication l’un avec l’autre par le biais d’une connexion filaire ou sans fil et peuvent être locaux ou distants l’un de l’autre. Conformément à certains aspects, le système de stockage de données 1500 peut inclure des broches (ou un support) destinées à s’accoupler avec un support (ou des broches) correspondant sur le dispositif hôte 1510 afin d’établir une connexion électrique et physique. Conformément à un ou plusieurs autres aspects, le système de stockage de données 1500 comprend un émetteur/récepteur sans fil destiné à mettre le dispositif hôte 1510 et le système de stockage de données 1500 en communication sans fil l’un avec l’autre.
[0118] Le dispositif à mémoire flash 1503 représente un dispositif à mémoire non-volatile servant au stockage des données. Conformément à un aspect de la présente invention, le dispositif à mémoire flash 1503 comprend, par exemple, une mémoire flash NAND. Le dispositif à mémoire flash 1503 peut comprendre un dispositif à mémoire flash ou puce unique, et peut inclure de multiples dispositifs à mémoire flash ou puces disposés en de multiples canaux. Le dispositif à mémoire flash 1503 n’est pas limité à une quelconque capacité ou configuration particulière. Le nombre de blocs physiques, par exemple, le nombre de pages physiques par bloc physique, le nombre de secteurs par page physique et la taille des secteurs peuvent varier au sein du domaine d’application de la présente invention.
[0119] La mémoire flash peut présenter une spécification d’interface normalisée. Cette norme garantit que les puces provenant de plusieurs fabricants peuvent être utilisées de manière interchangeable (au moins dans une large mesure). L’interface peut en outre masquer le travail interne de la mémoire flash et ne retourner que les valeurs binaires détectées en interne pour les données.
[0120] Le terme « logiciel » s’entend inclure, lorsqu’il y a lieu, les microprogrammes résidant dans une mémoire morte ou les applications stockées sur un support magnétique qui peuvent être chargées dans la mémoire en vue de leur traitement par un processeur. De même, dans certains modes de réalisation, de multiples aspects logiciel de l’objet de l’invention peuvent être mis en œuvre en tant que sous-parties d’un programme plus grand tout en restant des aspects logiciel distincts de l’objet de l’invention. Dans certains modes de réalisation, de multiples aspects logiciel peuvent également être mis en œuvre sous la forme de programmes séparés. Pour terminer, toute combinaison de programmes séparés qui, ensemble, mettent en œuvre un aspect logiciel décrit ici se trouve à l’intérieur du domaine d’application de l’objet de l’invention. Dans certains modes de réalisation, les programmes logiciels, lorsqu’ils sont installés de manière à fonctionner sur un ou plusieurs systèmes électroniques, définissent une ou plusieurs mises en œuvre de machine spécifiques qui exécutent et réalisent les opérations des programmes logiciels.
[0121] Un programme informatique (également connu sous le nom de programme, logiciel, application logicielle, script ou code) peut être écrit sous toute forme de langage de programmation, y compris les langages compilés ou interprétés ainsi que les langages déclaratifs ou procéduraux, et il peut être déployé sous n’importe quelle forme, y compris sous la forme d’un programme autonome ou d’un module, un composant, une sous-routine, un objet ou une autre unité adaptée à une utilisation dans un environnement informatique. Un programme informatique peut, mais ne doit pas nécessairement, correspondre à un fichier dans un système de fichiers. Un programme peut être stocké dans une portion d’un fichier qui contient d’autres programmes ou données (par exemple une ou plusieurs scripts stockés dans un document en langage de balisage), dans un fichier unique dédié au programme en question ou dans de multiples fichiers coordonnés (par exemple des fichiers qui stockent un ou plusieurs modules, sous-programmes ou portions de code). Un programme informatique peut être déployé en vue d’être exécuté sur un ordinateur ou sur plusieurs ordinateurs qui se 42 trouvent sur un site ou distribués entre plusieurs sites et interconnectés par un réseau de communication.
[0122] Il est entendu que les blocs, modules, éléments, composants, méthodes et algorithmes illustratifs décrits ici peuvent être mis en œuvre sous la forme de matériels électroniques, de logiciels d’ordinateur ou de combinaisons des deux. Pour illustrer cette interchangeabilité du matériel et du logiciel, divers blocs, modules, éléments, composants, méthodes et algorithmes illustratifs ont été décrits ci-dessus, généralement en termes de leur fonctionnalité. La mise en œuvre d’une telle fonctionnalité sous forme matérielle ou logicielle dépend de l’application particulière et des contraintes de conception imposées au système dans son ensemble. Les artisans compétents peuvent mettre en œuvre la fonctionnalité décrite de différentes manières pour chaque application particulière. Divers composants et blocs peuvent être disposés différemment (par exemple disposés dans un ordre différent ou partitionnés d’une manière différente), le tout sans s’écarter du domaine d’application de la présente invention.
[0123] Il est entendu que l’ordre spécifique ou la hiérarchie des étapes dans les processus divulgués est présenté comme une illustration de certains exemples d’approches. Suivant les préférences de conception et/ou d’autres considérations, il est entendu que l’ordre spécifique ou la hiérarchie des étapes dans les processus peut être réorganisé. Dans certains modes de réalisation, par exemple, certaines des étapes peuvent être exécutées simultanément. Par conséquent, les revendications de procédé jointes présentent les éléments des diverses étapes dans un exemple d’ordre et ne se veulent pas être limitées à l’ordre spécifique ou à la hiérarchie présenté.
[0124] La description précédente est fournie dans le but de permettre à toute personne compétente dans l’art de mettre en application pratique les divers aspects décrits ici. La description précédente fournit divers exemples de la présente invention et la présente invention n’est pas limitée à ces exemples. Diverses modifications à ces aspects apparaîtront facilement aux personnes compétentes dans l’art, et les principes génériques définis ici peuvent être appliqués à d’autres aspects. Par conséquent, les revendications ne sont pas destinées à être limitées aux aspects indiqués ici, mais l’intégralité du domaine d’application est à accorder en cohérence avec les revendications linguistiques. Sauf indication spécifique différente, le terme « certains » fait référence à un ou plusieurs. Les pronoms au masculin (par exemple son) incluent le genre féminin (par exemple sa) et inversement. Les titres et sous-titres éventuellement présents sont uniquement utilisés pour des raisons de commodité et ne limitent pas l’objet de l’invention.
[0125] Les mots prédicatifs « configuré pour », « pouvant être utilisé pour » et « programmé pour » n’impliquent pas une quelconque modification tangible ou intangible particulière d’un sujet, mais sont plutôt destins à être utilisés de manière interchangeable. Un processeur configuré pour surveiller et commander une opération ou un composant, par exemple, peut également signifier que le processeur est programmé pour surveiller et commander l’opération ou que le processeur peut être utilisé pour surveiller et commander l’opération. De même, un processeur configuré pour exécuter un code peut être construit sous la forme d’un processeur programmé pour exécuter le code ou pouvant être utilisé pour exécuter le code.
[0126] Les phrases « en communication avec » et « connecté » signifient en communication directe avec ou en communication indirecte avec par le biais d’un ou de plusieurs composants nommés ou non ici (par exemple un lecteur de carte à mémoire) [0127] Une phrase telle qu’un « aspect » n’implique pas qu’un tel aspect est essentiel pour la présente invention ou qu’un tel aspect s’applique à toutes les configurations de la présente invention. Une divulgation en rapport avec un aspect peut s’appliquer à toutes les configurations ou à une ou plusieurs configurations. Un aspect peut fournir un ou plusieurs exemples. Une phrase telle qu’un aspect peut faire référence à un ou plusieurs aspects et inversement. Une phrase telle qu’un « mode de réalisation » n’implique pas qu’un tel mode de réalisation est essentiel à la présente invention ou qu’un tel mode de réalisation s’applique à toutes les configurations de la présente invention. Une divulgation en rapport avec une mise en œuvre peut s’appliquer à tous les aspects, ou à un ou plusieurs aspects. Une mise en œuvre peut fournir un ou plusieurs exemples. Une phrase telle qu’un « mode de réalisation » peut faire référence à une ou plusieurs mises en œuvre et inversement. Une phrase telle qu’une « configuration » n’implique pas qu’une telle configuration est essentielle à la présente invention ou qu’une telle configuration s’applique à toutes les configurations de la présente invention. Une divulgation en rapport avec une configuration peut s’appliquer à toutes les configurations, ou à une ou plusieurs configurations. Une configuration peut fournir un ou plusieurs exemples. Une phrase telle qu’une « configuration » peut faire référence à une ou plusieurs configurations et inversement.
[0128] Le mot « à titre d’exemple » est utilisé ici pour indiquer « servant d’exemple ou d’illustration ». Tout aspect ou toute conception décrit ici comme étant « à titre d’exemple » ne doit pas nécessairement être considéré comme préféré ou avantageux par rapport à d’autres aspects ou conceptions.

Claims (13)

  1. REVENDICATIONS
    1. Procédé de récupération d’informations stockées dans une mémoire flash, mis en œuvre par ordinateur, comprenant : lecture d’un premier exemple de lignes de mots d’un bloc de mémoire, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en vue de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective ; génération d’une table de décomptes d’erreurs en se basant sur les décomptes d’erreurs produits, la table de décomptes d’erreurs indexant chaque décompte d’erreurs produit par un identifiant de ligne de mots correspondant et une tension respective des différentes tensions de niveau de lecture utilisées pour produire le décompte d’erreurs ; et configuration d’un dispositif de stockage pour réaliser les opérations de lecture en utilisant des tensions de niveau de lecture sélectionnées sur la base des décomptes d’erreurs de la table de décomptes d’erreurs.
  2. 2. Procédé mis en œuvre par ordinateur selon la revendication 1, dans lequel la configuration du dispositif de stockage comprend : formation d’une pluralité de groupes de lignes de mots en se basant sur les identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, chaque groupe de lignes de mots associant l’une respective parmi les tensions de niveau de lecture différentes à une pluralité de lignes de mots sur lesquelles doivent être effectuées les opérations de lecture, dans lequel le dispositif de stockage est configuré pour effectuer une opération de lecture respective sur les lignes de mots respectives en utilisant la tension de niveau de lecture du groupe de lignes de mots correspondant aux lignes de mots respectives.
  3. 3. Procédé mis en œuvre par ordinateur selon la revendication 2, dans lequel la pluralité de groupes de lignes de mots sont générés en se basant sur une division initiale des lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, et dans lequel chaque groupe de lignes de mots comprend une portion groupée consécutivement des lignes de mots correspondantes appariée avec une tension de niveau de lecture correspondante, les appariements étant sélectionnés pour un décompte d’erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots.
  4. 4. Procédé mis en œuvre par ordinateur selon la revendication 2, comprenant en outre : après un point prédéterminé dans un cycle de vie d’un ou de plusieurs blocs de mémoire dans le dispositif de stockage, régénération de la table de décomptes d’erreurs en se basant sur la lecture d’un deuxième échantillon de lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, et régénération de la pluralité de groupes de lignes de mots en se basant sur la table de décomptes d’erreurs régénérée.
  5. 5. Procédé mis en œuvre par ordinateur selon la revendication 4, dans lequel la régénération de la table de décomptes d’erreurs comprend : génération d’une pluralité de valeurs de fiabilité correspondant à une pluralité de lectures des cellules de mémoire du ou des plusieurs blocs de mémoire, chaque lecture étant effectuée en utilisant une tension de niveau de lecture différente, une plage de valeurs de fiabilité couvrant des valeurs négatives et positives ; identification d’une tension calibrée qui correspond à un point de passage par zéro dans la plage des valeurs de fiabilité ; et configuration du dispositif de stockage pour lire le deuxième échantillon de lignes de mots en se basant sur la tension calibrée.
  6. 6. Procédé mis en œuvre par ordinateur selon la revendication 5, dans lequel la régénération de la table de décomptes d’erreurs comprend en outre : mise à jour des tensions de niveau de lecture différentes en se basant sur la tension calibrée, chacun des deuxièmes échantillons de lignes de mots étant lu de multiples fois en utilisant les tensions de niveau de lecture mises à jour en vue de produire un décompte d’erreurs mis à jour ; et régénération de la table de décomptes d’erreurs en se basant sur les décomptes d’erreurs mis à jour produits, la table de décomptes d’erreurs étant mise à jour pour indexer chaque décompte d’erreurs mis à jour produit par un identifiant de ligne de mots correspondant et l’une respective parmi les tensions de niveau de lecture mises à jour afin de produire les décomptes d’erreurs mis à jour.
  7. 7. Procédé mis en œuvre par ordinateur selon la revendication 5, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend un point dans le cycle de vie auquel une ou plusieurs lectures des cellules de mémoire dans le ou les plusieurs blocs de mémoire produit un taux d’erreurs binaires supérieur à un seuil d’erreur. 8. Procédé mis en œuvre par ordinateur selon la revendication 5, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend un point dans le cycle de vie auquel les cellules de mémoire dans le ou les plusieurs blocs de mémoire ont été soumis à un nombre prédéterminé de cycles de programmation/effacement. 9. Système de stockage de données, comprenant : une pluralité de dispositifs à mémoire flash, chaque dispositif à mémoire flash comprenant une pluralité de blocs de mémoire ; et un contrôleur connecté à la pluralité de dispositifs à mémoire flash, le contrôleur étant configuré pour, pendant un mode de configuration : lire un premier exemple de lignes de mots des dispositifs à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à un identifiant de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en vue de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture correspondante ; générer une table de décomptes d’erreurs en se basant sur les décomptes d’erreurs produits, la table de décomptes d’erreurs indexant chaque décompte d’erreurs produit par un identifiant de ligne de mots correspondant et une tension respective des différentes tensions de niveau de lecture utilisées pour produire le décompte d’erreurs ; et sélectionner les tensions de niveau de lecture pour les futures opérations de lecture en se basant sur les décomptes d’erreurs de la table de décomptes d’erreurs.
  8. 10. Système de stockage de données selon la revendication 9, dans lequel le contrôleur est en outre configuré pour, pendant le mode de configuration : former une pluralité de groupes de lignes de mots en se basant sur les identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, chaque groupe de lignes de mots associant l’une respective parmi les tensions de niveau de lecture différentes à une pluralité de lignes de mots sur lesquelles doivent être effectuées les opérations de lecture ; et configuration du système de stockage de données pour effectuer une opération de lecture respective sur les lignes de mots respectives en utilisant la tension de niveau de lecture du groupe de lignes de mots correspondant aux lignes de mots respectives.
  9. 11. Système de stockage de données selon la revendication 10, dans lequel la pluralité de groupes de lignes de mots sont générés en se basant sur une division initiale des lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, et avec lequel chaque groupe de lignes de mots comprend une portion groupée consécutivement des lignes de mots correspondantes appariée avec une tension de niveau de lecture correspondante, les appariements étant sélectionnés pour un décompte d’erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots. 12. Système de stockage de données selon la revendication 10, dans lequel l’association de la tension de niveau de lecture à la pluralité de lignes de mots comprend l’association de la tension de niveau de lecture à une pluralité d’adresses de ligne de mots correspondant à la pluralité de lignes de mots. 13. Système de stockage de données selon la revendication 12, dans lequel le contrôleur est configuré pour : après un point prédéterminé dans un cycle de vie d’un bloc de mémoire respectif, régénérer la table de décomptes d’erreurs en se basant sur la lecture d’un deuxième échantillon de lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, et régénérer la pluralité de groupes de lignes de mots en se basant sur la table de décomptes d’erreurs régénérée.
  10. 14. Système de stockage de données selon la revendication 13, dans lequel la régénération de la table de décomptes d’erreurs comprend : génération d’une pluralité de valeurs de fiabilité correspondant à une pluralité de lectures des cellules de mémoire du bloc de mémoire respectif, chaque lecture étant effectuée en utilisant une tension de niveau de lecture différente, une plage de valeurs de fiabilité couvrant des valeurs négatives et positives ; identification d’une tension calibrée qui correspond à un point de passage par zéro dans la plage des valeurs de fiabilité ; et configuration du dispositif de stockage pour lire les dignes de mots du bloc de mémoire respectif en se basant sur la tension calibrée.
  11. 15. Système de stockage de données selon la revendication 13, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend un point dans le cycle de vie auquel une ou plusieurs lectures des cellules de mémoire dans le ou les plusieurs blocs de mémoire produit un taux d’erreurs binaires supérieur à un seuil d’erreur. 16. Système de stockage de données selon la revendication 13, dans lequel le point prédéterminé dans le cycle de vie du bloc de mémoire respectif comprend un point dans le cycle de vie auquel les cellules de mémoire dans le bloc de mémoire respectif ont été soumises à un nombre prédéterminé de cycles de programmation/effacement. 17. Procédé de récupération d’informations stockées dans une mémoire flash, mis en œuvre par ordinateur, comprenant : lecture d’un premier exemple de lignes de mots d’un dispositif à mémoire flash, chacun des premiers exemples de lignes de mots étant associé à une adresse de ligne de mots et étant lu de multiples fois en utilisant des tensions de niveau de lecture différentes en vue de produire un décompte d’erreurs pour chaque combinaison de ligne de mots et de tension de niveau de lecture respective ; génération d’une table de décomptes d’erreurs en se basant sur les décomptes d’erreurs produits, la table de décomptes d’erreurs indexant chaque décompte d’erreurs produit par une adresse de ligne de mots correspondante et une tension respective des différentes tensions de niveau de lecture ; formation d’une pluralité de groupes de lignes de mots en se basant sur la table de décomptes d’erreurs, chaque groupe associant une tension respective parmi les tensions de niveau de lecture différentes à une pluralité d’adresses de ligne de mots ; et configuration d’un dispositif de stockage pour lire les cellules de mémoire en utilisant une tension de niveau de lecture d’un groupe de lignes de mots généré correspondant à une adresse de ligne de mots des cellules de mémoire à lire.
  12. 18. Procédé mis en œuvre par ordinateur selon la revendication 17, dans lequel la pluralité de groupes de lignes de mots sont également générés en se basant sur une division initiale des lignes de mots correspondant aux adresses de ligne de mots utilisées pour indexer la table de décomptes d’erreurs, et selon lequel chaque groupe de lignes de mots comprend une portion groupée consécutivement des adresses de ligne de mots appariée avec une tension de niveau de lecture correspondante, les appariements étant sélectionnés pour un décompte d’erreurs global le plus faible possible pour la lecture des lignes de mots dans chacun des groupes de lignes de mots. 19. Procédé mis en œuvre par ordinateur selon la revendication 18, comprenant en outre : après un point prédéterminé dans un cycle de vie d’un ou de plusieurs blocs de mémoire, régénération de la table de décomptes d’erreurs en se basant sur la lecture d’un deuxième échantillon de lignes de mots correspondant aux identifiants de ligne de mots utilisés pour indexer la table de décomptes d’erreurs, et régénération de la pluralité de groupes de lignes de mots en se basant sur la table de décomptes d’erreurs régénérée.
  13. 20. Procédé mis en œuvre par ordinateur selon la revendication 19, dans lequel le point prédéterminé dans le cycle de vie du ou des plusieurs blocs de mémoire comprend des cellules de mémoire dans le ou les plusieurs blocs de mémoire ayant été soumises à un nombre prédéterminé de cycles de programmation/effacement.
FR1652158A 2015-03-20 2016-03-15 Groupement des niveaux de lecture pour des performances de memoire flash accrues Active FR3033927B1 (fr)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/664,768 US9720754B2 (en) 2014-11-20 2015-03-20 Read level grouping for increased flash performance
US14664768 2015-03-20

Publications (2)

Publication Number Publication Date
FR3033927A1 FR3033927A1 (fr) 2016-09-23
FR3033927B1 true FR3033927B1 (fr) 2019-10-11

Family

ID=55952218

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1652158A Active FR3033927B1 (fr) 2015-03-20 2016-03-15 Groupement des niveaux de lecture pour des performances de memoire flash accrues

Country Status (6)

Country Link
JP (1) JP6218195B2 (fr)
KR (1) KR101831209B1 (fr)
CN (1) CN105989891B (fr)
DE (1) DE102016003366B4 (fr)
FR (1) FR3033927B1 (fr)
GB (1) GB2537484B (fr)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10229740B2 (en) * 2016-10-17 2019-03-12 SK Hynix Inc. Memory system of 3D NAND flash and operating method thereof
CN108257642B (zh) * 2016-12-29 2021-08-17 北京忆恒创源科技股份有限公司 读阈值设置方法与装置
US10402272B2 (en) * 2017-05-25 2019-09-03 Micron Technology, Inc. Memory device with dynamic programming calibration
US10452480B2 (en) 2017-05-25 2019-10-22 Micron Technology, Inc. Memory device with dynamic processing level calibration
US10140040B1 (en) 2017-05-25 2018-11-27 Micron Technology, Inc. Memory device with dynamic program-verify voltage calibration
US10347344B2 (en) 2017-08-29 2019-07-09 Micron Technology, Inc. Read voltage calibration based on host IO operations
KR102395196B1 (ko) 2017-10-17 2022-05-06 삼성전자주식회사 파라미터 교정 기능을 갖는 스토리지 장치 및 상기 스토리지 장치의 동작 방법
CN110010170B (zh) * 2018-01-05 2021-04-02 旺宏电子股份有限公司 存储装置的操作方法及其存储系统
US10910061B2 (en) * 2018-03-14 2021-02-02 Silicon Storage Technology, Inc. Method and apparatus for programming analog neural memory in a deep learning artificial neural network
US10664194B2 (en) 2018-05-16 2020-05-26 Micron Technology, Inc. Memory system with dynamic calibration using a variable adjustment mechanism
US10566063B2 (en) 2018-05-16 2020-02-18 Micron Technology, Inc. Memory system with dynamic calibration using a trim management mechanism
CN108777156A (zh) * 2018-05-31 2018-11-09 郑州云海信息技术有限公司 一种闪存数据处理方法及装置
US10990466B2 (en) * 2018-06-20 2021-04-27 Micron Technology, Inc. Memory sub-system with dynamic calibration using component-based function(s)
US11188416B2 (en) 2018-07-12 2021-11-30 Micron Technology, Inc. Enhanced block management for a memory sub-system
CN110908825B (zh) * 2018-09-17 2024-03-01 兆易创新科技集团股份有限公司 一种数据读取方法、装置、存储设备及存储介质
US10936246B2 (en) 2018-10-10 2021-03-02 Micron Technology, Inc. Dynamic background scan optimization in a memory sub-system
CN111540393B (zh) * 2018-12-11 2023-09-08 爱思开海力士有限公司 用于基于字线分组的读取操作的存储器系统和方法
CN110473588A (zh) * 2019-08-15 2019-11-19 山东华芯半导体有限公司 一种SSD中在线校准NAND Flash读参考电压的方法
US11264103B2 (en) * 2019-08-28 2022-03-01 International Business Machines Corporation Hybrid read voltage calibration in non-volatile random access memory
US10957407B1 (en) * 2019-10-30 2021-03-23 International Business Machines Corporation Calculating corrective read voltage offsets in non-volatile random access memory
DE102020100541A1 (de) 2020-01-13 2021-07-15 Infineon Technologies Ag Bestimmung eines resultierenden datenworts beim zugriff auf einen speicher
US11189351B2 (en) 2020-03-27 2021-11-30 Sandisk Technologies Llc Peak and average current reduction for sub block memory operation
CN112216333B (zh) * 2020-09-30 2024-02-06 深圳市宏旺微电子有限公司 芯片测试方法及装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7554853B2 (en) * 2006-12-30 2009-06-30 Sandisk Corporation Non-volatile storage with bias based on selective word line
KR101516577B1 (ko) * 2008-11-10 2015-05-06 삼성전자주식회사 비휘발성 반도체 메모리 장치, 그를 포함하는 메모리 카드와 메모리 시스템 및 그의 리드 전압 추정 방법
US8159881B2 (en) * 2009-06-03 2012-04-17 Marvell World Trade Ltd. Reference voltage optimization for flash memory
US8874825B2 (en) * 2009-06-30 2014-10-28 Sandisk Technologies Inc. Storage device and method using parameters based on physical memory block location
US8072805B2 (en) * 2009-08-18 2011-12-06 Skymedi Corporation Method and system of finding a read voltage for a flash memory
US8427875B2 (en) * 2010-12-07 2013-04-23 Silicon Motion Inc. Method and memory controller for reading data stored in flash memory by referring to binary digit distribution characteristics of bit sequences read from flash memory
US9047955B2 (en) * 2011-03-30 2015-06-02 Stec, Inc. Adjusting operating parameters for memory cells based on wordline address and cycle information
CN102831932B (zh) * 2011-06-14 2015-11-18 群联电子股份有限公司 数据读取方法、存储器控制器及存储器储存装置
US9195586B2 (en) * 2012-02-23 2015-11-24 Hgst Technologies Santa Ana, Inc. Determining bias information for offsetting operating variations in memory cells based on wordline address
US9135106B2 (en) * 2012-05-22 2015-09-15 Hgst Technologies Santa Ana, Inc. Read level adjustment using soft information
KR101984900B1 (ko) * 2012-07-24 2019-05-31 삼성전자 주식회사 메모리 장치 및 상기 메모리 장치의 독출 전압 결정 방법
US8811076B2 (en) * 2012-07-30 2014-08-19 Sandisk Technologies Inc. Systems and methods of updating read voltages
US8879324B2 (en) * 2013-02-01 2014-11-04 Lsi Corporation Compensation loop for read voltage adaptation
US20140359202A1 (en) * 2013-05-31 2014-12-04 Western Digital Technologies, Inc. Reading voltage calculation in solid-state storage devices
KR102192910B1 (ko) * 2013-09-10 2020-12-18 에스케이하이닉스 주식회사 반도체 장치, 메모리 시스템 및 이의 동작 방법

Also Published As

Publication number Publication date
GB2537484B (en) 2019-07-03
DE102016003366B4 (de) 2020-10-29
CN105989891A (zh) 2016-10-05
JP2016177860A (ja) 2016-10-06
FR3033927A1 (fr) 2016-09-23
KR101831209B1 (ko) 2018-02-23
KR20160113051A (ko) 2016-09-28
GB201604222D0 (en) 2016-04-27
JP6218195B2 (ja) 2017-10-25
GB2537484A (en) 2016-10-19
DE102016003366A1 (de) 2016-09-22
CN105989891B (zh) 2020-11-24

Similar Documents

Publication Publication Date Title
FR3033927B1 (fr) Groupement des niveaux de lecture pour des performances de memoire flash accrues
US10020072B2 (en) Detect developed bad blocks in non-volatile memory devices
US9672942B2 (en) Data decoding method of non-volatile memory device and apparatus for performing the method
US20160148701A1 (en) Read level grouping algorithms for increased flash performance
US9891991B2 (en) Decoding method, memory storage device and memory control circuit unit
JP5367835B2 (ja) 不揮発性メモリにおけるデータ・エラー回復
KR101838340B1 (ko) 복수 페이지들의 조합된 검증을 사용한 가속화된 기입후 판독을 가진 비휘발성 메모리 및 방법
US8634240B2 (en) Non-volatile memory and method with accelerated post-write read to manage errors
KR101979734B1 (ko) 메모리 장치의 독출 전압 제어 방법 및 이를 이용한 데이터 독출 방법
US9213601B2 (en) Adaptive data re-compaction after post-write read verification operations
CN108694097B (zh) 存储设备的不同存储器区域中编程数据的多码本的使用方法及装置
US20140281828A1 (en) System and method for accumulating soft information in ldpc decoding
US20150149818A1 (en) Defect management policies for nand flash memory
CN108694099B (zh) 确定用于储存器设备的不同的存储器区域的码本的方法和系统
WO2013070368A1 (fr) Génération d'informations incertaines pour systèmes de mémoire
KR102326659B1 (ko) 비휘발성 메모리의 ecc 제어 방법 및 이를 수행하는 메모리 시스템
JP2013509668A (ja) エラーを管理するための書き込み後読み出しおよび適応再書き込みを伴う不揮発性メモリおよび方法
TW201319801A (zh) 使用寫為二進位及多狀態格式的資料之比較在非揮發性記憶體中的寫入後讀取
TW201316341A (zh) 在非揮發性記憶體陣列之程式化期間用於缺陷字元線的資料回復
US11430540B2 (en) Defective memory unit screening in a memory system
US10535406B2 (en) Storage device and copy-back method thereof
US10915395B2 (en) Read retry with targeted auto read calibrate
CN111354402A (zh) 用于艰苦装置条件的动态存储器编程电压阶跃
US20190189228A1 (en) Bit tagging method, memory control circuit unit and memory storage device
US11016693B2 (en) Block health estimation for wear leveling in non-volatile memories

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 2

PLFP Fee payment

Year of fee payment: 3

PLSC Publication of the preliminary search report

Effective date: 20190201

PLFP Fee payment

Year of fee payment: 4

PLFP Fee payment

Year of fee payment: 5

TP Transmission of property

Owner name: WESTERN DIGITAL TECHNOLOGIES, INC., US

Effective date: 20200319

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8

PLFP Fee payment

Year of fee payment: 9