Abstract:
A syndrome processing unit for a multibyte error correcting system is disclosed in which logical circuitry for performing product operation on selected pairs of 8-bit syndrome bytes and exclusive-OR operations on selected results of the product operations are selectively combined to define usable cofactors that correspond to coefficients of an error locator polynomial corresponding to a selected codeword if the codeword contains less than the maximum number of errors for which the system has been designed.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of Invention 
     This invention relates in general to error correcting systems employing cyclic error correcting codes and, in particular, to an improved method and apparatus for processing syndrome bytes in a multibyte error correcting system. 
     2. Cross-Referenced Application 
     Application Ser. No. 454,393, filed concurrently herewith, entitled &#34;On-the-Fly Multibyte Error Correcting System&#34;, A. M. Patel, assigned to the assignee of the present invention, discloses a on-the-fly multibyte error correcting system. 
     3. Description of the Prior Art 
     The use of cyclic error correcting codes in connection with the storage of data in magnetic storage devices is well established in the prior art and is generally recognized as a very efficient and cost effective addition to the storage system. 
     Generally, the error correcting process involves the processing of syndrome bytes to determine the location and pattern of each error that is detected. Syndrome bytes result from the exclusive-ORing of ECC write check characters that are generated as data is being written on the storage medium and ECC read check characters that are generated when the data is transferred from or read from storage. The number of ECC check characters employed depends on the desired power of the code and the number of data bytes to be checked or protected. As an example, in many present day ECC systems which are used in connection with the storage of 8-bit bytes in a magnetic storage device, two check bytes are used for each error to be checked in a codeword having a length of 255 byte positions. Thus, for example, six check bytes are required to detect up to three errors in a block of data having 249 data bytes and six check bytes. Thus, six distinctive syndrome bytes are generated in such a system. If there are no errors in the data word comprising the 255 bytes read from storage, then all six syndrome bytes each contain an all zero pattern. Under such a condition, no syndrome processing is required and the data word may be sent to the central processing unit. However, if one or more of the syndrome bytes is non-zero, then syndrome processing involves the process of identifying the location of the bytes in error and further identifying the error pattern for each error location. 
     The prior art has disclosed in various publications and patents the underlying mathematical concepts and operations which are involved in normal syndrome processing operations. These operations and mathematical explanations generally involve first identifying the location of the errors by use of what has been referred to by Peterson as the &#34;error locator polynomial&#34;. The overall objective of the mathematics involved employing the error locator polynomial is to define the locations of the bytes in error by using only the syndrome bytes that are generated in the system. 
     The prior art has employed the error locator polynomial as the start of the mathematical analysis to express error locations in terms of syndromes so that binary logic may be employed to decode the syndrome bytes into first identifying the locations in error so that subsequent hardware can identify the error patterns in each location. Two problems have existed with the error locator portion of prior art syndrome processing decoders for multi-error correcting systems. 
     The first problem is that separate sets of logic were required for each of the multi-error conditions. For example, if the system was designed to correct up to three errors, three separate and independent sets of logic were required to identify the error location. That is, the logic required to identify the error locations when there were three errors could not be used to identify the locations if there were less than three errors, i.e., two or a single error. Likewise, the logic designed to identify the error locations if two errors were present could not identify the error location if only one error existed in the codeword. The cost of such prior art decoders was, therefore, quite high. 
     The second problem with prior art syndrome processing decoders for multibyte error correcting systems is that a division step was required in the mathematical processing of the syndrome bytes to arrive at error locations. It is well recognized that a division operation in higher order binary fields is costly, both in time and hardware implementation. 
     The present invention provides a decoder for syndrome processing in a multibyte error correcting system which is capable of identifying each error location in a manner which avoids using a division operation and which employs a subset of the hardware used for identifying the maximum number of error locations in the system where the number of errors is less than maximum. 
     SUMMARY OF THE INVENTION 
     In accordance with the present invention, a method and apparatus is disclosed in which syndrome bytes are used to develop the appropriate values of the coefficients of the error locator equation ##EQU1## which, when rewritten for a specific representative case such as a three byte error correction system, takes the following form: 
     
         Δ.sub.3 α.sup.3i +Δ.sub.2 α.sup.2i +Δ.sub.1 α.sup.i +Δ.sub.0 =0 for iε{I}         (2) 
    
     The method involves generating the coefficients by performing product operations and sum operations on the appropriate syndromes in GF(2 8 ) element algebra to develop a set of location parameters corresponding to the selected determinants in the following matrix equation: ##EQU2## where the symbols σ 3 , σ 2 , σ 1  and σ 0  represent the coefficients of the prior art error locator polynomial. 
     The expressions for the location parameters are formulated such that cofactors for less than the maximum number of errors are developed in the process of developing the parameters for the maximum number of errors which simplifies the computation and selection of the coefficients of the error locator equation (2). The parameters and the corresponding cofactors for the three error code are developed in accordance with the following four equations: 
     
         Δ.sub.33 =S.sub.2 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.3 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.4 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (4) 
    
     
         Δ.sub.32 S.sub.3 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.4 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.5 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (5) 
    
     
         Δ.sub.31 =S.sub.0 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.1 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.1)⊕S.sub.2 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (6) 
    
     
         Δ.sub.30 =S.sub.1 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.3 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (7) 
    
     It is, therefore, an object of the present invention to provide an improved decoder for an error correcting system involving multibyte errors in which only one set of combinatorial logic is employed for identifying the error locations for the various error conditions. 
     A further object of the present invention is to provide an improved decoder for an error correcting system capable of correcting multiple errors in which coefficients of the error locator polynomial employed to identify error locations is developed without the use of any division operations. 
     The foregoing and other objects, features and advantages of the invention will be apparent from the following more particular description of a preferred embodiment of the invention as illustrated in the accompanying drawing. 
    
    
     BRIEF DESCRIPTION OF THE DRAWING 
     FIG. 1 is a system block diagram of an on-the-fly three-byte error correcting system; 
     FIG. 2 is a schematic illustration of the combinatorial logic employed in the decoder for the computation of location parameters in the system shown in FIG. 1; 
     FIG. 3 is a schematic illustration of the combinatorial logic involved obtaining the coefficients Δ m  in the decoder of FIG. 1 by identifying the exact number of errors and selecting appropriate location parameters when less than three errors are found in the codeword. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENT 
     A description of the system shown in FIG. 1 will first be provided. The description of the syndrome processing hardware for identifying error locations and the method of operating the hardware will then be followed by a mathematical explanation and proof of the manner in which the decoder has been implemented. This explanation will disclose in mathematical terms how a decoder can be constructed to operate in an error correcting system for any number of errors. 
     FIG. 1 shows the block diagram of an on-the-fly decoder which is disclosed and claimed in the copending application Ser. No. 454,393, filed concurrently herewith and assigned to the assignee of the present invention. As described in that application, the decoding process is continuous in an uninterrupted stream of data entering in the form of a chain of n-symbol codewords, hence the name, on-the-fly decoding. From a practical viewpoint, a given decoding process can be considered on-the-fly if it meets the following test, namely, the corrected data bytes of a previously received codeword are delivered to the user system while the data bytes of the following codeword are being received. 
     The decoder comprising blocks 6, 7, 8, 9 computes syndromes for the incoming codeword as it decodes and corrects errors in the previously received outgoing codeword. Each clock cycle corresponds to an input of one data symbol of the incoming codeword concurrent with an output of one corrected data symbol of the outgoing codeword. A buffer 5 holds at least n-symbols of the uncorrected data in between the incoming and outgoing symbols. 
     A three-error correcting Reed-Solomon Code in GF(2 8 ) is used as an example of special interest for applications in computer products. The 256 elements of GF(2 8 ) are conventionally represented by the set of 8-bit binary vectors. One such representation is given in Table 1. In a three-error correcting Reed-Solomon code, there are six check symbols corresponding to the roots α 0 , α 1 , α 2 , α 3 , α 4 , α 5  of the generator polynomial where α is an element of a finite field GF(2 8 ) represented by an 8-bit binary vector. 
     
                                           TABLE 1__________________________________________________________________________1 1 0 1 0 1 0 0 1GF256 P__________________________________________________________________________000   00000001   051      11011100           102              00101010                   153                      11101100                           204                              00011011001   00000010   052      00010001           103              01010100                   154                      01110001                           205                              00110110002   00000100   053      00100010           104              10101000                   155                      11100010                           206                              01101100003   00001000   054      01000100           105              11111001                   156                      01101101                           207                              11011000004   00010000   055      10001000           106              01011011                   157                      11011010                           208                              00011001005   00100000   056      10111001           107              10110110                   158                      00011101                           209                              00110010006   01000000   057      11011011           108              11000101                   159                      00111010                           210                              01100100007   10000000   058      00011111           109              00100011                   160                      01110100                           211                              11001000008   10101001   059      00111110           110              01000110                   161                      11101000                           212                              00111001009   11111011   060      01111100           111              10001100                   162                      01111001                           213                              01110010010   01011111   061      11111000           112              10110001                   163                      11110010                           214                              11100100011   10111110   062      01011001           113              11001011                   164                      01001101                           215                              01100001012   11010101   063      10110010           114              00111111                   165                      10011010                           216                              11000010013   00000011   064      11001101           115              01111110                   166                      10011101                           217                              00101101014   00000110   065      00110011           116              11111100                   167                      10010011                           218                              01011010015   00001100   066      01100110           117              01010001                   168                      10001111                           219                              10110100016   00011000   067      11001100           118              10100010                   169                      10110111                           220                              11000001017   00110000   068      00110001           119              11101101                   170                      11000111                           221                              00101011018   01100000   069      01100010           120              01110011                   171                      00100111                           222                              01010110019   11000000   070      11000100           121              11100110                   172                      01001110                           223                              10101100020   00101001   071      00100001           122              01100101                   173                      10011100                           224                              11110001021   01010010   072      01000010           123              11001010                   174                      10010001                           225                              01001011022   10100100   073      10000100           124              00111101                   175                      10001011                           226                              10010110023   11100001   074      10100001           125              01111010                   176                      10111111                           227                              10000101024   01101011   075      11101011           126              11110100                   177                      11010111                           228                              10100011025   11010110   076      01111111           127              01000001                   178                      00000111                           229                              11101111026   00000101   077      11111110           128              10000010                   179                      00001110                           230                              01110111027   00001010   078      01010101           129              10101101                   180                      00011100                           231                              11101110028   00010100   079      10101010           130              11110011                   181                      00111000                           232                              01110101029   00101000   080      11111101           131              01001111                   182                      01110000                           233                              11101010030   01010000   081      01010011           132              10011110                   183                      11100000                           234                              01111101031   10100000   082      10100110           133              10010101                   184                      01101001                           235                              11111010032   11101001   083      11100101           134              10000011                   185                      11010010                           236                              01011101033   01111011   084      01100011           135              10101111                   186                      00001101                           237                              10111010034   11110110   085      11000110           136              11110111                   187                      00011010                           238                              11011101035   01000101   086      00100101           137              01000111                   188                      00110100                           239                              00010011036   10001010   087      01001010           138              10001110                   189                      01101000                           240                              00100110037   10111101   088      10010100           139              10110101                   190                      11010000                           241                              01001100038   11010011   089      10000001           140              11000011                   191                      00001001                           242                              10011000039   00001111   090      10101011           141              00101111                   192                      00010010                           243                              10011001040   00011110   091      11111111           142              01011110                   193                      00100100                           244                              10011011041   00111100   092      01010111           143              10111100                   194                      01001000                           245                              10011111042   01111000   093      10101110           144              11010001                   195                      10010000                           246                              10010111043   11110000   094      11110101           145              00001011                   196                      10001001                           247                              10000111044   01001001   095      01000011           146              00010110                   197                      10111011                           248                              10100111045   10010010   096      10000110           147              00101100                   198                      11011111                           249                              11100111046   10001101   097      10100101           148              01011000                   199                      00010111                           250                              01100111047   10110011   098      11100011           149              10110000                   200                      00101110                           251                              11001110048   11001111   099      01101111           150              11001001                   201                      01011100                           252                              00110101049   00110111   100      11011110           151              00111011                   202                      10111000                           253                              01101010050   01101110   101      00010101           152              01110110                   203                      11011001                           254                              11010100__________________________________________________________________________ 
    
     The corresponding syndromes computed by block 6 are denoted by S 0 , S 1 , S 2 , S 3 , S 4 , and S 5  respectively. These syndromes are computed from the received codeword in the conventional manner in accordance with any known prior art process. The implementation for this step is well known and makes use of exclusive-OR circuits and shift registers. The details of the block 7 logic circuits are shown in FIGS. 2 and 3. 
     The overall function of the block 7 shown in FIGS. 2 and 3 is first to implement the following four equations to develop the locator parameters Δ 33 , Δ 32 , Δ 31  and Δ 30 , which also includes the parameters Δ 22 , Δ 21  and Δ 20 , and then from these locator parameters, select the coefficients Δ 3 , Δ 2 , Δ 1  and Δ 0  by the logic shown in FIG. 3 in accordance with the exact number of errors that are involved in the particular codeword. The equations for Δ 33 , Δ 32 , Δ 31  and Δ 30  are as follows: 
     
         Δ.sub.33 =S.sub.2 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.3 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.4 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (4) 
    
     
         Δ.sub.32 =S.sub.3 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.4 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.5 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (5) 
    
     
         Δ.sub.31 =S.sub.0 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.1 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (6) 
    
     
         Δ.sub.30 =S.sub.1 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.3 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (7) 
    
     These parameters are used to determine the coefficients of the error locator equation (2). The error locations and error patterns can then be determined by the blocks 8 and 9 of the &#34;on-the-fly&#34; system shown in FIG. 1 and described in the cross-referenced application or the errors may be corrected in accordance with other known, more conventional error correcting systems. 
     The combinatorial logic shown in FIG. 2 includes two basic logic blocks 10 and 11. The first block 10, represented by an X, corresponds to a product operation in GF(2 8 ) involving two 8-bit binary vectors, while the second block 11 represents an exclusive-OR binary logical operation. The operation of block 11 is a simple bit-by-bit exclusive-OR logical function using eight 2-way exclusive-OR gates. The product operation, on the other hand, represented by block 10 is more complex and involves 76 exclusive-OR circuits and 64 AND circuits. The need for the 76, XOR circuits and 64 AND circuits may be seen from the following example which explains the product function of block 10. 
     The product operation of block 10 involves two 8-bit vectors A and B to produce a third vector C where 
     
         A=[a.sub.0,a.sub.1,a.sub.2,a.sub.3,a.sub.4,a.sub.5,a.sub.6,a.sub.7 ] 
    
     
         B=[b.sub.0,b.sub.1,b.sub.2,b.sub.3,b.sub.4,b.sub.5,b.sub.6,b.sub.7 ] 
    
     
         C=[c.sub.0,c.sub.1,c.sub.2,c.sub.3,c.sub.4,c.sub.5,c.sub.6,c.sub.7 ] 
    
     The product is obtained through a two step process. First, compute the coefficients f i  of the product polynomial F where F=A×B, modulo 2. Computation of the coefficients f i  (i=0, . . . 14) requires 64 AND gates and 49 EX-OR gates: ##EQU3## 
     Second, reduce the polynomial F, modulo p(x), where p(x) is a primitive binary polynomial of degree 8. Use p(x)=1+x 3  +x 5  +x 7  +x 8 . The reduction of f i  modulo p(x) requires at the most 22 EX-OR gates. 
     
         C.sub.0 =f.sub.0 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.12 ⊕f.sub.13 
    
     
         C.sub.1 =f.sub.1 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.11 ⊕f.sub.13 ⊕f.sub.14 
    
     
         C.sub.2 =f.sub.2 ⊕f.sub.10 ⊕f.sub.11 ⊕f.sub.12 ⊕f.sub.14 
    
     
         C.sub.3 =f.sub.3 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.11 
    
     
         C.sub.4 =f.sub.4 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.11 ⊕f.sub.12 
    
     
         C.sub.5 =f.sub.5 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.11 
    
     
         C.sub.6 =f.sub.6 ⊕f.sub.9 ⊕f.sub.10 ⊕f.sub.12 
    
     
         C.sub.7 =f.sub.7 ⊕f.sub.8 ⊕f.sub.9 ⊕f.sub.11 ⊕f.sub.12 
    
     The implementation of the product process involves one 2-input AND-gate for each product term required for the coefficient f 0  through f 14  and a 2-input exclusive-OR gate for combining the outputs of the AND-gates. Each block 10, therefore, represents 64 AND-gates, 71 exclusive-OR gates. 
     The first term of the error locator polynomial S 2  (S 1 , S 3  ⊕S 2 , S 2 ) of the Δ 33  equation is implemented by dashed block 16 in FIG. 2. The output of block 16 is exclusive-ORed in gate 18 with the second term of the equation and the result exclusive-ORed in gate 19 with the last term of the equation. 
     The blocks involved in developing each of the other determinants Δ 32 , Δ 31  and Δ 30  may be traced in a similar manner in FIG. 2. 
     The parameters Δ 22 , Δ 21  and Δ 20  for the two-error case are cofactors in equation (4) for Δ 33 . These cofactors are: 
     
         Δ.sub.22 =S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0       (8) 
    
     
         Δ.sub.21 =S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2       (9) 
    
     
         Δ.sub.20 =S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2       (10) 
    
     In FIG. 2, the computations for Δ 22 , Δ 21  and Δ 20  are shown as the interim byproducts within the computations for Δ 33 . Similarly, Δ 11  and Δ 10  are cofactors in equation (8) for Δ 22  which are given by 
     
         Δ.sub.11 =S.sub.0                                    (11) 
    
     
         Δ.sub.10 =S.sub.1                                    (12) 
    
     It is shown later in the specification how the equations for developing locator parameters are derived from the following prior art relationship of the error locator polynomial with the syndromes. ##EQU4## 
     FIG. 3 illustrates the logic for selecting the coefficients of the error locator polynomial from the locator parameters Δ 33  through Δ 30  and cofactors Δ 22  through Δ 10 . The FIG. 3 logic functions to identify the number of errors from the input parameters Δ 33  through Δ 30  and cofactors Δ 22  through Δ 10  and select the appropriate value Δ m  in the general equation ##EQU5## When Δ 33  is non-zero, indicating the presence of three errors, the coefficients Δ 3  through Δ 0  will assume the input Δ 33  through Δ 30 . As shown, when Δ 33  is non-zero, the output of AND-gate 41 is low, permitting the Δ 32 , Δ 31  and Δ 30  to be gated through AND-gates 42, 43 and 44 respectively since the output of AND-gate 41 is inverted at the input to each gate 42-44 to enable each of the above AND-gates. 
     A similar logic function is achieved by Δ 22  if Δ 33  is zero indicating not more than two errors are present. In such a situation, Δ 2 , Δ 1  and Δ 0  will take lthe values of Δ 22 , Δ 21  and Δ 20  respectively through the operation of AND-gates 51, 52 and 53 respectively. This function corresponds to the syndrome equation for two errors. 
     The logic circuitry of FIG. 3 functions similarly if Δ 22  is also zero to cause Δ 1  and Δ 0  to assume the values of Δ 11  and Δ 10 . AND-gates 61 and 62 gate Δ 11  and Δ 10  respectively through OR-gates 71, 72 if Δ 33  and Δ 22  are both zero since AND-gate 60 provides the enabling signal. 
     The overall logic of FIG. 3, therefore, functions to produce or to select the correct values of the coefficients Δ 3 , Δ 2 , Δ 1  and Δ 0  for the error locator equations from the locator parameters developed by the logic of FIG. 2. 
     Although the above is described for a special case of three-error correcting Reed-Solomon code, the decoder for any multiple error correcting cyclic codes, such as BCH codes, can be implemented in accordance with the above teachings. 
     The following is the mathematical derivation for the equations used in the logic implementation of FIGS. 2 and 3. 
     In the three-error correcting Reed-Solomon Code in GF(2 8 ) there are six check symbols corresponding to the roots α 0 , α 1 , α 2 , α 3 , α 4 , α 5  of the generator polynomial. The corresponding syndromes are denoted by S 0 , S 1 , S 2 , S 3 , S 4  and S 5  respectively. 
     We assume that, at the most, three symbols are in error. The error values are denoted by Ei 1 , Ei 2  and Ei 3  and the locations of erroneous symbols are denoted by i 1 , i 2  and i 3 . Then the relationships between the syndromes and the errors are given by 
     
         S.sub.j =α.sup.ji.sbsp.1 E.sub.i.sbsb.1 ⊕α.sup.ji.sbsp.2 E.sub.i.sbsb.2 ⊕α.sup.ji.sbsp.3 E.sub.i.sbsb.3 for j=0, 1, 2, 3, 4, 5.                                                     (1A) 
    
     Consider the polynomial with roots at α i1 , α i2  and α i3 . This is called error locator polynomial, given by 
     
         (x⊕α.sup.i.sbsp.1)(x⊕α.sup.i.sbsp.2)(x⊕α.sup.i.sbsp.3)=x.sup.3 ⊕σ.sub.2 x.sup.2 ⊕σ.sub.1 x⊕σ.sub.0                                       (2A) 
    
     Substituting x=α i  in (2A) we get 
     
         α.sup.3i ⊕σ.sub.2 α.sup.2i ⊕σ.sub.1 α.sup.i ⊕σ.sub.0 =0 for i=i.sub.1, i.sub.2 and i.sub.3. (3A) 
    
     From equations (1A) and (3A), we can derive the following relationship between the syndromes S j  and the coefficients σ i  of the error location polynomial. ##EQU6## 
     We can solve Equation (4A) and obtain σ 0 , σ 1  and σ 2  as ##EQU7## where Δ 33 , Δ 32 , Δ 31  and Δ 30  are given by 
     
         Δ.sub.33 =S.sub.2 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.3 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.4 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (6A) 
    
     
         Δ.sub.32 =S.sub.3 (S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2)⊕S.sub.4 (S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2)⊕S.sub.5 (S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0)                                     (7A) 
    
     
         Δ.sub.31 =S.sub.0 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.1 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (8A) 
    
     
         Δ.sub.30 =S.sub.1 (S.sub.4 S.sub.4 ⊕S.sub.3 S.sub.5)⊕S.sub.2 (S.sub.3 S.sub.4 ⊕S.sub.2 S.sub.5)⊕S.sub.3 (S.sub.3 S.sub.3 ⊕S.sub.2 S.sub.4)                                     (9A) 
    
     If the value of Δ 33  is 0, then Equation (4A) is a dependent set which implies that there are fewer than three errors. In that case, the syndromes will be processed for two errors where the parameters Δ 22 , Δ 21  and Δ 20  are derived from similar equations for the case of two errors and are given by 
     
         Δ.sub.22 =S.sub.1 S.sub.1 ⊕S.sub.2 S.sub.0       (10A) 
    
     
         Δ.sub.21 =S.sub.0 S.sub.3 ⊕S.sub.1 S.sub.2       (11A) 
    
     
         Δ.sub.20 =S.sub.1 S.sub.3 ⊕S.sub.2 S.sub.2       (12A) 
    
     Note that these are cofactors of Δ 33  as seen from Equation (6A) which can be rewritten as 
     
         Δ.sub.33 =S.sub.2 Δ.sub.20 ⊕S.sub.3 Δ.sub.21 ⊕S.sub.4 Δ.sub.22                               (13A) 
    
     Thus, the values Δ 22 , Δ 21  and Δ 20  for the case of two errors need not be computed separately. They are available as byproducts of the computation for Δ 33 . Similarly, Δ 11  and Δ 10  for the case of one error are given by 
     
         Δ.sub.11 =S.sub.0                                    (14A) 
    
     
         Δ.sub.10 =S.sub.1                                    (15A) 
    
     which are cofactors of Δ 22  and are also readily available as syndromes. 
     Let v denote the exact number of errors, which may be 3, 2, 1 or 0. 
     The exact number of errors is determined as follows: 
     
         v=3 if Δ.sub.33 ≠0 
    
     
         v=2 if Δ.sub.33 =0 and Δ.sub.22 ≠0 
    
     
         v=1 if Δ.sub.33 =Δ.sub.22 =0 and Δ.sub.11 ≠0 
    
     
         v=0 if Δ.sub.33 =66.sub.22 =66.sub.11 =0             (16A) 
    
     The special cases of two and one errors can be accomodated automatically by selecting appropriate determinants. To this end, let Δ 3 , Δ 2 , Δ 1  and Δ 0  be defined as ##EQU8## Then equation (5A) can be rewritten as ##EQU9## Conventionally, the error locator polynomial (3A) with the coefficients τ 0 , τ 1  and τ 2  of equation (21A) is used to determine error locations through the well known Chien search procedure. However, the error locator equation can be modified in order to avoid the division by Δ v . The modified error locator equation is given as 
     
         Δ.sub.3 α.sup.3i +Δ.sub.2 α.sup.2i +Δ.sub.1 α.sup.i +Δ.sub.0 =0                           (22A) 
    
     The error location numbers are the set of v unique values of i which satisfy Equation (22A). 
     The General Case of t Errors 
     The following is the mathematical derivation for the general case to establish that the logic set forth in FIGS. 2 and 3 for the special case of up to three errors is applicable in general for t errors. 
     In a general BCH or Reed-Solomon code, the codeword consists of n-symbols which include r check symbols corresponding to the roots α a , α 1+1 , α a+2 , . . . , α a+r-1  of the generator polynomial where α is an element of the Galois field GF(256). The integer a will be taken to be zero, although all of the following results can be derived with any value of a. The corresponding syndromes are denoted by S 0 , S 1 , S 2 , . . . , S r-1  respectively. The syndromes can be computed from the received codeword as ##EQU10## where B 0 , B 1 , B 2 , . . . , B n-1  are the n-symbols of the received codeword. 
     Let v denote the actual number of symbols in error in a given codeword. The error values are denoted by E i  where i represents an error location value from a set of v different error locations given by {I}={i 1 , i 2 , . . . , i v  }. The relationship between syndromes and the errors are then given by ##EQU11## Any non-zero value of a syndrome indicates the presence of errors. The decoder processes these syndromes in order to determine the locations and values of the errors. Let t denote the maximum number of errors that can be decoded without ambiguity. A set of r=2t syndromes are required to determine the locations and values of t errors. 
     Consider the polynomial with roots at α i  where iε{I}. This is called the error locator polynomial defined as ##EQU12## where τ 0  =1, τ v  ≠0 and for m&gt;v, τ m  =0. The unknown coefficients τ m  for m≦v can be determined from the syndromes of Equation 1B as shown below. 
     Substituting x=α i  in Equation 3B we get ##EQU13## Using Equations 2B and 4B, it is easy to show that the syndromes S j  and the coefficients τ m  of the error locator polynomial satisfies the following set of relationships: ##EQU14## The set of equations 5B can be rewritten in matrix notation as ##EQU15## Let M denote the tx(t+1) syndrome matrix on left side of Equation 6B. Let M t  denote the square matrix obtained by eliminating the last column in matrix M. If M t  is nonsingular, then the above set of equations can be solved using Cramer&#39;s rule to obtain ##EQU16## where Δ tt  is the non-zero determinant of matrix M t  and Δ tm  denotes the determinant of the matrix obtained by replacing the m th  column in matrix M t  by negative of the last column of the syndrome matrix M for each m=0, 1, . . . , t-1. 
     If matrix M t  is singular, (i.e., Δ tt  is 0) then Equation 5B is a dependent set which implies that there are fewer than t errors. In that case, τ t  is 0. We can delete τ t  and last row and last column of the syndrome matrix in 6B. The resulting matrix equation corresponds to that for t-1 errors. This process is repeated if necessary so that the final matrix equation corresponds to that for v errors and M is nonsingular. Then we need the set of determinants Δ vm  where M=0, 1, . . . , v. 
     It can be easily seen that Δ vm  for v=t-1 is a cofactor of Δ tt  corresponding to the (m-1) st  column and t th  row in matrix M t . We can express Δ tt  in terms of these cofactors: ##EQU17## 
     Thus the values Δ vm  for v=t-1 need not require separate computations. They are available as byproduct of the computation for Δ tt . In fact, Δ vm  for subsequent smaller values of v are all available as byproducts of the computation for Δ tt  through the hierarchical relationships of lower order cofactors. Thus, in case of fewer errors, the decoder finds Δ tt  =0 and automatically back tracks into prior computations to the correct value for v and uses the already computed cofactors Δ vm . This is illustrated previously through hardware implmentation of the case t=3. 
     In order to accomodate the special cases of all fewer errors, we will replace Equation 7B by a more convenient general form ##EQU18## where v is determined from the fact that Δ mm  =0 for all m&gt;v and Δ vv  ≠0; and Δ m  is defined with the new notation as ##EQU19## 
     Since τ 0  =1, one can determine τ m  for all values of m using Equation (9). However, we will see that the coefficients τ m  are not needed in the entire decoding process. To this end, we obtain a modified error locator equation from Equations (4) and (9) as given by ##EQU20## The error location values iε{I} are the set of v unique values of i which satisfy Equation (11B). 
     While the invention has been particularly shown and described with reference to a preferred embodiment thereof, it will be understood by those skilled in the art that various other changes in the form and details may be made therein without departing from the spirit and scope of the invention.