纠错码存储器的制作方法

文档序号:18902207发布日期:2019-10-18 22:05阅读:238来源:国知局
纠错码存储器的制作方法

本公开总体涉及纠错码存储器,更具体地涉及用于纠错码存储器的控制器。



背景技术:

使用纠错码(ecc)保护其数据免受瞬时错误的存储器被称为ecc存储器。纠错码(ecc)存储器是一种可以检测和纠正最常见的内部数据损坏类型的计算机数据存储。ecc存储器被用于几乎在任何情况下都不能容忍数据损坏的计算机,诸如用于安全计算、科学计算和/或金融计算的计算机。ecc存储器具有纠错码(ecc)位以及数据,以便于检测和纠正错误。额外的纠错码位可以与数据一起被存储在数据存储器中或者被存储在ecc存储器的单独的代码存储器中。常见的纠错码、单纠错和双错误检测(secded)汉明码允许纠正单个位错误并且检测双位错误。

在一些示例中,ecc存储器维持存储器系统免受单个位错误的影响。因此,从ecc存储器中的每个字读取的数据与已经写入ecc存储器的数据相同,即使先前存储的一个或多个位已经被翻转到错误状态。ecc方案可以基于大于可以被写入的最小数据大小的数据大小,其被称为“部分数据写入”。对于这种部分数据写入,执行读取-修改-写入操作。为了执行读取-修改-写入操作,数据是来自存储器的读取数据并且使用ecc检查逻辑检查数据的错误。在单个位错误(sbe)的情况下,使用纠正逻辑修复数据,然后将纠正的读取数据与部分写入数据组合并且写入数据存储器。组合数据还用于计算要写入代码存储器的新的ecc代码。



技术实现要素:

在第一示例中,存储器控制器包括读取-修改-写入逻辑模块,该读取-修改-写入逻辑模块接收对纠错码(ecc)存储器中的部分写入数据的部分写入数据请求,并且在纠正读取数据之前将部分写入数据请求中的部分写入数据与从ecc存储器提供的读取数据组合以形成组合数据。存储器控制器还包括写入控制模块,该写入控制模块控制组合数据到ecc存储器的写入。

在第二示例中,存储器控制器包括ecc检查和修复模块,该ecc检查和修复模块从ecc存储器接收读取数据和纠错码,并且提供指示是否在读取数据的至少一个位位置中检测到错误的ecc错误信号。存储器控制器还包括读取-修改-写入逻辑模块,该读取-修改-写入逻辑模块接收对ecc存储器中的部分写入数据的部分写入数据请求,并且在ecc检查和修复模块检测读取数据的至少一个位位置中的错误之前,将部分写入数据请求中的部分写入数据与从ecc存储器提供的读取数据组合以形成组合数据。存储器控制器进一步包括写入控制模块,该写入控制模块基于ecc错误信号,控制组合数据到ecc存储器的写入。

在第三示例中,一种方法包括接收对ecc存储器中的数据的部分写入数据请求。该方法还包括将部分写入数据请求中的部分写入数据与从ecc存储器提供的读取数据组合以形成组合数据。该方法还包括与组合并行地检查读取数据的准确性。

附图说明

图1是用于执行部分存储器写入的存储器控制器的一个示例的框图。

图2是用于执行部分存储器写入的存储器控制器的另一示例的框图。

图3是可以由图2的存储器控制器采用的示例波形的时序图。

图4是用于执行部分存储器写入的存储器控制器的又一示例的框图。

图5是可以由图2的存储器控制器采用的示例波形的时序图。

图6是用于执行部分存储器写入的一个示例方法的流程图。

图7是用于执行部分存储器写入的另一示例方法的流程图。

具体实施方式

示例实施例包括用于在部分存储器写入操作期间实现纠错码(ecc)保护存储器的存储器控制器和方法。存储器控制器被配置为以满足包括部分宽度数据写入的大存储器(数据存储)的ecc核(主要/主控制器)的相对严格的时序要求的方式操作。

在至少一个示例中,存储器控制器在部分写入期间实现并行操作的读取路径和写入路径。例如,在并行操作中,在纠正读取数据中的错误之前,将从ecc存储器读取的数据(“读取数据”)与部分写入数据组合。采用产生的组合数据以在写入路径上生成新的纠错码。为了简化说明,如下面所使用的,术语“ecc”表示硬件(例如,ecc存储器),术语“纠错码”表示代表纠错码的数据的实际实例,其也可以被称为错误代码字。

并行(例如,同时操作并且在并行路径上操作),重新生成(重新计算)纠错码,并且通过将重新生成的纠错码与代码存储器中的存储的纠错码进行比较,为读取数据生成校正子。在单个位错误检测的情况下,该校正子用于解码数据位错误位置。如果发现错误位于的位位置用于生成用于计算部分写入的新的纠错码的组合数据,则存储器控制器翻转损坏的位(通过xor操作),并且得到的修复数据(其包括部分写入数据)被写入存储器。类似地,通过使用相对简单的逻辑门操作(例如,一级逻辑)(通过xor功能)来翻转纠错码中受损坏的数据位影响的位,以生成修复的纠错码,该修复的纠错码被写入ecc存储器。通过并行地生成用于读取路径和写入路径的纠错码,通过避免需要对纠错码进行连续(接连)计算来放宽控制器的定时。例如,通过采用并行路径,如本文所描述的,部分写入可以在两(2)个时钟周期内完成。在这种情况下,在第一个时钟周期期间,从数据存储器读取数据。在第二个时钟周期期间,通过将部分写入中的数据与读取数据组合来生成组合数据,为组合数据计算新的纠错码,并且(在xor功能之后)将组合数据和新的纠错码写入ecc存储器。

在另一示例中,存储器控制器在读取路径和写入路径上实现流水线并行处理以执行部分存储器写入操作。在涉及大容量(例如,1千兆字节或更大)的存储器的高频设计中,存储器延迟可能禁止在读取路径上添加更多逻辑电平。在这种情况下,在读取路径上使用读取数据之前,读取数据被寄存(register)(被存储在延迟中)。寄存在读取路径上的纠错码计算和校正子解码之前。该寄存导致部分存储器写入(在读取-修改-写入操作中)的等待时间增加至少一个时钟周期,使得部分写入操作在至少3个时钟周期而不是2个时钟周期内完成。然而,通过采用流水线并行操作可以避免/减轻额外的时钟周期,如下面所描述的。

在部分写入的流水线并行操作中,在第一时钟周期中,数据被从ecc存储器中读取(“读取数据”)。此外,停止信号被断言到主控制器以将ecc存储器的写控制信号保持再多一个时钟周期。在第二时钟周期中,通过存储器控制器将读取数据与部分写入数据组合以形成组合数据,并且ecc生成器生成新的纠错码。组合数据和新的纠错码被写入ecc存储器,并且停止信号被去断言。此外,在第二时钟周期中,读取数据在延迟(触发器)中被寄存。

寄存的读取数据在第三时钟周期可用,并且检查寄存的读取数据以发现数据损坏。在单个位错误的情况下,存储器控制器将停止信号重新断言一个附加的时钟周期,以使用正确的值更新ecc存储器中的数据和纠错码。因为预期存储器位损坏的概率非常低且不频繁(例如,小于约0.00001%的时间),所以用于纠错的另外一个时钟周期的附加等待时间并无大碍。

图1示出用于通过读取-修改-写入操作对ecc存储器52执行部分写入的存储器控制器50的一部分的框图。术语“部分写入”可以替代地称为部分数据写入或部分数据传输。ecc存储器52是非暂时性机器可读介质(例如,随机存取存储器),其可以在需要高度准确的(例如,未损坏的)数据的情况下采用。因此,ecc存储器52通常用于诸如汽车制动控制和/或气囊部署的安全应用中,其中不正确的数据(损坏的数据)可能导致安全系统的功能不当。然而,ecc存储器52可以被部署在几乎任何需要或期望高度准确数据的计算环境中。ecc存储器52包括数据存储器54和代码存储器56。

数据存储器54包括用于存储数据的存储器单元,并且代码存储器56包括用于为存储在数据存储器54中的数据存储纠错码的数据单元。数据字(简称为“字”)由数据存储器54中的多个单元形成,并且代码存储器56是唯一可寻址的。存储在ecc存储器52的数据存储器54中的数据具有k位的指定字大小,其中k是等于或大于等于二(2)的整数。

在至少一个示例中,存储器控制器50包括读取-修改-写入逻辑58(读取-修改-写入逻辑模块),读取-修改-写入逻辑58响应于部分写入数据请求(在图1中标记为“部分wr数据”)在ecc存储器52上执行读取-修改-写入操作。部分写入数据请求包括数据存储器54中的字的唯一地址。此外,部分写入数据请求包括要写入数据存储器54的t个位,其中t是大于或等于一(1)且小于k(即数据存储器54的字大小)的整数。因此,如果数据存储器54具有64位的字大小,则在读取-修改-写入操作中,t可以是1-63位,以写入数据存储器54。

读取-修改-写入逻辑58接收低电平有效存储器使能信号(图1中的“ez”)和低电平有效写入使能信号(图1中的“wz”),这与部分写入数据请求同时。如本文所使用的,在低电平有效信号是逻辑‘0’的情况下断言低电平有效信号,并且在低电平有效信号是逻辑‘1’的情况下去断言低电平有效信号。如果存储器使能ez被去断言(例如,逻辑‘1’),则包括在ecc存储器52中的存储器单元是无效的,不能被读取并且不能被写入。相反,如果ez被断言(例如,逻辑‘0’),则包括在ecc存储器中的存储器单元是有效的,并且可以被从其读取和/或被向其写入。此外,wz被去断言(例如,逻辑‘1’)而ez被断言(例如,逻辑‘0’),则ecc存储器52正在执行读取操作。而且,如果wz被断言(例如,逻辑‘0’)而ez被断言(例如,逻辑‘0’),则ecc存储器正在执行写入操作。

响应于写入信号、wz和存储器使能信号ez被断言(例如,逻辑‘0’),读取-修改-写入逻辑68断言低电平有效停止信号停止_n(逻辑‘0’),其阻止在ecc存储器52上的后续存储器操作。此外,读取-修改-写入逻辑58将地址信号memaddr(被包括在部分写入数据请求部分wr数据中)转发到ecc存储器52。作为响应,数据存储器54向读取-修改-写入逻辑58提供读取数据信号(图1中的“rd数据”)。读取数据信号rd数据包括存储在信号(例如,数据字)的地址中识别的数据存储器45的存储器位置处的数据。

响应于读取数据信号rd数据,读取-修改-写入逻辑58将rd数据中的数据与部分写入数据请求部分wr数据中的数据组合以形成组合数据,并且生成写入数据信号(图1中的“wr数据”)。写入数据信号wr数据包含要写入数据存储器54的相同位置(由地址信号memaddr识别的位置)的组合数据。在读取数据信号rd数据中的数据的任何纠错之前生成写入数据信号wr数据。写入数据信号wr数据被提供给写入控制62(写入控制模块)和ecc生成器64。

响应于写入数据信号wr数据,ecc生成器64为包括在写入数据信号wr数据中的组合数据生成新的纠错码,并且将新的纠错码转发到写入控制62。写入控制62控制数据到数据存储器54和代码存储器56的写入定时。

在第一示例(下文中,“第一示例”)中,读取数据信号rd数据也被提供给ecc检查和修复60(ecc检查和修复模块),第一示例可以被称为并行操作,并且将参照图2详细描述。此外,响应于地址信号memaddr,ecc存储器52的代码存储器56向ecc检查和修复60提供纠错码信号(图1中的“ecc1”)。纠错码信号ecc包括存储在代码存储器56中的地址处的纠错码,该代码存储器56中的地址对应于由地址信号memaddr识别的地址,该地址可以称为错误代码地址。

继续第一示例,响应于读取数据信号rd数据,ecc检查和修复60采用纠错码ecc1以识别包括在读取数据信号rd数据中的数据中的错误。此外,ecc检查和修复60生成提供给写入控制62的数据修复模式信号(图1中的“数据修复模式”)。数据修复模式信号数据修复模式包括用于纠正错误的数据。类似地,ecc检查和修复60生成提供给写入控制62的ecc修复模式信号(“ecc修复模式”)。

在第一示例中,写入控制62采用写入数据信号wr数据中的组合数据和数据修复模式信号数据修复模式中的数据来生成修复数据信号,该修复数据信号包括在地址信号memiddr中识别的地址处被写入数据存储器54的数据。此外,写入控制62采用来自ecc生成器64的新的纠错码和来自错误检查和修复60的ecc修复模式信号ecc修复模式,以生成用于在错误代码地址处被写入代码存储器56的数据的修复的纠错码。此外,在写入修复的纠错码之后,读取-修改-写入逻辑58去断言停止信号停止_n(例如,逻辑‘1’)以启用ecc存储器52上的后续存储器操作。

在第二示例(下文中,“第二示例”)中,响应于写入数据信号wr数据和新的纠错码,写入控制62在地址信号memaddr中识别的地址处将组合数据写入数据存储器54,并且将新的纠错码写入代码存储器56的错误代码地址,第二示例可以被称为流水线并行操作,并且将参考图4详细描述。此外,读取-修改-写入逻辑58去断言停止信号停止_n(例如,逻辑‘1’)。

随后,分析读取数据信号rd数据(在延迟中寄存)和纠错码ecc1的错误,并且如果ecc检查和修复60确定被包括在读取数据信号rd数据中的数据中存在单个位错误,则ecc检查和修复60断言(例如,逻辑‘1’)ecc单个位错误信号(图1中的“eccsbe”)并且将ecc单个位错误信号eccsbe提供给写入控制62和读取-修改-写入逻辑58。ecc单个位错误信号eccsbe可以替代地称为ecc错误信号。相反,如果ecc检查和修复60确定在读取数据信号rd数据中没有错误,则ecc单个位错误信号eccsbe被去断言(例如,逻辑‘0’)并且被提供给写入控制62和读取-修改-写入逻辑58。

在第二示例中,响应于单个位错误信号eccsbe被断言(例如,逻辑‘1’),读取-修改-写入逻辑58断言停止信号停止_n(例如,逻辑‘0’),其防止后续数据传输用于ecc存储器52上的其他操作。此外,断言单个位错误信号eccsbe,使写入控制62采用数据修复模式信号数据修复模式和ecc修复模式信号ecc修复模式来纠正写入地址信号memaddr中识别的数据存储器54的地址的数据和写入代码存储器56的错误地址的纠错码。此外,读取-修改-写入逻辑58去断言停止信号停止_n,并且允许ecc存储器52上的后续操作。

相反,在第二示例中,响应于单个位错误信号eccsbe被去断言(例如,逻辑‘0’),读取-修改-写入逻辑58继续去断言停止信号停止_n(例如,逻辑‘0’)。以这种方式,不改变写入ecc存储器52的组合数据和新的纠错码。

在第一示例和第二示例两者中,在读取数据信号rd数据中的数据的纠错之前,(包括在rd数据中的)数据从数据存储器54读取并且与部分写入数据请求部分wr数据中的数据组合。因此,与其他操作并行地执行纠错,以减少读取-修改-写入操作的等待时间。

图2示出用于利用读取-修改-写入操作对ecc存储器102执行部分写入的存储器控制器100的一部分的框图的另一示例。存储器控制器100以并行操作执行处理。在至少一个示例中,存储器控制器100可以被采用以实现图1中所示的存储器控制器50。ecc存储器102是非暂时性机器可读介质(例如,随机存取存储器),其可以在诸如安全应用(例如,汽车)、金融应用等的需要高度准确的(例如,未损坏的)数据的情况下采用。ecc存储器102包括数据存储器104和代码存储器106。

数据存储器104包括用于存储数据的存储器单元,并且代码存储器106包括用于为存储在数据存储器104中的数据存储纠错码的数据单元。字由数据存储器104中的多个单元形成,并且代码存储器106是唯一可寻址的。存储在ecc存储器102的数据存储器104中的数据具有k位的指定字大小。

在至少一个示例中,存储器控制器100包括读取-修改-写入逻辑108,该读取-修改-写入逻辑108响应于部分写入数据请求(在图2中标记为“部分wr数据”)在ecc存储器102上执行读取-修改-写入操作。部分写入数据请求部分wr数据包括数据存储器104中的字的唯一地址。此外,部分写入数据请求部分wr数据包括要写入数据存储器104的t个位,其中t是大于或等于一(1)且小于k(即数据存储器104的字大小)的整数。因此,如果数据存储器104具有32位的字大小,则在读取-修改-写入操作中,t可以是1-31位,以写入数据存储器104。

读取-修改-写入逻辑108部分数据接收低电平有效存储器使能信号(图2中的“ez”)和低电平有效写入使能信号(图2中的“wz”,这与部分写入数据请求部分wr数据同时。响应于写入使能信号wz和存储器使能信号ez被去断言(例如,逻辑‘0’),在第一时钟周期(来自主存储器控制器,未示出)中,读取-修改-写入逻辑108断言停止信号停止_n,其阻止ecc存储器102上的后续存储器操作。此外,读取-修改-写入逻辑108将地址信号memaddr(作为部分写入数据信号部分wr数据中的addr被包括到数据存储器)转发到ecc存储器102。读取-修改-写入逻辑108还提供对应于存储器使能信号mz和写入使能信号wz的低电平有效断言条件存储器使能信号memez(例如,逻辑‘0’)和低电平有效去断言条件存储器重写信号memwz(例如,逻辑‘1’)。作为响应,数据存储器104向读取-修改-写入逻辑108和ecc检查和修复112的ecc生成器110提供读取数据信号(图1中的“rd数据”)。读取数据信号rd数据包括存储在地址信号memaddr(例如,数据字)中识别的存储器地址处的数据。进一步响应于地址信号memaddr,ecc存储器102的代码存储器106将纠错码信号(图2中的“ecc1”)提供给ecc检查和修复112的ecc比较114。纠错码信号ecc包括存储在代码存储器106中的地址处的错误代码,该代码存储器106中的地址对应于由地址信号memaddr识别的地址,该地址可以称为错误代码地址。

在第二时钟周期(来自主存储器控制器)中,响应于读取数据信号rd数据,读取-修改-写入逻辑108通过将rd数据中的数据与部分写入数据请求部分wr数据中的数据组合来修改rd数据中的数据,以生成写入数据信号(图2中的“wr数据”)。此外,读取-修改-写入逻辑108断言mem_wz信号(例如,逻辑‘0’)。写入数据信号wr数据包含要写入数据存储器104的相同位置(由地址信号memaddr识别的位置)的组合数据。在采用任何纠错码以纠正可能先前存储在数据存储器104中的数据的错误之前,生成写入数据信号wr数据。写入数据信号wr数据被提供给写入控制118的xor数据逻辑116和ecc生成器120。此外,读取-修改-写入逻辑108去断言停止信号停止_n。

此外,在第二时钟周期中,响应于写入数据信号wr数据,ecc生成器120生成提供给xorecc逻辑119(xor门逻辑)的纠错码。此外,在第二时钟周期期间,在并行操作中,响应于读取数据信号rd数据,ecc检查和修复112的ecc生成器110为包括在读数据信号rd数据中的数据生成重新计算的纠错码(图2中的“ecc2”)。重新计算的纠错码ecc2被提供给ecc比较114。ecc比较114将从代码存储器106提供的纠错码ecc1与重新计算的纠错码ecc2进行比较,并且生成识别被包括在读取数据信号rd数据中的数据中的错误的校正子信号(图2中的“校正子”)。例如,校正子信号校正子识别读取数据信号rd数据中的位被破坏。在至少一个示例中,自生成纠错码ecci以来(在数据存储器104处的存储时),如果被包括在读取数据信号rd数据和/或纠错码ecc1中的数据中没有位已经改变,则校正子信号校正子具有逻辑‘0’的值。在该示例中,自生成纠错码eccl以来,如果被包括在读取数据信号rd数据中的数据中的一个或多个位已经改变,则校正子信号校正子被设置为识别读取数据信号rd数据的数据中的特定位已经被损坏的值。

将校正子信号校正子提供给数据修复查找表(lut)122和ecc修复lut124。数据修复lut122将校正子信号转换为提供给写入控制118的xor数据逻辑116的数据修复模式信号(图2中的“数据修复模式”)。数据修复模式信号数据修复模式包含这样的数据,其可用于将读取数据信号rd数据中的数据恢复/纠正到与数据读取信号rd数据中的数据相同的值,恢复/纠正到正确值。类似地,ecc修复lut124将校正子信号校正子转换为可用于恢复/纠正纠错码ecc1的ecc修复模式信号(图2中的“ecc修复模式”)。

xor数据逻辑116对数据修复模式信号数据修复模式和写入数据信号wr数据执行xor功能,以生成修复的数据值,该修复的数据值被写入在地址信号memaddr中识别的数据存储器104的存储器地址中。例如,在将纠正数据写入数据存储器104之前,xor数据逻辑116翻转(“xor”)被破坏的数据位(由校正子信号校正子识别)。xorecc逻辑119对ecc修复模式信号ecc修复模式和新的纠错码执行xor功能,以生成在错误代码地址处被写入代码存储器106的修复的数据值。例如,xorecc逻辑126翻转受被损坏的数据影响的纠错码位,以生成被写入代码存储器106的修复的纠错码。此外,读取-修改-写入逻辑去断言条件存储器使能信号memez和条件存储器写入信号memwz信号(例如,逻辑‘1’)。

图3示出存储器控制器100采用的示例波形的时序图150。在时序图150中,时钟信号clk、地址信号addr和数据信号数据被包括在图2的部分写入数据信号部分wr数据中,或者作为单独的信号(未示出)被提供。时序图150示出d0到存储器地址a0的部分写入。

如时序图150所示,从数据存储器104读取存储器q0并且将其与d0组合以形成存储器m0。存储器m0被写入地址a0中的数据存储器104。

再次参考图3,通过采用存储器控制器100的一部分,从数据存储器104读取的数据(rd数据)直接用于与部分写入数据请求部分wr数据中的数据组合。因此,(在写入路径中)由ecc生成器120执行的纠错码生成与由ecc检查和修复112的ecc生成器110执行的纠错码重新生成并行操作。因此,读取-修改-写入操作的定时路径避免了连续(例如,接连)生成纠错码的需要。

作为一个示例,由存储器控制器100执行的读取-修改-写入操作的关键路径由等式1定义。

cp=dr+ecc检查+syndromedecode+xor(等式1)

其中:

cp是关键路径时间/延迟,以皮秒(ps)为单位;

dr是数据存储器104的clk2q(时钟到q)延迟;

ecc检查是ecc生成器120和120产生纠错码引起的延迟,以及ecc比较114的比较时间;

syndromedecode是由数据修复lut产生数据修复模式信号数据修复模式的延迟以及由ecc修复lut124产生ecc修复模式信号ecc修复模式的延迟;

xor是通过xor数据逻辑116对数据修复模式信号数据修复模式执行xor逻辑的延迟时间和通过xorecc逻辑126对ecc修复模式信号ecc修复模式执行xor逻辑的延迟时间。

在一些示例中,关键路径cp具有比采用连续生成纠错码的系统的关键路径低大约20%(或更大)的延迟。因此,存储器控制器100可用于具有高频时钟信号的系统中,而不需要附加的控制逻辑。

图4示出用于利用读取-修改-写入操作对ecc存储器202执行部分写入的存储器控制器200的一部分的框图的另一示例。在至少一个示例中,存储器控制器200被采用以实现流水线并行操作。在至少一个示例中,存储器控制器200可以被采用以实现图1中所示的存储器控制器50。ecc存储器202是非暂时性机器可读介质(例如,随机存取存储器),其可以在诸如安全应用(例如,汽车)、金融应用等的需要高度准确的(例如,未损坏的)数据的情况下采用。ecc存储器202包括数据存储器204和代码存储器206。

数据存储器204包括用于存储数据的存储器单元,并且代码存储器206包括用于为存储在数据存储器204中的数据存储纠错码的数据单元。字由数据存储器204中的多个单元形成,并且代码存储器206是唯一可寻址的。存储在ecc存储器202的数据存储器204中的数据具有k位的指定字大小。

在至少一个示例中,存储器控制器200包括读取-修改-写入逻辑208,该读取-修改-写入逻辑208响应于部分写入数据请求(在图2中标记为“部分wr数据”)在ecc存储器202上执行读取-修改-写入操作部分数据。部分写入数据请求部分wr数据包括数据存储器204中的字的唯一地址。此外,部分写入数据请求部分wr数据包括要写入数据存储器204的t个位,其中t是大于或等于一(1)且小于k(即数据存储器204的字大小)的整数。因此,如果数据存储器204具有32位的字大小,则在读取-修改-写入操作中,t可以是1-31位,以写入数据存储器204。

读取-修改-写入逻辑208部分数据接收低电平有效存储器使能信号(图4中的“ez”)和低电平有效写入使能信号(图4中的“wz”),这与部分写入数据请求部分wr数据同时。响应于写入使能信号wz和存储器使能信号ez被断言(例如,逻辑‘1’),在第一时钟周期(来自主要/主存储器控制器,未示出),读取-修改-写入逻辑208断言低电平有效停止信号停止_n(例如,逻辑‘0’),其阻止ecc存储器202上的后续存储器操作。此外,读取-修改-写入逻辑208将地址信号memaddr(作为addr被包括在部分写入数据信号部分wr数据中)转发到ecc存储器202。读取-修改-写入逻辑208还转发被断言的低电平有效条件存储器使能信号memez(例如,逻辑‘0’)和去断言的条件存储器写入信号memwz(例如,逻辑‘1’)。作为响应,数据存储器204将读取数据信号(图1中的“rd数据”)提供给读取-修改-写入逻辑208和延迟210(例如,触发器),从而对读取数据信号rd数据中的数据进行寄存/流水线操作。读取数据信号rd数据包括存储在地址信号(例如,数据字)中识别的存储器位置处的数据。在预定延迟(例如,大约一(1)个时钟周期)之后,延迟210将读取数据信号rd数据传递到ecc检查和修复214的ecc生成器212。延迟210还将读取数据信号rd数据传递到写入控制218的xor数据逻辑216(例如,xor门)。

进一步响应于地址信号memaddr,ecc存储器202的代码存储器206向延迟220提供纠错码信号(图4中的“ecc”),从而寄存纠错码信号ecc。纠错码信号ecc包括存储在代码存储器206中的地址处的错误代码,该代码存储器206中的地址对应于由地址信号memaddr识别的地址,该地址可以被称为错误代码地址。在预定的延迟(例如大约一个时钟周期)之后,延迟220将纠错码信号ecc传递到ecc检查和修复214的ecc比较222。延迟210和延迟220被示为ecc检查和修复214的功能块。但是在其他示例中,延迟210和/或延迟220可以在ecc检查和修复214的外部实现。

在第二时钟周期(来自主要存储器控制器)中,响应于读取数据信号rd数据,读取-修改-写入逻辑208通过将rd数据中的数据与部分写入数据请求部分wr数据中的数据组合来修改rd数据中的数据,以生成组合数据。读取-修改-写入逻辑208生成写入数据信号(图4中的“wr数据”)并且断言条件存储器写入信号memez(例如,逻辑‘0’)。写入数据信号wr数据包含要写入数据存储器204中的相同位置(由地址信号memaddr识别的位置)的组合数据。在采用任何纠错码以纠正可能先前存储在数据存储器204中的数据的错误之前生成写入数据信号wr数据。写入数据信号wr数据被提供给写入控制218的数据多路复用器(mux)224的输入节点和ecc生成器226。

ecc生成器226为写入数据信号wr数据中的组合数据生成新的纠错码,并且将新的纠错码传递给eccmux228的输入和延迟230。在预定量的时间(例如,一个时钟周期)之后,延迟230将新的纠错码传递到写入控制218的xor逻辑232。此外,读取-修改-写入逻辑208去断言(例如,逻辑‘1’)停止信号停止_n。而且,在一些示例中,读取-修改-写入逻辑208还去断言(例如,逻辑‘1’)条件存储器写入信号memwz。

xor数据逻辑216向数据mux224的另一输入提供信号。而且,xorecc逻辑232向eccmux228的另一输入提供信号。此外,ecc比较222将ecc单个位错误(图4中的“eccsbe”)提供给数据mux224和eccmux228的控制/选择节点。在第二时钟周期期间,ecc单个位错误信号eccsbe被去断言(例如,逻辑‘0’),使得数据mux224和eccmux228选择分配给写入数据信号wr数据的输入节点。响应于单个位错误信号eccsbe,数据多路复用器224将写入数据信号wr数据中的组合数据写入地址信号memaddr中识别的数据存储器204中的地址。而且,eccmux228将新的纠错码写入代码存储器206中的相应的错误地址。以这种方式,用ecc存储器202寄存组合数据。

此外,在第三时钟周期中,在将组合数据写入数据存储器204并且将新的纠错码写入代码存储器205之后,将寄存/流水线操作的读取数据rd数据从延迟210输出到ecc生成器212。类似地,延迟220处的纠错码ecc1将寄存/流水线操作的纠错码ecc1输出到ecc比较222。ecc检查和修复214的ecc生成器212为包括在读取数据信号rd数据中的数据生成重新计算的纠错码(图4中的“ecc2”)。重新计算的纠错码ecc2被提供给ecc比较222。ecc比较222将从延迟220提供的纠错码ecc1与重新计算的纠错码ecc2进行比较,并且生成识别包括在读取数据信号rd数据中的数据中的错误的校正子信号(图4中的“校正子”)。在至少一个示例中,自生成纠错码ecc1(在数据存储器204处的存储时)以来,如果包括在读取数据信号rd数据中的数据和/或纠错码ecc1中的位没有改变,则校正子信号校正子具有逻辑‘0’的值。在该示例中,自生成纠错码ecc1以来,如果包括在读取数据信号rd数据中的数据中的一个或多个位已经改变(例如,通过损坏),则校正子信号校正子被设置为识别读取数据信号rd数据和/或纠错码ecc1的数据中的特定位已经被损坏的值。

ecc比较222基于校正子信号的值设置ecc单个位错误信号eccsbe。例如,如果校正子信号校正子具有指示读取数据信号rd数据和/或纠错码ecc1中的数据中没有错误的值,则ecc比较222保持单个位错误信号eccsbe处于初始状态(例如,逻辑‘0’)。相反,如果校正子信号校正子具有指示读取数据信号rd数据和/或纠错码ecc1中的数据中没有错误的值,则ecc比较222设置单个位错误信号eccsbe为错误状态(例如,逻辑‘1’)。如本文所描述的,ecc单个位错误信号eccsbe被提供给读取-修改-写入逻辑208、数据mux224和eccmux228。

校正子信号校正子被提供给数据修复lut234和ecc修复lut236。数据修复lut234将校正子信号转换为提供给写入控制218的xor数据逻辑216的数据修复模式信号(图2中的“数据修复模式”)。数据修复模式信号数据修复模式包含可用于纠正读取数据信号rd数据中的被损坏的数据的数据。类似地,ecc修复lut236将校正子信号校正子转换为ecc修复模式信号(图4中的“ecc修复模式”),该ecc修复模式信号可用于恢复纠错码ecc1。

xor数据逻辑216对数据修复模式信号数据修复模式和从延迟210提供的读取数据信号rd数据的数据执行xor功能,以生成输入到数据mux224的另一输入的修复数据值。例如,xor数据逻辑216翻转(“xor”)被损坏的数据位(由校正子信号校正子识别),这些被损坏的数据位被提供给数据mux224的另一输入。xorecc逻辑232对ecc修复模式信号ecc修复模式和从延迟230提供的新的纠错码执行xor功能,以生成提供给eccmux228的另一输入的修复的纠错码。例如,xorecc逻辑232翻转受损坏数据影响的纠错码位,以生成提供给eccmux228的另一输入的修复的纠错码。

在第三时钟周期期间,响应于接收到单个位错误信号eccsbe处于错误状态(例如,逻辑‘1’),读取-修改-写入逻辑208断言停止信号停止_n和条件写入信号memwz(例如,逻辑‘0’)。而且,响应于接收到单个位错误信号eccsbe处于错误状态(例如,逻辑‘1’),数据mux224选择来自xor数据逻辑216的另一输入,并且eccmux228选择来自xorecc逻辑232的另一输入。此外,从xor数据逻辑216提供给数据mux224的值(修复的数据)在地址信号memaddr中识别的地址处被写入数据存储器204。类似地,从xorecc逻辑232提供给eccmux228的值(修复的纠错码)被写入代码存储器206中的相应的错误地址。读取-修改-写入逻辑208去断言停止信号停止_n(例如,逻辑‘1’)。而且,在一些示例中,读取-修改-写入逻辑208去断言(例如,逻辑‘1’)条件存储器使能信号memez和条件写入信号wz。

图5示出存储器控制器200采用的示例波形的时序图250。在时序图250中,时钟信号clk、地址信号memaddr和数据信号数据被包括在图4的部分写入数据信号wr数据中或者可以被单独提供(未示出)。时序图250示出d0到存储器地址a0的部分写入,以及d1到存储器地址a1的部分写入。

在时序图150中,读取数据信号rd数据提供数据q0,数据q0与数据信号d0中的数据组合以形成组合数据m0,组合数据m0被写入数据存储器204。然而,假设数据q0中的错误是由ecc单个位错误信号eccsbe的上升沿(指示错误状态)指示的。因此,停止信号停止_n被断言,并且数据被纠正以形成重新写入数据存储器204的数据m0’,这导致ecc信号位错误信号eccsbe返回到初始状态。这允许d1到存储器地址a1的第二部分写入开始。第二部分写入将数据q1与数据d1组合以形成写入存储器地址a1的组合数据m1。

再次参考图4,通过采用存储器控制器200的一部分,从数据存储器204读取的数据(rd数据)被直接用于与部分写入数据请求部分wr数据中的数据组合。此外,当发生错误时,采用第三时钟周期以纠正错误。但是,在许多应用中,错误极为罕见,通常以低于0.00001%的时间发生。因此,通过在完成错误检查和修复完成之前将数据写入ecc存储器202,可以实现显著的时间节省。因此,存储器控制器200通过在绝大多数时间(例如,大约0.99999%或更多),不需要纠正数据和/或纠错码的假设下操作来提供时间节省。

鉴于上文描述的前述结构和功能特征,参考图6和图7描述示例方法。为了简化说明,图6和图7的示例方法被示出并且被描述为连续执行,但是因为一些动作在其他示例中可以以不同顺序、多次和/或与本文所示和描述的动作同时发生,所以(除非另有说明)这些示例不受所示顺序的限制。此外,一些描述的动作对于实现方法是可选的。

图6示出用于对ecc存储器执行部分写入的示例方法300的流程图。例如,方法300可以由存储器控制器(诸如图1的存储器控制器50和/或图2的存储器控制器100)执行。在310处,读取-修改-写入逻辑(例如,读取-修改-写入逻辑58)接收对存储在ecc存储器(例如,ecc存储器52)的数据存储器(例如,数据存储器54)中的数据的部分写入数据请求。在320处,将从数据存储器读取的数据与存储器读取-修改-写入逻辑处的部分写入数据请求中的数据组合以形成组合数据。在330处,基于对读取数据和相应的纠错码的准确性的检查,通过ecc检查和修复(例如,ecc检查和修复60)生成数据修复模式信号和ecc修复模式信号。读取-修改-写入逻辑执行的组合与ecc检查和修复执行的检查并行。

在340处,由ecc生成器(例如,ecc生成器64)生成用于组合数据的纠错码。在350处,对数据修复模式信号和组合数据执行xor功能,并且通过写入控制对ecc修复模式信号和组合数据的错误代码执行xor功能,以生成修复的数据和修复的纠错码。在360处,将修复的数据和修复的纠错码写入ecc存储器。

图7示出用于对ecc存储器执行部分写入的另一示例方法400的流程图。例如,方法400可以由存储器控制器(诸如图1的存储器控制器50和/或图4的存储器控制器200)执行。在410处,读取-修改-写入逻辑(例如,读取-修改-写入逻辑58)接收对存储在ecc存储器(例如,ecc存储器52)的数据存储器(例如,数据存储器54)中的数据的部分写入数据请求。在420处,将从数据存储器读取的数据与存储器读取-修改-写入逻辑处的部分写入数据请求中的数据组合以形成组合数据。在430处,由ecc生成器(例如,ecc生成器64)生成用于组合数据的纠错码。在430处,ecc检查和修复(例如,ecc检查和修复60)检查读取数据和纠错码的准确性。

在440处,基于检查读取数据和相应的纠错码的准确性,由ecc检查和修复生成数据和ecc修复模式信号。在450处,写入控制可以将组合数据和修复的纠错码写入ecc存储器。在460处,可以通过ecc检查和修复来确定是否检测到错误。如果460处的确定是否定的(例如,否),则方法400可以返回到410(以处理下一个部分数据写入请求)。如果460处的确定是肯定的(例如,是),则方法400可以进行到470。而且,在460处,可以输出指示450处的确定的ecc单个位错误信号。

在470处,读取-修改-写入逻辑可以断言停止信号一个时钟周期,从而防止接收和执行后续的部分写入数据请求。在480处,写入控制可以应用xor功能以生成修复的数据和ecc修复数据。在490处,写入控制将修复的数据和ecc修复数据写入ecc存储器。方法400返回410以处理下一个部分写入数据请求。

在本说明书中,术语“基于”意味着至少部分地基于。在权利要求的范围内,在所描述的实施例中可以进行修改,并且其他实施例也是可能的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1