盘驱动器仿真器的纠错方法与装置的制作方法

文档序号:6409767阅读:348来源:国知局
专利名称:盘驱动器仿真器的纠错方法与装置的制作方法
本申请为名为“多用途纠错计算电路”的Zook于1994年9月16日提交的美国专利申请(序列号08/306,918)的部分继续申请;后者又为名为“有限域反演”的Zook于1994年11月4日提交的美国专利申请(序列号08/147,758)的部分继续申请,通过引用将它们都结合在此。
本发明涉及计算机技术,更具体地涉及带有改进的纠错的固态盘驱动器仿真设备。
计算机系统广泛采用硬磁盘驱动器供大容量存储。然而磁盘驱动器是笨重的,需要复杂的读/写电子器件,并采用容易出现可靠性问题的高精度运动机械部件。再者,盘驱动器需要大量电力,因此在便携式计算机中使用不大令人满意。
诸如快速EEPROM等非易失性固态存储器设备的存储密度的剧烈提高,允许固态盘驱动器仿真磁盘驱动器供计算机系统中大容量存储。类似于磁盘驱动器,非易失性固态盘驱动器即使在电源断开后也能保持数据。相对于磁盘驱动器而言,由于快速存储器没有运动部件所以是廉价与更可靠的。再者,固态盘驱动器使用较少的复杂读/写电子器件并消耗较少功率。通常,PCMCIA插件将快速EEPROM包含进紧致与便携式设备中。因此,固态盘驱动器更适用于诸如便携式计算机等特殊应用。
明显地,采用固态盘具有一些缺点,从而避免了使磁盘驱动器过时。例如,在磁盘驱动器中存储极大量数据(数亿字节)比在固态驱动器中远为便宜。而且诸如快速EEPROM等固态存储器只有有限的寿命并在一定次数的擦除/写入周期(通常为1,000至10,000周期)之后会是不可靠的。另一缺点是从损坏的存储单元或漏泄的存储单元产生的错误会使固态盘驱动器更不可靠。
克服损坏的存储单元导致的错误的一种方法公开在颁发给Harari等人的5,297,148号美国专利中。Harari专利公开了用冗余单元取代损坏的存储单元的方法。在故障图中存储将损坏的单元的地址连接到替代单元的故障指针。每一次存取损坏的单元时,用来自替代单元的好数据取代其坏数据。然而这一方法的缺点在于只在制造期间执行故障映像而并不弥补在正常操作期间出故障的单元。再者,快速EEPROM设备中的故障率随擦除/写入周期的增加而增加。
通常采用磁盘驱动器的传统纠错(ECC)来补偿经过一段时间之后成为损坏的单元所导致的错误及漏泄的单元导致的软错误。然而磁盘ECC系统是为与磁性记录相关的错误优化的。磁性记录中的错误通常是由磁性介质中的缺陷导致的不同长度的脉冲串错误(若干顺序位)。传统的ECC系统采用复杂的纠错算法来纠正这些错误。从而实现这些算法需要费电与昂贵的复杂电路。再者,用来检测与纠正与磁性记录相关的错误的复杂算法中内在的可观的等待时间量会减慢设备的总的存取时间。
与固态盘驱动器相关的错误与磁盘驱动器明显不同。通常,固态盘驱动器每一扇区出现一位或两位的错误。这些错误通常由有缺陷的单元(硬错误)或漏泄一段时间的单元(软错误)引起。为了纠正通常与快速存储器关联的每一扇区一位或两位的错误,动用纠正与磁性介质相关的错误的复杂纠错算法是低效的。
因此,本发明的总目的为提供能在计算机系统中用作非易失性存储设备的改进的快速EEPROM固态盘驱动器。另一目的为减少纠正通常与用作固态盘驱动器的存储元件的快速EEPROM关联的每一扇区一位或两位错误的类型的复杂性与等待时间。
提供了用于纠正存储在仿真盘驱动器的固态非易失性存储器(12)中的每一扇区多达两位的纠错系统(10)。该纠错系统(10)包括一个ECC/余数发生器100、一组余数寄存器(102)及一计算电路(104),它们全在一控制器(106)的监控下。在写入存储器操作期间,纠错系统(10)生成供存储在存储器(12)中的ECC字节。在写操作中,使用从存储器(12)得到的整个扇区来生成ECC校验余数字节REM0-REM3。利用校验余数字节REM0-REM3生成校正子S1,S3及一因子SB,又利用该校正子来得到一个或两个出错单元位置(αL1,αL2)。数学计算电路(104)不仅生成校正子S1,S3与因子SB以及出错单元位置(αL1,αL2),还生成位错误在扇区中的地址(L1-64[补码],L2-64[补码])。
从下面示出在附图中的较佳实施例的更具体的描述中,本发明的上述与其它目的、特征与优点将一目了然,附图中的参照字符在全体各视图中指相同的部件。附图没有必要按比例,而是将重点放在展示本发明的原理上。


图1为包括一微控制器、盘控制器、盘仿真系统、两位脉冲串纠错系统及存储器阵列的固态盘驱动器的概要图。
图2为包含在图1的固态盘驱动器中的纠错系统的示意性方框图。
图3为包含在图2的纠错系统中的ECC/余数发生器的示意性方框图。
图4为包含在图2的纠错系统中的一组余数寄存器的示意性方框图。
图5A为包含在图2的纠错系统中的计算电路的第一部分的示意性方框图。
图5B为包含在图2的纠错系统中的计算电路的第二部分的示意性方框图。
图6为包含在图5A的计算电路中的乘法器电路的示意性方框图。
图7为展示图2的纠错系统在写操作中所执行的总步骤的流程图。
图8为展示图2的纠错系统在读操作中所执行的总步骤的流程图。
图9示出由轨道的行与扇区的列组成的存储器阵列的数据格式。
图10为展示包含在图2的纠错系统的读操作中的对数确定操作中所执行的总步骤的流程图。
图11为展示包含在图2的纠错系统的读操作中的对数确定操作中所执行的更详细的步骤的流程图。
图1示出本发明的固态盘驱动器6的概要。传统的盘控制器4提供固态驱动器与主机系统之间的接口。盘控制器4可以是任何适当的控制器,包括诸如可从加州Milpitas,Cirrus Logic公司购得的型号CL-SH350。微控制器2为盘控制器4及盘仿真器8建立初始操作参数。微控制器4还协调基于盘的命令及往来于主机的数据传送。盘仿真器8提供仿真磁盘驱动器必需的盘控制信号。它接收来自盘控制器4与微控制器2的典型控制信号,诸如要读/写的道与扇区号,并处理这些命令以便从/向快速EEPROM设备的存储器阵列12读/写所请求的数据。一位或两位纠错系统10检测与纠正由损坏的或泄漏的存储单元导致的错误。对于固态盘驱动器的控制与仿真的全面讨论,参见颁发给Challa等人的名为“硬盘仿真方法与装置”的美国专利(专利号5,291,584),通过引用将其内容结合在此。
在固态盘驱动器中,通常将存储器阵列12的数据格式格式化成图9中所示的道行与扇区列的阵列。道行与扇区列表示磁盘上的同心的道。如上所述,快速EEPROM存储器阵列中的损坏或泄漏单元能导致每一扇区一位或两位错误。纠错系统10包含特别适用于纠正这些一位或两位错误的纠错算法。
图2示出该纠错系统10包括一ECC/余数发生器100;一组余数寄存器102;一计算电路104;及一控制器106。将线107上的8位数据字节作用在ECC余数发生器100及MUX110的输入端0上。参照图3更详细地讨论ECC/余数发生器。如此后所见,ECC/余数发生器100生成四个8位ECC字节,并将它们在线112上输出到MUX110的输入端1上。
再次提到纠错系统10必须在512字节扇区中定位高达两位的错误。由于在这一情况中必需一个14位多项式来定位一个一位错误,纠正两个一位错误必需两个14位多项式。由于2×14之积等于28不是8的倍数,所以选择32作为代码生成多项式的长度并相应地作为此后描述的各种寄存器,尤其是参照计算器电路104。从而,代码生成多项式为如下的两个14位多项式及一个4位多项式之积G(X)=(X14+X10+X9+X6+X5+X4+X1)(X14+X6+X5+X2+1)(X4+1)=(X32+X27+X24+X23+X22+X15+X12+X7+X2+1)4位多项式的生成得出4位因子SB的生成,它在校验纠错系统10的操作中具有重大意义。
再者,纠错系统10采用面向位的代码,即使输入其中的数据及从其中输出的ECC字节是以字节形式的。
ECC/余数发生器100是用四条余数输出总线116连接到余数寄存器102组上的。参照图4更详细地讨论余数寄存器组102。一条一位输出线118将余数寄存器组102连接在计算电路104上。参照图5A与5B更详细地讨论计算电路104。
控制器106监控与定序纠错系统10的操作,并相应地用控制总线120连接到ECC/余数发生器100;余数寄存器组102;及计算电路104的各个上。虽然在此没有必要示出,但应理解此后所讨论的对MUX的各种选择信号及操作的定时是由总的指示为控制总线120的构成部分的控制线提供的。
计算电路104的一种功能为在作用在纠错系统10的一个扇区的数据中定位多达两位的错误。相应地,计算电路104输出若干信号给控制器106,其中包括NO ERRORS(无错误)信号;UNC信号(表示不能纠正的扇区);信号L1-64[补码](它提供第一错误位在扇区中的地址);及信号L2-64[补码](它提供第二错误位在扇区中的地址)。如此后所讨论的,总称为“L”的错误位定位子值L1与L2为12位值,高9位用于定位扇区中的错误字节;低3位用于定位错误字节中的错误位。
结构ECC余数发生器如此后所描述的,ECC/余数发生器100在写操作期间生成ECC字节而在读操作期间生成ECC余数字节。在写操作中利用ECC余数字节生成校正子S1与S3,后者又被用来确定错误位定位子值L1与L2。
如图3中更详细地所示,ECC/余数发生器100包括四个ECC/余数寄存器1400-1403;一组加法器142;与门144;及线性逻辑数据发生器146。加法器1423的第一端连接在进入数据线107上;加法器1423的第二输入端连接在寄存器1403的输出端上。加法器1423的输出端连接在与门144的第一输入端上,与门144的第二输入端连接成接收来自控制器106的信号ECC。与门144的输出端连接在线性逻辑数据发生器146的一个输入端上。
线性逻辑数据发生器为一组逻辑部件,包含用于根据从与门144接收的输入信号在总线152上输出特定输出信号的异或门。表1示出如何根据对线性逻辑数据发生器146的输入信号推导总线152的输出信号。表1的第一组8列用于生成总线1523的输出信号,表1的第二组8列用于生成总线1522的输出信号,表1的第三组8列用于生成总线1521的输出信号,表1的第四组8列用于生成总线1520的输出信号。各组的第一列对应于输出信号的最高位,各组的最后一列对应于输出信号的最低位。各列中的“1”表示要异或在一起以生成输出信号的输入信号的位位置。例如,对于总线1523上的输出信号,输出信号的位7是通过异或输入信号的位4与7生成的。熟悉本技术者能很好利用表1来构成产生表1所要求的输出的电路。
线性逻辑数据发生器146具有四条输出总线1520-1523。各线性逻辑输出总线152为8位总线。线性逻辑输出总线1521-1523分别连接在加法器1420-1422的第一输入端上。线性逻辑输出总线1520连接在ECC/余数寄存器1040的一个输入端上。
各寄存器1400-1403的输出端分别连接在相应的加法器1420-1423的第二输入端上。此外,寄存器1400-1403的输出端分别连接在余数输出总线1160-1163上。加法器1420-1422的输出端分别连接在寄存器1401-1403的输入端上。从而将寄存器140连接构成移位寄存器,使之能将在其中生成的ECC字节(在ECC生成之后)在线112上移出到MUX110供传输给存储器12。这方面,如此后所讨论的,ECC/余数发生器100在寄存器1400中生成第一ECC字节ECC0,在寄存器1401中生成第二ECC字节ECC1,在寄存器1402中生成第三ECC字节ECC2,并在寄存器1403中生成第四ECC字节ECC3。
结构余数寄存器图4中更详细地示出余数寄存器组102。更具体地,组102包含四个8位移位寄存器1020-1023,为了示例在图4中用虚线框起寄存器1020及1022。将寄存器1022想象成具有一个6位低位部分及一个两位高位部分。MUX1602馈入寄存器1022的低位部分的位5,MUX1602的输入端0连接在寄存器1022的位6上。将寄存器1020想象成具有一个四位低位部分及一个四位高位部分。MUX1600馈入寄存器1020的低位部分的位3,MUX1600的输入端口连接在寄存器1020的位4上。
余数输出总线1163将一个8位值(并行)加载到余数寄存器1023中。余数输出总线1162的6个低位连接成(并行)加载余数寄存器1022的(6位)低位部分。余数输出总线1162的两个高位连接成(并行)加载余数寄存器1022的(两位)高位部分。余数输出总线1161(并行)加载一个8位值到余数寄存器1021中。余数输出总线1160的四个低位连接成(并行)加载余数寄存器1020的(四位)低位部分。余数输出总线1160的四个高位连接成(并行)加载余数寄存器1020的(四位)高位部分。
如以图4的底部所示的方式所组合的,余数寄存器组102也称作SREG3、SREG1与SREGB寄存器。寄存器SREG3包含寄存器1023及寄存器1022的6个低位;寄存器SREG1包含寄存器1022的两个高位、寄存器1021的所有位及寄存器1300的四个低位;寄存器SREGB为寄存器1020的四个高位。SREG1特别注明为用于较正子S1的最终存储;寄存器SREG3用于存储较正子S3;而寄存器SREGB用于存储因子SB。为了馈出存储在SREGB、SREG1与SREG3中的值,线SREGB(0)连接在寄存器1020的位4上;线SREG1(0)连接在寄存器1021的位6上;以及线SREG3(0)连接在寄存器1023的位0上。
结构计算电路图5A中更详细地示出的计算电路104包括三个初级工作寄存器;具体地说寄存器400(也称寄存器R1);寄存器401(也称寄存器R2);及寄存器402(也称寄存器R3)。各寄存器400、401与402为14位移位寄存器,虽然在每一次操作中不一定必须利用全部14位。
如此后会看到的,计算电路104在存储在寄存器400、401与402中的项上执行多种数学运算。作为一个实例,电路104频繁地执行第一项(存储在寄存器400中以β基表示)与第二项(存储在寄存器401中以α基表示)的乘法,并将积输出到寄存器402中(以β基表示)。作为另一实例,用寄存器400与401的内容执行线性变换。又进一步,电路104执行其转换与求倒。
计算电路104的进一步细节在下面描述并且也能从名为“多用途纠错计算电路”的Zook在1994年9月16日提交的美国专利申请(代理人文件号1777-11)中公开的类似电路中理解,通过引用将该专利申请结合在此。
计算电路104包括一个内积电路404,它求出寄存器400与401的内积并输出一串行位信号IP。内积信号IP是通过或门406传输供作为启动信号作用在一组与门426上的。寄存器402的各位连接到组426中一个对应与门的一个输入端上。包含在组426中的与门的输出端连接到加法器组428中的相应加法器的“B”输入端上。寄存器401的位连接到加法器组426的对应“A”输入端上。
寄存器400、401与402具有分别用于有选择地加载数据的开关系统430、431与432。数据的转换(总是串行的)进寄存器400是受开关系统430控制的。开关系统430包含MUX430A与430B。MUX430B的一个输出端连接到寄存器400的一个数据输入端上。MUX430B的一个数据输入端连接到MUX430A的输出端上。MUX430A的其它数据输入端连接到线FULL_FIELD、R3_OUT、SREG1(0)[见图4]及SREG3(0)[见图4]上。
MUX 430A的数据输入端连接到反馈系统436上,后者为全字段值或子字段值提供反馈乘积。具体地,反馈系统436包括用于将寄存器400乘以一个全字段反馈常数的异或门436A及用于将寄存器400乘以一个子字段常数的异或门436B。门436A与436B异或的位位置取决于所利用的字段生成多项式。在示出的实例中,全字段生成多项式为X14+X10+X9+X6+X5+X4+1而子字段生成多项式为X7+X5+X3+X+1。从而将位0、4、5、6、9与10连接到异或门436A;位7、8、10与12连接到异或门436B。异或门436A的输出端连接到MUX430A的第一数据输入端;异或门436B的输出端连接到MUX430A的第二数据输入端。
数据是经由开关系统431加载进寄存器401中的。开关系统431包括并行加载MUX431A;串行加载MUX431B;及前置MUX431C。并行加载MUX431A的输出端连接在寄存器401的各位上。寄存器401的一个串行输入针连接在串行加载MUX431B的一个输出端上。连接在串行加载MUX431B的输入端上的可选择线包括来自MUX431C的输出线;线R3_OUT;线SREG1(0)[见图4];及线SREG3(0)[见图4]。
计算电路104还包括LIN440。在示出的实施例中,LIN440为其中存储有查找表的ROM,包含用于如此后所述执行用于“y”的线性组合的查找表及用于寻找供在线性组合运算中使用的值的查找表,这一运算得出错误指针的子字段元素X1,X0。LIN440是输出执行用于“y”的线性组合的值还是输出子字段值取决于从控制器106作用在其上的选择信号。LIN440的14位输出端并行连接在并行加载MUX431A的输入端之一上。
如上所述,并行加载MUX431A的一个数据输入端连接在LIN440的输出端上。MUX431A的第二数据输入端连接成接收加法器组428的并行输出。
数据经由开关系统432加载进寄存器402中。开关系统431包括并行加载MUX432A;串行加载MUX432B;及前置MUX432C。MUX432A的第一数据输入端连接在寄存器402的位上;MUX432A的第二数据输入端连接在乘法器电路450的一个输出端上。
乘法器电路450能有选择地参加除法运算;参加基转换;或将输入其中的值(从寄存器402并行加载的)乘以α或α3。从图6中可理解乘法器电路450的结构。图6的上方部分示出如何将乘法器的输入与输出端连接成乘以α;图6的下方部分示出如何将乘法器的输入与输出端连接成乘以α3。乘以α3发生在校正子生成期间,因此在校正子生成期间作用的控制信号ENA DIV得出正在经由内部MUX输出用α3的积。乘法器电路450的输出端连接在MUX432A的输入端上。
寄存器402的串行加载输入端连接在串行加载寄存器432B的一个输出端上。MUX432B的第一输入端连接在MUX432C的输出端上。MUX432B的第二输入端连接在或门406的输出端上。前置MUX432C的第一输入端连接在反馈电路460上;前置MUX432C的第二输入端连接在线SREG1(0)上[见图4]。
反馈电路460包含与门462及异或门464。异或门464连接在寄存器402的位1、3、6与7上。异或门464的输出端连接在与门462的第一输入端上。与门462的第二输入端连接在一个启动信号上。
图5A中还示出一个校正子发生与门470,其第一端连接在线SREG3(0)上,其第二端连接成接收校正子启动控制信号ENA DIV。与门470的输出端连接在异或门436A的一个输入端上。
寄存器402的位0与13连接在MUX472的第一与第二数据输入端上。MUX472的输出端连接在异或门474的第一输入端上。异或门474的第二输入端连接成接收一个控制信号。异或门474的输出端连接在线R3-OUT上,后者分别经由MUX430B与431B连接在寄存器400与401上。
如图5B中所示,计算电路104还包括一个LOG ROM480;加法器482与484;加法器输入MUX486与488;非门490;及包含低位累加器500L与高位累加器500H的累加器寄存器500。将来自寄存器402的位7-13的数据并行加载到LOG ROM480中。LOG ROM480的一个7位输出端连接在MUX488的第一输入端及非门490上。MUX488的输出端连接到加法器484的B输入端上。加法器484的第二输入端连接在高位累加器500H的输出端上。高位累加器500H的输出端还连接在MUX486的第一输入端上;MUX486的第二输入端连接在低位累加器500L的输出端上。MUX486的输出端连接在加法器482的第一输入端上,加法器482的第二输入端连接在非门490的输出端上。加法器482的输出端连接在低位累加器500L的数据输入端上。加法器484的输出端连接在高位累加器500H的数据输入端上。加法器482的“进位”输出针连接在加法器484的“进位入”输入针上。
操作概述纠错系统10参与写与读操作(诸如将信息存储到非易失性存储器12及访问存储在非易失性存储器12中的信息的操作)。在写入一个扇区到存储器12中,将512个数据字节及多达4个标题字节传输给纠错系统10。利用一个扇区的这512个数据字节及多达4个标题字节,纠错系统10生成4个ECC字节。在从非易失性存储器12中读存储的信息中,纠错系统10的ECC/余数发生器100利用这512个数据字节、4个标题字节及4个ECC字节生成ECC校验余数。计算电路104利用ECC校验余数生成校正子S1与S3。进而利用校正子S1、S3来判定该扇区是否无错误,扇区中是存在一个还是两个错误位,以及该扇区中的一个或两个错误位位置(L1-64[补码]与L2-64[补码])。
操作写操作在写操作中,将512个字节的数据(冠以多达4个字节的标题)作用在既到达MUX110端又到达纠错系统10的线107上。作用在MUX110上的数据(冠以多达4个标题字节)是传输到非易失性存储器12的。
当一个新扇区作用在到达纠错系统10的线107上时,清除包含寄存器140在内的所有寄存器(见图7中步骤7-1)并由控制器106发送一个ECC生成启动信号ECC到门144(步骤7-2)。
步骤7-3示出标题字节与数据字节正在作用到纠错系统10,具体地到加法器1423的第一输入端上(见图3)。输入数据是作为二进制值多项式D(X)对待的,其中各字节提供8个系数给D(X)。各字节的位0为来自各字节的最高次系数。对于写操作,D(X)包括可选用的标题字节后随数据字节。ECC/余数发生器100展开ECC多项式。
ECC(X)=D(X)X32mod G(X)从而各扇区能作为一个码字C(X)写入非易失性存储器12中,其中
C(X)=D(X)X32+ECC(X)。
从而,按照上文,步骤7-3描述作用512个字节数据(冠以多达4个字节标题)到加法器1423上,每一时钟一个字节。随着各字节的作用,进入的字节被加法器1423加上(异或)当前存储在寄存器1403中的字节。由于门144已被ECC信号接通(见步骤7-2),来自加法器1423的和作用在线性逻辑数据发生器146上。
如上面讨论的,根据输入其中的8位模式,线性逻辑数据发生器146在其输出总线1520-1523上输出字节。线性逻辑数据发生器146输出的信号是为各输出总线152在每一时钟唯一地确定。输出总线1521-1523上的信号分别作用在加法器1420-1422的输入端上。输出总线1520上的信号作用在寄存器1400的输入端上。随着各时钟,求和(异或)输入到加法器142的信号并加载进各自的下游寄存器140中(即图3中位于加法器142的右侧或输出侧的寄存器)。
在以上述方式输入且由ECC/余数发生器100运算了所有数据字节与标题字节之后(步骤7-3),在步骤7-4,控制器106关掉信号ECC,表示已完成了四个ECC字节的生成。此时,四个ECC字节ECC3、ECC2、ECC1、ECC0分别位于寄存器1403-1400中。然后在步骤7-5,作为该扇区的ECC字节移位出寄存器140的内容。为了ECC字节ECC3、ECC2、ECC1、ECC0能向右移位出寄存器1403-1400,首先将字节ECC3的字节位0作用在到达MUX110的线112上(供输出到非易失性存储器12)。从而第一ECC字节ECC3来自R(X)的高位端而各ECC字节中的最高次R(X)系数为该字节的位0。随着字节ECC3移位出寄存器1403,ECC字节向右移位,使得ECC字节ECC0、ECC1、ECC2接着分别位于寄存器1401-1403中。字节ECC2接着移位出,在连续的时钟周期中后面跟着字节ECC1与ECC0。
从而,在完成图7中所示的写操作时,ECC/余数发生器100已生成与输出四个ECC字节ECC3、ECC2、ECC1、ECC0,这些ECC字节跟在扇区数据字节后面输出到非易失性存储器12。
读操作在读操作中(一般性地示出在图8中),纠错系统10的ECC/余数发生器100利用512个数据字节、4个标题字节及4个ECC字节生成4个ECC校验余数字节。计算电路104利用ECC校验余数生成校正子S1与S3。进一步利用校正子S1、S3来判定该扇区是否无错误,扇区中有一个还是两个错误位,及扇区中一个或两个出错地址(L1-64[补码]及L2-64[补码])。
现在更具体地参见图8的各步骤,在步骤8-1,将纠错系统10的所有寄存器清零。在步骤8-2,将“ECC”发生信号接通,以使能与门144。
在步骤8-3,逐个字节地将从非易失性存储器12得到的扇区作用在纠错系统10上,具体地到达加法器1423的线107上。R(X)是在读扇区时接收的多项式,R(X)=C(X)+E(X),其中C(X)为想要存储在非易失性存储器12中的原扇区,而E(X)为所接收的扇区的错误多项式。在执行步骤8-3中,得出余数多项式REM(X),其中REM(X)=R(X)X32mod G(X)=E(X)X32mod G(X)。从而,在步骤8-3,包含ECC字节在内的扇区的所有字节输入到ECC/余数发生器100中。以上面参照步骤7-4描述的类似的校正子生成方式,加法器142将线107上进入的字节与寄存器1403的内容相加,并将和(经由与门144)输出到线性逻辑数据发生器146。以前面描述的方式利用表1,线性逻辑数据发生器146在总线152上输出信号。直接将总线1520上的信号加载进寄存器1400中,(分别由加法器1420-1422)将总线1521-1523上的信号与上游寄存器140的原有内容分别异或以生成新值供存储在寄存器1401-1403中。在步骤8-3结束时,寄存器1400-1403中将包含ECC校验余数字节REM0、REM1、REM2、REM3。
在步骤8-4,分别在总线1160-1163上将校验余数字节REM0-REM3并行加载进余数寄存器1020-1023中。然后在步骤8-5,生成校正子S1、S3及因子SB。
校正子S1、S3及因子SB生成如下S1=R(X)X32|X=α=REM(α)S3=R(X)X32|X=α3=REM(α3)SB=REM(X)mod(X4+1)在步骤8-5生成校正子S1、S3及因子SB中,接通校正子生成与门470并将来自寄存器102(输出在线SREG3(0)上)的32位值串行馈送到各寄存器400、401与402。对32个时钟,用反馈计时寄存器400、401与402。寄存器400的反馈是用异或门436A施加的,寄存器401的反馈是从其位10施加的,寄存器402的反馈是由α乘法器450提供的α3乘法施加的。在32个时钟结束时,校正子S1与S3分别位于寄存器400与402中,而因子SB则位于寄存器401中。
在步骤8-7,校验是否校正子S1=校正子S3=因子SB=0。如果步骤8-7的校验是肯定的,控制器106知道该扇区不包含错误而结束错误定位与纠正操作。否则,处理以步骤8-9继续进行。
在步骤8-9,计算值“C”如下 更详细地描述计算电路104的“C”计算,在子步骤8-9(1)进行求倒运算,从而将1/S1加载进寄存器401中。在这一求倒中,寄存器400(包含量S1)接收13个反馈时钟,此后在寄存器401中得出(以α基表示的)倒数量。
在子步骤8-9(1)的求倒之后,在子步骤8-9(2),将量1/S1(以α基表示)移入寄存器402中。在子步骤8-9(3)将量1/S1转换成β基表示并结束在寄存器400中。在子步骤8-9(4),将寄存器400中的量1/S1(以β基表示)乘以寄存器401中的量1/S1(以α基表示),将积[以β表示的1/S12]生成在寄存器402中。然后在子步骤8-9(5),将寄存器402的内容[以β表示的1/S12]送至寄存器400供进一步用寄存器401中的量1/S1[以α基表示]相乘(子步骤8-9(6)),在寄存器402中产生以β表示的积1/S13。在子步骤8-9(7),将寄存器402的内容[β表示的1/S13]送至寄存器400并将存储在寄存器SREG3中的值(即S3)加载进寄存器401。在子步骤8-9(8)将寄存器400与401的内容相乘,从而在寄存器402中生成积S3/S13[β表示]。在子步骤8-9(9)将积S3/S13[β表示]移到寄存器400并在其上加上α°(1),从而上述“C”的表达式在寄存器400中。
在步骤8-10判定“C”的“痕迹”(trace)(“tr”)是否为零。步骤8-10的判定采取将存储在寄存器400中的“C”的位4与8加在一起的方法。如果“C”的痕迹为零,则控制器106输出一个信号(在步骤8-11)说明该扇区是不能纠正的。
假定“C”的痕迹非零,则在步骤8-12校验“C”的值是否为零。如果“C”的值为零,控制器106知道(由步骤8-13表示)该扇区中只有一个错误,且该错误的位置(αL1)为校正子S1。
如果C不等于零,控制器106知道该扇区有两个错误(具有位置αL1与αL2)。在确定错误位置值αL1与αL2之前,必须找到一个y使得y2+y+c=0在步骤8-14,通过取下述线性组合得出y的位yk=∑jak,jCj在步骤8-14取线性组合时,应记住“C”存储在寄存器400中。从而,为了取得线性组合,对各时钟循环,必须将“ak,j”的一个适当的值加载进寄存器401中。“ak,j”的值是从LIN440得到的。从LIN440输出的“ak,j”的具体值可参照表2得知。例如,为a0,j输出表2的最后一列,最后一列的最上面一位为a0,0。为a1,j输出表2的最后第二列,对于14个和的各个依次类推,构成“y”的总和。y的线性组合[α基表示]生成在寄存器402中。
在步骤8-14确定了y之后,在步骤8-15计算电路104便能在扇区中有两个错误的情况中计算αL1。具体地,在两个错误的情况中,αL1是由步骤8-15指示的αL1=S1y。当然在一个错误的情况中,αL1已经确定为S1(如上面确定的,见步骤8-12与8-13)。在一个错误的情况中,将S1移到寄存器402中。
结合步骤8-15,在子步骤8-15(1)将校正子S1(β表示)移入寄存器400中。将值y(α基表示)移入寄存器401中。然后在子步骤8-15(2)将寄存器400与401相乘,在寄存器402中生成结果αL1=S1y(β表示)。在子步骤8-15(3),将αL1=S1y保存在寄存器SREG3中(见图4)。
步骤8-16包含确定αL2,具体地,αL2=S1+αL1。从而,在子步骤8-16(1)将校正子S1从寄存器SREG1复制到寄存器401中。在子步骤8-16(2),将寄存器401与402相加,从而在寄存器402中得到结果αL2=S1+αL1(β表示)。在子步骤8-16(3),将结果αL2=S1+αL1存储在寄存器400中。
这样,在为两位错误情况完成了步骤8-15与8-16时,便确定了αL1与αL2的值。在步骤8-17,通过确定logαL1与logαL2而确定L1及(为两个错误情况)L2。从参照图10更详细地讨论的对数运算中可以了解这一对数确定的细节。
作为步骤8-17的对数确定的结果,最终为每一错误位得到一个14位地址值。只利用地址中的12位,其中地址值的位4-11表示扇区的出错字节而地址值的位0-3表示出错字节内的出错位。
在步骤8-18控制器106校验L1与L2的值的适当位地址次序来判定该扇区是否能纠正及提供关于错误位是在数据中还是在ECC或标题中的状态信息。在进行校验中控制器106既使用因子SB(和校正子一起生成的)还使用值L1与L2。具体地,控制器106观察L1与L2的最低位来确定与因子SB的对应性。这一方面,对于一个错误情况,控制器106判定SB是否等于XL1mod4。对于两个错误情况,控制器106校验确认SB等于XL1mod4+XL2mod4。
为了在实际寻址中能使用,应将在步骤8-17得到的L1与L2的值置于适当的位次序中。从而在步骤8-19通过对其中存储有L1与L2的寄存器进行求补而将L1与L2置于适当次序中。
在步骤8-19确定了可用的错误地址时,在步骤8-20控制器106指示翻转值L1-64[补码](及在两个错误情况中的值L2-64[补码])所指的错误位。如果地址L1所指的出错位为“1”,则控制器106指令将存储器12中的该位翻转为“0”。当然这是该位能具有的唯一其它值。在两个错误情况中对地址L2所指的位进行相同的纠正。
操作对数确定图10中描述了与确定错误位置值αL1与αL2的对数相关的一般步骤。不是单独地示出αL1与αL2的对数确定,图10示出用于确定一个代表性错误定位子值αL(它可能是αL1或αL2)的对数的步骤。
对数确定通常包含查阅诸如存储在存储器中的查找表。鉴于确定诸如αL这样的14位量的对数包含查询极大的查找表这一事实,本发明在步骤10-1将错误位置值αL转换成其子字段表示,即两个7位元素X1与X0。此后如步骤10-2所述纠错系统10确定值J,其中J=log(αsX12+αs49X1X0+X02)。然后在步骤10-3,根据X1、X0的值选择一个值K。利用在步骤10-2与10-3确定的值J与K,在步骤10-4如下确定寻找的值L
L=(129J+127K)64mod(127×129)。
现在参照图11更详细地讨论计算电路104在实际计算错误位置值的对数的图10的步骤中的具体操作。步骤10-1所述将αL转换成其子字段表示包含使用字段生成式Fs(X)=X2+αs49X+αs其中使用来自GF(27)的系数,GF(27)的字段生成式为X7+X5+X3+X+1其中αs为GF(27)的基本元素。可将地址αL从其全字段表示转换成包含来自GF(27)的元素对X1、X0的子字段表示。X1、X0的位是通过取αL的位的线性组合取得的。如上面讨论的生成“y”的线性组合(见步骤8-14),LIN440参与确定子字段元素X1、X0的线性组合。
一开始计算电路确保αL1位于寄存器400中以便能够开始线性组合操作。然后在子步骤10-2,控制LIN440输出能用在以αL1生成X1与X0的线性组合中的一序列14位值。
表3示出为子步骤10-2生成所示实例中的子字段值X1与X2而输出到寄存器401的14位值。寄存器401在线性组合的各时钟中取得不同的14位值(来自表3的不同列)。这便是,在线性组合的第一时钟利用表3的最后一列,第二时钟利用最后第二列,及以此类推,随着各线性组合,输出位IP移位进寄存器402中。七个时钟之后,寄存器402的高7位中包含X1(见图1步骤11-1)。
如对步骤10-2提及的,计算电路104为确定J而工作,其中J=log(αsX12+αs49X1X0+X02)式1。J也能表示为J=log(X12(α+α49X0X1,+(X0X1)2))]]>式2J=2logX1+log(α+α49X0X1+(X0X1)2)]]>式3J=2logX1mod127+log(α+X0X1(α49+X0X1))]]>式4
参见式4,令TERM1=2logX1mod127TERM2=X0/X1TERM3=(α49+X0/X1)TERM4=(X0/X1)(α49+X0/X1)TERM5=α+(X0/X1)(α49+X0/X1)TERM6=log[α+(X0/X1)(α49+X0/X1)]利用上文中的项定义来说明计算电路104的以下操作。
在步骤11-1生成了X1之后(位于寄存器402的高位中),在步骤11-2将X1送至控制器106去判定是否X1=0。如果X1=0,控制器设置标志LOG_FLAG(步骤11-3)。由于X1=0,J的表达式(见式1)简化成J=logX02式5在步骤11-4也将包含X1的寄存器402的7个高位并行加载进LOG RAM480供确定log(X1)。在步骤11-42,参照LOG RAM480中的查找表确定log(X1)。具体地,表4示出对LOG RAM480的128种可能输入的7位对数值,表4的第一行为输入值0000000的输出,表4的第二行为值0000001的输出,及以此类推。如果在步骤11-2判定X1为零,LOG RAM480为logX1输出值0。
基本上与步骤11-4同时,在线性组合的第二组7个时钟结束时,在寄存器402的高位中生成子字段X0(步骤11-5)并将子字段值X1移位进寄存器402的低位中。然后,如果标志LOG_FLAG尚未设置(如在步骤11-6判定的),计算电路104进行按照式4的更难的确定J的任务。否则,在步骤11-7计算电路104采用式5中提出的J的简化表达式。
在步骤11-7,计算电路104将子字段元素X0(现在在寄存器402的高位中)发送到LOG ROM480中。寄存器402的高位是可以并行加载进LOG ROM480中的。为了找出logX0,LOG ROM480利用其查找表4,然后将log X0值发送到累加器500H中。为了得出logX02,对于乘以2累加器500H只需进行移位(由于logX02=2logX0)。
参见累加器500,其中所有产生进位出信号的运算引起在累加器500上加上“1”。从而,累加器500始终实现mod(127×129)的运算。
在标志LOG_FLAG未设置的情况中,计算电路104执行图11中所示的步骤11-8至11-20。
如步骤11-8中所示,将步骤11-4确定的值log(X1)发送到累加器500的高位端(位7-13)(即到累加器500H)。
在步骤11-9,通过移位累加器ACC-H(以便将内容乘以2)而在累加器ACC_H(即累加器500H)中得到TERM1,而如果在累加器ACC_H的一端移位出一位,则在ACC_H的低位上加“1”。对于在步骤11-8中放入累加器ACC_H的log X1值,在步骤11-9完成时,该值成为TERM1(即2logX1)。
在步骤11-10构成X1的倒数(即1/X1)。在完成了用于生成X1与X0的线性组合时,值X1在寄存器402的低位中。在准备X1的倒数中,将X1移入寄存器SREG1的低位中(见图4)。为了倒数运算,将值X1从寄存器SREG1移位进寄存器400中。在步骤11-10,执行倒数运算6个时钟,后面跟随6个时钟的子字段反馈(利用异或门436B)。在求倒步骤11-10的十二个时钟结束时,寄存器401的高位端包含1/X1(α表示)。
当将X1复制到寄存器SREG1的低位(表示为SIL)时,将X0从寄存器402的高位复制到寄存器SREG1的高位(表示为SIH)。
在完成了步骤11-10时,计算电路已准备好在步骤11-11生成TERM2(即X0/X1)。从而,将X0从寄存器SREG1的高位移位到寄存器400中。计算电路104在寄存器400与401中的值上执行乘法,以β表示将积X0/X1输出到寄存器402(高位)。
为了进行乘法来获得TERM4=(X0/X1)(α49+X0/X1)带括号的因子之一必须是β基表示而另一个为α基表示。到此为止计算电路104已得到项X0/X1,但只是在β基表示中。为了进行产生TERM4的乘法,还必须得出α基表示的项X0/X1。因此,在步骤11-12,执行β至α基转换来得到α基表示的X0/X1。
在执行步骤11-12之前,将β基表示的X0/X1存储在寄存器402的高位端中。在步骤11-12中,将β基表示的X0/X1移位到寄存器402的低位端中。然后利用异或门406反馈(利用寄存器402的位1、3、5与7),定时寄存器402以便在其高位中生成α基表示(但反向位次序的)的X0/X1。从而在步骤11-12结束时,寄存器402的低位端(即低7位)具有β基表示的X0/X1而寄存器402的高位端(即高7位)则具有α基表示(但反向位次序)的X0/X1。作为步骤11-12的结果,已得到α基表示的X0/X1,但为了在得出TERM3中有用,即TERM3=(α49+X0/X1)因子X0/X1的位模式必须颠倒(由于它是以倒的位次序存储在寄存器402的高位端中的)。为了以正确的位次序放置因子X0/X1(α基表示),在步骤11-13,在7个时钟周期的各个中寄存器402并行加载α乘法器450及来自乘法器450的输入并行加载寄存器402时,切断对α乘法器与寄存器402的反馈。在各时钟中将寄存器402的位13的内容串行加载进寄存器401中,结果在寄存器401中得到正确位次序的(α基表示的)因子X0/X1。图4中示出这样运算的α乘法器450的结构。
这样,步骤11-13的运算等价于寄存器402的左移,使之能以位13、位12等的次序从其中读出位13-7,这意味着以位次序0、1,…,6读出因子X0/X1(α基表示)。从而将正确位次序的因子X0/X1(α基表示)读出到寄存器401并在将因子X0/X1(β基表示)移到寄存器400中之后移位成在寄存器402的高位中。
在步骤11-14,控制器106输出加到因子X0/X1(α基表示)上的α47的值(α基表示)。然后在步骤11-15,可将乘法因子α47+X0/X1(在寄存器400中以α基表示)乘以因子X0/X1(在寄存器402中以β基表示)而在寄存器402中得出积(即TERM4)(β基表示)。
在步骤11-16,为了得到TERM5,即TERM5=α+(X0/X1)(α49+X0/X1)而将α加在TERM4上。为了得到TERM5,控制器106将常数值010000放在寄存器401的高位中并为了将寄存器401与402的内容相加而接通信号FORCE_IP,结果在寄存器401中形成TERM5。
在步骤11-16中形成了TERM5之后,在步骤11-17取其对数。为了这样做,将TERM5加载进寄存器402中。如果未设置标志LOG_FLAG,则将寄存器402的高位中的TERM5并行施加在LOGROM480上(见图5B)。LOG ROM480利用表4作为查找表来生成对应于输入信号的对数输出。作为步骤11-17的结果,从LOGROM480输出TERM6,即TERM6=log[α+(X0/X1)(α49+X0/X1)]。
在步骤11-18将(步骤11-14从LOG ROM480输出的)TERM6加到存储在ACC_H(即累加器500H)中的TERM1=2logX1mod127上,借此产生寻找值J。
如L的表达式,即L=(129J+127K)64mod(127×129)所示,必须将J(现在在ACC_H中)乘以129。这样,不论在步骤11-18(对于X1≠0)还是在步骤11-17(对于X1=0)得出J,在步骤11-19发生这一乘法。具体地,将会理解一个值用129乘与乘以128再将积加在原来的值上是一样的。为了完成这样做,在步骤11-19将ACC_H(即寄存器500H)中的J值复制进寄存器ACC-L(即寄存器500L)中,从而复合寄存器500中有129J。
J值只是确定值L所需的一个因子。如前面对步骤10-3所指出的,确定L所需的另一值为“K”。
在步骤11-20,按照下述方法确定KK=0若X1=01若X1≠0且X0=0f(X0/X1)若X1≠0且X0≠0其中f(X0/X1)=log(y1α+y0)且log是以α为底的并且是从查找表得到的,并且y1,y0是使得log(y1α+y0)<129且y0/y1=X0/X1成立的来自GF(27)的唯一元素对。对于X1≠0且X2≠0的每一对X1,X0存在一对y1,y0。
如果在步骤11-16确定K=0,则已基本上完成了L的计算(L=129J,在步骤11-16之后L位于寄存器500中)。
如果X1不等于零,则如上所述利用LOG ROM480来生成f(X0/X1)。如果0<K<128则K将是LOG ROM480的输出。LOGROM480的输出K示出在表5中。表5和表4一样列出所有128种输入(从0开始的递增输入值次序,值在列中连续排列,并从一列的底部到下一列的顶部连续排列,如表4与5中所示)。
在步骤11-21,将K乘以127。步骤11-21利用127×K=128K-K这一事实。从而,在步骤11-18的乘法是通过在累加器500的高位端(即已包含J的ACC_H)上加K并从累加器500的低位端(即ACC_L)中减K完成的。结合减法,在K的7位值前面加载7个零,该量是由非门490求补的(即1变成0及0变成1)。将求补后的整个14位值加到累加器500以完成减去K。从而在步骤11-21结束时累加器500具有(129J+127K)mod(127×129)。因为如上所述对于产生进位出的所有运算将一个“1”加在累加器500上,所以项mod(127×129)包含在累加器500中。
在步骤11-22,从位7取L的输出,它等价于乘以64。现在能看出已得出所要求的值L-64[补码]。减法(由上述运算完成)的原因为去掉32位ECC及32位自左乘。
将会理解结合一个扇区中两个错误的情况图11中的步骤是为各个错误执行的。此后,如步骤8-18所示,在L值(即L1与L2)上执行范围校验;将L值放置成可用的寻址次序(步骤8-19);并在具有由纠错系统10确定的地址L1(及在两个错误情况中的L2)的位上执行纠正。
虽然在此已详细公开与描述了较佳实施例,对于熟悉本技术的人员而言,显而易见可在其中作出各种形式上与细节上的改变而不脱离其精神与范围。
表1线性逻辑数据表00001001 11000000 10010000 1000010100010011 10000001 00100001 0000101000100111 00000010 01000010 0001010001001110 00000100 10000100 0010100010011100 00001001 00001000 0101000000110001 11010010 10000000 0010010101100011 10100101 00000000 0100101011000111 01001010 00000000 10010100
表2生成y的线性组合的LIN输出值0110100010111000111010111100001110101111101111100011110001010010010100101101011000001111100011011000101111000000100100000000101100101001100010010000111000001111111101001101011010010001011010011100表3生成子字段元素X1与X0的线性组合的LIN输出值1000000000000000000001000000010000011100100111001110100101101001000001010000001000100010001011010100110100111011101110100100100001001101111101011110010011000100110010010100100100100011001000000001
表4LOG ROM的对数查找表00000000000011000001000101111111110101001100111011110000001001110101011100100110011111111011011101101001001101100010010100010010101001110001000011001000011010110110100001001111011011010001011010011111100011100110111001101010010101100010010001010001000101111101000011000010110010000100000011101110000101110110100101000111110110011010011001001001011010111101100011000111000001101011101011110011010101010011100010101010111001100100001000110000110110010111101001000011110011001100000010000110000110000101111001101111000111100010111100101000001011101011010111101110011111100000000011110100100100101001100101010010100001111010111000110101010000100011100111101011000001011111101001111001110111001100110010110110100110110000110111110100000000101011110010110010100111000101001101010110110111110110001001110010001101101111110001110000001100110110000000011101011000000111110100001111000101000111011010110101
表5LOG ROM的函数查找表0000001101100001000000101111011010000100011110101111011111001110111001001010111111111110010110001011010110111011101101000100001000001001101001111001001111100001000011110100001011000110111100000000000011100111010011011100110110100011010100100111011000000110101110110101010101111010100101000011100101011010011101001010011000000010010001010110110000101110010000110111001100111110010011111101110001110001010101010100101100000100010000100111100001001100110001110001001010000100100111111100010010110010010111110111110100011111100011001011010011010100110110010110100011110111101100111001110110010010110110100110111011100001010110100101110001100001010011111000100011100001100111001100110101101111101001000000001111011011100111111000001100000100101100010010010001101111000110101010100101110110000011000010100001000010100010101100111010000110111111010101110001001101100110111101000010110101111101111110010权利要求
1.一种用于仿真磁盘驱动器操作的固态盘驱动器,包括(a)一个盘控制器,用于向主机系统提供磁盘接口;及(b)一个固态盘驱动器仿真器,响应盘驱动器将磁盘命令翻译成兼容的固态命令;及(c)一个固态存储设备阵列,用于存储非易失性计算机数据;及(d)一个纠错系统,响应固态存储设备阵列,能纠正多达两位由存储器阵列中的损坏或漏泄单元导致的错误。
2.权利要求1中所述的固态盘驱动器,其中该固态存储器阵列包括快速EEPROM存储器。
3.权利要求1中所述的固态盘驱动器,其中(a)该固态存储器阵列配置成存储器单元的行与列;及(b)行表示磁盘的道并包括扇区的列;及(c)多达两位错误发生在一个扇区中。
4.权利要求1中所述的固态盘驱动器,其中该纠错系统采用每次处理一个字节的面向位的代码。
5.一种用于仿真磁盘驱动器的操作的固态盘驱动器的纠错系统,该纠错系统包括一个ECC/余数发生器,顺序地接收一个扇区的字节,且在写操作中生成ECC字节及在读操作中生成校验余数字节;一组余数寄存器,其中加载有校验余数字节;一个计算电路,串行接收余数寄存器组的内容以生成两个校正子。
6.权利要求5的纠错系统,其中该余数寄存器组并行加载有校验余数字节。
7.权利要求6的纠错系统,其中该余数寄存器组包括并行加载有校验余数字节的四个8位寄存器,其中这四个8位寄存器是连接成作为一个串行移位寄存器操作的,及其中生成了两个校正子之后,将这两个校正子串行加载进串行移位寄存器的低位中。
8.权利要求5的纠错系统,其中该计算电路串行接收余数寄存器组的内容用于生成两个校正子及一个范围校验因子。
9.权利要求8的纠错系统,其中该纠错系统利用两个14位多项式与一个4位多项式之积的一个32位代码生成多项式,及其中该4位多项式用来生成范围校验因子。
10.权利要求8的纠错系统,其中该计算电路利用该范围校验因子来校验纠错系统所执行的纠正的有效性。
11.权利要求5的纠错系统,其中该纠错系统采用两个14位多项式与一个4位多项式之积的一个32位代码生成多项式。
12.权利要求11的纠错系统,其中两个14位多项式的第一个为多项式(X14+X10+X9+X6+X5+X4+X1),其中两个14位多项式的第二个为多项式(X14+X6+X5+X2+1),及其中该4位多项式为多项式(X4+1)。
13.权利要求5的纠错系统,其中该计算电路包括第一计算寄存器组及第二计算寄存器组,及其中该第一计算寄存器组及该第二计算寄存器组具有一个反馈电路,及其中将余数寄存器组的内容串行移位进各该第一计算寄存器组及第二计算寄存器组用于在第一计算寄存器组中生成第一校正子及在第二计算寄存器组中生成第二校正子。
14.权利要求13的纠错系统,其中该计算电路计算表达式
其中S1为第一校正子,S3为第二校正子,而α°为1,及其中该计算电路利用计算C来确定扇区中的错误数目。
15.权利要求14的纠错系统,其中计算电路计算C的痕迹函数来判定该扇区是否可纠正。
16.权利要求13的纠错系统,其中该计算电路利用第一校正子来确定至少第一错误定位子值。
17.权利要求16的纠错系统,其中该计算电路利用公式αL1=S1y确定第一错误定位子值αL1,其中S1为第一校正子则y而是通过取线性组合yK=∑jαk,jCj使得y2+y+c=0找到的,及其中ak,j之值是存储在计算电路中所包含的线性查找表中的。
18.权利要求17的纠错系统,其中该计算电路利用公式αL2=S1+αL1确定第二错误定位子值αL2。
19.权利要求16的纠错系统,其中该计算电路包括第三组计算寄存器,及其中将余数寄存器组的内容串行移位进第三组计算寄存器中用于生成第三组计算寄存器中的范围校验因子。
20.权利要求19的纠错系统,其中该计算电路利用至少一个错误定位子值来判定扇区的数据部分中是否有一错误位。
21.权利要求16的纠错系统,其中该计算电路取至少一个错误定位子值的对数来确定错误地址。
22.权利要求21的纠错系统,其中该计算电路将该至少一个错误定位子值加载进第一组计算寄存器中,及其中该计算电路包括用于生成一序列值的装置;一个线性组合电路,为了在第二组计算寄存器中生成线性组合X1而将第一组值序列与至少一个错误定位子线性组合,其中包含在X1中的位数是包含在错误定位子中的位数的一半;确定log(X1)的存储在存储器中的一张查找表;其中用该线性组合电路线性组合第二组值序列以生成线性组合X0,其中包含在X0中的位数是包含在错误定位子中的位数的一半;以及其中该查找表确定log(X0)。
23.一种用于仿真磁盘驱动器的操作的固态盘驱动器的纠错方法,该纠错方法包括顺序地接收一个扇区的字节并且在写操作中生成ECC字节而在读操作中生成校验余数字节;用校验余数字节加载一组余数寄存器;将余数寄存器组的内容串行输入到计算电路中并用该计算电路在读操作中生成两个校正子。
24.权利要求23的纠错方法,其中该余数寄存器组是用校验余数字节并行加载的。
25.权利要求24的纠错方法,其中该余数寄存器组包括用校验余数字节并行加载的四个8位寄存器,及其中该方法还包括作为串行移位寄存器操作这四个8位寄存器用于将其内容移位进计算电路中;以及生成两个校正子之后,将这两个校正子串行加载进该串行移位寄存器的低位中。
26.权利要求23的纠错方法,还包括将余数寄存器组的内容串行输入到计算电路中;以及利用计算电路生成两个校正子及一个范围校验因子。
27.权利要求26的纠错方法,其中该纠错方法使用两个14位多项式及一个4位多项式之积的一个32位代码生成多项式,及其中该4位多项式被用来生成范围校验因子。
28.权利要求26的纠错方法,还包括利用至少一个错误定位子值来判定错误位是否在该扇区的数据部分中。
29.权利要求23的纠错方法,其中该纠错方法使用两个14位多项式及一个4位多项式之积的一个32位代码生成多项式。
30.权利要求29的纠错方法,其中这两个14位多项式中的第一个为多项式(X14+X10+X9+X6+X5+X4+X1),其中这两个14位多项式中的第二个为多项式(X14+X6+X5+X2+1),及其中该4位多项式为多项式(X4+1)。
31.权利要求23的纠错方法,还包括将余数寄存器组的内容串行移位到构成计算电路的第一组计算寄存器及第二组计算寄存器的各组中;以及在第一组计算寄存器中生成第一校正子并在第二组计算寄存器中生成第二校正子。
32.权利要求31的纠错方法,还包括利用计算电路来计算表达式
其中S1为第一校正子,S3为第二校正子,且α°为1;以及利用计算电路来计算C以判定该扇区中的错误数目。
33.权利要求32的纠错方法,还包括利用计算电路来计算C的一个痕迹函数以判定该扇区是否可以纠正。
34.权利要求31的纠错方法,还包括利用计算电路用第一校正子来确定至少第一错误定位子值。
35.权利要求34的纠错方法,其中该计算电路利用公式αL1=S1y确定第一错误定位子值αL1,其中S1为第一校正子而y则是通过取线性组合yk=∑jαk,jCj使y2+y+c=0找出的,及其中αk,j的值是从包含在计算电路中的线性查找表中得到的。
36.权利要求35的纠错方法,还包括利用计算电路用公式αL2=S1+αL1确定第二错误定位子值αL2。
37.权利要求34的纠错方法,还包括将余数寄存器组的内容串行移位到包含在该计算电路中的第三组计算寄存器中供在该第三组计算寄存器中生成范围校验因子。
38.权利要求37的纠错方法,还包括操作计算电路来利用该至少一个错误定位子值来判定错误位是否在该扇区的数据部分中。
39.权利要求34的纠错方法,还包括操作计算电路取该至少一个错误定位子值的对数并借此确定错误地址。
40.权利要求39的纠错方法,其中操作计算电路取该至少一个错误定位子值的对数包括将该至少一个错误定位子值加载进第一组计算寄存器中;生成一序列的值;为了在第二组计算寄存器中生成线性组合X1,将第一组值序列与该至少一个错误定位子线性组合,其中包含在X1中的位数是包含在该错误定位子中的位数的一半;访问存储在存储器中的查找表来确定log(X1);为了生成线性组合X0,将第二组值序列与该至少一个错误定位子线性组合,其中包含在X0中的位数是包含在该错误定位子中的位数的一半;以及访问该查找表来确定log(X0)。
41.权利要求23的纠错方法,其中该计算电路用于将余数寄存器组的内容串行接收到构成计算电路的第一组计算寄存器与第二组计算寄存器的各组中并在第一组计算寄存器中生成第一校正子及在第二组计算寄存器中生成第二校正子;将余数寄存器组的内容串行接收到第三组计算寄存器中并生成一个范围校验因子;判定该扇区是否可以纠正;判定该扇区中的错误数目;利用第一校正子确定一个第一错误定位子值;确定第二错误定位子值;取第一错误定位子值及第二错误定位子值之对数并借此确定错误在该扇区中的地址。
42.权利要求41的纠错方法,其中扇区中的错误数目是通过计算表达式
确定的,其中S1为第一校正子,S3为第二校正子而α°为1。
43.权利要求41的纠错方法,其中该计算电路利用公式αL1=S1y确定第一错误定位子值αL1,其中S1为第一校正子而y则是通过取线性组合yk=∑jαk,jCj使y2+y+c=0而找出的,及其中αk,j之值是从包含在计算电路中的线性查找表得到的。
44.权利要求41的纠错方法,其中该计算电路利用公式αL2=S1+αL1确定第二错误定位子值αL2。
45.权利要求41的纠错方法,其中取至少一个错误定位子值的对数包括将该至少一个错误定位子值加载进第一组计算寄存器中;生成一序列的值;将第一组序列值与该至少一个错误定位子线性组合以便在第二组计算寄存器中生成线性组合X1,其中包含在X1中的位数是包含在错误定位子中的位数的一半;访问存储在存储器中的查找表以确定log(X1);将第二组序列值与至少一个错误定位子线性组合以便生成线性组合X0,其中包含在X1中的位数是包含在错误定位子中的位数的一半;以及访问查找表以确定log(X0)。
46.一种用于仿真磁盘驱动器的固态盘驱动器的纠错系统,该纠错系统利用一个32位代码生成多项式纠正作用在系统上的每一扇区的多达两个错误,该32位代码生成多项式为两个14位多项式及一个4位多项式之积,及其中利用该4位多项式来生成用于判定错误是否出现在该扇区的数据部分中的范围校验因子。
47.权利要求46的纠错系统,其中两个14位多项式中的第一个为多项式(X14+X10+X9+X6+X5+X4+X1),其中两个14位多项式中的第二个为多项式(X14+X6+X5+X2+1),及其中的4位多项式为多项式(X4+1)。
48.权利要求46的纠错系统,该纠错系统包括一个ECC/余数发生器,顺序地接收扇区的字节并在写操作中生成ECC字节及在读操作中生成校验余数字节;一组加载有校验余数字节的余数寄存器;一个计算电路,串行接收余数寄存器组的内容以生成两个校正子。
49.一种用于固态盘驱动器的纠错系统,该纠错系统利用三个多项式之积的一个生成多项式,该纠错系统包括一个ECC/余数发生器,顺序地接收扇区的字节并在写操作中生成ECC字节及在读操作中生成校验余数字节;一组加载有校验余数字节的余数寄存器;一个计算电路,串行接收余数寄存器组的内容并利用这三个多项式中的第一个生成第一校正子;这三个多项式中的第二个生成第二校正子;及三个多项式中的第三个生成范围校验因子。
50.权利要求49的纠错系统,其中该纠错系统仿真磁盘驱动器的操作。
51.权利要求49的纠错系统,其中该纠错系统利用一个32位代码生成多项式纠正作用在系统上的每个扇区的多达两个错误,该32位代码生成多项式为两个14位多项式及一个4位多项式之积,及其中该4位多项式用于生成范围校验因子。
52.权利要求51的纠错系统,其中这两个14位多项式中的第一个为多项式(X14+X10+X9+X6+X5+X4+X1),其中这两个14位多项式的第二个为多项式(X14+X6+X5+X2+1),及其中该4位多项式为多项式(X4+1)。
53.权利要求49的纠错系统,其中利用至少一个错误定位子值来判定错误是否出现在该扇区的数据部分中。
54.权利要求49的纠错系统,其中该余数寄存器组包括用校验余数字节并行加载的四个8位寄存器,其中这四个8位寄存器连接成作为一个串行移位寄存器工作,及其中在生成了两个校正子及范围校验因子之后,串行地将这两个校正子及范围校验因子加载进该串行移位寄存器中。
55.权利要求49的纠错系统,其中该纠错系统采用每次处理一个字节的面向位的代码。
全文摘要
提供了一种纠错系统(10),用于纠正存储在仿真盘驱动器的固态非易失性存储器(12)中的每一扇区的多达两位。该纠错系统(10)包括一个ECC/余数发生器(100),一组余数寄存器(102)及一个计算电路(104),它们都在控制器(106)的监控下。在写入存储操作中,纠错系统(10)生成ECC字节供存储在存储器(12)中。在写操作中,利用从存储器(12)得出的整个扇区生成ECC校验余数字节REM
文档编号G06F12/06GK1169785SQ95196746
公开日1998年1月7日 申请日期1995年10月20日 优先权日1995年10月20日
发明者C·P·佐克 申请人:西尔拉斯逻辑公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1