电子计数器以及用于电子计数的方法

文档序号:7542525阅读:1324来源:国知局
电子计数器以及用于电子计数的方法
【专利摘要】本发明涉及电子计数器以及用于电子计数的方法。该电子计数器包括存储单元的序列和增量逻辑,每个存储单元都是非易失性的并且支持1状态和0状态,计数器被配置成,在存储单元的序列的存储单元中,将计数器当前的计数状态的至少一部分表示为1状态和0状态的模式;增量逻辑被配置成使1状态和0状态的模式前进到下一个模式,以表示计数器的增量,增量逻辑包括编程增量逻辑和擦除增量逻辑,增量逻辑被配置成在编程阶段和擦除阶段之间交替,在编程阶段中,编程增量逻辑使模式前进;在擦除阶段中,擦除增量逻辑使模式前进。
【专利说明】电子计数器以及用于电子计数的方法
【技术领域】
[0001]本发明涉及非易失性有限寿命存储器中的电子计数器,该电子计数器包括存储单元的序列和增量逻辑,每个存储单元都是非易失性的并且支持I状态和O状态,该电子计数器被配置成在存储单元的序列的存储单元中,将计数器当前的计数状态的至少一部分表示为I状态和O状态的模式,以及增量逻辑被配置成使I状态和O状态的模式前进到下一个模式,以表示计数器的增量。
【背景技术】
[0002]在许多应用中,电子设备都需要非易失性的非递减计数器。例如,可能需要这样的计数器来跟踪设备的使用量。例如,为了保修的原因,可能要跟踪设备多久被上电一次。需要非易失性的非递减计数器的另一个原因是出于安全的目的。例如,通过引用结合在本文中的申请号为US2010 / 0318786,标题为“用于分布式系统的可信硬件组件”的美国专利申请公开了一种包括单调非递减计数器的可信硬件组件。其他非递减计数器的应用包括避免回滚攻击,在回滚攻击中,攻击者试图将整个设备回滚到以前的状态,例如以延长在数字权利下对内容的访问。
[0003]在非易失性存储器中,特别是在EEPROM存储器中,实现计数器的一个特殊方面是,存储器对它支持的程序擦除周期数可能有限制。
[0004]计数器的典型实现是二进制计数器,其中计数器的值存储在非易失性存储器中。二进制计数器的优势是需要最少的位数来支持特定的计数范围。计数到2~n-l只需要η位的存储单元。另一方面,使用二进制表示,计数器在每次增量时切换最不重要的位。这导致在EEPROM中,在最不重要的位中周期数非常高,可能会超过EEPROM的寿命(寿命是指EEPROM存储单元直到存储单元的使用寿命结束为止能够被编程然后再被擦除的周期数)。发生故障的设备很可能是、特别是η的值比较大的设备。
[0005]比二进制计数器值稍好一点的方法是使用格雷编码,在格雷编码中进行位编码以便从一个计数器状态变化到下一个计数器状态时,只有一个位发生变化(并不总是最不重要的位)。这将使周期数分布的稍微好一些,但是与所使用的存储单元的数量相比,周期的总数仍然非常高。即使使用平衡格雷编码,对于η的值比较大的情况,位的变化数最终将会超过寿命,其中,在平衡格雷编码中,位的变化在各个位上是分布不均的。
[0006]在复杂的系统如闪存中使用非常复杂的方法来均衡耗损。这些方法在编码上需要比较大的付出,只适用于复杂的文件系统。基本概念是:“受损”的存储单元被重新定位到其他存储区域。
[0007]专利号为5231592的美国专利公开了在电可擦可编程只读存储器(EEPROM)上实现的已知的计数器。寿命为V的EEPR0M,每个存储单元被设计为最多可以被擦除和编程V次。EEPROM被划分成数字区域和N个计数区域,在N个计数区域中以二进制表示来存储计数值,每个计数区域能够存储从O到V的计数值,数字区域用于以二进制表示来存储数字,表示目前正在使用中的计数区域。计数区域被用于连续地存储N*V次计数,最大值为V~2。
【发明内容】

[0008]虽然已知的计数器能够超出寿命计数,而不会使各个存储单元超出它们的寿命,但是这些已知的计数器有很多缺点。例如,根据上述设计的计数器不能超过V~2这个限制。此外,计数器需要大量的位数来实现计数。
[0009]至少由于这些原因,需要改进的计数器。
[0010]本发明提出的电子计数器包括存储单元的序列和增量逻辑。存储单元的序列中的每个存储单元是非易失性的,并且支持I状态和O状态。I状态可以被称为“编程状态”,O状态可以被称为“擦除状态”。该计数器被配置成,在存储单元的序列的存储单元中,将计数器当前的计数状态的至少一部分表示为I状态和O状态的模式。例如,计数器可以采用另外的存储器,包括可能的另外的序列来表示计数状态。
[0011]增量逻辑被配置成使I状态和O状态的模式前进到下一个模式,以表示计数器的增量。增量逻辑包括编程增量逻辑和擦除增量逻辑,增量逻辑被配置成在编程阶段和擦除阶段之间交替,在编程阶段中,编程增量逻辑使模式前进;在擦除阶段中,擦除增量逻辑使模式前进。编程增量逻辑被配置成将存储单元的序列中的下一个存储单元从O状态编程为I状态。当存储单元的序列中的所有存储单元都处于I状态时,编程阶段结束。擦除增量逻辑被配置成将存储单元的序列中的下一个存储单元从I状态擦除成O状态。当存储单元的序列中的所有存储单元都处于O状态时,擦除阶段结束。
[0012]对在存储单元的序列中表示的计数状态的部分的计数操作在整个计数周期中需要非常少的编程操作和擦除操作。在编程阶段,每个存储单元仅被编程一次,在擦除阶段,每个存储单元仅被擦除一次。用η来表示序列中的存储单元的数量,计数器可以表示2η个不同的模式,即从O到(2η_1)计数。从计数开始直到计数器溢出的整个周期,即模式重复,每个存储单元只需要一个寿命周期,一个寿命周期是一个编程操作和一个擦除操作。此外,计数器可以达到的最大值仅仅受被分配的存储单元的数量的限制,而不受存储单元的最大寿命的限制。
[0013]存储单元的序列中的一个存储单元被表示为最后一个存储单元。存储单元的序列中的一个存储单元被表示为第一个存储单元。除了最后一个存储单元,每个存储单元都有下一个存储单元。序列可以被实现为一个或多个存储器字或一个或多个存储器字的部分。序列可以被实现为数组数据结构。
[0014]如果存储单元具有有限的寿命,被表示为V,则每个存储单元都可以被编程V次以及擦除V次。使用这样的存储单元,计数器可以从O到2η-1计数V次。该计数器因此可以
重复使用。
[0015]电子计数器特别适合在EEPROM存储器中实现的计数器。在实施例中,存储单元的序列中的存储单元是EEPROM存储单元。某些类型的EEPROM存储单元具有有限的寿命,通常是100000次。我们将使用100000作为寿命的示例值。该计数器设计也适用于具有更高或更低寿命的存储器。
[0016]在实施例中,计数器包括非易失性的高字存储器和高字增量逻辑。高字存储器用来存储该计数器的计数状态的不同部分。然而,使用二进制位数系统将计数状态的这个部分编码为二进制数。通常情况下,高字存储器中的位是从最不重要的位到最重要的位排序。优选地,高字存储器与存储单元的序列在同一个物理存储器中实现,虽然是在不同的位置上实现。
[0017]高字增量逻辑被配置成对高字存储器中表示的二进制数执行增量。在存储单元的序列中表示的计数状态的部分还可以被称为低字。在典型的操作中,通过对低字执行增量来对计数器执行增量。当低字溢出时,低字计数器重新开始,例如低字计数器复位,并且高位字被增加。
[0018]选择编程阶段和擦除阶段其中一个阶段结束来触发对高字执行增量。例如,当编程阶段结束时或擦除阶段结束时,高字增量逻辑对高字执行增量。计数器被配置成在编程阶段和擦除阶段中特定的一个阶段结束时对高字执行增量。
[0019]高字计数器是非常有效的,在这个意义上,它需要很少的存储器来编码大量的不同的模式。然而,由于使用二进制计数,任何增量通过溢出潜在地改变多个存储单元。在实施例中,用于在另外的存储器中计数的存储单元的数量是ceil (log(v) / log(2))。实际上,由于在每次增量时存储单元或者是被编程或者是被擦除,而并不是同时被编程和擦除,因此可以计数到2v次而不会违反寿命要求,这意味着可以在上式中增加一个存储器。
[0020]采用格雷编码可以在一定程度上提高高字计数器的寿命。变化的存储单元最好散布在整个存储器中。在对格雷编码的不同选择中,平衡格雷编码是实现这一点的一个不错的选择。但是,请注意,并不是必须要使用格雷编码。使用更传统的二进制位数系统可以大大简化设计。
[0021]将低寿命但是高存储大小效率的高字计数器与高寿命但是低存储大小效率的低字计数器相结合是相当有效的,其中低寿命就是指不能经常重复使用。通过增加存储单元的序列中的存储单元的数目,计数器可以被配置成计数到任何期望的最大值。
[0022]增量逻辑可以被配置成,从存储单元的序列中的最后一个存储单元的状态来确定存储单元的序列当前的阶段。如果最后一个存储单元是处于O状态,则当前的阶段是编程阶段。如果最后一个存储单元是处于I状态,则当前的阶段是擦除阶段。
[0023]在实施例中,计数器包括多个低字计数器。计数器可以包括存储单元的多个序列,存储单元的多个序列中的每个存储单元是非易失性的并且支持I状态和O状态,计数器被配置成在存储单元的多个序列中的存储单元中,将计数器当前的计数状态的多个子状态表示为I状态和O状态的模式,用表示序列是非激活的模式来配置存储单元的多个序列中除了一个以外的所有序列,用与表示序列是非激活的模式不同的模式来配置存储单元的多个序列中的一个序列,该模式是全I状态或全O状态。增量逻辑被配置成确定存储单元的多个序列中没有存储非激活模式的激活序列,并且增量逻辑被配置成使激活序列前进到下一个模式,在下一个模式达到非激活模式时,增量逻辑进一步使存储单元的多个序列中的下一个序列前进。
[0024]将存储单元组织成多个序列而不是单一序列有很多优点。多个序列显著地扩大了实施者优化设计的自由度。例如,可以在存储器上使用多个序列实现计数器,该计数器不能单独变位。EEPROM存储器通常被组织在字中(例如,在16位字中);对字进行擦除即仅仅是对16位的一组组位进行擦除。在这样的组中的所有单个位被设置之前,编程单个位的操作可能会导致严重妨碍所需的擦除操作。多个序列的多个最后一个存储单元或者甚至所有最后一个存储单元可以被存储在同一个存储器字中。因此,可以通过相对少的存储器访问,很快地获得多个序列中转变要被更新的序列的位置。
[0025]在实施例中,存储单元的多个序列被存储在可写的非易失性存储器的多个存储器字中,每个存储器字包括多个位,存储器字的多个位的每个位实现多个序列的不同序列的存储单元。虽然不是必要的,如果存储器字中的位数等于多个序列中的序列数,则可以减少激活序列中的变化数。如果存储器在存储器字级别上支持编程操作和擦除操作,则该实施例是特别有利的。字中的位数对于所有字都是相同的;对于多个存储器,位数等于8、16、32或64。
[0026]也可以通过增量逻辑来确定一个序列是否是激活的。例如,增量逻辑可以被配置成,从第一个存储单元和最后一个存储单元的状态来确定多个序列中的一个序列当前的阶段。由于这个原因,也有利于将多个第一个存储单元或所有第一个存储单元都放置在相同的存储器字中。
[0027]在实施例中,计数器包括另外的高字存储器,该另外的高字存储器是非易失性的,其中高字增量逻辑被配置成:确定高字存储器和另外的高字存储器哪一个存储器存储较高的数,哪一个存储器存储较低的数,对较高的数执行增量,以及将增量后的较高的数写入存储较低的数的存储器。以这种方式,即使在写入过程中计数器断电,也总是存在有效的高字,即增强了撕裂安全。
[0028]在实施例中,高字存储器以及可选的另外的高字存储器包括头部。头部可以包括高字计数状态的固定模式或高字计数状态的校验和。这允许检测撕裂,即意外断电。
[0029]为了找到下一个要编程或擦除的存储单元,增量逻辑被配置成执行二进制搜索,以找到下一个存储单元。优选地,使用具有两个指针的二进制搜索。
[0030]即使计数器是非易失性的,也可以通过使用一些易失性的存储器来提高它的效率。例如,计数器可以包括易失性的索引存储器。索引存储器存储指向存储单元的序列中表示下一个存储单元的存储单元的索引。增量逻辑被配置成在执行增量时对索引存储器执行增量。在启动时例如通过对序列进行二进制搜索或线性搜索,对索引进行初始化。在实施例中,索引存储器包括另外的索引,该另外的索引指向多个序列中的激活序列。索引存储器可以被实现为寄存器、SRAM等。为了清楚起见,不需要实现索引存储器,因为更新计数状态所需的所有信息都包含在非易失性存储器中,即都包含在序列和高字中。然而,在快速的易失性存储器中跟踪将要发生下一个更新的位置,可以改善更新的运行时间。可以在计数器上电时更新索引存储器,或者在计数器上电后第一次增量之前的某个时刻更新索引存储器。
[0031]可以在EEPROM中实现计数器所需的存储器,例如多个序列和/或高字存储器。
[0032]计数器是一种电子装置,例如便携式电子设备,可以作为便携式移动电子装置诸如移动电话的一部分。通过采用应对措施使计数器屏蔽未经授权的访问,计数器可以作为安全的非递减计数器的一部分,在此不对这些应对措施进行进一步讨论。计数器可以是诸如机顶盒、计算机、电视等电子设备的一部分。
[0033]本发明的另一个方面涉及一种用于电子计数的方法,其中计数器当前的计数状态的至少一部分在存储单元的序列中的存储单元中被表示为I状态和O状态的模式。该方法包括:使存储单元的序列的I状态和O状态的模式前进到下一个模式,以表示计数器的增量,计数器的增量在编程阶段和擦除阶段之间交替,其中,在编程阶段中,将存储单元的序列中的下一个存储单元从O状态编程为I状态,当存储单元的序列中的所有存储单元都处于I状态时,编程阶段结束,在擦除阶段中,将存储单元的序列中的下一个存储单元从I状态擦除成O状态,当存储单元的序列中的所有存储单元都处于O状态时,擦除阶段结束。
[0034]根据本发明的方法可以采用如下方式来实现:作为计算机实现的方法在计算机上实现,或者在专用硬件中实现,或者采用这两种方式相结合实现。用于根据本发明的方法的可执行代码可以被存储在计算机程序产品中。计算机程序产品的实例包括存储器设备,光存储设备,集成电路,服务器,在线软件等。优选地,计算机程序产品包括存储在计算机可读介质上的非临时性程序代码装置,用于当所述计算机程序产品在计算机上执行时,执行根据本发明的方法。
[0035]例如,在系统上包括非易失性存储器,即EEPR0M,以及处理器。该处理器可以执行存储在非易失性存储器中的软件,该软件控制计数器,计数器的计数状态作为软件被存储在存储器的不同部分中。这样的计数器可以对各种事情计数,例如,启动次数,执行的加密操作的次数,签名次数,对存储系统重写的次数。包括安全计数器的计数器应用非常广泛。
【专利附图】

【附图说明】
[0036]图1是说明计数器100的方框图。
[0037]图2是说明存储单元的序列的内容的表。
[0038]图3是说明计数器300的方框图。
[0039]图4是说明存储单元的多个序列的内容的表。
[0040]图5是说明支持存储单元的多个序列的存储器结构的表。
[0041]图6示出了计数方法600的流程图。
[0042]应该注意,在不同的图中参考标号相同的项目具有相同的结构特征和相同的功能,或者是相同的信号。如果已经对这样的项目的功能和/或结构进行了解释,则没有必要在详细说明中对它们进行重复说明。
【具体实施方式】
[0043]本发明允许多种不同形式的实施例,本文中描述的以及附图中示出的各个实施例是用来说明本发明的原理,而并不是用来将本发明限制为本文中所描述的以及附图中所示的具体实施例。
[0044]图1说明了计数器100。计数器100包括非易失性的存储器110和计数器逻辑140,非易失性的存储器110例如是EEPROM存储器,存储器110和计数器逻辑140通过存储器接口 115连接起来,存储器接口 115允许计数器逻辑140对存储器110进行读取和写入操作。
[0045]在计数器100的一个版本中,计数器逻辑140被实现为半导体电路。然而,计数器逻辑140还可以包括处理器执行软件,该处理器执行软件例如也存储在存储器110中。用软件来实现可能会使计数器比较慢,另一方面,用软件来实现可以降低制造成本。如果计数器是安全的、非递减计数器的一部分,则优选用电路来实现。也可以采用混合解决方案,一部分在专用硬件上运行,一部分在软件上运行。例如,可以实现存储单元的序列以及硬件,在硬件中实现增量。当存储单元的序列溢出时,产生中断,这会导致软件程序更新高字。更新高字是相对比较少见的,所以较低的成本对于稍微差一点的运行时间性能,这是有利的权衡。
[0046]存储器110包括存储单元的序列120。在这个存储单元的序列120中,示出了三个存储单元:122,124,126。存储单元可以是存储器字的一部分。存储单元不一定是独立寻址的,即读取一个存储单元可能意味着读取包括在该字中的所有其他存储单元。通常情况下,存储器接口 115所包括的数据线的数量与存储器的字宽相同。每个存储单元都具有有限的寿命,用V表示。这意味着,存储单元被设计成可以被编程V次以及可以被擦除V次。存储单元的序列120也可以被称为低字。
[0047]计数器逻辑140包括增量逻辑150,增量逻辑150被配置成使低字的计数状态前进,也就是使存储单元的序列120的计数状态前进。计数状态被存储在存储器130和存储单元的序列120中。增量逻辑150可以被配置成接收使表示计数器100前进的信号。计数器100可以被配置成只支持增量I。然而,计数器可以被配置成例如通过反复地增加I以允许更大的增量,这种情况可以被优化。
[0048]在技术上,计数器甚至可以被配置成例如通过执行增量的逆运算来支持减量操作。然而,这会导致寿命的问题,因为受减量操作影响的存储单元被写入的次数要比其他存储单元更多。这意味着,减量操作将减少计数器的计数上限。尤其是经常进行减量操作是有害的。
[0049]增量逻辑150包括阶段确定器152。计数状态的前进是在一系列编程操作和一系列擦除操作中交替进行的,一系列编程操作被称为编程阶段,一系列擦除操作被称为擦除阶段。阶段确定器152确定将要在哪个阶段使计数状态前进。
[0050]可以选择首先进行编程阶段,然后是擦除阶段,或者其他方式。的确,在一般情况下,通过将所有的I状态和O状态反相,就可以有效地实现在存储单元序列120中计数的计数器。我们将描述的计数器100首先是编程阶段,然后是擦除阶段,但是请注意,这个顺序是可以颠倒的(如果使用了多个序列,即使对于每个序列,这个顺序都是可以颠倒的)。
[0051]增量逻辑150包括编程增量逻辑154和擦除增量逻辑156 ;取决于阶段判断器152的判断,编程增量逻辑154正在编程阶段中使用,擦除增量逻辑156正在擦除阶段中使用。
[0052]存储器110包括高字存储器130。高字存储器130也可以在物理上不同的存储器上实现。存储器110可以包含位模式,代表以二进制表示的数字。为了对高字存储器130执行增量,计数器逻辑140包括高字增量逻辑160。在实施例中,高字增量逻辑160可以被实现为“加I”操作。在更先进的实施例中,高字增量逻辑160以撕裂安全模式(tearing-safemanner)对高字存储器130进行写入操作。高字增量逻辑160被配置成从增量逻辑150接收表示低字溢出的信号,在这种情况下,高字增量逻辑160执行增量,即使高字存储器130加1,增量逻辑150在开始模式中建立存储单元的序列120。
[0053]即使使用了多个序列,高字的使用也是可选的。在这种情况下,存储单元的序列120可以被用作计数器,该计数器具有较小的范围,但是可以被经常重复使用。如果高字存储器130被省略,则高字增量逻辑160也可以被省略。
[0054]增量逻辑150被配置成检测溢出。在这种情况下,擦除阶段是最后的阶段,并且当存储单元的序列120中的所有存储单元再次处于O状态时,例如,通过擦除增量逻辑156,给高字增量逻辑160发信号,溢出被检测到。[0055]图2中示出了如何可以更新存储单元的序列120的内容。在图2中,时间向下推移。位于每行最左边的位是第一位,最右边的位是最后一位。通常情况下,人们希望在存储器110中以自然顺序来实现存储单元的序列,即以线性的顺序来实现存储单元的序列,然而也可以选择任意排列。
[0056]最初,初始化器(图中未示出)已经擦除了存储器130和存储单元的序列120的内容,即所有的存储单元都处于O状态。计数器在编程阶段启动。
[0057]随着编程阶段210的进行,越来越多O状态的存储单元被编程为I状态的存储单元,直到到达某个时刻,所有的存储单元都是I状态。在这个时刻,编程阶段210结束并且擦除阶段220开始。随着擦除阶段220的进行,越来越多I状态的存储单元被擦除成O状态的存储单元,直到到达某个时刻,所有的存储单元都是O状态。请注意,以这种方式获得的所有状态都是不同的。如果在存储单元的序列120中有η个存储单元,则支持2η个不同的状态。如果需要的话,可以将存储单元的序列120中的内容转换成单调递增的整数。可以使用将从O到2η-1的整数分配给按照这个顺序在序列中出现的不同模式的任意方案。一种方法是按照从第一个存储单元到最后一个存储单元的顺序,将从O到(η-1)的数字分配给存储单元。在编程阶段中第一个O的位置表示该整数,在擦除阶段中第一个I的位置加η表示该整数。以这种方式从O计数到2η-1。请注意,随着计数器周期从开始位置(在这种情况下,所有存储单元的状态都是O)到溢出(所有存储单元的状态第一次又全都是O),所有存储单元已经被编程和擦除了一次。例如,计数器100可以包括请求逻辑,请求逻辑被配置成:接收请求,确定由计数状态表示的整数,以及响应该请求输出被确定的数字。
[0058]如果高字存储器130中包含值a并且存储单元的序列120可以被表示为值b,如上所述,则计数器的值可以被表示为a*(2n)+b。请注意,许多应用不要求实际值,只是计数器的内容不会减少。在这种情况下,只需要选择足够大的高字存储器130和存储单元的序列120,以避免模式重复。例如,希望避免回滚攻击的安全存储,或者需要随机数以避免重放攻击的协议可以使用这样的计数器。
[0059]在表200的最后一行之后,存储单元的序列120再次返回到全O状态,结束擦除阶段。在这个时候,增量逻辑150给高字增量逻辑160发信号,以对高字存储器130执行增量。
[0060]在操作过程中,计数器逻辑140可以首先接收初始化信号,将存储单元的序列120以及可选地将高字存储器130设置成开始模式,在这种情况下,所有存储单元的状态都是0,但是也可以有其他的选择,例如所有存储单元的状态都是I,或者高字存储器130是0,但存储单兀的序列120都是1,等等。
[0061]增量信号通常是来自计数器100的外部来源,当增量逻辑150接收到增量信号时,阶段确定器152确定要使用的阶段。当单个存储单元的序列120被使用时,阶段确定器152可以从最后一个单元,即最后一个存储单元126来确定阶段。如果最后一个值是0,则该阶段是编程阶段,否则则是擦除阶段。这一点也可以从表200中看出来。
[0062]接下来,取决于被确定的阶段,阶段确定器152发信号以使编程增量逻辑154或擦除增量逻辑156执行增量。如果编程增量逻辑154被选中,则编程增量逻辑154确定值为O的第一个存储单元,并对其进行编程操作。如果擦除增量逻辑156被选中,则擦除增量逻辑156确定值为I的第一个存储单元,并对其进行擦除操作。通过对存储单元的序列120进行线性搜索,可以找到第一个转变。[0063]计数器100可以包括转变发现器(图中未示出),该转变发现器包括低指针和高指针。低指针被初始化以指向第一个存储单元,高指针指向最后一个存储单元。如果低指针和高指针指向的存储单元中的值相等,则第一个存储单元将被改变。否则,选择低指针和高指针之间的存储单元,优选的,选择与(高指针+低指针)/ 2最近的存储单元。如果被选中的存储单元与低指针相同,则低指针被改变为指向被选中的存储单元。如果被选中的存储单元与高指针相同,则高指针被改变为指向被选中的存储单元。当低指针和高指针之间相差为I时,该算法结束。在这个时候,高指针指向要被改变的存储单元。
[0064]转变发现器可以与阶段确定器152组合起来。这是有效的,因为阶段确定器152也可能需要访问最后一个存储单元以确定阶段。另外,如果使用了多个序列,则第一个存储单元可以被用于确定激活序列,因此通过结合这些步骤,可以进一步提高效率。
[0065]一旦已经发现了转变,则下一个不同的存储单元或第一个存储单元被倒置,即,编程增量逻辑将存储单元编程为1,擦除增量逻辑擦除存储单元。正如所指出的,编程增量逻辑和擦除增量逻辑之间共享了一些功能,例如发现转变的功能,即找到下一个要被写的存储单元的功能。
[0066]作为进一步的效率,特别是如果希望在计数器100或其中使用了计数器100的系统上电和断电之间,对计数器执行多个增量时,计数器逻辑140可以在寄存器或SRAM中包括易失性的索引存储器。索引存储器可以被用于跟踪作为增量的一部分要被改变的下一个存储单元。索引存储器可以使用二进制表示。例如,如果存储单元的序列120包含1024位,例如,每个都是16位的64字的序列,则对于索引存储器来说,10位就足够了,即16位的寄存器或16位的SRAM。
[0067]擦除增量逻辑156进一步被配置成确定最后一个存储单元被擦除。在这个时候,擦除增量逻辑156为高字增量逻辑160生成信号以对高字存储器130执行增量。
[0068]下面是将计数器100配置成非重复计数器的一个方法。用M表示计数器期望的最大值。在正常使用过程中,计数器将不会超过M。选择位数,例如选择存储单元的位数为ceil (log(v) / log(2))或更高。如果M〈v,则不需要存储单元的序列120。否则,选择存储单元的序列120中的存储单元的数量为ceil (Μ / (2*v))或更高。ceil表示向上取整函数。
[0069]例如,如果Μ=2*10~8,ν=10-5,则可以将高字存储器130取为17位的存储器,如果使用16位字的话,则可以四舍五入成32。对于存储单元的序列120,可以使用1000个存储单元(位),如果使用16位字的话,则可以四舍五入到1008,或者更方便是使用1024个存储单元(位)。计数器可以计数至少2*η*ν个不同的计数状态(例如从数字O到2*ν*η-1),而不会违反寿命限制。
[0070]尽管计数器的增量逻辑高效并且硬件的成本低,这是显着地接近最佳方案的。考虑m个存储单元每个存储单元的寿命都是V。存储在m个存储单元中的计数状态的增量需要在每次增量时,至少一个存储单元被编程或被擦除。由于可能总共只有2mv次变化,这意味着,理论上最多可以有2mv个不同模式可以被用于m个存储单元所进行的计数,例如,可以从I数到2mv。利用具有log(v) / log(2)位高字以及在存储单元的序列中具有m-log(v) /log(2)位的计数器设计,可以计数到v*2*(m-log(v) / log(2)),即2vm_C_v。或者换句话说,这个计数器支持减去一个常数C_v的相同范围,该常数C_v仅仅取决于V。随着η趋于无穷大,理论上的最大值和所获得的最大值之间的比率任意地趋近I。
[0071]图3是说明更复杂的计数器300的方框图。计数器300具有与计数器100相同的基本设计,除了计数器300使用位的多个序列310和高字来表示计数状态,以及使用逻辑来支持这个变化。图中示出的三个序列是:存储单元的序列120以及其他两个序列320和330。也可以是两个序列或多于三个序列。多个序列可以被存储在存储器110中。可以使用串行的存储器访问(读/写),例如,16位或32位的块可以被编程/擦除。
[0072]计数器300通过序列进行计数,在每个时刻,一个序列是激活的并且所有其他序列是非激活的。一旦一个序列从激活变为不激活,则下一个序列激活。当最后一个序列变为不激活时,存储单元的多个序列310溢出,高字被增量并且第一个序列将再次变为激活。
[0073]计数器300通过首先确定激活序列来执行增量。确定激活序列的一种方法是将存储单元的序列中的一种特定模式指定为非激活模式。例如,可以将全O或者全I模式指定为非激活模式。用来标识激活流的一个特别有效的方法是,使用所有全O模式作为非激活模式,使激活流首先进入编程阶段,然后进入擦除阶段。这样做的优点是在擦除阶段结束时,该序列自动在非激活模式中结束。同样,也可以将全I模式作为非激活模式,从擦除阶段开始,在编程阶段结束。对于所有序列,选择需要是相同的。为了简化起见,我们假设全O模式是非激活模式。
[0074]计数器逻辑140包括增量逻辑350,增量逻辑350与增量逻辑150类似,但是增量逻辑350具有额外的逻辑:激活序列确定器352和溢出逻辑354。激活序列确定器352被配置成确定存储单元的多个序列310中哪个序列不包含非激活模式。应当确定出准确的一个序列。该信息被转发到阶段确定器152,使被确定的序列前进,就像在计数器100中那样。然而,当擦除增量逻辑156确定擦除阶段结束时,一个信号被转发到溢出逻辑354,而不是直接被转发到高字增量逻辑160。溢出逻辑354执行两个任务。首先,将多个序列中的下一个序列从非激活变为激活。例如,如果非激活模式是全0,可以将I状态编程到下一个序列的第一个存储单元;这样确保精确的一个序列是激活的。如果当前的序列是最后一个序列,则使第一个序列激活,并且产生一个信号以指示高字增量逻辑160使高字存储器130前进。
[0075]计数器300还可以包含初始化器(图中未示出)。初始化器可以将高字存储器130设置为零。初始化器将非激活模式写入每个序列,例如全O模式,并且将第一激活模式写入第一个序列,例如除了第一个存储单元以外都是O。
[0076]图4示出了说明序列320、330和120的内容的表400。时间向下前进,左边是第一个存储单元,右边是最后一个存储单元。第一行是紧接在初始化之后。全O模式被用来指示非激活序列。首先进行编程阶段,然后是擦除阶段。其他选择也是可以的。每一行对应计数器的增量。
[0077]表400被划分成三个部分:在标记为I的部分中,存储单元的序列320是激活序列,在标记为II的部分中,存储单元的序列330是激活序列,在标记为III的部分中,存储单元的序列120是激活序列。在部分I中,可以看到,只有存储单元的序列320在前进,首先通过编程阶段410,然后通过擦除阶段420。在部分I的擦除阶段420结束时,非激活模式被写入存储单元的序列320,并且通过使存储单元的序列330前进,存储单元的序列330进入到激活模式。注意,这也可以通过编程增量逻辑来实现。只有当激活序列从一个序列移动到下一个序列时,执行两个存储单元的改变。有趣的是,如果存储器110是双端口存储器,则这些更新是可以同时进行的。
[0078]在部分II中,只有存储单元的序列330被更新,再一次首先通过编程阶段410,然后通过擦除阶段。同时,存储单元的序列320和存储单元的序列120处于非激活状态430。当擦除阶段结束时,使下一个序列激活。
[0079]在某些时候,最后一个序列结束擦除阶段。溢出逻辑354发现这个时刻,然后溢出逻辑354将使高字存储器130前进。请注意,高字存储器130在部分I和II结束时不前进。
[0080]请注意,激活序列确定器352可以仅仅从第一个存储单元和最后一个存储单元确定序列是否是激活的。如果非激活的模式是全O或全I,则如果第一个状态和最后一个状态都是全O或全1,该序列是非激活的。有趣的是,对于激活序列,可以从最后一个存储单元根据下表确定接下来将要执行的操作的类型(假设非激活模式是全O):
[0081]
第一个存储单元 I最后一个存储单元I状态
ο?非激活
I?激活,编程阶段
--激活,擦除阶段
I?激活,擦除阶段
[0082]这意味着,激活序列确定器352和阶段确定器152可以共享一些实现和数据,例如,检索最后一个存储单元的值。
[0083]计数器100和300是为了大部分的撕裂安全。更新计数器100中的存储单元的序列120已经是撕裂安全,因为仅仅执行了一个操作。只要当激活序列被转移时,下一个序列在当前的序列变为非激活之前变为激活,那么更新表200中的存储单元的多个序列310也是撕裂安全的。例如,在上述系统中,溢出逻辑354在擦除操作之前执行编程操作。通过加入高字的撕裂安全的实施,这两个计数器都可以被改进。
[0084]为了实现撕裂安全,可以在存储器110中实现额外的高字存储器。这样就具有两个高字存储器HWl和HW2 (图中未示出),可以在一个操作中向每个高字存储器都写入数据,例如两个32位的数字。两个高字存储器其中一个总是具有当前值,另一个被用于写入新的值。在成功操作的情况中,新的值是最近的一个值。如果需要的位比高字存储器中存在的位少,例如对于100000次的寿命,只需要17位,但是高字存储器中存在32位,则可以将特殊模式写入到不用于计数状态的位中,即写入到(例如5个)最重要的位中。特殊模式表示计数器的值具有有效的内容。或者,也可以写入校验和,即存储在高字存储器中的计数状态的CRC-8值。如果需要的话,字剩余的位也可以有不同使用,或保持为0,或被忽略。
[0085]如果两个计数器具有有效的头部,则它们的内容应当相差1,这总是真的,因为两个高位计数器其中一个被增量,另一个被写。例如,如果初始化器将HWl初始化为0,并将HW2初始化为-1。或者如果要避免负数,则将HWl初始化为1,将HW2初始化为O。在后一种情况中,高字的值应该被减去I。更复杂的格雷编码可以被用于高字计数器,但是没有必要实现200万个周期的最大计数。[0086]下面给出高字计数器更新的详细过程:
[0087]I)通过检查头部值并找出哪一个是更高的一个,来定义两个32位字的当前有效的高字计数器状态。
[0088]a)如果HWl的头部值有效并且HW2的头部值有效并且HW1=HW2+1
[0089]1)PTR=2
[0090]2)如果HWl的头部值有效并且HW2的头部值有效并且HW1+1=HW2
[0091]a) PTR=I
[0092]3)如果LW溢出并且PTR=I
[0093]a) HW1<=HW2+1 (EEPR0M 写)
[0094]b)检查写入值和头部,报告状态
[0095]4)如果LW溢出并且PTR=2
[0096]a) HW2<=HW1+1 (EEPR0M 写)
[0097]b)检查写入值和头部,报告状态
[0098]其中PTR表示指针。
[0099]多个序列320、330和120可以按照如下所示的方式被存储在存储器110中。多个序列中的每一个序列的第一位被存储在第一个字中。多个序列中的每一个序列的第二位被存储在第二个字中。多个序列中的每一个序列的第i位被存储在第i个字中。优选的,序列数少于或等于字中的位数,最优选的是二者相等。然而,如果序列数比字中的位数多,则可以将更多的字结合在一起,例如所谓的双字。在实施例中,并不改变激活序列的多个序列的每个编程操作将全O字变成仅具有一个I的字。并不改变激活序列的多个序列的擦除操作将具有一个I的字变成全O序列。这一实现使编程/擦除操作很少,即使存储器并不是独立寻址的。
[0100]图5示出了存储器映射500,这是对存储单元的多个序列310进行存储的一种方法。在图5所示的存储器映射500中,64个存储单元的16个序列每个都被存储在存储器中,被组织成16位字。该存储器可以是具有16位字大小的EEPROM存储器。存储器可以具有100000次的有线寿命。
[0101]存储单元的多个序列310被存储在64X 16位的矩阵中,存储器和16位将被表示为列(colO(LSB)至col 15 (MSB),也表示为c0...cl5)。64个字(页)将被表示为行(rowO至row63,也表示为r0...r63)。下面给出在存储器映射500中计数的过程:
[0102]I)初始状态:64X 16位的数组被初始化,以致c0 / r0存储单元为I。这等于计数器状态O (假定高字(HW)为0)。
[0103]2)利用只写操作,colO的所有后面的行被编程(填满1,直到整列都具有I)。该状态代表计数器的值63。
[0104]3)然后,我们开始第一行rowO的只擦除操作(仍然是第O列)。这代表计数器的值64。
[0105]4)随后,整个colO被擦除,直到我们到达计数器的值126,其中只有cO / r63具有I。
[0106]请注意:到现在为止,我们已经循环(编程+擦除)了整个colO (64个存储单元),并且达到了计数器的值126。[0107]5)现在,我们从(3010到(3011,将1写入1'0¥0,另外从(:010中擦除剩余的1。计数器的值现在是127。(在擦除之前编程允许实现撕裂安全)。
[0108]6)按照与之前相同的过程继续对整个coll进行处理,直到计数器的值达到253。
[0109]请注意:到现在为止,我们已经循环(编程+擦除)了整个colO和coll (128个存储单元),并且计数器的值达到253。
[0110]7)对所有列进行相同的处理,直到计数器的值达到2031,其中仅在cl5 / r63中是I。
[0111]请注意:现在所有64X16 (1024)位都循环(编程+擦除)了一次。
[0112]8)现在是溢出,导致高字被增量(在下面的章节中将更加详细地描述这个过程)。最后的步骤是对cO / rO进行编程,以再次使低字计数器的值为0,并擦除存储单元cl5 /r63。
[0113]下面给出对存储单元的多个序列310中的当前的计数器值进行解码的过程:
[0114]对低字的当前的计数器值进行解码的任务按如下所示进行,以减少读取访问(对存储器的读取访问比对存储器的写入/擦除更快),其中低字的当前的计数器值始终是在O和2031之间。主要的任务是在一列中找到1_>0转变或者是0->1转变的行地址。然后,这与当前的计数器有关。搜索算法可以如下面所示:
[0115]I)找到在iowO和/或row63中具有I的列(这需要最多32个周期)一此列X表示计数器偏移了 X*127。`
[0116]2)在该列中使用二进制搜索算法找到第Y行,第Y行具有转变,取决于是1->0(A=0)或0->1(Α=1)转变,加到结果的计数器的值中:Y+A*63。(请注意:如果该列全是1,则 Y=63,A=0)
[0117]低字计数器的值LW=X*127+Y+A*63。
[0118]通常执行只写操作或只擦除操作。如果完成一列,要执行两个操作(擦除前一列的最后一位)。即使由于像立即断电等一些问题导致写入操作失败,计数器也增加。如果在列变化过程中,在擦除前一列的最后一行中的I之前写入值1,则所提出的思想实现了自动的安全撕裂,这是因为在所有其他情况中,一次只有一个存储单元被写入。
[0119]有趣的是,通过选择行数即多个序列的数目为2的幂次加1,在这种情况下总数是65,可以显著地简化计算,因为所需的乘法运算是2的幂次,可以通过移位来实现,而不需要用乘法器来实现。
[0120]请注意,可以采用其他方法来管理多个序列。
[0121]图6示出了计数方法600的流程图。所示的方法可以在像计数器100这样的系统上执行。该方法可以扩展到多个序列,撕裂安全改进等,如上所示。
[0122]在步骤610中,高字和低字被初始化,例如高字存储器130和存储单元的序列120被初始化,在这种情况下是被擦除。在步骤620中,该方法等待接收增量信号。当接收到增量信号时,在步骤630中确定是编程阶段还是擦除阶段。这可以从易失性的存储器中获得,或者可以从低字存储器本身例如从最后一个存储单元来确定。如果该阶段是编程阶段,则在步骤640中,处于O状态的第一个存储单元被编程。这样的存储单元一定是存在的。如果这样的存储单元不存在,则发生错误,可以启动适当的错误恢复。在擦除阶段的情况下,则在步骤650中,处于I状态的第一个存储单元被擦除。如果擦除导致低字存储器中出现全O模式,则在步骤670中高字被增量。在这两个分支中,该方法可以返回到步骤620,等待下一个增量信号。
[0123]可以采用许多不同的方式来执行该方法,这对于本【技术领域】的技术人员而言将是显而易见的。例如,可以改变步骤的顺序,或者一些步骤可以并行执行。而且,在两个步骤之间可以插入其他方法步骤。插入的步骤可以是对本文中描述的方法的细化,或者可以与该方法无关。而且,在下一个步骤开始之前,给定的步骤可以还未完全结束。
[0124]可以使用软件来执行本发明的方法,该软件包括使处理器系统执行方法600的指令。软件可以只包括由系统的特定子实体执行的那些步骤。该软件可以被存储在适当的存储介质中,诸如:硬盘,软盘,存储器等。该软件可以作为信号沿导线,或无线的,或者使用数据网络如互联网被发送。该软件可以被下载和/或在服务器上远程使用。
[0125]将会理解,本发明也可以延伸到计算机程序,特别是载体上或载体中的适用于实施本发明的计算机程序。该计算机程序的形式可以是源代码,目标代码,代码中间源代码和目标代码,诸如部分编译形式,或者是适合于实施本发明的方法的任何其他形式。与计算机程序产品有关的实施例包括与至少一个所述方法的每个处理步骤相对应的计算机可执行指令。这些指令可以被细分成子例程和/或被存储在可以静态或动态链接的一个或多个文件中。与计算机程序产品有关的另外的实施例包括与所述至少一个系统和/或产品的每个部分相对应的计算机可执行指令。
[0126]应当注意,上述实施例是用来说明本发明,而不是用来限制本发明,本领域技术人员能够设计出许多替代实施例。
[0127]在权利要求中,置于括号之间的任何标号不得被解释为限制权利要求。在本文中使用的动词“包括”并不排除权利要求中所列出的元件或步骤以外的其他元件或步骤。“一”或“一个”并不排除多个的情况。本发明可以由包括若干不同元件的硬件来实现,也可以由合适的计算机程序来实现。在列举了若干装置的产品权利要求中,这些装置可以由硬件的一个组成部分实现。记载在不同从属权利要求中的某些技术手段并不表示这些技术手段不能结合起来得到有益的技术效果。
【权利要求】
1.一种电子计数器,其特征在于,包括: 存储单元的序列,每个存储单元都是非易失性的并且支持I状态和O状态,计数器被配置成,在存储单元的序列的存储单元中,将计数器当前的计数状态的至少一部分表示为I状态和O状态的模式,以及 增量逻辑,被配置成使I状态和O状态的模式前进到下一个模式,以表示计数器的增量,增量逻辑包括编程增量逻辑和擦除增量逻辑,增量逻辑被配置成在编程阶段和擦除阶段之间交替,在编程阶段中,编程增量逻辑使模式前进;在擦除阶段中,擦除增量逻辑使模式前进,其中, 编程增量逻辑被配置成将存储单元的序列中的下一个存储单元从O状态编程为I状态,当存储单元的序列中的所有存储单元都处于I状态时,编程阶段结束, 擦除增量逻辑被配置成将存储单元的序列中的下一个存储单元从I状态擦除成O状态,当存储单元的序列中的所有存储单元都处于O状态时,擦除阶段结束。
2.根据权利要求1所述的计数器,其特征在于,包括: 非易失性的高字存储器,计数器被配置成在高字存储器中表示计数器的计数状态的另外的部分, 高字增量逻辑,用于使高字存储器中表示的计数状态的部分前进,计数器被配置成在存储单元的序列溢出时,由高字增量逻辑来执行增量,存储单元的序列溢出是通过以下方法来确定的: 编程阶段结束,或 擦除阶段结束。
3.根据权利要求1所述的计数器,其特征在于, 非易失性的高字存储器表示二进制数,并且高字增量逻辑被配置成根据二进制位数系统对另外的存储器执行增量,或者 非易失性的高字存储器以格雷编码表示位模式,并且高字增量逻辑被配置成根据格雷编码使该位模式前进到下一个位模式。
4.根据在前的任一项权利要求所述的计数器,其特征在于,包括: 存储单元的多个序列,存储单元的多个序列中的每个存储单元都是非易失性的并且支持I状态和O状态,计数器被配置成在存储单元的多个序列的存储单元中,将计数器当前的计数状态的多个子状态表示为I状态和O状态的模式。
5.根据权利要求4所述的计数器,其特征在于,用表示序列是非激活的模式来配置存储单元的多个序列中除了一个序列以外的所有序列,用与表示序列是非激活的模式不同的模式来配置存储单元的多个序列中的一个序列,该模式是全I状态或全O状态,其中, 增量逻辑被配置成确定存储单元的多个序列中没有存储非激活模式的激活序列,并且增量逻辑被配置成使激活序列前进到下一个模式,在下一个模式达到非激活模式时,增量逻辑进一步使存储单元的多个序列中的下一个序列前进。
6.根据权利要求2或3所述的计数器,其特征在于,包括另外的高字存储器,该另外的高字存储器是非易失性的,其中高字增量逻辑被配置成: 确定高字存储器和另外的高字存储器中哪一个存储器存储较高的数,哪一个存储器存储较低的数,对较高的数执行增量,以及 将增量后的较高的数写入存储较低的数的存储器。
7.根据在前的任一项权利要求所述的计数器,其特征在于,增量逻辑被配置成从存储单元的序列中的最后一个存储单元的状态来确定当前的阶段,其中, 如果最后一个存储单元是处于O状态,则当前的阶段是编程阶段,以及 如果最后一个存储单元是处于I状态,则当前的阶段是擦除阶段。
8.根据在前的任一项权利要求所述的计数器,其特征在于,增量逻辑被配置成执行二进制搜索以找到下一个存储单元。
9.根据在前的任一项权利要求所述的计数器,其特征在于,包括:易失性的索引存储器,用于存储指向存储单元的序列中的表示下一个存储单元的存储单元的索引,增量逻辑被配置成在执行增量时对索引存储器执行增量。
10.根据权利要求4或5所述的计数器,其特征在于,存储单元是大型非易失性存储器中的存储单元,大型非易失性存储器被组织在多个存储器字中,其中存储单元的多个序列中的多个最后一个存储单元在相同的存储器字中。
11.根据在前的任一项权利要求所述的计数器,其特征在于,存储单元的序列中的存储单元是EEPROM存储单元。
12.根据在前的任一项权利要求所述的计数器,其特征在于,高字存储器是EEPROM存储器。
13.根据在前的任一项权利要求所述的计数器,其特征在于,存储单元的多个序列中的所有存储单元部是EEPROM存储单元。
14.一种用于电子计数的方法,其特征在于,计数器当前的计数状态的至少一部分在存储单元的序列的存储单元中被表示为1状态和O状态的模式,该方法包括; 使存储单元的序列的1状态和O状态的模式前进到下一个模式,以表示计数器的增量,计数器的增量在编程阶段和擦除阶段之间交替,其中, 在编程阶段中,将存储单元的序列中的下一个存储单元从O状态编程为1状态,当存储单元的序列中的所有存储单元都处于1状态时,编程阶段结束, 在擦除阶段中,将存储单元的序列中的下一个存储单元从1状态擦除成O状态,当存储单元的序列中的所有存储单元部处于O状态时,擦除阶段结束。
15.一种电子设备,其特征在于,包括权利要求1-13中任一项所述的计数器。
【文档编号】H03K21/40GK103701458SQ201310431950
【公开日】2014年4月2日 申请日期:2013年9月22日 优先权日:2012年9月27日
【发明者】马丁·费尔德霍弗, 弗朗茨·阿姆特曼, 森克·奥斯特敦, 艾莉希亚·达孔塞桑 申请人:Nxp股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1