背景技术
许多当今的消费和嵌入式系统产品通常包括三类不同的存储器部件,用于支持产品所需要的特征。例如,在一种典型的蜂窝电话中,使用闪速存储器部件来存储代码,SRAM提供堆栈和易失数据的存储,而第三部件,亦即EEPROM器件,提供为经常更新或变更的数据提供非易失存储。这三组数据的内容以不同速率和在不同时间改变,取决于产品的类型。显然,所有这些数据需要存储在它可以被最好地检索以及改变的地方。
使用闪速存储器来存储和检索需要非易失存储数据的消费和工业应用已有多年。例如,可以使用闪速存储器提供磁盘模拟,代替转动磁盘。换句话说,可以使用闪速存储器作为读/写介质来代替转动磁盘。
一种增加闪速存储器器件中数据可更改性的方法在美国专利6,041,001中公开。使用一种错误修正码,称为汉明码,和把闪速存储器单元细分为块。每一这种块进一步被分为段。所述美国专利集中在闪速存储器中的数据组织。使用大功率错误修正来执行错误检测和错误改正。
闪速存储器是一种可电重写的非易失数字存储器器件,它不需要电源来保持它的存储器内容。典型的闪速存储器在浮置栅上存储电荷来表示二进制状态系统的第一逻辑状态,而没有存储的电荷表示二进制状态系统的第二逻辑状态。另外,典型的闪速存储器器件能够执行写操作、读操作、和擦除操作。
在大量消费应用中,闪速存储器一直主要用于代码存储,虽然闪速存储器在电路中的写能力也允许它应用于数据存储。直到最近,在闪速存储器内部存储的代码正被执行时不能写(或擦除),这一点曾阻止它替换在某些产品中的EEPROM。然而,新系列闪速存储器部件在单一闪速存储器内提供这种同时的‘读同时写’(RWW)功能。这一特征开辟了在同一闪速存储器器件中存储非易失数据和可执行代码的道路。这种闪速存储器部件提供可执行代码和存储经常更新的数据的能力允许在多种产品中去掉EEPROM。如图1A所示,迄今为止的常规产品通常包括闪速存储器10、EEPROM 11、和SRAM 12。将来可以实现从产品中完全去除EEPROM器件的产品,能够节约芯片面积和各产品的成本。这种未来产品的一个例子在图1B中表示。它包括闪速存储器13和SRAM 14。
新产品开发使得具有大存储容量的闪速存储器成为必需。今天,闪速存储器容量逐年翻番。大闪速存储器必须使用错误修正,以便实现合格产品的可靠性。错误修正基于产生冗余位,亦即奇偶位,它们与数据位一起存储在存储器中。在读取存储器时,使用这些冗余位检测和改正位错误。使用闪速存储器的错误修正有一个大的缺点:一旦给该闪速存储器编程一个数据字,则这一数据字不再能在不妨碍正确地产生冗余位的条件下改变。换句话说,当使用常规错误修正模式时失去了数据字的单个位可改变性。
通常,不要任何错误修正模式使用闪速存储器。在这些常规闪速存储器中,如果希望改变一个闪速存储器数据字的话,则必须擦除整个闪速存储器(或至少其大部分)。
在数字存储器设计中使用错误修正来处理位错误。通常,使用一个适当的逻辑电路,该电路实现错误修正代码(ECC)。ECC允许检查正被读或传输的数据位的错误,和必要时,在运行中改正这些错误。
由于使用的闪速存储器日益增加的规模,提供某种错误修正变得越来越重要。一些最新的闪速存储器系统装置有错误修正模式,该模式使用一个编码器给闪速存储器写数据,和一个解码器从闪速存储器读数据。
然而,可更改位是一个非常重要的特征,例如,当在闪速存储器上模拟EEPROM功能时,该技术由所有主要的闪速存储器制造商使用,例如Intel,AMD,Atmel,和其他制造商。
本发明的一个目的是提供一种模式,它允许闪速存储器用于当今和未来的多种应用。因此,本发明的一个目的是提供一种模式,它能当在闪速存储器上模拟EEPROM功能时实现位的更改。
具体实施方式
闪速存储器与其它存储器类型例如SRAM对比,只允许在一个方向上的位改变。在闪速存储器单元中存储的逻辑“1”通过编程操作可以改变为逻辑“0”。然而,不能通过编程操作把逻辑“0”变成逻辑“1”。改变编程的单元(逻辑内容“0”)为逻辑“1”只能用擦除操作才可能。擦除操作不能对单个位执行,而只能对大量数据(称为块擦除)或甚至整个存储器(称为闪速擦除)执行。
图2表示在闪速存储器数据字20上的一种可能的数据操作。在本例中,闪速存储器数据字20有4位。开始时(初始状态),所有4位都被擦除,因此具有内容“1”。接着,编程数据字‘1010’(状态b)。在随后的步骤(步骤c),把最高位(MSB)21从‘1’改变为‘0’。最后,擦除数据字20(连同许多其它在图2中未示出的数据字),到初始化值‘1111’(状态d)。只要这种改变是从逻辑‘1’到逻辑‘0’,这种单个位改变是可能的(1->0)。
图3表示错误修正块30和闪速存储器31一起的应用。应该编程到闪速存储器31的数据通过输入线32(这里称为数据输入或Din)供给错误修正块30。该错误修正块30产生冗余位。一起编程数据与冗余位到闪速存储器31。数据通过线33写入闪速存储器31,通过线34写入冗余位。在读操作期间,数据和冗余位分别通过线35和36从闪速存储器31读取。使用存储在冗余位中的信息检测和改正数据字中可能的错误。最后,改正的数据在输出线37上输出(这里称为数据输出或Qout)。
当使用常规错误修正模式(例如基于汉明码的模式)-如在图4中所示-时,单个位不能像图4所示那样自由改变。(状态a)在擦除存储器的内容后,闪速存储器数据字40和冗余位41处在初始状态。也就是说,所有位(数据和冗余位)都是逻辑‘1’。(状态b)当编程数据字40时,根据适当的错误修正模式也编程冗余位41。非常适合的是诸如汉明码这样的错误修正码。可以使用汉明码检测和改正单个位错误和双位错误,这里,双位错误指两个不同的数据位包含错误。
(状态c)将会发现,数据字40的MSB 42仍可以从逻辑‘1’改变到逻辑‘0’。但是冗余位41不能相应改变,因为这将需要两个从逻辑‘0’到逻辑‘1’的改变。冗余位41的MSB 43和LSB 44应该从逻辑‘0’改变到逻辑‘1’,这是不可能的。其结果将是在闪速存储器中的一个不正确的字。该例演示当连同常规编码算法例如汉明码一起使用闪速存储器时,单个位可改变性失去。当使用常规错误修正模式时,单个位不能自由改变,如图4所示。
根据本发明,提出一种新的错误修正模式,它允许闪速存储器数据字上改进的位更改。图5表示具有根据本发明的编码模式的闪速存储器数据字50的组织。如图5所示,闪速存储器数据字50分成两个部分51和52。在给出的例子中,数据字50的4个最高位51为位改变预留。数据字50剩余的4位52用于随机数据。冗余位53的使用和常规编码模式相同。然而注意,需要较长的冗余位,因为由于引入字51,整个闪速存储器数据字50更长。请注意,闪速存储器数据字50的部分52通常比部分51长。
图6详细表示新编码模式的原理:(状态a)在擦除操作后闪速存储器数据字50的所有位和冗余字53都是逻辑‘1’。(状态b)数据编程到闪速存储器数据字50的数据部分52。在表示的本例中,编程数据‘1010’。为单一位改变预留的部分51在现在未被触及。冗余字53被编程为‘1001’。(状态c)现在通过编程为位改变为‘0001’而预留的数据字段51而修改闪速存储器数据字50。新闪速存储器数据字50是‘0001 1010’,它有和旧闪速存储器数据字‘111 1010’同样的冗余字53。其结果,闪速存储器数据字50的修改是正确的,并在读出该闪速存储器时将得到一个合法的代码字。
应该注意,位的可更改性是受限制的。位只可以在闪速存储器数据字的一个保留的部分内改变。此外,并非所有可能的位改变是允许的。在给定的例子中,为改变保留4位(部分51)。理论上说,16个位修改是可能的,但是这16个中只有两个是允许的(例如‘0001’和‘0100’)。可能的位改变这里称为‘魔术字’。因为使用循环编码模式(循环码)定义冗余字53,因此有一定的闪速存储器数据字50(魔术字),它们具有同样的冗余字53。
现在结合应用实例说明本模式的细节。
本发明例如可以应用于未来的移动电话系统。对于大闪速存储器容量(64Mb-128Mb)日益增加的需求使得错误修正成为必需。因此,使用没有错误修正模式的闪速存储器不是一种可行的选择。在蜂窝电话中,通常在专用EEPROM芯片中存储少量经常改变的数据(参数)(例如电话号码、税额等),该芯片允许在字节级擦除。为减少移动电话的成本和部件数,新的趋势是省去EEPROM芯片,而在闪速存储器上模拟EEPROM功能。这一技术由所有主要的制造商广泛传播。不像EEPROM,闪速存储器不能在字节级擦除,其在本说明书的引言部分已经讨论。因为闪速存储器中的字节不可能被改写,因此闪速存储器数据字的旧的出现在改变该闪速存储器数据字时被标记为“无效”。把更新的闪速存储器数据字写入下一可用闪速存储器位置。通常,使用闪速存储器管理软件,它跟踪闪速存储器数据的有效出现。图7表示当在闪速存储器上模拟EEPROM功能时闪速存储器数据字60是如何组织的。闪速存储器数据字60分成两个字段61和62。在闪速存储器数据字段62中,可以存储实际信息(随机数据)。在状态字段61中,编程一个标记以指示在闪速存储器数据字段62中包含的数据有效还是无效。该应用直接相应于这里说明的发明。在闪速存储器数据字段62已经编程后状态字段61需要单一位改变。当使用错误修正时,单一位改变到已经编程的数据是不可能的。根据该新模式的错误修正允许为EEPROM模拟所需要的位修正。
图8给出根据本发明的系统70的方框图。系统70是一个集成电路系统,具有一个非易失闪速存储器71。错误修正编码器72安放在闪速存储器71的输入侧。它使用一个错误修正算法用来给闪速存储器71写数据。在闪速存储器71的输出侧安放一个错误修正解码器73,用于从闪速存储器71中读存储的位。此外,系统70包括一个微处理器74。闪速存储器数据总线75连接错误修正编码器72到闪速存储器71和闪速存储器71到错误修正解码器73。闪速存储器数据总线75分成承载冗余位的位线76和承载闪速存储器数据位的位线77。数据位线77分成承载状态位的位线78和承载数据位的位线79。根据本发明,如果状态位改变改变为一定的优选值(“魔术字”),则错误修正编码器72不改变冗余位的组配。
如果要在错误修正编码器72的入口Din处编程入闪速存储器中的数据字具有128位,则闪速存储器数据总线75优选是136位宽,冗余字8位,闪速存储器数据字112位和状态位字16位,然后把它们传输到闪速存储器71。反之亦然,当从闪速存储器71读一个数据字时,冗余字有8位,闪速存储器数据字有112位,状态位字有16位。输出线66上的数据字是128位宽。在128位数据字、16位的状态位字和8位的冗余字的场合,有几个可用的魔术字。允许状态字采取一个魔术字。不允许魔术字以外的字。当有3个不同的16位魔术字时,状态字段可以存储3个魔术字中之一。注意,如果数据字段中的数据字改变,则根据本发明的奇偶位仍然改变。然而,如果状态信息从一个魔术字改变到另一个魔术字,则奇偶位不改变。用以控制微处理器的软件(微代码)‘认识’该魔术字。魔术字可以存储在例如闪速存储器中。
在根据本发明的另一个实施例的集成电路系统中,可以使用状态位61来决定内容部分62中的数据是否有效。
在本发明的另一个实施例中,以模拟EEPROM的方式使用闪速存储器71。
在本发明的再一个实施例中,使用一个循环冗余码,最好是一个对称的汉明码,作为集成电路系统70中的错误修正算法。
图9给出本发明的另外一个实施例。系统80包括微处理器84、微处理器总线91、RAM 83、I/O设备92和闪速存储器单元90。在闪速存储器单元90内实现本发明模式。它包括一个组合的错误修正编码器/解码器82(和可能有其它的控制电路),其通过闪速存储器数据总线连接到闪速存储器81。闪速存储器数据总线包括位线86和87。微处理器84可以经由总线91写数据到闪速存储器81中。这些数据由编码器/解码器82编码(在被编程到闪速存储器81中前)。通过位线86编程冗余位到闪速存储器81和经过数据线87编程闪速存储器数据字到闪速存储器81。编码器/解码器82产生具有两部分的闪速存储器数据字。第一部分表示位改变,而第二部分表示实际数据。为此目的,数据线87细分为承载闪速存储器数据字的第一部分的数据线88和承载实际数据字的数据线89。
编码器/解码器82包括多个门(诸如与门、或门和异或门)。
当从闪速存储器81中读数据时,通过数据线86和87取各数据。然后,应用一个算法来检验该数据有效还是无效。如果该数据被认为有效,则使它们成为可通过总线91为微处理器84可用。如果该数据被认为无效,则改正它们,然后使它们通过总线91为微处理器84可用。
图10A表示错误修正编码器72的细节。在本例中,用于在闪速存储器71中写入数据的输入总线Din是128位宽。通过总线线103把一个128位的数据字供给适配器100。适配器扩展该数据字,使得它在输出总线104上有136位。这通过在该数据字的末尾添加零而实现。然后通过总线104把该136位的数据字供给第一奇偶位发生器101。第一奇偶位发生器101应用一个编码模式(例如基于汉明码)以便产生相应于在输入Din处的数据字的冗余位。在本例中,有8个冗余位,它们在第一奇偶位发生器101的输出总线105上提供。8位冗余字和在输入Din处的128位的数据字组合,以便形成在输出总线75(Dout)上的一个136位的字。这一136位的字存储在闪速存储器71中为以后检索。
图10B表示错误修正解码器73的细节。当从闪速存储器71中取136位的字时,它通过总线108供给另一个第二奇偶位发生器106。这一第二奇偶位发生器106可以和第一奇偶位发生器101相同。第二奇偶位发生器106应用一个编码模式(例如基于汉明码),以便能够决定该136位的字中的任何位是否需要改正和识别哪一位必须被改正。在本例中,第二奇偶位发生器106在输出总线109上提供一个8位的字,它指示该136位的字中的任何位是否需要改正和哪一位必须被改正。应用修正单元107执行正被施加在它的输入总线108上的136位字的必需的改正。然后把改正的数据字(Qout)提供到输出总线110上。
错误修正编码器72和错误修正解码器73都可以使用标准数字逻辑实现。优选,两个功能块72和73都可以集成到和闪速存储器71同一个模子上。
根据本发明的闪速存储器的特征是以图5所示方式逻辑组织数据。每一闪速存储器数据字包括一个第一部分,其中存储为单个位改变保留的信息。闪速存储器数据字的第二部分包括实际数据。提供一个第三部分,使用它来存储冗余位。这些冗余位根据第一和第二部分中的信息计算。使用一个合适的代码(例如汉明码)来计算冗余位。根据本发明的一个实施例,可以规定错误修正代码的某些代码要求。第一条件将是该代码应该是对称的,亦即在其中所有位都是‘0’或所有位都是‘1’的代码字必须是合法的字。
可以使用下面的等式来产生第二奇偶位发生器106的输出总线109上的字ParGenQ:
ParGenQ=H·cT
ParGenQ是在总线109上的8位结果矢量。它通过用在输入总线108上的136位的字乘奇偶位矩阵H产生。第二奇偶位发生器106实现该矩阵H。
在闪速存储器71的输入侧,可以使用同样的矩阵H来产生输出总线105上的冗余字。
为结合本发明使用,可以规定表征奇偶位矩阵H的规则。这些规则可以根据不同的应用而不同。
应该注意,本发明不允许无限制的位更改,像在没有任何错误修正的闪速存储器中的情形。
介绍一种为模拟闪速存储器中电可擦可编程只读存储器(EEPROM)的成本有效的方法。这里介绍的方法使用具有关于闪速存储器数据字改进的位可更改性的标准闪速存储器部件,其足以满足大多数应用。
根据另一个实施例,例如,闪速存储器数据字具有128位的长度,和冗余字具有8位的长度。
本发明非常适合用于个人数字助理(PDA)、蜂窝电话、数字照相机、掌上型设备或多种其它设备。包括根据本发明的闪速存储器的系统非常适合用来存储万维网地址、备忘录、新的地址信息(例如新的电话号码)、账目(例如费用)等。
可以在其中使用本发明的一个例子是话音驱动(话音编码)蜂窝电话。例如,各话音样本存储在闪速存储器中。
本发明还非常适合用于这样的蜂窝电话,在这样的电话中,电话号码存储在闪速存储器中而不是SIM卡上。如果一个电话号码改变,则旧的电话号码必须标记为过时。为此目的,闪速存储器中的各数据字必须标记为无效。为实现这一点,必须改变单一位。在具有错误修正的常规闪速存储器中,这是不可能的。然而,使用本发明,可以改变单一位,只要新的数据字(其中一位要改变)和原来的数据字具有同样的冗余字。
本发明的一个优点是,它改善了任何计算设备的可靠性,而没有增加用于附加电路的更多开销或成本。
应该理解,为清楚起见,本发明的各种特征在一些个别实施例的上下文中说明,它们也可以在单一实施例中组合提供。相反,为简洁起见,在单一实施例的上下文中说明的本发明的各种特征也可以单独或者以任何适合的子组合提供。
在附图和说明书中,叙述了本发明的优选实施例,虽然使用了特定的术语,但是这样给出的说明在通用和说明性意义上使用这些术语,而不是为限制的目的。