Brevet FR3111730A1 — publié le 20211224

L’invention porte sur un procédé de protection d’un dispositif de mémoire DRAM de l’effet de martelage de rang, le dispositif de mémoire comprenant une pluralité de bancs composés de rangs mémoire, le procédé étant mise en œuvre par au moins une logique de prévention configurée pour associer respectivement des sections contiguës de rangs d’un banc à des sous-bancs et pour exécuter, à chaque activation d’un rang d’un sous-banc (b) de la mémoire, une étape d’incrémentation d’un nombre requis de rafraichissement préventif (REFRESH_ACC ; REFRESH_ACC/PARAM_D) du sous-banc (b) à l’aide d’un seuil d’activations (PARAM_D) du sous-banc (b). La logique de prévention est également configurée pour exécuter une séquence de rafraichissement préventif des sous-bancs selon leur nombre requis de rafraichissement préventif. L’invention porte également sur un dispositif de mémoire DRAM ou contrôleur d’une telle mémoire comprenant la logique de prévention de l’effet de martelage de rang. ( Figure 1a ) Procédé et circuit de protection d’un dispositif de mémoire DRAM de l’effet de martelage de rang DOMAINE DE L’INVENTION La présente invention concerne le domaine des circuits DRAM (« dynamic random access memory » ou « mémoire dynamique à accès aléatoire » en français) et particulièrement la gestion de l’effet « ROW Hammer ». Cet effet de « martelage de rang » est le fait que, à l’intérieur d’un banc d’une mémoire DRAM donné, activer de manière répétée un rang de la DRAM donné puisse causer aux rangs physiquement adjacents l’inversion de la valeur de certains de leurs bits. Le rang qui est activé répétitivement est appelé « rang agresseur » et les rangs adjacents appelés « rangs victimes ». ARRIERE PLAN TECHNOLOGIQUE DE L’INVENTION Le document FR3066842A1 détaille un algorithme de prévention de l’effet de martelage de rang mettant en œuvre l’utilisation d’une table. Cet algorithme est particulièrement adapté à une valeur critique de martelage relativement importante, typiquement de 40000 ou plus. Or, l’utilisation de géométries de fabrication des mémoires DRAMs de plus en plus fines a conduit à observer pour ces mémoires des valeurs critiques de martelage relativement faibles, par exemple aussi faible que 4800. Dans le document précité, le nombre d’entrées de la table utilisée au cours du déploiement de l’algorithme est inversement proportionnel à la valeur critique de martelage, ce qui impose un nombre d’entrées de 8 fois plus grand s’il fallait exploiter l’algorithme proposé pour des mémoires DRAMs exploitant ces géométries plus fines. Parcourir un tel nombre d’entrées dans le temps séparant deux commandes d’activation d’un rang, même réparties sur plusieurs tables accédées en parallèle, est problématique. De plus, le martelage de rang affecte également dans ces mémoires DRAMs à géométrie fine, certes dans une moindre mesure, des rangs victimes proches, mais non immédiatement adjacents au rang agresseur martelé. Or la solution proposée par le document FR3066842 ne gère que le martelage qui affecterait uniquement les deux rangs voisins immédiatement adjacents au rang agresseur martelé, un tel phénomène étant référé dans ce document comme étant un martelage de portée 1. D’une manière générale, un martelage de portée 1 signifie qu’un rang agresseur d’index topologique i d’un banc mémoire, est susceptible d’affecter les rangs i -1 et i +1. Un martelage de portée 2 signifie que les rangs i -2 et i +2 seraient également affectés, mais dans une moindre mesure, et ainsi de suite pour les portées supérieures. Un niveau d’agression de martelage de portée p subit par un rang victime i peut s’exprimer comme la somme pondérée des activations des 2 x p rangs voisins : + (nombre d’activations du rang i - p) x RH_coeff_ p + (nombre d’activations du rang i -( p -1)) x RH_coeff_( p -1) + . . . + (nombre d’activations du rang i -2) x RH_coeff_2 + (nombre d’activations du rang i-1) x 1 + (nombre d’activations du rang i+1) x 1 + (nombre d’activations du rang i+2) x RH_coeff_2 + . . . + (nombre d’activations du rang i +( p -1)) x RH_coeff_( p -1) + (nombre d’activations du rang i + p) x RH_coeff_ p Quand le niveau d’agression résultant de cette somme dépasse une valeur critique, alors les données stockées dans le rang i ont été éventuellement altérées. La valeur critique est définie de tel façon que le coefficient (RH_coeff) appliqué pour le nombre d’activations des rangs i -1 et i +1 soit 1, de telle façon que la définition d’un niveau d’agression d’ordre 1 corresponde à la définition habituelle et antérieure du martelage de rang. Bien entendu les coefficients RH_coeff_n deviennent de plus en plus faibles à mesure que l’on s’éloigne du rang martelé. C’est pourquoi il n’est utile que de considérer des phénomènes de ROW Hammer de portée limitée (1, 2, 3 …). Une logique capable de surveiller les phénomènes de martelage de rang de portée 2 ou plus, en utilisant cette définition générale de somme pondérée, serait probablement trop complexe et trop lente pour être intégrée de manière efficace dans une mémoire DRAM. Un algorithme capable de gérer un martelage de rang d’une portée supérieure à 1 (2, 3, …), affectant donc également, avec néanmoins une force moindre, les rangs voisins non immédiatement adjacent au rang agresseur martelé, est donc nécessaire. Le document US9214216 divulgue une logique de protection d’un dispositif de mémoire DRAM de l’effet de martelage de rang. Selon ce document, les rangs de cellules mémoires sont organisée en blocs, et on compte pour chaque bloc le nombre d’activations des rangs. Lorsque le compteur d’un bloc atteint une valeur de martelage critique, on rafraichit les rangs du bloc en redirigeant toutes les opérations de rafraichissement cherchant à prévenir le martelage de rang vers ce bloc. Pendant cette période de rafraichissement du bloc, la logique n’est pas capable de procéder au rafraichissement préventif dans d’autres blocs, ce qui la rend fragile vis-à-vis de scénario de martelage complexes, et ne peut protéger parfaitement un dispositif mémoire de ce phénomène. Le document US20200111525 divulgue un procédé visant à émettre des commandes de gestion de rafraichissement, en plus des commandes de rafraichissement périodique, pour tenter de limiter l’impact du phénomène de martelage sur un dispositif mémoire. Le document cherche notamment à intégrer les opérations de rafraichissement préventif au sein des autres opérations afin d’exploiter avec efficacité le bus reliant un hôte au dispositif mémoire. Dans ce but, un compteur d’activation de banc est incrémenté à chaque activation du banc en question. Lorsque ce compteur excède une valeur critique, une commande de gestion de rafraichissement est émise en vue de réaliser une opération de rafraichissement du banc. Cette opération n’est pas nécessairement exécutée immédiatement, et le compteur d’activation est décrémenté lorsque cette opération est réalisée. Ce document ne précise aucunement quel rang du banc doit faire l’objet de l’opération de rafraichissement, aussi il ne permet pas de construire une logique prévenant des effets du martelage de rang, encore moins garantissant une prévention certaine et prouvable. OBJET DE L’INVENTION Un but principal de l’invention est de proposer un procédé de protection d’un dispositif de mémoire DRAM de l’effet de martelage de rang adressant au moins en partie ces limitations. Plus spécifiquement, un but de l’invention est de proposer un procédé de suivi des activations des rangs d’un banc de mémoire DRAM suffisamment simple pour s’effectuer sans problème dans le temps minimal séparant deux activations, et permettant de prévenir les effets du martelage de portée supérieure à 1. Le procédé s’applique tout particulièrement à des mémoires dont la valeur critique de martelage est relativement faible, par exemple inférieur à 40000, bien que ce procédé puisse pratiquement être déployé pour tout type de mémoire DRAM. La présente invention peut être intégrée soit dans le contrôleur mémoire, soit dans un circuit buffer ou dans un dispositif mémoire DRAM. La mémoire DRAM peut intégrer des processeurs. BREVE DESCRIPTION DE L’INVENTION En vue de la réalisation de ce but, l’objet de l’invention propose un procédé de protection d’un dispositif de mémoire DRAM de l’effet de martelage de rang, le dispositif de mémoire comprenant une pluralité de bancs composés de rangs mémoire, le procédé étant mise en œuvre par au moins une logique de prévention configurée pour définir respectivement des sous-bancs comme des sections contiguës de rangs d’un banc, chaque sous-banc étant associé à un seuil d’activations, et pour exécuter, à chaque activation d’un rang d’un sous-banc de la mémoire, une étape d’incrémentation d’un compteur d’activations associé au sous-banc et la détermination d’un nombre requis de rafraichissement préventif de ce sous-banc. La logique de prévention est également configurée pour exécuter une séquence de rafraichissement préventif comprenant : - une étape de repérage d’un besoin de rafraichissement préventif d’un sous-banc du dispositif de mémoire ; - une étape de déclenchement d’une opération de rafraichissement d’un rang d’index courant associé au sous-banc en question ; - une étape d’incrémentation de l’index courant associé au sous-banc ; - la décrémentation du nombre requis de rafraichissement préventif de ce sous-banc. Selon l’invention, l’opération de rafraichissement forme une étape d’un cycle de rafraichissement préventif conduisant à rafraichir au moins les rangs du sous-banc, et le seuil d’activations du sous-banc est choisi pour qu’un cycle complet de rafraichissement préventif de ce sous-banc soit opéré avant que le nombre d’activation de rangs dans le sous-banc n’excède une valeur de martelage critique Selon d’autres caractéristiques avantageuses et non limitatives de l’invention, prises seules ou selon toute combinaison techniquement réalisable : le nombre requis de rafraichissement préventif de chaque sous-banc est mémorisé dans une structure de données ; l’étape de repérage d’un besoin de rafraichissement préventif d’un sous-banc comprend parcourir la structure de données pour identifier un sous-banc dont le nombre requis de rafraichissement préventif est supérieur ou égale à 1 ; la détermination du nombre requis de rafraichissement préventif comprend l’incrémentation d’un compteur de rafraichissement en attente, la séquence de rafraichissement préventif comprend une étape de décrémentation du compteur de rafraichissement en attente, et la séquence de rafraichissement préventif est exécutée répétitivement tant que le compteur de rafraichissement en attente excède une valeur plancher ; l’index d’un sous-banc est inséré dans une liste de sous-bancs en attente de rafraichissement lorsque le nombre requis de rafraichissement préventif de ce sous-banc atteint la valeur 1 ; la liste est formée en chainant entre eux les entrées de la structure de données ; l’étape de repérage consiste à identifier que la liste de sous-bancs en attente de rafraichissement est non vide ; l’index d’un sous-banc est retiré de la liste lorsque le nombre requis de rafraichissement préventif de ce sous-banc passe sous la valeur 1 ; le nombre requis de rafraichissement préventif de tous les sous-banc est inférieur à 1, et l’étape de repérage d’un besoin de rafraichissement préventif du sous-banc comprend l’identification, dans la structure de données, du sous-banc dont le compteur d’activation est maximum et la remise à zéro de ce compteur suite au déclenchement de l’opération de rafraichissement ; l’étape de repérage est exécutée à l’issue de l’étape d’incrémentation du compteur d’activation d’un sous-banc, et comprend une comparaison du nombre requis de rafraichissement préventif de ce sous-banc à un seuil déterminé et, le cas échéant, la préparation de l’opération de rafraichissement du sous-banc en question ; la préparation de l’opération de rafraichissement comprend son stockage dans une mémoire tampon ; la détermination d’un nombre requis de rafraichissement préventif comprend : - une étape d’incrémentation, modulo le seuil d’activation, du compteur d’activation du sous-banc comprenant le rang activé ; - l’incrémentation du nombre requis de rafraichissement préventif du sous-banc, si l’incrémentation modulo le seuil d’activation a remis à zéro le compteur d’activation du sous-banc ; le compteur d’activation est incrémenté d’un paramètre strictement inférieur au seuil d’activation ; le cycle de rafraichissement préventif conduit également à rafraichir les rangs d’une marge basse externe et/ou d’une marge haute externe du sous-banc ; le rang activé du sous-banc est l’un des premiers rangs, ou respectivement l’un des derniers rangs, du sous-banc et l’étape d’incrémentation comprend également l’incrémentation du compteur d’activation associé au sous-banc inférieur au rang activé, ou respectivement associé au sous-banc supérieur au rang activé ; le compteur d’activation associé à un sous-banc est incrémenté périodiquement pour mettre en œuvre un rafraichissement périodique de ce sous-banc ; le seuil d’activations d’un sous-banc est variable avec la température, la tension d’alimentation, la fréquence des activations d’un sous-banc, les caractéristiques de la mémoire ; le seuil d’activations est distinct d’un sous-banc à un autre ; l’étape de déclenchement d’une opération de rafraichissement comprend l’insertion d’une requête en rafraichissement préventif dans un trafic de commande à destination du banc de la mémoire dans lequel réside le sous-banc ; le cycle complet de rafraichissement préventif du sous-banc conduit à rafraichir une pluralité de fois certains rangs du sous-banc ; le seuil d’activations définit un coefficient d’avancement variable durant un cycle complet de rafraichissement préventif d’un sous-banc ; la logique de prévention est associée à une pluralité de bancs. Selon un autre aspect, l’invention propose un dispositif de mémoire DRAM, un circuit buffer ou un contrôleur d’un dispositif de mémoire DRAM comprenant une logique de prévention de l’effet de martelage de rang configurée pour mettre en œuvre un procédé de protection tel que présenté. Selon d’autres caractéristiques avantageuses et non limitatives de l’invention, prises seules ou selon toute combinaison techniquement réalisable : la mémoire DRAM comprend au moins un processeur intégré ; le dispositif de mémoire DRAM comprend une pluralité de blocs de remplacement, les blocs de remplacement comprenant des rangs de remplacement, les blocs de remplacement étant séparés les uns des autres par tout moyen empêchant un rang d’un bloc de remplacement d’agresser par martelage un rang d’un autre bloc de remplacement ; les rangs d’un bloc de remplacement sont destinés à remplacer des rangs défectueux d’un seul sous-banc ; les rangs d’un bloc de remplacement sont destinés à remplacer des rangs défectueux d’une pluralité de sous-bancs, les rangs composants ce bloc de remplacement faisant tous partis des cycles de rafraichissement préventif des sous-bancs partageant ce bloc de remplacement ; Les blocs de remplacement sont eux même des sous-bancs, l’activation de n’importe lequel des rangs d’un sous-banc normal, celui-ci ayant des rangs remplacés par des rangs de remplacement d’un ou de plusieurs sous-bancs de remplacement, conduisant à réaliser une étape d’incrémentation sur le sous-banc normal ainsi qu’une ou des étapes d’incrémentations sur le ou les sous-bancs de remplacement dont des rangs remplacent des rangs du sous-banc normal, cette ou ces dernières étapes d’incrémentation utilisant éventuellement un ou des seuils d’activation spécifiques ; Les blocs de remplacement sont eux même des sous-bancs, l’activation d’un rang remplacé dans un sous-banc normal conduisant à une étape d’incrémentation sur seulement le sous-banc de remplacement auquel le rang remplaçant appartient physiquement, le rang remplacé n’étant pas activé, l’étape d’incrémentation utilisant éventuellement un seuil spécifique d’activation ; D’autres caractéristiques et avantages de l’invention ressortiront de la description détaillée de l’invention qui va suivre en référence aux figures annexées sur lesquels : La représente une partie des étapes d’un mode de mise en œuvre du procédé de protection d’un dispositif de mémoire DRAM ; La représente une séquence de rafraichissement préventif d’un mode de mise en œuvre du procédé de protection d’un dispositif de mémoire DRAM. La représente un second mode de mise en œuvre du procédé de protection d’un dispositif de mémoire DRAM DESCRIPTION DETAILLEE DE L’INVENTION Définition et rappels Dans ce document on désigne par « index topologique » d’un rang l’ordre physique de ce rang à l’intérieur d’un banc DRAM. Par défaut, quand il est fait mention d’index de rang, ou plus simplement de rang, il s’agit d’index topologique de rang. Un index logique de rang se réfère à l’index de rang passé comme paramètre d’une commande ACTIVATE d’activation d’un rang, tel que définie dans les protocoles JEDEC DDR3/4/5 et similaire. En fonction de l’implémentation, un rang d’index logique i , peut avoir cette même valeur i comme index topologique, ou une valeur j différente, et dans ce cas de figure, une fonction permet d’obtenir j à partir de i . On rappelle que les rangs d’un banc de mémoire DRAM sont rafraichis périodiquement, afin de compenser la perte de charge de leurs points mémoires avec le temps. Le temps dans lequel tous les rangs d’un banc sont rafraichis est appelé fenêtre de rafraichissement. Les fenêtres de rafraichissement se suivent temporellement, la fin de la fenêtre de rafraichissement r étant suivie par le début de la fenêtre de rafraichissement r +1. Les rangs peuvent être également être rafraichis préventivement afin de prévenir l’effet de martelage. Comme décrit par le document FR3066842A1, l’exécution de rafraichissements préventifs peut se faire dans des créneaux temporels de rafraichissement initialement prévus pour des rafraichissements périodiques, ces derniers étant par ce fait retardés. Il en résulte que les fenêtres de rafraichissement où des rafraichissements préventifs ont été insérés ont des durées supérieures aux fenêtres de rafraichissement ou seuls des rafraichissements périodiques sont réalisés, cette augmentation de la durée des fenêtres de rafraichissement ne posant pas de problème tant qu’elle reste modérée. Une alternative consiste par exemple à réserver à l’avance des créneaux temporels pour les rafraichissements préventifs, avec un taux fixe ou variable par rapport aux rafraichissements périodiques, ou par rapport au nombre d’activations de rangs réalisées. Algorithme rapide de prévention du martelage de rang On présente maintenant dans le détail un premier mode de mise en œuvre, dit à génération différée, d’un procédé de protection d’un dispositif de mémoire DRAM de l’effet de martelage de rang. Ce procédé est mis en œuvre par au moins une logique de prévention. Le banc mémoire, comprenant R rangs, est divisé en N sous-bancs de tailles identiques, ou identiques à 1 rang près, un sous-banc comprenant S ou S +1 rangs, où S est égale à la division entière de R par N . ( S = R / N ). Pour la simplicité des explications, les sous-bancs sont considérés comme possédant un même nombre de rangs. La personne du métier saura extrapoler les explications données ci-après pour les appliquer au cas où certains sous-bancs ont plus de rangs que les autres. Composés de rangs ordonnés topologiquement, les sous-bancs sont ordonnés topologiquement entre eux et d’une manière générale un sous-banc b contient les rangs d’index topologiques S x b à ( S x ( b +1)) – 1. On peut de la sorte désigner un rang par son index topologique de rang relatif, de la manière suivante : la notation sous-banc[ b ][ 0 ] désigne le premier rang du sous-banc b , la notation sous-banc[ b ][ 1 ] désigne le second rang du sous-banc b , la notation sous-banc[ b ][ 2 ] désigne le troisième rang du sous-banc b , . . . la notation sous-banc[ b ][ i ] désigne le ( i +1) ième rang du sous-banc b , la notation sous-banc[ b ][ S -1 ] désigne le dernier rang du sous-banc b . La logique de prévention est associée à au moins un banc et comprend des éléments mémorisant pouvant comprendre : Une variable ou compteur de rafraichissement en attente nommée NBR_REFRESH_PENDING. Une structure de données, telle qu’une table, nommée RH_TABLE, comprenant N entrées ( N étant le nombre de sous-bancs), chaque entrée de cette table comprenant trois champs : Un champ nommé FRACTION_ACC, formant un compteur d’activations et comptant de 0 à la valeur PARAM_D - 1. PARAM_D est un paramètre pouvant être constant pour une implémentation donnée et définissant un seuil d’activations du sous-banc. Un champ REFRESH_ACC, pouvant prendre une valeur allant de 0 à une valeur suffisante. Ce champ définit dans le premier mode de mise en œuvre un nombre requis de rafraichissement préventif d’un sous-banc. Un index courant nommé RELATIVE_INDEX, pouvant prendre une valeur allant de 0 à S -1. A la réinitialisation du dispositif mémoire DRAM (RESET), la logique est initialisée comme suit : Le compteur de rafraichissement en attente NBR_REFRESH_PENDING est mis à 0. Tous les champs de toutes les entrées de la structure de donnée RH_TABLE sont mis à 0, Dans le premier mode de mis en œuvre décrit, et en référence à la , au cours du fonctionnement normal du dispositif de mémoire DRAM et à chaque activation d’un banc qui cible un rang appartenant à un sous-banc b, la logique de prévention exécute les traitements suivants : si RH_TABLE[ b ].FRACTION_ACC == PARAM_D-1, alors : RH_TABLE[ b ].FRACTION_ACC est mis à 0, RH_TABLE[ b ].REFRESH_ACC est incrémenté de 1, NBR_REFRESH_PENDING est incrémenté de 1 autrement RH_TABLE[ b ].FRACTION_ACC est incrémenté de 1. Dit autrement, dans ce premier mode de mise en œuvre, à chaque activation d’un rang d’un sous-banc b de la mémoire, on exécute une étape d’incrémentation d’un nombre requis de rafraichissement préventif REFRESH_ACC en réalisant les étapes suivantes : si le compteur d’activation FRACTION_ACC du sous-banc b atteint le seuil d’activations PARAM_D-1, on incrémente le nombre requis de rafraichissement préventif REFRESH_ACC du sous-banc b , le compteur de rafraichissement en attente NBR_REFRESH_PENDING est incrémenté et on remet à 0 le compteur d’activation FRACTION_ACC associé au sous-banc b . dans le cas contraire, on incrémente le compteur d’activation FRACTION_ACC du sous-banc b comprenant le rang activé. L’incrémentation de FRACTION_ACC se fait donc modulo le seuil d’activations PARAM_D. De manière concourante, en tâche de fond, la logique de prévention de ce premier mode de mise en œuvre exécute une séquence de rafraichissement préventif représentée sur la . Tant que le compteur de rafraichissement en attente NBR_REFRESH_PENDING n’est pas nul (et plus généralement tant qu’il excède une valeur plancher), alors la logique de prévention insère dès que possible, dans le flot de commandes en direction du banc, un rafraichissement préventif d’un rang, dont elle calcule l’index topologique comme suit : La structure de donnée RH_TABLE est parcourue afin d’identifier une entrée j (i.e. un sous-banc) ayant un nombre requis de rafraichissement préventif REFRESH_ACC présentant la valeur la plus élevée. Si plusieurs entrées sont à égalité, l’une d’entre elles est choisie. De la sorte, on identifie, au cours d’une étape de repérage, le sous-banc j du dispositif de mémoire ayant le plus besoin de rafraichissement préventif. le champ RH_TABLE[ j ].REFRESH_ACC est décrémenté de 1, c’est-à-dire que le nombre requis de rafraichissement préventif associé au sous-banc j est décrémenté de 1. la logique décrémente le compteur de rafraichissement en attente NBR_REFRESH_PENDING. L’index topologique relatif du rang du sous-banc j choisi pour le rafraichissement préventif est la valeur de la structure de donnée RH_TABLE[ j ].RELATIVE_INDEX et on déclenche une opération de rafraichissement préventif d’un rang d’index courant RELATIVE_INDEX du sous-banc j en question. RH_TABLE[ j ].RELATIVE_INDEX est incrémenté modulo S , c’est-à-dire que l’on incrémente l’index courant RELATIVE_INDEX du sous-banc j, modulo S pour parcourir en cycle ce sous-banc. On note que l’emploi d’un compteur de rafraichissement en attente NBR_REFRESH_PENDING tel que cela a été présenté dans ce mode particulier de mise en œuvre n’est pas indispensable. Au lieu d’être conditionnée par la non-nullité de ce compteur NBR_REFRESH_PENDING, l’exécution de la séquence de rafraichissement préventif (et notamment le repérage d’un besoin de rafraichissement préventif d’un sous-banc j ) peut être réalisé inconditionnellement, sans même savoir si une entrée de la structure de données contient un nombre requis de rafraichissement préventif REFRESH_ACC non nul. On note également que le couple {REFRESH_ACC, FRACTION_ACC} représente un nombre non entier, dont REFRESH_ACC est la partie entière, cette dernière indiquant pour un sous-banc donné le nombre d’opérations de rafraichissement préventif en attente. Dans ce premier mode de réalisation à génération différée, il peut être strictement supérieur à 1, c’est-à-dire qu’un sous-banc peut avoir été activé un nombre suffisant de fois pour nécessiter une pluralité de rafraichissements préventifs sans qu’une telle opération n’ait encore été déclenchée. Comme cela sera présenté dans une section ultérieure de cette description, le nombre requis de rafraichissement préventif peut également présenter des valeurs non entières. La recherche dans la structure de donnée RH_TABLE n’est pas limitée, contrairement à la solution proposée par FR3066842A1, par le temps minimum très court séparant deux activations, mais par le temps nettement plus long et flexible séparant l’insertion de deux rafraichissements préventifs. Dans le premier mode de mise en œuvre, le nombre requis de rafraichissement préventif REFRESH_ACC de chaque sous-banc est mémorisé dans une structure de données RH_TABLE. Les compteurs et les index courant de cette structure, associés aux sous-bancs, stockent en quelque sorte les rafraichissements préventifs en attente de réalisation, l’opération elle-même étant déclenchée au moment où elle est réalisable. Ceci présente l’avantage de ne pas nécessiter de mémoire tampon, mais une tache de fond doit parcourir les compteurs associés aux sous-bancs à la recherche des opérations de rafraichissement en attente. La séquence de rafraichissement préventif peut prendre d’autres formes que celle visant à parcourir au cours de l’étape de repérage, en tâche de fond, la structure de données RH_TABLE, comme on vient de le présenter dans le mode de mise en œuvre avec génération différé. Ainsi, selon un second mode de mise en œuvre dit « avec génération immédiate » la séquence de rafraichissement préventif est exécutée directement à l’issue de l’étape d’incrémentation du nombre requis de rafraichissement préventif REFRESH_ACC d’un sous-banc b. Dans ce cas, et en référence à la , on prépare l’opération de rafraichissement préventif du sous-banc b en question si le nombre requis de rafraichissement préventif REFRESH_ACC de ce sous-banc atteint ou excède le seuil de 1. Cette comparaison constitue l’étape de repérage de la séquence de rafraichissement. Les étapes suivantes de la séquence de rafraichissement préventif sont poursuivies, puis le nombre requis REFRESH_ACC est décrémenté. De ce fait REFRESH_ACC ne peut excéder la valeur de 1, et ne peut avoir cette valeur que très momentanément, aussi il est éventuellement possible dans le mode dit « avec génération immédiate » de se passer entièrement du champ REFRESH_ACC, la valeur de rafraichissement n’étant alors plus représentée que par la valeur non entière (fractionnaire en fait) FRACTION_ACC, cette valeur restant toujours inférieur à 1. C’est pourquoi sur la , les étapes d’incrémentation et de décrémentation de ce compteur, optionnelles sont placées entre parenthèses. Dans ce second mode de mise en œuvre à génération immédiate, une opération de rafraichissement préventif est déclenchée au moment même où le besoin est découvert et, si elle ne peut pas être exécutée immédiatement, la requête est momentanément stockée dans une mémoire tampon, par exemple non limitatif un tampon FIFO, en attendant sa réalisation. L’étape de repérage d’un besoin de rafraichissement préventif d’un sous-banc est réalisée de façon concomitante à l’étape d’incrémentation du compteur REFRESH_ACC (ou du compteur FRACTION_ACC), elle ne forme plus une tâche de fond, mais un ajout à la séquence déclenchée à chaque activation d’un rang, comme cela est bien visible sur la figure 2. Ce second mode présente l’avantage de ne pas nécessiter de tache de fond parcourant les compteurs associés aux sous-bancs. Principe général de fonctionnement Le rafraichissement, par la logique de l’invention, de la totalité des rangs d’un sous-banc donné forme un cycle de rafraichissement préventif de ce sous-banc. Contrairement aux fenêtres de rafraichissements, un cycle de rafraichissement préventif n’est pas associé à une notion de temps ou de délai, le temps pris par un cycle de rafraichissement préventif n’étant pas limité : si les rangs d’un sous-banc ne sont jamais activés, le cycle de rafraichissement courant de ce sous-banc n’avance pas, et donc prend un temps infini. Chaque activation d’un rang appartenant à un sous-banc, contribue à l’avancement du cycle de rafraichissement préventif courant de ce sous-banc, ce cycle de rafraichissement balayant circulairement ce sous-banc. Le seuil d’activations PARAM_D permet d’établir un pourcentage d’avancement du cycle de rafraichissement d’un sous-banc pour chaque activation d’un rang de ce sous-banc. Ce paramètre (i.e. ce pourcentage d’avancement, aussi désigné par « coefficient d’avancement » dans la suite de cette description, défini par la valeur 1/PARAM_D ; ou plus généralement par la valeur PARAM_N / PARAM_D comme détaillé plus loin) est choisi de telle façon qu’un cycle de rafraichissement préventif est effectué en moins d’activations que le nombre minimal d’activations nécessaire pour endommager le contenu d’un rang par martelage de ces voisins (la valeur critique de martelage). Ainsi, si le compteur d’activation FRACTION_ACC fait 5-bit de large, les valeurs possibles pour le seuil d’activations PARAM_D vont de 1 à 32 : PARAM_D == 1 1 activation donne 1 rafraichissement préventif coefficient de rafraichissement préventif = 100 % PARAM_D == 2 2 activations donnent 1 rafraichissement préventif coefficient de rafraichissement préventif = 50 % . . . PARAM_D == 31 31 activations donnent 1 rafraichissement préventif coefficient de rafraichissement préventif = 3.2 % PARAM_D == 32 32 activations donnent 1 rafraichissement préventif coefficient de rafraichissement préventif = 3.1 % A titre d’exemple, et en considérant un banc composé de 65536 rangs divisé en 256 sous-bancs de 256 rangs chacun, la structure de données RH_TABLE a 256 entrées, une pour chaque sous-banc. Pour une valeur de martelage critique d’un rang vis à vis du rang immédiatement adjacent de 5000, un procédé conforme à l’invention ne calcule pas de valeur d’agression subit, et il n’a donc pas besoin des coefficients de martelage pour les portées supérieures à 1. Il faut néanmoins qu’en 5000 activations, les 256 rangs d’un sous banc aient été rafraichis préventivement, c’est-à-dire que le coefficient d’avancement doit être de 256 / 5000, soit 5.12 %. Une valeur du seuil d’activations PARAM_D de 19, offrant un coefficient d’avancement de 5.2 %, fournit le coefficient d’avancement le plus faible qui semble approprié. En considérant que les rafraichissements préventifs sont eux même en fait des activations, un calcul du coefficient d’avancement est donné par : 256 / (5000-256) = 5.39 % Aussi une valeur du seuil d’activation PARAM_D de 18 détermine un coefficient d’avancement de 5.55%. Il devient alors impossible, avec un tel coefficient d’avancement, entre deux cycles de rafraichissement préventif, de marteler un rang suffisamment de fois pour endommager les contenus des rangs voisins, car ces rangs voisins auront été préventivement rafraichis avant d’atteindre la valeur critique de martelage. Plus un sous-banc a une taille petite, plus le coefficient d’avancement requis est faible, et donc plus la pénalité de performance (% de rafraichissement préventif par activation) est faible. Gestion des e ffets aux jonctions des sous-bancs Les sous-bancs d’un banc de la DRAM peuvent être physiquement séparés par une distance et/ou un élément matériel tel que l’activation d’un rang situé proche d’une des deux extrémités d’un sous-banc ne crée pas de dommage par martelage sur le contenu des rangs d’un sous-banc voisin. C’est le cas notamment quand les sous-bancs sont séparés par des rangées d’amplificateurs intermédiaires de lecture (ou « row of intermediary sense amplifiers » selon la terminologie anglo-saxonne usuelle dans ce domaine). Dans ce cas, la logique décrite dans la section précédente prévient déjà correctement les effets du martelage. Quand des effets du martelage traversent les jonctions de sous-bancs, une première solution d’incursion du cycle de rafraichissement dans les sous-bancs voisins peut être mise en œuvre. Cette solution utilise le concept de marge basse, de marge haute et de cœur du sous-banc : La marge basse externe d’un sous-banc b , est l’ensemble des derniers rangs du sous-banc b -1, qui peuvent être affectés par l’activation d’un des premiers rangs du sous-banc b . La marge basse interne d’un sous-banc b , est l’ensemble des premiers rangs du sous-banc b , qui peuvent être affectés par l’activation d’un des derniers rangs du sous-banc b -1 . La marge haute externe d’un sous-banc b , est l’ensemble des premiers rangs du sous-banc b +1, qui peuvent être affectés par l’activation d’un des derniers rangs du sous-banc b . La marge haute interne d’un sous-banc b , est l’ensemble des derniers rangs du sous-banc b , qui peuvent être affectés par l’activation d’un des premiers rangs du sous-banc b +1 . Le cœur du sous-banc b est l’ensemble des rangs du sous-banc b qui n’appartiennent pas aux marges internes, basse ou haute, du sous-banc b. Comme l’effet row hammer est symétrique (ou réciproque : activer le rang i agresse le rang i+n de la même façon qu’ activer le rang i+n agresse le rang i), les définitions des marges impliquent que : La marge basse interne du banc b est la marge haute externe du banc b-1, La marge haute interne du banc b est la large basse externe du banc b+1. Un cycle complet de rafraichissement d’un sous-banc est alors étendu de telle sorte qu’il rafraichisse deux fois les rangs appartenant à ses marges haute et basse (internes et externes). Dans un cycle de rafraichissement comprenant P rafraichissements préventifs en tout, les deux rafraichissements d’un rang MR, appartenant à une marge, sont répartis d’une manière équilibrée : le premier rafraichissement préventif du rang MR étant séparé du second rafraichissement préventif du rang MR par P/2 rafraichissement préventifs ciblant d’autres rangs. Ce double rafraichissement des rangs des marges est avantageux car : Un rang d’une marge peut être agressé par les activations dans son propre sous-banc jusqu'à la valeur : « martèlement critique -1 », Un rang d’une marge peut être agressé par les activations dans le sous-banc le plus proche jusqu'à la valeur : « martèlement critique -1 », en conséquence le potentiel d’agression d’un rang de marge est le double de celui d’un rang du cœur, d’où le besoin de rafraichir préventivement les rangs des marges à un rythme double de celui des rangs du cœur. Ceci est atteint en ayant chaque cycle de rafraichissement préventif rafraichissant deux fois, d’une manière équilibrée, les rangs des marges, internes et externes, du sous-banc correspondant. Si nécessaire le champ mémorisant l’index courant RELATIVE_INDEX est élargi afin d’avoir une dynamique suffisante pour balayer les marges deux fois en plus de balayer le cœur du sous-banc une fois. Une autre solution au problème de martelage aux jonctions de sous-bancs vise à incrémenter le nombre requis de rafraichissement préventif REFRESH_ACC associé à un sous-banc voisin. Cette solution peut être mise en œuvre par application des règles suivantes : lors d’une activation d’un des premiers rangs du sous-banc b , une étape d’incrémentation du champ RH_TABLE[ b -1].REFRESH_ACC est également réalisée. lors d’une activation d’un des derniers rangs du sous-banc b , une étape d’incrémentation du champ RH_TABLE[ b +1 ].REFRESH_ACC est également réalisée. Dit autrement, lorsque le rang activé du sous-banc b est l’un des premiers rangs du sous banc b on réalise les opérations de gestion du ROW Hammer sur le banc b comme précédemment décrit, mais également sur le banc b-1, comme si l’activation avait également concernée un rang de ce banc. Similairement, lorsque le rang activé du sous-banc b est l’un des derniers rangs du sous banc b on réalise les opérations de gestion du ROW Hammer sur le banc b comme précédemment décrit, mais également sur le banc b+1, comme si l’activation avait également concernée un rang de ce banc. Ces premiers/derniers rangs peuvent, à titre d’exemple, concerner les 2, 3 ou 5 premiers/derniers rangs du sous banc b . D’une manière plus générale encore, cette approche peut être avantageusement intégrée au premier mode de mise en œuvre décrit du procédé de mise à jour lors d’une activation de rang : lors d’une activation, il faut procéder à une étape d’incrémentation du nombre de rafraichissements préventifs REFRESH_ACC de tous les sous-bancs qui contiennent une ligne subissant une influence par martelage de cette activation. Comme il sera apparent plus loin, cela peut s’appliquer aux sous-bancs de remplacement dont les rangs sont utilisés pour remplacer des rangs défectueux dans des sous-bancs normaux. Ordre de balayage des index dans un sous-banc Indépendamment du fait qu’un cycle de rafraichissement inclue des marges ou pas, l’ordre de balayage des rangs n’a pas d’importance, du moment qu’il est fixe pour un sous banc donné (et les marges associées s’il y a lieu) et que les rafraichissements doubles soient répartis d’une manière équilibrée. Pour la simplicité des explications, une incrémentation, modulo S , a été assumée, mais tout ordre de balayage, respectant avantageusement les règles précitées, convient, du moment que chaque rang du sous-banc considéré, ainsi que les marges éventuelles, soit atteint par le balayage. On peut notamment prévoir, de manière très avantageuse de sur-rafraichir les rangs, identifiés comme plus sensibles au martelage de rang, du dispositif mémoire DRAM (ces rafraichissements devant être répartis de manières équilibrées eux aussi). Les cycles de rafraichissements peuvent ainsi être tels que les rangs identifiés, lors des tests de fabrication, comme plus particulièrement sensibles au martelage, peuvent être configurés de telle façon que les cycles de rafraichissement parcourant les sous-bancs auxquels ils appartiennent les rafraichiront plusieurs fois, les multiples rafraichissements d’un rang sensible donné étant avantageusement répartis d’une manière équilibrée dans le cycle de rafraichissement correspondant. Les rangs identifiés comme robustes quant à eux peuvent n’être rafraichis que le nombre normal de fois lors d’un cycle de rafraichissement (une fois pour les rangs du cœur, deux fois pour les rangs des marges internes et externes). Ainsi, et à titre d’exemple non limitatif, si un rang sensible S est rafraichi 2 fois dans un cycle de rafraichissement, ces deux rafraichissements étant répartis de manière équilibrée dans le cycle de rafraichissement correspondant, alors le rang S est protégé contre une valeur de martelage critique deux fois plus faible que celle des autres rangs du sous-banc correspondant. A utre s mode s de mise en œuvre du procédé Des variations au premier et au second mode de mise en œuvre du procédé peuvent exploiter des représentations alternatives du pourcentage d’avancement du cycle de rafraichissement par activation, assurant qu’un cycle complet de rafraichissement préventif d’un sous-banc soit opéré avant que le nombre d’activations de rangs dans le sous-banc n’excède la valeur critique de martelage. Ainsi, et selon une variante aux modes de mise en œuvre du procédé qui viennent d’être présentés, dit « par représentation fractionnelle à dénominateur implicite », on peut se passer du compteur d’activation REFRESH_ACC. Dans un tel mode, le champ FRACTION_ACC de la structure de données RH_TABLE est élargi d’au moins la largeur qu’avait le compteur d’activation REFRESH_ACC. Dans un tel cas, le nombre requis de rafraichissement préventif est donné par la partie entière du ratio FRACTION_ACC / PARAM_D et le procédé comprend, à chaque activation, l’incrémentation systématique du compteur d’activation FRACTION_ACC, par une valeur PARAM_N. PARAM_N est un paramètre associé à un sous-banc, strictement inférieure au seuil d’activation PARAM_D de ce sous banc, et qui peut être constant pour une implémentation donnée. Quand une opération de rafraichissement préventif est déclenchée (pour être réalisée immédiatement ou stockée dans un tampon) alors le champ FRACTION_ACC correspondant est décrémenté du seuil d’activations PARAM_D. Cette approche exprime le coefficient d’avancement par le ratio PARAM_N / PARAM_D. Cette représentation présente l’inconvénient de rendre plus difficile la mise à jour du compteur de rafraichissement en attente NBR_REFRESH_PENDING, mais comme déjà indiqué, cette variable n’est pas indispensable à la mise en œuvre d’un procédé conforme à l’invention. Lorsque le martelage est susceptible de traverser les jonctions de sous-bancs, le procédé peut être adapté à l’utilisation du paramètre PARAM_N : lors d’une activation d’un des premiers rangs du sous-banc b , une étape d’incrémentation du champ RH_TABLE[ b -1].FRACTION_ACC est réalisée, la valeur d’incrément utilisée étant une valeur inférieure ou égale au paramètre PARAM_N. lors d’une activation d’un des derniers rangs du sous-banc b , une étape d’incrémentation du champ RH_TABLE[ b +1].FRACTION_ACC est réalisée, la valeur d’incrément utilisée étant une valeur inférieure ou égale au paramètre PARAM_N. La valeur d’incrémentation est choisie inférieure au paramètre PARAM_N quand la puissance de l’effet du martelage à travers une jonction de sous-bancs est plus faible qu’entre deux rangs voisins d’un même sous-banc. Simplification de la recherche dans la structure de données RH_TABLE pour repér er un besoin de rafraichissement préventif d’un sous-banc La personne du métier comprendra que, tout en restant dans le cadre de la présente invention, la séquence de rafraichissement préventif s’exécutant en tâche de fond du premier mode de mise en œuvre dite à génération différée peut être simplifiée. A titre d’exemple, au lieu de rechercher dans la structure de donnée RH_TABLE l’entrée ayant un champ REFRESH_ACC (ou un champ FRACTION_ACC) avec la valeur la plus élevée (représentatif du nombre requis de rafraichissement préventif), on pourra choisir dans cette structure la première entrée ayant un champ REFRESH_ACC (ou un champ FRACTION_ACC) présentant une valeur exprimant le fait qu’au moins un rafraichissement soit en attente (par exemple un nombre supérieur ou égal à 1 dans le cas du premier mode de mise en œuvre du procédé). Dans cette hypothèse il est même possible de supprimer la recherche en tâche de fond sans recourir à un tampon additionnel, comme cela est nécessaire dans le second mode de mise en œuvre. A cet effet, la structure de données TABLE_RH est élargie par l’ajout à chacune de ses entrées d’un champ nommé NEXT, ce champ étant destiné à contenir un index désignant une entrée de la table RH ou à prendre une valeur de fin de liste LIST_END indiquant qu’il ne désigne aucune entrée de la table RH. La logique est également munie d’une variable de tête de liste FIRST, ayant les mêmes capacités de mémorisation qu’un champ NEXT de la structure de données TABLE_RH. La variable de tête de liste FIRST et les champs NEXT des entrées la structure de données TABLE_RH permettent la construction d’une liste chainée d’entrées à l’intérieur de la structure de données TABLE_RH elle-même, chaque élément de la liste correspondant à un sous-banc ayant un besoin d’une opération de rafraichissement préventif. La première entrée de la liste est désignée par le contenue de la variable de tête de liste FIRST. Une liste vide est signalée par le fait que la variable de tête de liste FIRST contienne la valeur de fin de liste LIST_END. Un élément quelconque L de la liste pointe sur l’élément suivant M de la liste via son champ RH[L].NEXT, c’est-à-dire RH[L].NEXT = M. Le dernier élément de la liste est repéré par le fait que son champ NEXT présente la valeur de fin de liste LIST_END. Cette liste chainée est mise à jour de telle façon qu’elle contienne toutes les entrées de la structure de données TABLE_RH ayant un nombre requis de rafraichissement préventifs non nul. A l’initialisation du dispositif mémoire (RESET), la variable de tête de liste FIRST est mis à la valeur de fin de liste LIST_END, indiquant par ce fait que la liste des sous-banc ayant un nombre requis de rafraichissement préventifs non nul est initialement vide : FIRST = LIST_END, Quand une étape d’incrémentation, réalisée suite à une activation d’un sous-banc, fait passer le nombre requis de rafraichissement préventif d’une entrée (i.e. d’un sous-banc) J de 0 à 1, alors l’entrée J correspondante est insérée dans la liste de la façon suivante : RH[J].NEXT = FIRST, FIRST = J, Quand le nombre requis de rafraichissement préventif d’une entrée est non nul, alors l’augmentation de ce nombre ne modifie ni la variable de tête de liste FIRST ni aucun champ NEXT. En d’autres termes, une entrée de la structure de donnée n’est insérée qu’une seule fois dans la liste, au passage de 0 à 1 du nombre requis de rafraichissement préventif. Le passage de ce nombre à des valeurs supérieures à 1 n’a aucun effet sur la liste. Quand il y a une opportunité pour déclencher une opération de rafraichissement préventif, la séquence de rafraichissement préventif est engagée et, au cours de l’étape de repérage, on choisit l’entrée de la structure de données TABLE_RH désignée par la variable de tête de liste FIRST. Dans le cas où cette variable FIRST a pour valeur la valeur de fin de liste LIST_END, alors il n’y a pas de rafraichissement préventif à réaliser. Quand le déclenchement d’une opération de rafraichissement préventif d’un sous-banc fait passer, pour l’entrée J correspondante, le nombre requis de rafraichissement préventif de 1 à 0, alors l’entrée J est retirée de la liste de la façon suivante : FIRST = RH[J|.NEXT Ainsi, il n’est plus besoin de faire une recherche en tâche de fond dans la table RH au cours de l’étape de repérage, car une liste des entrées ayant des rafraichissements en attente est maintenue de façon permanente : Lors de la réalisation d’une étape d’incrémentation : par l’insertion si nécessaire dans la liste de l’entrée correspondante. Lors du déclenchement d’une opération de rafraichissement : par la suppression si nécessaire dans la liste de l’entrée correspondante. La personne du métier comprendra que la méthode visant à former une liste de sous-bancs ayant un nombre requis de rafraichissement préventifs non nul a été décrite à fin d’exemple non limitatif. La gestion de la liste peut être modifiée de multiples manières, par exemple par l’ajout d’une variable de fin de liste LAST, désignant le dernier élément de la liste, et permettant ainsi l’insertion d’un nouvel élément à la fin de la liste plutôt qu’à son début. Une telle approche peut être bénéfique dans la réalisation d’une procédure de gestion des rafraichissements préventif qui permette d’éviter qu’un besoin en rafraichissement préventif lié à un sous-banc donné ne soit retardé indéfiniment par de nouvelles activations ciblant d’autres sous-bancs. Il est à noter que le fait d’utiliser un algorithme de recherche simplifié ou utilisant une liste peut avoir pour conséquence la nécessité de prévoir des marges accrues dans le calcul des paramètres du procédé, notamment dans le cas où l’obtention d’un créneau temporel pour effectuer un rafraichissement préventif souffre d’une latence significative. La seule contrainte que doit préférentiellement respecter la séquence de rafraichissement préventif s’exécutant en tâche de fond est d’éviter une famine : une entrée de la structure de données RH_TABLE ayant un nombre non nul de rafraichissement préventif requis, ne doit pas être déniée la possibilité d’avancer le cycle de rafraichissement préventif correspondant pendant un temps indéfini. Usage par défaut d’un créneau temporel de rafraichissement préventif Si un créneau temporel pour faire un rafraichissement préventif est disponible, et ne peut être exploité que pour ce genre de rafraichissement, et si une recherche dans la structure de donnée RH_TABLE ou dans la liste ne fournit pas de candidat pour un rafraichissement ciblé, alors la meilleure politique par défaut consiste à choisir d’avancer le cycle de rafraichissement (c’est-à-dire de déclencher une opération de rafraichissement) du sous-banc dont l’entrée dans la structure RH_TABLE présente un champ FRACTION_ACC qui est le plus grand, donc le plus proche du seuil déterminant le fait qu’un rafraichissement préventif soit en attente. L’exécution de ce rafraichissement préventif, au lieu de décrémenter FRACTION_ACC, met ce champ à 0, évitant ainsi à ce champ d’acquérir une valeur négative ou incohérente. Insertion des rafraichissement s préventifs La logique de prévention du martelage insère des rafraichissements préventifs dans le trafic de commande à destination du banc. Ceci peut être fait, par exemple, des manières suivantes : en empruntant des créneaux temporels de rafraichissements périodiques, les rafraichissements périodiques étant retardés d’un délai suffisamment court pour que cela ne pose pas de problèmes, en ayant dans le protocole mémoire, un quota suffisant de créneaux temporels pour des rafraichissements préventifs, en indiquant au contrôleur mémoire que celui-ci doit générer un ou plusieurs créneaux temporels pour des rafraichissements préventifs, dont la logique de prévention fournira les index topologiques de rang. La personne du métier comprendra que la résolution du problème d’insertion du trafic de rafraichissement préventif dépend également de la place (soit le contrôleur de la mémoire DRAM, soit le circuit buffer connu sous l’acronyme RCD entre le contrôleur mémoire et la DRAM, ou alors la DRAM elle-même) où la logique ici décrite est utilisée, ainsi que des capacités du protocole entre le contrôleur mémoire et les mémoires. Il est à noter que si la logique est placée dans une mémoire DRAM comprenant un ou plusieurs processeurs intégrés, le procédé d’insertion décrit par le document FR3066842A1 peut être utilisé. D’autres procédés, nécessitant ou pas une coordination avec le contrôleur mémoire, peuvent être aussi utilisés. Logique de prévention commune à plusieurs bancs Au lieu d’associer une logique de prévention de ROW Hammer à chaque banc, une telle logique peut être associée à plusieurs bancs. Par exemple si une même logique est associée à deux bancs B1 et B2, alors quand un rang est activé dans un sous banc b de B1 ou de B2, l’entrée de la table RH_TABLE[ b ] est mise à jour comme expliqué précédemment. Quand la logique détecte qu’un rafraichissement préventif doit être effectué pour le rang R , alors les rangs R des bancs B1 et B2 sont rafraichis préventivement. Remplacement de rangs & martelage Lors de la fabrication d’une mémoire DRAM, un rang détecté comme défectueux peut être remplacé par un rang de remplacement (rechange, « spare ROW » en anglais), un ensemble de rangs de remplacement étant disponible pour la réparation des bancs mémoires. Ces remplacements se font par la programmation, électrique ou laser, de fusibles de configuration de réparation. La topologie du banc mémoire est de ce fait changée. Par exemple le rang d’index topologique 30 et le rang d’index topologique 2030 d’un même banc mémoire sont remplacés par les rangs de remplacement 0 et 1 respectivement, ces deux derniers étant physiquement adjacents. La logique de prévention ne va pas naturellement envisager de possibilité de martelage entre les rangs 30 et 2030 car ils sont trop éloignés l’un de l’autre, appartenant à des sous-bancs qui ne sont même pas voisins. Mais en fait ils peuvent s’affecter via un effet martelage, car les rangs les remplaçant sont en fait adjacents. Pour résoudre une telle situation, on regroupe les rangs de remplacement en blocs de remplacement, ces derniers étant configurés pour respecter les principes suivants : A l’intérieur d’un bloc de remplacement, les rangs sont séparés par la distance séparant habituellement deux rangs, et donc ils peuvent causer du martelage entre eux. Les blocs de remplacement sont séparés les uns des autres par des blindages électriques ou tout autre moyen empêchant un rang d’un bloc de remplacement de causer du ROW Hammer sur un rang d’un autre bloc de remplacement. Par exemple ces blindages peuvent être réalisés par des rangs, non utilisés comme mémoire, dont les lignes de sélections sont maintenues à une valeur électrique constante. Les rangs d’un bloc de remplacement ne peuvent servir qu’à remplacer des rangs défectueux que d’un seul sous-banc, et plusieurs blocs de remplacement peuvent par contre servir à remplacer des rangs défectueux d’un seul sous-banc. Le respect de ces principes assure que la justesse d’un procédé conforme à l’invention n’est pas affectée par le remplacement de rang dans les sous-bancs. Il est possible de partager un bloc de remplacement entre plusieurs sous-bancs à la condition que tous les rangs de ce bloc de remplacement fassent partis des cycles de rafraichissement de tous les sous-bancs partageant ce bloc. Une autre façon de partager un bloc de remplacement est que les blocs de remplacement soient eux même des sous-bancs, les sous-bancs de remplacement ayant éventuellement un nombre différent de rangs, ces sous-bancs de remplacement n’ayant préférablement pas de marges, l’activation de n’importe quel rang d’un sous-banc normal, ce dernier ayant des rangs remplacés par des rangs de remplacement d’un ou de plusieurs sous-bancs de remplacement, résultant dans la réalisation d’étapes d’incrémentation sur le sous-banc normal et sur le ou les sous-bancs de remplacement, l’étape d’incrémentation utilisant pour ce ou ces derniers un ou des seuils d’activation adaptés aux nombre de rangs qu’ils possèdent. Une autre façon de partager un sous-banc de remplacement est d’avoir une étape de translation d’index de rang, réalisé par une logique configurée par des fusibles de réparation, où un rang défectueux a son index topologique transformé en l’index topologique du rang le remplaçant, le rang remplaçant étant situé dans un sous-banc de remplacement, ce sous-banc de remplacement étant sujet à l’étape d’incrémentation à la place du sous-banc normal comprenant le rang remplacé quand une activation cible initialement ce dernier. Intégrations des rafraichissement périodiques Il est possible d’intégrer en partie la logique de rafraichissement périodique à la logique de rafraichissement préventif : la logique de rafraichissement périodique choisissant périodiquement un sous-banc, et réalisant une étape d’incrémentation de la valeur (REFRESH_ACC ; REFRESH_ACC/PARAM_D) indiquant qu’un rafraichissement préventif est requis, assurant de ce fait, et même en l’absence d’activation, que le cycle de rafraichissement préventif de chaque sous-banc soit réalisé en un temps qui soit maintenant borné, assurant par ce fait également la fonction de rafraichissement périodique, un tel cycle de rafraichissement étant appelé cycle de rafraichissement mixte. Cette étape d’incrémentation périodique peut utiliser une valeur d’incrément différente de celle utilisée lors d’une activation. Quand le cycle de rafraichissement préventif original ne comprend pas de marge, les sous-bancs ne s’agressant pas les uns les autres, et un cycle de rafraichissement mixte peut être réalisée d’une façon optimale. Quand le cycle de rafraichissement préventif original est étendu pour comprendre les rangs des marges, un cycle de rafraichissement mixte est légèrement sous-optimal car les rangs des marges seront rafraichis périodiquement deux fois plus que nécessaires. Quand la gestion des marges se fait par la réalisation d’une étape d’incrémentation du compteur associé au sous-banc voisin, le cycle mixte ne sera pas optimal là aussi car certains rangs seront rafraichis périodiquement plus que nécessaire. Bien entendu l'invention n'est pas limitée aux modes de mise en œuvre décrits et on peut y apporter des variantes de réalisation sans sortir du cadre de l'invention tel que défini par les revendications. Ainsi, on pourra par exemple envisager : D’exprimer le coefficient d’avancement du cycle de rafraichissement préventif par d’autres méthodes et représentations mathématiques ; D’exprimer un coefficient d’avancement variable durant un cycle de rafraichissement préventif, dont la moyenne des valeurs sur un cycle de rafraichissement est égale à la valeur qui aurait été utilisée pour un ratio constant. D’avancer le cycle de rafraichissement préventif par groupe de rafraichissements préventifs au lieu de l’avancer rafraichissement préventif par rafraichissement préventif ; D’avoir un coefficient d’avancement du cycle de rafraichissement préventif fluctuant en fonction de la fréquence des activations ; D’avoir un coefficient d’avancement du cycle de rafraichissement préventif fluctuant en fonction de la température ou de la tension d’alimentation, ces paramètres influant sur la puissance du phénomène de ROW Hammer ; D’avoir un coefficient d’avancement du cycle de rafraichissement préventif fluctuant en fonction des caractéristiques variables du procédé de fabrication (par exemple vitesse des transistors ou bien capacités, fuites électriques, résistances, inductances des différents constituants du circuit) ; D’avoir un coefficient d’avancement du cycle de rafraichissement d’avancement préventif adapté à la sensibilité particulière des rangs composant les cycles de rafraichissement préventif des sous-bancs : lors des tests de fabrications, une telle sensibilité peut être déterminée, et chaque sous-banc peut être associé à un coefficient d’avancement pour son cycle de rafraichissement préventif qui lui est propre. Les coefficients d’avancement spécifique à chaque sous-banc étant enregistrés dans des fusibles laser, électriques ou autres, ou bien chargé lors de l’initialisation depuis une mémoire non volatile ou tout autre moyen similaire. Procédé de protection d’un dispositif de mémoire DRAM de l’effet de martelage de rang, le dispositif de mémoire comprenant une pluralité de bancs composés de rangs mémoire, le procédé étant mise en œuvre par au moins une logique de prévention configurée pour définir respectivement des sous-bancs comme des sections contiguës de rangs d’un banc, chaque sous-banc étant associé à un seuil d’activations (PARAM_D), et pour exécuter, à chaque activation d’un rang d’un sous-banc (b) de la mémoire, une étape d’incrémentation d’un compteur d’activations (FRACTION_ACC) associé au sous-banc (b) et la détermination d’un nombre requis de rafraichissement préventif (REFRESH_ACC ; FRACTION_ACC/PARAM_D) de ce sous-banc (b); la logique de prévention étant également configurée pour exécuter une séquence de rafraichissement préventif comprenant : - une étape de repérage d’un besoin de rafraichissement préventif d’un sous-banc (j) du dispositif de mémoire ; - une étape de déclenchement d’une opération de rafraichissement d’un rang d’index courant (RELATIVE_INDEX) associé au sous-banc (j) en question ; - une étape d’incrémentation de l’index courant (RELATIVE_INDEX) associé au sous-banc (j) ; - la décrémentation du nombre requis de rafraichissement préventif (REFRESH_ACC ; FRACTION_ACC/PARAM_D) de ce sous-banc (b); l’opération de rafraichissement formant une étape d’un cycle de rafraichissement préventif conduisant à rafraichir au moins les rangs du sous-banc (j), et le seuil d’activations (PARAM_D) du sous-banc (j) étant choisi pour qu’un cycle complet de rafraichissement préventif de ce sous-banc (j) soit opéré avant que le nombre d’activation de rangs dans le sous-banc (j) n’excède une valeur de martelage critique. Procédé de protection selon la revendication précédente dans lequel le nombre requis de rafraichissement préventif (REFRESH_ACC ; FRACTION_ACC/PARAM_D) de chaque sous-banc (b) est mémorisé dans une structure de données (RH_TABLE). Procédé de protection selon la revendication précédente dans lequel l’étape de repérage d’un besoin de rafraichissement préventif d’un sous-banc (j) comprend parcourir la structure de données (RH_TABLE) pour identifier un sous-banc (j) dont le nombre requis de rafraichissement préventif (REFRESH_ACC ; FRACTION _ACC/PARAM_D) est supérieur ou égale à 1. Procédé de protection selon l’une des revendications 1 à 3 dans lequel la détermination du nombre requis de rafraichissement préventif comprend l’incrémentation d’un compteur de rafraichissement en attente (NBR_REFRESH_PENDING), la séquence de rafraichissement préventif comprend une étape de décrémentation du compteur de rafraichissement en attente (NBR_REFRESH_PENDING), et la séquence de rafraichissement préventif est exécutée répétitivement tant que le compteur de rafraichissement en attente (NBR_REFRESH_PENDING) excède une valeur plancher. Procédé de protection selon la revendication 2 dans lequel l’index d’un sous-banc (b) est inséré dans une liste de sous-bancs en attente de rafraichissement lorsque le nombre requis de rafraichissement préventif (REFRESH_ACC ; FRACTION_ACC/PARAM_D) de ce sous-banc (b) atteint la valeur 1. Procédé de protection selon la revendication précédente dans laquelle la liste est formée en chainant entre eux des entrées de la structure de données (TABLE_RH). Procédé de protection selon l’une des deux revendications précédentes dans lequel l’étape de repérage consiste à identifier que la liste de sous-bancs en attente de rafraichissement est non vide. Procédé de protection selon l’une des trois revendications précédentes dans lequel l’index d’un sous-banc (b) est retiré de la liste lorsque le nombre requis de rafraichissement préventif (REFRESH_ACC ; FRACTION_ACC/PARAM_D) de ce sous-banc (b) passe sous la valeur 1. Procédé de protection selon l’une des revendications précédentes dans lequel le nombre requis de rafraichissement préventif (REFRESH_ACC ; FRACTION_ACC/PARAM_D) de tous les sous-banc est inférieur à 1, et l’étape de repérage d’un besoin de rafraichissement préventif du sous-banc (j) comprend l’identification, dans la structure de données (RH_TABLE), du sous-banc (j) dont le compteur d’activation (FRACTION_ACC) est maximum et la remise à zéro de ce compteur (FRACTION_ACC) suite au déclenchement de l’opération de rafraichissement. Procédé de protection selon la revendication 1 ou 2 dans lequel l’étape de repérage est exécutée à l’issue de l’étape d’incrémentation du compteur d’activation (FRACTION_ACC) d’un sous-banc (b), et comprend une comparaison du nombre requis de rafraichissement préventif de ce sous-banc (b) à un seuil déterminé et, le cas échéant, la préparation de l’opération de rafraichissement du sous-banc (b) en question. Procédé de protection selon la revendication précédente dans lequel la préparation de l’opération de rafraichissement comprend son stockage dans une mémoire tampon. Procédé de protection selon l’une des revendications précédentes dans lequel la détermination d’un nombre requis de rafraichissement préventif (REFRESH_ACC) comprend : - une étape d’incrémentation, modulo le seuil d’activation (PARAM_D), du compteur d’activation (FRACTION_ACC) du sous-banc (b) comprenant le rang activé ; - l’incrémentation du nombre requis de rafraichissement préventif (REFRESH_ACC) du sous-banc (b), si l’incrémentation modulo le seuil d’activation (PARAM_D) a remis à zéro le compteur d’activation (FRACTION_ACC) du sous-banc (b). Procédé de protection selon la revendication précédente dans lequel le compteur d’activation est incrémenté d’un paramètre (PARAM_N) strictement inférieur au seuil d’activation (PARAM_D). Procédé de protection selon l’une des revendications précédentes dans lequel le cycle de rafraichissement préventif conduit également à rafraichir les rangs d’une marge basse externe et/ou d’une marge haute externe du sous-banc (j). Procédé de protection selon l’une des revendications 1 à 13 dans lequel le rang activé du sous-banc (b) est l’un des premiers rangs, ou respectivement l’un des derniers rangs, du sous-banc (b) et l’étape d’incrémentation comprend également l’incrémentation du compteur d’activation (FRACTION_ACC) associé au sous-banc inférieur (b-1) au rang activé, ou respectivement associé au sous-banc supérieur (b+1) au rang activé. Procédé de protection selon l’une des revendications précédentes dans lequel le seuil d’activations (PARAM_D) d’un sous-banc est variable avec la température, la tension d’alimentation, la fréquence des activations d’un sous-banc, les caractéristiques de la mémoire. Procédé de protection selon l’une des revendications précédentes dans lequel le seuil d’activations (PARAM_D) est distinct d’un sous-banc à un autre. Procédé de protection selon l’une des revendications précédentes dans lequel l’étape de déclenchement d’une opération de rafraichissement comprend l’insertion d’une requête en rafraichissement préventif dans un trafic de commande à destination du banc de la mémoire dans lequel réside le sous-banc (j). Procédé de protection selon l’une des revendications précédentes dans lequel le cycle complet de rafraichissement préventif du sous-banc (i) conduit à rafraichir une pluralité de fois certains rangs du sous-banc (i). Procédé de protection selon l’une des revendications précédentes dans lequel le seuil d’activations (PARAM_D) définit un coefficient d’avancement variable (1/ PARAM_D ; PARAM_N/PARAM_D) durant un cycle complet de rafraichissement préventif d’un sous-banc (j). Procédé de protection selon l’une des revendications précédentes dans lequel la logique de prévention est associée à une pluralité de bancs. Procédé de protection selon l’une des revendications précédentes dans lequel le compteur d’activation (FRACTION_ACC) associé à un sous-banc est incrémenté périodiquement pour mettre en œuvre un rafraichissement périodique de ce sous-banc. Dispositif de mémoire DRAM, circuit buffer ou contrôleur d’un dispositif de mémoire DRAM comprenant une logique de prévention de l’effet de martelage de rang configurée pour mettre en œuvre un procédé de protection selon l’une des revendication 1 à 22. Dispositif de mémoire DRAM selon la revendication précédente dans lequel la mémoire DRAM comprend au moins un processeur intégré. Dispositif de mémoire DRAM selon la revendication 23 ou 24 comprenant une pluralité de blocs de remplacement, les blocs de remplacement étant séparés les uns des autres par tout moyen empêchant un rang d’un bloc de remplacement d’agresser par martelage un rang d’un autre bloc de remplacement. Dispositif de mémoire DRAM selon la revendication précédente dans lequel les rangs d’un bloc de remplacement sont destinés à remplacer des rangs défectueux d’un seul sous-banc. Dispositif de mémoire DRAM selon la revendication 25 dans lequel les rangs d’un bloc de remplacement sont destinés à remplacer des rangs défectueux d’une pluralité de sous-bancs, les rangs composants ce bloc de remplacement faisant tous partis des cycles de rafraichissement préventif des sous-bancs partageant ce bloc de remplacement. Dispositif de mémoire DRAM selon les revendications 25, 26 ou 27, dans lequel le bloc de remplacement est également un sous-banc. Dispositif de mémoire DRAM selon les revendications 23 ou 24, dans lequel les sous-bancs de la DRAM comprennent des rangs de remplacement, et ces rangs de remplacement font partie du cycle de rafraichissement préventif.