掌桥专利:专业的专利平台
掌桥专利
首页

用于保护DRAM存储器装置免受行锤效应的方法和电路

文献发布时间:2023-06-19 19:30:30


用于保护DRAM存储器装置免受行锤效应的方法和电路

技术领域

本发明涉及DRAM(“动态随机存取存储器”)电路并且特别是“行锤”效应的管理的领域。该“行锤”效应是如下事实:在给定的DRAM存储器的存储体(bank)内,重复地激活给定DRAM的一行可能引起物理上相邻的行翻转它们的位中的一些位的值。重复激活的行被称作“攻击者行”,而相邻的行被称作“受害者行”。

背景技术

Kim Dae-Hyun等人在IEEE computer Architecture Letters,IEEE第14卷,第1期(2015年1月1日)中发表的文章“Architectural support for mitigating row hammeringin DRAM memories”公开了预防DRAM装置中的行锤的多种方法。在被称作“基于计数器的行激活”的第一方法中,与存储器装置的行相关联的计数器在该行激活后递增。当与给定行相关联的计数器超过临界值时,刷新该给定行的相邻行。尽管该方法在预防行锤的影响方面是有效的,但是该方法采用大的存储容量来容纳所需数目的计数器,即每行一个计数器。

Seyedzadeh Seyed Mohammad等人在IEEE computer Architecture Letters,IEEE第16卷,第1期(2017年1月1日)中发表的文章“Computer based Tree structure forrow hammering mitigation in DRAM”提出将计数器与一组行相关联以限制计数器的数目,而不是将计数器与每一行相关联。每当来自所述一组行中的行激活时,计数器递增。当与给定的一组行相关联的计数器超过临界值时,则刷新给定组的所有行。尽管该方法确实限制了所需计数器的数目,但它会导致在刷新该组行时无法访问该组行以进行激活的问题。增加每个组中的行数减少了所需计数器的数目,但延长了该组行在其完成刷新期间被阻止访问的时间。相反,减少每个组中的行数减少了组的刷新持续时间,但增加了计数器的数目。

文献FR3066842A1详细说明了用于预防行锤效应的算法,该算法实现了表的使用。该算法特别适合于通常为40000或更多的相对较大的临界锤击值。然而,将日益精细的制造几何结构使用于DRAM已经引起观察到这些具有相对较低的临界锤击值例如低至4800的存储器。

在以上提及的文献中,在部署算法期间使用的表的条目的数目与临界锤击值成反比,这在有必要运用为使用这些较精细几何结构的DRAM而提出的算法的情况下强加了8倍大的条目数。在分隔行的两个激活命令的时间内浏览如此多的条目是成问题的,即使这些条目被分配在并行访问的若干个表上也是如此。

此外,不可否认的是,在这些精细几何结构DRAM存储器中,行锤还会较小程度地影响接近于但不直接与受锤击的攻击者行相邻的受害者行。然而,由文献FR3066842提出的解决方案仅对仅会影响与受锤击的攻击者行直接相邻的两个邻近行的锤击进行管理,这样的现象在该文献中被称为作用域(scope)1的锤击。

通常,作用域1的锤击意指存储器存储体的拓扑索引i的攻击行可能会影响行i-1和行i+1。作用域2的锤击意指行i-2和行i+2也受到影响,但程度较小,而对于更高的作用域则以此类推。由受害者行i所经历的作用域p中的锤击攻击水平可以表示为2×p个邻近行的激活的加权总和:

+(行i-p的激活数)×RH_coeff_p

+(行i-(p-1)的激活数)×RH_coeff_(p-1)

+……

+(行i-2的激活数)×RH_coeff_2

+(行i-1的激活数)×1

+(行i+1的激活数)×1

+(行i+2的激活数)×RH_coeff_2

+……

+(行i+(p-1)的激活数)×RH_coeff_(p-1)

+(行i+p的激活数)×RH_coeff_p

当由该总和得出的攻击水平超过临界值时,则存储在行i中的数据可能已经改变。临界值以以下这样的方式定义:应用于行i-1和行i+1的激活数的系数(RH_coeff)为1,使得作用域1的攻击级别的定义符合通常的和先前的行锤定义。当然,系数RH_coeff_n随着远离受锤击的行而变得越来越弱。这就是考虑有限作用域(1、2、3……)的行锤现象才有用的原因。

使用该加权总和的一般定义能够监测作用域2或更大作用域的锤击现象的逻辑可能太复杂且太慢而无法有效地被集成至DRAM中。

因此,需要能够对作用域大于1(2、3等)的行锤进行管理的算法,所述行锤因此也会以较小的力影响不直接与受锤击的攻击者行相邻的邻近行。

文献US9214216公开了用于保护DRAM存储器装置免受行锤效应的逻辑。根据该文献,存储器单元的行以块进行组织,并且针对每个块计算行的激活数。当块的计数器达到临界锤击值时,通过将试图预防行锤的所有刷新操作重新引导向该块来刷新该块的行。在该块刷新时段期间,逻辑不能够在其他块中执行预防性刷新,这使得该逻辑相对于复杂的锤击场景来说是脆弱的,并且无法完全地保护存储器装置免受该现象。

文献US20200111525公开了旨在除了定期刷新命令以外还发出刷新管理命令以尝试限制锤击现象对存储器装置的影响的方法。该文献特别地试图将预防性刷新操作集成至其他操作中,以有效地使用将主机连接至存储器装置的总线。为此目的,每次所涉及的存储体被激活时,存储体激活计数器递增。当该计数器超过临界值时,发送刷新管理命令,以执行存储体刷新操作。该操作不必立即执行,并且在执行该操作时激活计数器递减。该文献没有以任何方式指定存储体的哪一行必须是刷新操作的对象,也不可能构建预防行锤的影响的逻辑,更不用说保证特定的和可证明的预防。

发明主题

本发明的主要目的是提供一种保护DRAM存储器装置免受行锤效应的方法,该方法至少部分地解决了这些限制。更具体地,本发明的目的是提供一种用于监测DRAM存储器存储体的行激活的方法,该方法足够简单以能够在分隔两个激活的最小时间内被毫无任何问题的执行,并且可以预防作用域大于1的锤击的影响。该方法尤其适用于临界锤击值相对较低例如小于40000的存储器,尽管实际上可以针对任何类型的DRAM存储器采用该方法。

本发明可以集成在存储器控制器、缓冲器电路中或集成在DRAM存储器装置中。DRAM存储器可以集成处理器。

发明内容

为了达到该目的,本发明的目的提出一种保护DRAM存储器装置免受行锤效应的方法,存储器装置包括由存储器行组成的多个存储体,该方法由至少一个预防逻辑实现,该至少一个预防逻辑被配置成将子存储体分别限定为存储体的行的连续部分。

预防逻辑被配置成在激活给定子存储体的行时使给定子存储体的排列(rank)的预防性刷新的所需数目递增小于1的进度系数。

预防逻辑还被配置成执行预防性刷新序列以预防性地刷新子存储体中的至少一个而非所有排列,预防性刷新序列包括:

-识别对存储器装置的子存储体中的确定的子存储体的排列的预防性刷新的需求的步骤,并且在这样的需求下,应用以下步骤:

-触发用于刷新由与所确定的子存储体相关联的当前行索引指定的当前行的操作的步骤;

-使与所确定的子存储体相关联的当前行索引(RELATIVE_INDEX)递增的步骤;

-使所确定的子存储体(j)的排列的预防性刷新的所需数目(REFRESH_ACC,FRACTION_ACC;FRACTION_ACC/PARAM_D)递减的步骤;

根据本发明,预防性刷新序列形成引起至少刷新所确定的子存储体的所有行的预防性刷新周期的步骤,并且在所确定的子存储体中激活的行的数目超过临界锤击值之前,完整地执行所确定的子存储体的预防性刷新周期。

根据本发明的其他有利的和非限制性特征,单独或以任何技术上可行的组合进行以下操作:

-每个子存储体与激活阈值相关联,并且预防逻辑被配置成在每次激活存储器装置的子存储体中的给定子存储体的行时执行使与给定子存储体相关联的激活计数器递增的步骤;

-将每个给定子存储体的预防性刷新的所需数目存储在数据结构中;

-数据结构以树状结构组织;

-识别对所确定的子存储体的预防性刷新的需求的步骤包括浏览数据结构以识别其预防性刷新的所需数目大于或等于1的子存储体;

-确定预防性刷新的所需数目包括使待决刷新计数器递增,预防性刷新序列包括使待决刷新计数器递减的步骤,并且只要待决刷新计数器超过底值,就重复地执行预防性刷新序列;

-当给定子存储体的预防性刷新的所需数目达到值1时,将给定子存储体的索引插入至等待刷新的子存储体的列表中;

-所述列表是通过在数据结构的条目之间对它们进行链接而形成的;

-识别对所确定的子存储体的预防性刷新的需求的步骤在于识别等待刷新的子存储体的列表不为空;

-当给定子存储体的预防性刷新的所需数目低于值1时,给定子存储体的索引将从列表中删除;

-所有子存储体的预防性刷新的所需数目小于1,并且识别对所确定的子存储体的预防性刷新的需求的步骤包括:在数据结构中识别其激活计数器为最大的子存储体,以及在触发用于刷新的操作后复位激活计数器;

-识别对所确定的子存储体的预防性刷新的需求的步骤在使给定子存储体的激活计数器递增的步骤的末尾处执行,并且包括将给定子存储体的预防性刷新的所需数目与确定的阈值进行比较;

-触发用于刷新当前行的操作包括在缓冲存储器中临时存储要实现的刷新操作的描述;

-确定预防性刷新的所需数目包括:

-使给定子存储体的激活计数器递增、对激活阈值取模的步骤;

-在增量对激活阈值取模已经将给定子存储体的激活计数器复位为零的情况下,使给定子存储体的预防性刷新的所需数目递增;

-使激活计数器递增严格小于激活阈值的参数;

-预防性刷新周期还引起将所确定的子存储体的低内边界的行和高内边界的行刷新至少两次;

-在每次激活存储器装置的给定子存储体的行时,使与给定子存储体相关联的激活计数器递增的步骤还使具有由于所述激活而可能被锤击的至少一行的所有其他子存储体的激活计数器递增;

-子存储体的激活阈值随温度、电源电压、子存储体的激活频率或存储器特性而变化;

-不同子存储体的激活阈值不同;

-触发用于刷新当前行的操作的步骤包括将预防性刷新请求插入至旨在用于所确定的子存储体所在的存储器存储体的控制流量中;

-激活阈值在所确定的子存储体的预防性刷新的完整周期期间限定可变的进度系数;

-存储体被分解成不同规模的子存储体;

-预防逻辑与多个存储体相关联;

-每个子存储体都与激活阈值相关联,并且预防逻辑被配置成:定期执行使与每个子存储体相关联的激活计数器递增的步骤,以及确定子存储体的预防性刷新的所需数目。

根据另一方面,本发明提供了一种包括行锤效应预防逻辑的DRAM存储器装置、DRAM存储器装置的缓冲器电路或控制器,所述行锤效应预防逻辑被配置成实现所呈现的保护方法。

根据本发明的其他有利的和非限制性特征,单独或以任何技术上可行的组合进行以下操作:

-DRAM存储器装置包括至少一个集成处理器;

-DRAM存储器装置包括多个替换块,替换块通过防止块的行受到由于对另一替换块的行进行锤击而导致的攻击的任何方式相互分隔;

-替换块的行旨在替换单个子存储体的缺陷行;

-替换块的行旨在替换多个子存储体的缺陷行,组成替换块的行是共享替换块的子存储体的预防性刷新周期的所有部分;

-替换块限定子存储体;

-DRAM子存储体包括替换行,这些替换行是子存储体的预防性刷新周期的一部分。

附图说明

参照附图,根据本发明的以下具体实施方式,本发明的其他特征和优点将变得明显,在附图中:

[图1a]

图1a表示用于保护DRAM存储器装置的方法的实施方式的部分步骤;

[图1b]

图1b表示用于保护DRAM存储器装置的方法的实施方式的预防性刷新序列;

[图2]

图2表示用于保护DRAM存储器装置的方法的第二实施方式;

[图3]

图3表示用于保护DRAM存储器装置的方法的实施方式中的树状数据结构。

具体实施方式

定义和提醒

在本文献中,术语行“拓扑索引”表示该行在DRAM存储体内的物理顺序。默认情况下,当提到行索引或者更简单地提到行时,它即是行拓扑索引。行逻辑索引是指作为用于激活行的ACTIVATE命令的参数传递的行索引,如在JEDEC DDR3/4/5和类似协议中定义的那样。根据实现方式,逻辑索引i的行可以具有与拓扑索引相同的该值i,或者也可以具有不同的值j,并且在这种情况下,函数使得可以根据i获取j。

可回顾的是,DRAM存储器存储体的行被定期地刷新,以补偿它们的存储点随时间的电量下降。存储体中所有行被刷新的时间称作刷新窗口。刷新窗口在时间上相互跟随,刷新窗口r的结束之后是刷新窗口r+1的开始。

还可以预防性地刷新行,以预防锤击效应,正如本描述中的情况一样。如文献FR3066842A1所述,预防性刷新的执行可以在最初设置用于定期刷新的刷新时隙中完成,定期刷新因此被延迟。因此,已经插入预防性刷新的刷新窗口具有比仅执行定期刷新的刷新窗口更长的持续时间,只要保持适度,刷新窗口持续时间的这种增加就不会造成问题。替选方法例如包括预先以相对于定期刷新或相对于执行的行激活数的固定或可变速率为预防性刷新预留时隙。

快速行锤预防算法

现在详细陈述用于保护DRAM存储器装置免受行锤效应的方法的称作延迟生成的第一实施方式。该处理由至少一个预防逻辑实现。包括R行的存储器存储体被划分成相同规模的N个子存储体,或者和在1行内相同,子存储体包括S行或S+1行,其中,S等于R除以N的整数。(S=R/N)。

为了简化说明,子存储体被认为具有相同的行数。本领域技术人员将知道如何推断下面给出的说明,以将它们应用于某些子存储体的行数比其他子存储体的行数多的情况。

子存储体由在拓扑上有顺序的行组成,子存储体之间是拓扑有序的,并且通常子存储体b包含拓扑索引为S×b至(S×(b+1))-1的行。这样,我们可以通过其相对行的拓扑索引来指定该行,如下所示:

·子存储体符号[b][0]指定子存储体b的第一行,

·子存储体符号[b][1]指定子存储体b的第二行,

·子存储体符号[b][2]指定子存储体b的第三行,

·……

·子存储体符号[b][i]指定子存储体b的第(i+1)行,

·子存储体符号[b][S-1]指定子存储体b的最后一行。

预防逻辑与至少一个存储体相关联并且包括储存以下元素,所述元素可以包括:

·命名为NBR_REFRESH_PENDING的待决刷新变量或计数器。

·数据结构,例如命名为RH_TABLE并且包括N个条目(N是子存储体的数目)的表,该表的每个条目包括以下三个字段:

o命名为FRACTION_ACC、形成激活计数器并且从0计数到值PARAM_D-1的字段。PARAM_D是对于给定实现方式可为常数并限定子存储体的激活的阈值的参数。

oREFRESH_ACC字段,其取值范围可以为从0到足够的值。在第一实现模式中,该字段限定了子存储体中的排列的预防性刷新的所需数目(并且更准确地说,是该数目的整数部分,这将在稍后详细说明)。

o命名为RELATIVE_INDEX的当前索引,其取值范围可以为从0到S-1。

当DRAM存储器装置复位(RESET)时,如下所示初始化逻辑:

·NBR_REFRESH_PENDING刷新计数器被设置成0。

·RH_TABLE数据结构中的所有条目的所有字段都被设置成0。

在所描述的第一实现模式中以及参照图1a,在DRAM存储器装置的正常操作期间以及在对存储体的把属于子存储体b的行作为目标的每次激活时,预防逻辑执行以下处理:

·如果RH_TABLE[b].FRACTION_ACC==PARAM_D-1,则:

o RH_TABLE[b].FRACTION_ACC被设置成0,

o RH_TABLE[b].REFRESH_ACC递增1,

o NBR_REFRESH_PENDING递增1,

·否则RH_TABLE[b].FRACTION_ACC递增1。

换句话说,在该第一实现模式中,在每次激活存储器的子存储体b的行时,通过执行以下步骤来执行使预防性刷新REFRESH_ACC的所需数目递增的步骤:

·如果子存储体b的激活计数器FRACTION_ACC等于激活阈值PARAM_D-1,则子存储体b的预防性刷新REFRESH_ACC的所需数目递增,待决刷新计数器NBR_REFRESH_PENDING递增,并且与子存储体b相关联的FRACTION_ACC激活计数器被复位成0。

·否则,包括激活行的子存储体b的激活计数器FRACTION_ACC递增。

因此,对FRACTION_ACC的增量进行了对激活阈值PARAM_D取模。

同时地,在后台,该第一实现模式的预防逻辑执行如图1b中所示的预防性刷新序列。只要待决刷新计数器NBR_REFRESH_PENDING不为零(并且更一般地,只要它超过底值),那么预防逻辑就会在到存储体的命令流中尽可能快地插入行的预防性刷新,预防逻辑会针对该行如下计算拓扑索引:

·扫描RH_TABLE数据结构,以识别出具有含有最高值的预防性刷新的所需数目REFRESH_ACC的条目j(即子存储体)。在若干个条目相等的情况下,选择它们中的一个。这样,在定位步骤期间,识别出存储器装置的最需要预防性刷新的子存储体j。

·RH_TABLE[j].REFRESH_ACC字段递减1,即与子存储体j相关联的预防性刷新的所需数目递减1。

·逻辑使待决刷新计数器NBR_REFRESH_PENDING递减。

·被选择用于预防性刷新的子存储体j的行的相对拓扑索引是数据结构RH_TABLE[j].RELATIVE_INDEX的值,并且所涉及的子存储体j的当前索引行RELATIVE_INDEX的预防性刷新操作被触发。

·RH_TABLE[j].RELATIVE_INDEX递增,对S取模,也就是说,子存储体j的当前索引RELATIVE_INDEX递增,对S取模,以循环通过该子存储体。

注意,如在该特定实现模式中呈现的对待决刷新计数器NBR_REFRESH_PENDING的使用并不是必需的。不同于由该NBR_REFRESH_PENDING计数器的非空性为条件,对预防性刷新序列的执行(并且特别是对子存储体j的预防性刷新的需求的识别)可以无条件地执行,甚至无需知道数据结构的条目是否包含不为零的预防性刷新的所需数目REFRESH_ACC。

由于预防性刷新序列在到存储体的命令流中插入单行(或几行)的预防性刷新,因此该序列不会阻止对子存储体的访问。这就是预防性刷新序列被称为与对子存储体的正常访问“同时”执行的原因。

还注意到,{REFRESH_ACC、FRACTION_ACC}对表示排列的预防性刷新的非整数数目,该对中的REFRESH_ACC是整数部分,后者指示给定子存储体待决预防性刷新操作的数目。在该利用延迟生成的第一实施方式中,它可以严格地大于1,也就是说,子存储体可能已经被激活足够多次而需要多个预防性刷新,但尚未启动任何这样的操作。根据考虑到的存储器协议,用于将预防性刷新插入至存储器通信量中的延迟可以是这样的:可能属于不同子存储体的待决预防性刷新的积压可能临时超过几十个预防性刷新。

正如该说明书的稍后部分中所呈现的,预防性刷新的所需数目还可以具有非整数值。

与由FR3066842A1提出的解决方案不同,RH_TABLE数据结构中的搜索不受分隔两个激活的非常短的最小时间的限制,而是受分隔两个预防性刷新的插入的更长且更灵活的时间的限制。

在第一实现模式中,每个子存储体的排列REFRESH_ACC、FRACTION_ACC中的预防性刷新的所需数目存储在数据结构RH_TABLE中。该结构的与子存储体相关联的计数器和当前索引以预防性刷新等待实现的方式存储。刷新操作本身在其可以执行时被触发。这样的优点是不需要缓冲存储器,但是后台任务必须扫描与子存储体相关联的计数器,以搜索待决刷新操作。

预防性刷新序列可以采用与旨在在识别步骤期间在后台浏览数据结构RH_TABLE的形式(正如刚刚在延迟生成的实现模式中所呈现的那样)不同的其他形式。

因此,根据称作“即时生成”的第二实现模式,在使子存储体b的预防性刷新的所需数目REFRESH_ACC递增的步骤末尾直接执行预防性刷新序列。在该情况下,并且参照图2,在该子存储体的预防性刷新的所需数目REFRESH_ACC达到或超过阈值1的情况下,准备所涉及的子存储体b的预防性刷新操作。该比较构成了识别对于确定的子存储体的排列的预防性刷新的需求的步骤。如果继续进行以下预防性刷新序列的步骤,则所需数目REFRESH_ACC递减。因此,REFRESH_ACC无法超过值1,并且仅可以非常短暂地具有该值,因此在称为“利用即时生成”的模式中很可能在不需要REFRESH_ACC字段的情况下进行,然后预防性刷新的所需数目仅由非整数值(实际上是小数)FRACTION_ACC表示,该值始终保持小于1。这就是在图2中REFRESH_ACC的可选的递增步骤和递减步骤被放在括号中的原因。

在利用即时生成的该第二实现模式中,恰恰就在发现需求的那个时刻触发预防性刷新操作,并且在不能立即执行的情况下,请求被短暂地存储在缓冲存储器(如非限制性示例FIFO缓冲器)中,以使该请求的实现待决。换句话说,对刷新当前行的操作的触发包括对要实现的刷新操作的描述在缓冲存储器中的临时存储。识别对子存储体的排列的预防性刷新的需求的步骤与使REFRESH_ACC计数器(或FRACTION_ACC计数器)递增的步骤伴随执行,不再形成后台任务,而是如图2可见的,在每次激活行时触发的序列上进行添加。

该第二模式具有不需要通过与子存储体相关联的计数器运行的后台任务的优点。

一般操作原则

如在先前部分中所述,在延迟生成或即时生成两者中,预防性刷新序列触发用于刷新子存储体的单行的操作。可能地,预防性刷新序列可以触发用于刷新子存储体的几行但始终远远少于该子存储体中的总行数的操作。该原则将阻止子存储体被访问以进行预防性刷新操作的时间限制成执行单个或几个激活所需的时间。

根据本发明的逻辑,给定子存储体的所有行的刷新形成该子存储体的预防性刷新周期。与刷新窗口不同,预防性刷新周期与时间或延迟的概念不相关,预防性刷新周期所花费的时间不受限:在子存储体的行从未被激活的情况下,预防性刷新的所需数目不会递增,并且该子存储体的当前刷新周期不会推进,并且因此要花费无限时间。

对属于子存储体的行的每次激活都有助于推进预防性刷新的所需数目,并且因此有助于推进该子存储体的当前预防性刷新周期,该刷新周期循环扫掠该子存储体。PARAM_D激活阈值使得可以为该子存储体的行的每次激活建立子存储体的刷新周期的进度百分比。选择该参数(即该进度百分比,也由本说明书的其余部分中的“进度系数”或“预防性刷新系数”指定,由值1/PARAM_D限定;或者更一般地,如下面详述的由值PARAM_N/PARAM_D限定),以这样的方式,预防性刷新周期在比通过锤击某行的邻近行来破坏该行内容所需的最小激活数(临界锤击值)更少的激活中被执行。

因此,在FRACTION_ACC激活计数器是5位宽的情况下,关于PARAM_D激活阈值的可能值范围为从1到32:

·PARAM_D==1

o 1次激活引起1次预防性刷新

o预防性刷新系数=100%

·PARAM_D==2

o 2次激活引起1次预防性刷新

o预防性刷新系数=50%

·……

·PARAM_D==31

o 31次激活引起1次预防性刷新

o预防性刷新系数=3.2%

·PARAM_D==32

o 32次激活引起1次预防性刷新

o预防性刷新系数=3.1%

通过示例的方式,并且考虑由65536行组成的存储体被划分成256个子存储体,每个子存储体有256行,数据结构RH_TABLE有256个条目,对于每个子存储体有一个条目。对于相对于直接相邻行的行的临界锤击值为5000的情况,根据本发明的方法不计算攻击锤击值,并且因此不需要作用域大于1的锤击系数。然而,在5000次激活中,子存储体的256行必须被预防性地刷新,也就是说,进度系数必须为256/5000,或5.12%。激活阈值PARAM_D的值为19——提供了5.2%的进度系数——提供了似乎合适的最小的进度系数。考虑到预防性刷新本身确实是激活,进度系数的计算可以是:

256/(5000–256)=5.39%

因此,激活阈值PARAM_D的值为18提供了5.55%的进度系数。

一般而言,给定子存储体的激活阈值PARAM_D应当根据以下公式进行选择:

PARAM_D≤E[(C-S)/S]

在公式中,函数E是整数部分函数,C是给定子存储体中的行的临界锤击值,以及S是给定子存储体中的行数。

然后,在两个预防性刷新周期之间就变得不可能以这样的进度系数S/(C-S)对行锤击足够多的次数而破坏邻近行的内容,这是因为这些邻近行在达到临界锤击值之前就已经被预防性地刷新了。

换句话说,在子存储体中的行激活的数目超过临界锤击值之前就操作子存储体的完整预防性刷新周期。

子存储体的规模越小,所需的进度系数就越低,并且因此性能代偿(每次激活的预防性刷新%)就越低。

子存储体的交界处的影响的管理

DRAM存储体的子存储体可以通过距离和/或硬件元件在物理上分隔,使得对位于子存储体的两端之一附近的行的激活不会由于锤击而对邻近子存储体的行的内容造成损坏。特别是在子存储体被数行中间感测放大器分隔的情况下就是这样。在这种情况下,在先前部分中描述的逻辑已经准确地预防了锤击效应。

当锤击效应跨过子存储体的交界处时,可以实现用于使刷新周期侵入邻近子存储体中的第一解决方案。该解决方案使用子存储体的低边界、高边界和核心的概念:

·子存储体b的低外边界是子存储体b-1的末行的集合,该集合可能会受到子存储体b的首行之一的激活的影响。

·子存储体b的低内边界是子存储体b的首行的集合,该集合可能会受到子存储体b-1的末行之一的激活的影响。

·子存储体b的高外边界是子存储体b+1的首行的集合,该集合可能会受到子存储体b的末行之一的激活的影响。

·子存储体b的高内边界是子存储体b的末行的集合,该集合可能会受到子存储体b+1的首行之一的激活的影响。

·子存储体b的核心是子存储体b的行的集合,该集合不属于子存储体b的内边界。

由于行锤效应是对称的(激活行i攻击行i+n的方式与激活行i+n攻击行i的方式类似),因此边界定义意味着:

·存储体b的低内边界是存储体b-1的高外边界,

·存储体b的高内边界是存储体b+1的低外边界。

然后扩展子存储体的完整刷新周期,使得其将属于该子存储体的低边界和高边界(内和外)的行刷新两次。

在包括P次预防性刷新的刷新周期中,边界行MR的两次刷新以均衡的方式分布:行MR的第一预防性刷新与行MR的第二预防性刷新由针对其他行的P/2次预防性刷新分隔。

边界行的这种双重刷新是有利的,因为:

·边界行会通过激活边界行自己的子存储体而被攻击直至临界锤击值-1。

·边界行会通过激活距边界行最近的子存储体而被攻击直至临界锤击值-1。

因此,边界行受到的攻击威胁是非边界行之一的攻击威胁的两倍,因此需要通过预防性刷新周期以非边界行(核心行)两倍的速度刷新边界行,这是通过使每个刷新周期以均衡的方式将其对应的子存储体的边界行(内和外)刷新两次来实现的。

如有必要,存储当前RELATIVE_INDEX索引的字段被加宽,以便除了扫描一次子存储体核心之外,还有足够的动力来扫描两次边界。

对于子存储体的交界处的锤击问题的另一解决方案旨在增加与邻近子存储体相关联的预防性刷新的所需数目REFRESH_ACC。该解决方案可以通过应用以下规则实现:

·在激活子存储体b的首行之一期间,使字段RH_TABLE[b-1].REFRESH_ACC递增的步骤也被执行。

·在激活子存储体b的末行之一期间,使字段RH_TABLE[b+1].REFRESH_ACC递增的步骤也被执行。

换句话说,当子存储体b的激活行是子存储体b的首行之一时,行锤管理操作会如先前所描述的那样在存储体b上执行,但也会在存储体b-1上执行,就好像激活也涉及到该存储体b-1的行一样。类似地,当子存储体b的激活行是子存储体b的末行之一时,行锤管理操作会如先前所描述的那样在存储体b上执行,但也会在存储体b+1上执行,就好像激活也涉及该存储体b+1的行一样。例如,这些首/末行可以与子存储体b的首/末2行、3行或5行相关。

广义子存储体激活规则

更一般地,该方法可以有利地合并至首先描述的“延迟生成”的实现模式中:在激活给定行期间,对包含可能被该给定行的激活所锤击的行的所有子存储体执行使预防性刷新的数目REFRESH_ACC递增的步骤。稍后将清楚地的是,这可以适用于替换其行被用于替换标准子存储体的缺陷行的子存储体。

在行锤效应的作用域相对于子存储体的规模较显著(甚至可能更大)的情况下,该广义子存储体激活规则对于解决边界锤击特别有用,因为在这些情况下,激活的子存储体附近的多于一个子存储体可能会被锤击。

在第一示例中,在行锤作用域大于子存储体规模的一半的情况下,激活子存储体中间的行可以同时锤击前一个子存储体中的行和后一个子存储体中的行。

在第二示例中,在行锤作用域稍大于子存储体规模的情况下:

-激活子存储体的首行之一将锤击前两个子存储体和后一个子存储体

-激活子存储体的中间行之一将锤击前一个子存储体和后一个子存储体

-激活子存储体的末行之一将锤击前一个子存储体和后两个子存储体

这两个示例被广义子存储体激活规则完全覆盖。本领域技术人员将意识到,广义子存储体激活规则允许处理任何种类的边界,包括延伸跨过若干个子存储体的边界,并且在行锤作用域相对于子存储体的规模是显著的情况下,该规则尤其适用。

因此,有利地,在每次激活存储器的子存储体的行时,使激活计数器递增的步骤使具有可能由于该激活而被锤击的至少一行的所有子存储体的激活计数器递增。

子存储体中的索引扫描顺序

无论刷新周期是否包括边界,行扫描顺序都不重要,只要对于给定的子存储体(以及相关联的边界,如果适用的话)行扫描顺序是固定的,并且双重预防性刷新以均衡的方式在预防性刷新周期中分布即可。为了简化说明,假设了增量对S取模,但是遵守先前提及的规则的任何扫描顺序都是合适的,只要通过扫描达到了所考虑的子存储体的每一行以及边界的每一行即可。特别有可能非常有利地提供对DRAM存储器装置的被识别为对行锤攻击更灵敏的行进行过刷新(这些刷新也必须以均衡的方式在刷新周期中分布)。

因此,刷新周期可以是这样的:在制造测试期间被识别为对锤击攻击更加特别敏感的行可以以这样的方式被配置成使得在这些行所属的子存储体中运行的刷新周期将刷新它们若干次。给定灵敏行的多次刷新在对应的刷新周期中有利地有规律地分布。

在预防性刷新周期中,被识别为稳健的行可以仅刷新正常次数(属于核心的行刷新一次,属于内边界或外边界的行刷新两次)。

因此,通过非限制性示例的方式,在灵敏行S在刷新周期中被刷新两次的情况下,这两次刷新以均衡的方式分布在对应的刷新周期中,那么保护行S的临界锤击值将比对应的子存储体的其他行的临界锤击值低两倍。

实现处理的其他方法

本方法的第一实现模式和第二实现模式的变型可以运用由激活引起的刷新周期的进度百分比的替选表示,以确保在子存储体中的行激活的数目超过临界锤击值之前操作子存储体的完整预防性刷新周期。

因此,根据刚才呈现的方法的实现模式的变型——被称作“通过具有固定分母的小数表示”——可以在没有激活计数器REFRESH_ACC的情况下实现。在这样的模式下,RH_TABLE数据结构的激活计数器FRACTION_ACC字段将至少加宽激活计数器REFRESH_ACC所具有的宽度。

在这样的情况下,预防性刷新的所需数目由比值FRACTION_ACC/PARAM_D的整数部分给出,并且该方法包括:在每次激活时,激活计数器FRACTION_ACC系统化递增值PARAM_N。PARAM_N是与子存储体相关联的参数,该参数严格低于该子存储体的激活阈值PARAM_D,并且对于给定的实现方式,该参数可以是常数。当预防性刷新操作被触发(以立即执行或存储在缓冲区中)时,对应的FRACTION_ACC字段减少激活阈值PARAM_D。

该方法通过比值PARAM_N/PARAM_D表示进度系数。

该表示具有使得更新待决刷新计数器NBR_REFRESH_PENDING更加困难的缺点,但是正如已经指出的,该变量对于实现根据本发明的方法不是必要的。

当锤击效应有可能跨过子存储体的交界处时,该处理可以适于参数PARAM_N的使用:

·在激活子存储体b的首行之一期间,执行使RH_TABLE[b-1].FRACTION_ACC字段递增的步骤,使用的递增值是小于或等于参数PARAM_N的值。

·当子存储体b的末行之一被激活时,执行使RH_TABLE[b+1].FRACTION_ACC字段递增的步骤,使用的递增值是小于或等于参数PARAM_N的值。

在穿过子存储体的交界处的锤击效应的功率低于同一子存储体的两个邻近行之间的锤击效应的功率的情况下,递增值被选择为低于参数PARAM_N。

将RH_TABLE数据结构中的搜索简化以识别对于子存储体的预防性刷新的需求

本领域技术人员将理解,在保持在本发明的框架内的同时,可以简化所谓的第一延迟生成实现模式的后台中运行的预防性刷新序列。通过示例的方式,替代在RH_TABLE数据结构中查找具有有最高值的REFRESH_ACC字段(或FRACTION_ACC字段)(代表排列的预防性刷新的所需数目)的条目,我们可以从该结构中选择具有REFRESH_ACC字段(或FRACTION_ACC字段)的呈现表示至少一个刷新待决的事实的值(例如,在处理的第一实现模式的情况下,大于或等于1的数字)的第一条目。

在该假设中,甚至可以在后台中删除搜索,而不需要依靠附加的缓冲器,这在第二实现模式中是必要的。为此,通过向TABLE_RH数据结构的条目中的每一个条目添加命名为NEXT的字段来对TABLE_RH数据结构进行扩展,该字段旨在包含指定RH表中的条目的索引,或者采用指示该字段不指向RH表中的任何条目的列表值末尾IST_END。该逻辑还设置有指定列表头、具有与TABLE_RH数据结构的字段NEXT相同的存储容量的变量FIRST。

TABLE_RH数据结构中的条目的列表头变量FIRST和字段NEXT允许TABLE_RH数据结构本身内部的链式条目列表的构建,列表的每个元素对应于需要预防性刷新操作的子存储体。列表中的第一条目由头变量FIRST的内容指定。空列表由头变量FIRST包含列表值末尾LIST_END的事实来指示。列表的任何元素L经由其字段RH[L].NEXT指向列表的下一个元素M,也就是说,RH[L].NEXT=M。列表的最后一个元素通过其NEXT字段具有列表值末尾LIST_END的事实来识别。

该链式列表以这样的方式进行更新:该链式列表包含具有非零的预防性刷新的所需数目的TABLE_RH数据结构的所有条目。

在初始化(复位)存储器装置时,列表头FIRST变量被设置成列表值末尾LIST_END,从而指示具有非零的预防性刷新的所需数目的子存储体的列表最初为空:

·FIRST=LIST_END,

当在激活子存储体之后执行的递增步骤使条目(即子存储体的条目)J的预防性刷新的所需数目从0更改成1时,则将对应的条目J如下所示插入在列表中:

·RH[J].NEXT=FIRST,

·FIRST……=J,

在条目的预防性刷新的所需数目不为零的情况下,则使该数目增加既不会修改头变量FIRST也不会修改任何字段NEXT。换句话说,当预防性刷新的所需数目从0变成1时,数据结构的条目仅在列表中插入一次。将该数目更改成大于1的值对列表没有影响。

在存在机会触发预防性刷新操作的情况下,启动预防性刷新序列,并且,在识别步骤期间,我们选择由列表头变量FIRST指定的数据结构TABLE_RH的条目。在该变量FIRST呈现与列表末尾LIST_END对应的值的情况下,则不存在要执行的预防性刷新。

当子存储体的预防性刷新操作的触发更改时,对于对应的条目J,预防性刷新的所需数目由1变为0,然后条目J如下所示从列表中删除:

·FIRST=RH[J].NEXT

因此,在跟踪步骤期间,不再需要进行RH表中的后台搜索,因为具有待决刷新的条目的列表被永久地维护:

·当执行递增步骤时:如有必要,则通过将对应的条目插入至列表中来永久地维护。

·当触发刷新操作时:如有必要,则通过从列表中删除对应的条目来永久地维护。

本领域技术人员将理解,出于呈现非限制性示例的目的,已经描述了旨在形成具有非零的预防性刷新的所需数目的子存储体的列表的方法。可以以多种方式例如通过添加指定列表的最后元素的列表变量尾LAST来修改列表的管理,从而允许在列表的末尾处而不是在其开头处插入新元素。这样的方法可以有利于执行下述预防性刷新管理过程,该预防性刷新管理过程使得可以防止对于被链接至给定子存储体的预防性刷新的需求由于针对其他子存储体的新激活而无限期的延迟。

应当注意,使用简化的搜索算法或使用列表的事实可能导致需要在计算处理参数时提供增加的裕度,特别是在获得执行预防性刷新的时隙遭受显著延迟的情况下。在后台中运行的预防性刷新序列必须优先考虑的唯一约束是避免饥饿:在不确定数目的激活完成时有推进对应的预防性刷新周期的可能性的情况下,不能拒绝具有非零的预防性刷新的所需数目的数据结构RH_TABLE的条目。

预防性刷新时隙的默认使用

在进行预防性刷新的时隙是可用的并且只能用于该种刷新的情况下,以及在RH_TABLE数据结构中的或者在列表中的搜索没有提供关于目标刷新的候选的情况下,最好的默认策略在于选择推进在RH_TABLE结构中其条目具有最大的并且因此最接近于确定预防性刷新是否待决的阈值的FRACTION_ACC字段的子存储体的刷新周期(也就是说触发刷新操作)。

该预防性刷新的执行不是使FRACTION_ACC递减,而是将该字段设置成0,从而防止该字段获取负值或不一致的值。

预防性刷新的插入

锤击预防逻辑将预防性刷新插入在到存储体的控制流量中。这可以例如以下面的方式来实现:

·通过借用定期刷新时隙,定期刷新被延迟足够短的时段,使得这不会造成任何问题,

·通过在存储器协议中具有用于预防性刷新的足够配额的时隙,

·通过向存储器控制器指示它必须生成用于预防性刷新的一个或更多个时隙,预防逻辑提供拓扑行索引。

本领域技术人员将理解插入预防性刷新流量的问题的解决方案还取决于实现此处所描述的逻辑的位置(DRAM的控制器、RCD缓冲器电路即设置在存储器控制器与DRAM之间的寄存器时钟驱动器缓冲器电路,或者DRAM存储器本身),以及在存储器控制器与存储器之间的协议的能力。应当注意,在将逻辑放在包括一个或更多个集成处理器的DRAM存储器中的情况下,可以使用由文献FR3066842A1描述的插入方法。也可以使用其他方法,无论是否需要与存储器控制器协作。

不同规模的子存储体的支持

由于制造的可变性,在存储体内不同行的行锤灵敏度可能显著变化。

替代为最坏的情况配置行锤逻辑,考虑对行锤最灵敏的行,第一可能性在于根据该子存储体的行的行锤灵敏度以及其邻近行的行锤灵敏度来为每个子存储体提供专用的激活阈值PARAM_D。根据激活行的行锤灵敏度,这引起每次激活的预防性刷新的量的波动。该专用激活阈值PARAM_D可以根据存储器装置的初始测试来确定,以识别每个子存储体对行锤击的灵敏度,以及影响数据结构RH_TABLE的每个条目的适当激活阈值。

第二可能性是使用不同规模的子存储体。这可以通过图3中示出的非限制性示例的方式来实现,即通过向每个数据结构RH_TABLE条目添加位来实现:

当清除该位时,数据结构RH_TABLE条目保存如前所述的对应的激活计数器FRACTION_ACC、预防性刷新的所需数目REFRESH_ACC和当前索引RELATIVE_INDEX。

当设置该位时,数据结构RH_TABLE条目不表示这些信息,而是在专用存储器中或在与保存数据结构RH_TABLE的存储器相同的存储器中指定与子存储体b到更小的子存储体的细分对应的较小的附加数据结构SUB-RH_TABLE的位置(地址)。先前描述的算法适用于子存储体:正常规模的子存储体和相似的较小的子存储体。在较小的附加数据结构SUB-RH_TABLE的规模不是固有的(即预先确定和恒定的)的情况下,另外指定SUB-RH_TABLE的位置的条目将指定其规模。

较小的子存储体具有较小的预防性刷新周期,因此对于给定的激活阈值PARAM_D,支持较低的临界激活值。有利地,将定义较小的子存储体,使得存储体中最弱的行——对行锤效应最灵敏的行——将属于较小的子存储体。类似于上面的第一可能性,在存储器装置的初始测试之后,可以执行将存储器存储体划分成不同规模的子存储体,以及可以执行使用指针对附加数据结构进行的数据结构RH_table的对应配置,以识别每个存储体的灵敏度以及将其划分成更小的子存储体的需求。

本领域技术人员将理解,在保持在本发明的框架内时;

-可以推断先前说明的边界处理策略以处理具有不同规模的子存储体,广义子存储体激活规则变得尤其相关,这是因为相对于较小的子存储体的规模,行锤作用域必然更显著。

-具有不同规模的子存储体并不排除具有针对每个子存储体个性化的激活阈值PARAM_D,无论子存储体是正常规模或是较小规模。

-其他机制可以用于确定数据结构RH_TABLE条目包括常用字段或者描述较小的sub-RH_TABLE,尤其是对常用字段之一中的其他未使用的值的使用、以及其他常用字段到指定位置(地址)的字段中的循环、以及有可能的到专用存储器中的或者到与保存数据结构RH_TABLE的存储器相同的存储器中的附加数据结构SUB-RH_TABLE的规模。

-可以使用多于2级的数据结构RH_TABLE(具有SUB-SUB-RH_TABLE等),将存储体划分成不同规模的子存储体可以通过树状结构来实现。

-包括使用具有不连续和可配置地址映射的存储器的其他机制可以用于实现对不同规模的子存储体进行处理的数据结构,使得可以确定任何子存储体的规模,并且可以访问与任何子存储体相关联的字段。

若干个存储体通用的预防逻辑

与将行锤预防逻辑与每个存储体相关联不同,这样的逻辑可以与若干个存储体相关联。例如,在同一逻辑与两个存储体B1和B2相关联的情况下,则当在B1或B2的子存储体b中行被激活时,表RH_TABLE[b]的条目将如先前所说明的那样被更新。当逻辑检测到必须对行R执行预防性刷新时,则对存储体B1和B2的行R进行预防性刷新。在行锤预防逻辑根据最弱的行——例如通过使每个子存储体具有激活阈值PARAM_D或/和不同规模的子存储体——进行调整的情况下,则针对该调整,必须考虑来自B1和B2两者中的最弱的行。

行替换和锤击

在DRAM存储器的制造期间,被检测为有缺陷的行可以由替换行(也称为备用行)替换,替换行的集合可用于修复存储器存储体。这些替换是通过编程、电气或激光而由修复配置熔断器制成。因此,更改了存储器存储体的拓扑结构。例如,同一存储器存储体的拓扑索引行30和拓扑索引行2030分别被替换行0和1所替换,后两者物理上相邻。

因为行30和2030距离太远、属于甚至不是邻居的子存储体,所以预防逻辑自然不会考虑行30与行2030之间的锤击的可能性。但事实上,它们可以经由锤击效应相互影响,因为取代它们的行实际上是相邻的。

为了解决这样的情况,替换行被分组成替换块,后者被配置成遵守下面的原则:

·在替换块内,行由通常分隔两行的距离分隔,并且因此它们可能导致它们之间的锤击。

·替换块通过防止替换块的行对另一替换块的行造成行锤的电屏蔽或任何其他方式而相互分隔。例如,这些屏蔽可以由不用作存储器的行产生,所述行的选择线维持在恒定的电气值。

·替换块的行仅可以用于替换单个子存储体的缺陷行,而在另一方面,若干个替换块可以用于替换单个子存储体的缺陷行。

遵守这些原则确保根据本发明的方法的准确性不受子存储体中的行替换的影响。

通过确保该替换块的所有行都是共享该块的所有子存储体的刷新周期的一部分,可以在若干个子存储体之间共享替换块。

共享替换块的另一方式是使替换块成为子存储体本身,替换子存储体很可能具有不同的行数,这些替换子存储体优选地不具有边界,激活常规子存储体的任何行——该常规子存储体具有利用来自一个或多个替换子存储体的替换行所替换的行——导致关于常规子存储体和一个或多个替换子存储体两者的递增步骤,这些稍后的递增步骤使用适于替换子存储体的行数的激活阈值。

共享替换子存储体的另一方式是具有由配置有修复熔断器的逻辑执行的行索引转换步骤,其中,缺陷行将其拓扑索引更改为替换它的行的拓扑索引,替换行位于替换子存储体中,在激活最初针对替换行的情况下,该替换子存储体而不是包括替换行的子存储体经历服从递增步骤。

定期刷新的集成

将定期刷新逻辑部分地集成至预防性刷新逻辑中是可行的:定期刷新逻辑定期地选择子存储体并执行递增步骤,在使用PARAM_N值时可以使用不同的PARAM_N值,通过这样做,确保即使在没有针对子存储体的激活的情况下,每个子存储体的预防性刷新周期也在有限的时间内完成,通过该事实,确保定期刷新的功能,这样的刷新周期现在被称为混合刷新周期。

当原始预防性刷新周期没有裕度时,每个子存储体都无法攻击其他子存储体,并且可以以最优方式执行混合刷新周期。

当将原始预防性刷新周期扩展至包括边界行时,混合刷新周期稍显次优,因为以所需的两倍定期地刷新边界行。

当边界的处理是通过对邻近子存储体实现递增步骤来完成时,混合刷新周期在此再次稍显次优,因为比所需更多地会定期地刷新一些行。

当然,本发明不限于所描述的实施方式,并且可以在不脱离如权利要求所限定的本发明的范围的情况下向其添加变型。

因此,例如,我们可以考虑:

·通过其他方法和数学表示来表示预防性刷新周期的进度系数;

·表示预防性刷新周期期间的可变进度系数,在预防性刷新周期期间,刷新周期的平均值等于或大于本应当用于恒定比率的值。

·通过一组预防性刷新来推进预防性刷新周期,而不是通过预防性刷新来推进预防性刷新;

·具有根据激活频率波动的预防性刷新周期的推进系数;

·使预防性刷新周期的进度系数随温度或供应电压的波动而波动,这些参数影响行锤现象的功率;

·具有预防性刷新周期的推进系数,该推进系数随制造处理的可变特性(例如晶体管或其他电容器的速度、漏电、电路的各种组成部分的电阻、电感)的波动而波动;

·要使预防性推进刷新周期的推进系数适于组成子存储体的预防性刷新周期的行的特定灵敏度:在制造测试期间,可以确定这样的灵敏度,并且每个子存储体可以与自己的预防性刷新周期的进度系数相关联。特定于每个子存储体的进度系数被记录在激光熔断器、电器或其它中,或在初始化期间从非易失性存储器或任何其他类似的装置中加载。

技术分类

06120115938876