Abstract:
A system for data compression utilizing systolic array architecture for Vector Quantization (VQ) is disclosed for both full-searched and tree-searched. For a tree-searched VQ, the special case of a Binary Tree-Search VQ (BTSVQ) is disclosed with identical Processing Elements (PE) in the array for both a Raw-Codebook VQ (RCVQ) and a Difference-Codebook VQ (DCVQ) algorithm. A fault tolerant system is disclosed which allows a PE that has developed a fault to be bypassed in the array and replaced by a spare at the end of the array, with codebook memory assignment shifted one PE past the faulty PE of the array.

Description:
ORIGIN OF THE INVENTION 
     The invention described herein was made in the performance of work under a NASA contract, and is subject to the provisions of Public Law 96-517 (35 USC 202) in which the Contractor has elected not to retain title. 
    
    
     this is a continuation of application Ser. No. 07/550,775 filed Jul. 10, 1990, now abandoned. 
    
    
     TECHNICAL FIELD 
     The invention relates to a systolic array architecture for a Vector Quantizer (VQ) for real-time compression of data to reduce the data communication and/or archive costs, and particularly to a tree-searched VQ. 
     BACKGROUND ART 
     Efficient data compression to reduce the data volume significantly decreases both data communication and archive costs. Among existing data compression algorithms, Vector Quantization (VQ) has been demonstrated to be an effective method capable of producing good reconstructed data quality at high compression ratios. The primary advantage of the VQ algorithm, as compared to other high compression ratio algorithms such as the adaptive transform coding algorithm, is its extremely simple decoding procedure, which makes it a great potential technique for the single-encoder, multiple-decoder data compression systems. 
     The VQ algorithm has been selected as the data compression algorithm to be used for rapid electronic transfer of browse image data from an on-line archive system to end users of the Alaska SAR Facility (ASF) and the Shuttle Imaging Radar C (SIR-C) ground data systems. For this on-line archive application, VQ is required to reduce the volume of browse image data by a factor of 15 to 1 so that the data can be rapidly transferred through the Space Physics Analysis Network (SPAN) having a 9600 bits per second data rate, and be accurately reconstructed at the sites of scientific users. 
     Another application of the VQ algorithm is the real-time downlink of the Earth Observing System (EOS) on-board processor data to the ground data users. For this data downlink application, VQ is required to reduce the volume of image data produced by the on-board processor by a factor of 7 to 1 so that the data can be transferred at real-time through the direct downlink channel limited at 1 Megabits per second data rate. These flight projects are currently undertaken by the National Aeronautics and Space Administration (NASA) for imaging and monitoring of global environmental changes. 
     Aside from these space applications, VQ can also be applied to a broad area in commercial industry for data communication and archival applications, such as digital speech coding over telephone lines, High Definition TV (HDTV) video image coding and medical image coding. 
     Vector quantization is a generalization of scalar quantization. In vector quantization, the input data is divided into many small data blocks (i.e., data vectors). The quantization levels (i.e., codevectors) are vectors of the same dimension as the input data vectors. A general functional block diagram for vector quantization is shown in FIG. 1. A codebook 10 comprised of codevectors C 0 , C 1 , . . . , C N-1 , is used at the transmit end of a communication channel 11 for data encoding and a duplicate codebook 10&#39; is used at the receive end for data decoding. An encoding functional block 12 carries out the algorithm indicated by ##EQU1## where: x.sup.[k] represents the input data vector at time k; C i  is the codevector; D(x.sup.[k], C i ) is the distortion function; N the total number of codevectors; and i.sup.[k] the optimal codevector index. The procedure defined by that equation is to select the stored codevector which yields the minimum distortion between an input data vector x.sup.[k] and the stored codevectors C 0 , C 1  . . . , C N-1 . The optimal index i.sup.[k] transmitted through the channel 11 is used at the receive end for the decoding function in block 13 carried out by using the index i.sup.[k] to look up the codevector C i .spsb.[k] in the codebook 10&#39; that is then used as the reconstructed data vector x.sup.[k], which closely approximates the original data vector x.sup.[k]. The decoding procedure can be expressed as 
     
         x.sup.[k] =C.sub.i.spsb.[k]                                ( 2) 
    
     which is a table look-up procedure. Data compression is achieved since fewer bits are needed to represent the codevector indices than the input data vectors. 
     The codebook is generated by training a subset of the source data. The performance of the codebook is highly dependent on the similarity between the training data and the coded data. It then follows that the encoding procedure need only involve computing the distortion between each input data vector and all of the stored codevectors to select the best match. This algorithm is known as the full-searched VQ algorithm. 
     The major drawback of the full-searched VQ algorithm is the high complexity involved in drawing up (training) the codebook and then data encoding, which poses a great challenge for real-time application. To reduce the encoding complexity, the tree-searched VQ algorithm is employed such that the complexity only grows linearly rather than exponentially as the codebook size increases. For the tree-searched VQ, the codebook is divided into several tree levels, as illustrated in FIG. 2 for a 2-level tree-structured codebook. In the encoding process, the input data x.sup.[k] is first compared with the first level codebook C 0 ,C 1 , . . . C N .sbsb.1 -1 . Based on the selected codevector, the input data x.sup.[k] vector is then compared with the codevectors of the corresponding second level subcodebook C 0 ,0,C 0 ,1 . . . C N .sbsb.1 -1 , N .sbsb.2 -1 . This encoding procedure is repeated until the input data vector is compared with the last level subcodebook. The best matched codevector at the last level subcodebook is then used to represent this input data vector. 
     STATEMENT OF THE INVENTION 
     An objective of this invention for real-time data compression is to employ a systolic process in the VQ encoding procedure by taking advantage of the regular data flow pattern inherent in the VQ algorithm, particularly with a tree-searched codebook. By a combination of tree-searched VQ and systolic processing, a high throughput data compressor can be realized at a low hardware cost to meet the real-time rate requirement. This is the main theme of this invention. Thus, the primary objective of this invention is to provide a data compression system that can achieve a real-time encoding rate with small hardware cost utilizing systolic array architecture for a tree-searched VQ algorithm. 
     The systolic array consists of a network of identical Processing Elements (PE) that rhythmically process and pass data among themselves. It exploits design principles such as modularity, regular data flow, simple connectivity structure, localized communication, simple global control and parallel/pipeline processing functions. The systolic array is an effective architecture for implementation of matrix type computation. 
     This invention applies the systolic array architecture to both full-searched and tree-searched VQ. Briefly, the encoding procedure of a full-searched VQ can be formulated as a matrix-vector computation in a general form, where the multiply operator represents the scalar distortion computation and the add operator represents the summation of weighted scalar distortions, while the encoding procedure of a tree-searched VQ can be formulated as a series of matrix-vector computations with proper access to codevectors in the subcode-books. Examples are specifically given for a Binary Tree-Searched VQ (BTSVQ) of both a raw codebook and a difference codebook referred to hereinafter as RCVQ and DCVQ, respectively. 
     A secondary objective of this invention is to provide a fault tolerant systolic VQ encoder by including a spare Processing Element (PE) in a systolic array of PEs and a means for detection and replacement of a faulty PE with the spare PE to enhance the system reliability. 
     The novel features that are considered characteristic of this invention are set forth with particularity in the appended claims. The invention will best be understood from the following description when read in connection with the accompanying drawings. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a generalized functional block diagram of the prior-art vector quantization (VQ) algorithm. 
     FIG. 2 is a diagram of the prior-art encoding procedure of the 2-level tree-searched vector quantization algorithm. 
     FIG. 3 illustrates a block diagram of a systolic full-search vector quantizer. 
     FIG. 4 illustrates a systolic architecture for a Binary Tree-Search Vector Quantizater (BTSVQ). 
     FIG. 5 illustrates major functional blocks of a systolic binary tree-searched VQ encoder as applied to EOS on-board SAR processor. 
     FIG. 6 illustrates a functional block diagram of a BTSVQ Processing Element (PE) in the system of FIG. 5 for RCVQ. 
     FIGS. 7a and 7b together illustrate a detailed functional design of the memory bank shown in FIG. 5. 
     FIG. 8 illustrates a major functional block diagram for a systolic vector quantizer in which each vector quantization processing element has its own codebook memory. 
     FIG. 9 illustrate the distortion computing data path of the processing elements in the system of FIG. 8. 
     FIG. 10 illustrates a preferred implementation for the processing elements of FIG. 9. 
     FIG. 11 illustrates fault tolerance augmentation of a systolic vector quantization array using a spare processing element and dynamic reconfiguration switches for replacing a processing element when it is found to have a fault. 
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     As noted hereinbefore, Vector Quantization (VQ) is essentially a generalization of scalar quantization. For input image data, the stream of input pixels is divided into vectors (small blocks of pixels, e.g., 4×4 pixel blocks) and for a full-searched VQ, each input data vector is compared with every vector stored in a codebook. The index of the codebook vector of the smallest distortion is chosen as the encoded quantization vector to be transmitted. To reduce the encoding complexity, the tree-searched VQ technique is employed. This technique divides the codebook into levels of subcodebooks of a tree structure as illustrated in the background art section. The input data vector is successively compared with the stored codevectors in the subcodebook levels, i.e., ##EQU2## where x.sup.[k] is the input data vector sequence, k represents the time index, and the codevector notation is: C i .sbsb.1 for level 1; C i .sbsb.1 i .sbsb.2 for level 2; and so forth with C i .sbsb.1 i .sbsb.2 . . .  i .sbsb.L for level L. The distortion function is D(x.sup.[k],C i  . . . ) and the output coded data sequence is i.sup.[k]. The number of bits per input pixel is K and the input vector dimension is m pixels. Decoding is still a table look-up procedure, 
     
         x.sup.[k] =C.sub.i [k]=C.sub.i.sbsb.1 [k].sub.i.sbsb.2 [k] . . . .sub.i.sbsb.L [k]                                         (4) 
    
     The compression ratio is Km/n for a fixed codebook scheme. The codebook memory size is 
     
         (2.sup.n.sbsp.1 +2.sup.n.sbsp.1.sup.+n.sbsp.2 + . . . +2.sup.n.sbsp.1.sup.+ . . . +n.sbsp.L)mK bits, 
    
     where n l  represents the subcodevector bit length at level i, 1≦i≦L and N L  =2 n .sbsp.L represents the number of codevectors. The encoding complexity is 
     
         2.sup.n.sbsp.1 +2.sup.n.sbsp.2 + . . . +2.sup.n.sbsp.L 
    
     operations per pixel. Compression ratios are more easily controlled by adjusting m (vector dimension) since the variation in n (codebook bit-length) significantly affects the codebook size and the encoding complexity. 
     The Binary Tree-Searched VQ (BTSVQ) is a special case of tree-searched VQ. For the BTSVQ, the number L of tree-levels is equal to the codebook bit length (n). The encoding of the BTSVQ can be expressed as ##EQU3## 
     For an RCVQ, namely a raw-codebook BTSVQ, the distortion computation between the input vector x.sup.[k] and the codevectors at the same binary tree level (C 0  and C 1 ) is, ##EQU4## 
     The codebook memory size is (2 n+  -2)mK bits. The encoding complexity is 2n operations per pixel. 
     For a DCVQ, namely a difference-codebook BTSVQ, the distortion computation between the input vector x.sup.[k] and the codevectors at the same binary tree level (C 0  and C 1 ) is simplified as follows ##EQU5## 
     Instead of saving of C 0  (j) and C 1  (j), the terms, ##EQU6## and δ(j)=C 0  (j)-C 1  (j) are stored in the subcodebook. The codebook memory size is (2 n  -1) [m(K+1)+(2K+log m)] bits. The encoding complexity is n operations per pixel. 
     The DCVQ is an improved version of the RCVQ. For the RCVQ, the encoding and hardware complexity is reduced by half of that of the RCVQ. This is a unique characteristic for a BTSVQ. 
     Systolic Architecture for the Full-Searched VQ 
     For most distortion measures, such as the weighted mean square error, the vector distortion can be shown as the weighted sum of the scalar distortion, i.e., ##EQU7## for 0≦i≦N-1 and 0≦j≦m-1, where x(j) represents the j th  component of the input data vector, C i  (j) the j th  component of the i th  codevector, w(j) the weighting factor in the distortion measure, and d(i) the distortion between x and C i . The index of the codevector of the minimum distortion represents the coded data of the input data vector, i.e., ##EQU8## 
     For this class of distortion measure, the encoding procedure of the full-searched VQ shown in Equation (1) can be expressed in a general matrix-vector multiplication form, where the multiply operator represents the evaluation of scalar distortion and the add operator is the summation of the weighted scalar distortions. Therefore, Equation (9) can be systolic processed since matrix type computations are well suited for systolic processing. 
     A systolic architecture for the full-searched VQ may thus be an array of processors, 0, 1, . . . ,N-1 and codebooks 0,1, . . . ,N-1, each codebook i having a stored codevector comprised of m components C i  (0), C i  (1), . . . ,C i  (m-1), as shown in FIG. 3. The distortion parameter, d(i), is associated with processor i where the distortion is computed, for 0≦i≦N-1. The parameter d(i) accumulates the intermediate result as the codevector component C i  (j) moves downward and the input data x(j) moves to the right synchronously. After m clock cycles, d(i) will consecutively contain the distortion between the input data vector and the i th  Codevector. To perform Equation (9), two variables, I and D, are required to record the index and distortion of the codevector of the current minimum distortion. The variable D is initialized to be a large number. Both I and D enter processor 0 when d(0) is determined. They move down the array one processor per clock cycle. At processor i, D is compared with d(i). If d(i)&lt;D, then I=i and D=d(i). As they flow out of processor N-1, I will contain the codevector index of the minimum distortion, representing the coded data. 
     For continuous data encoding, the next data vector with its own pair of I and D follows right after the current data vector so that the data are continuously pumped into the array. This can be achieved by cycling the codevector components C i  (j) into processor i as the input data flows into the array. Each d(i) is reset after the vector distortion is determined. 
     For this systolic architecture having N processors and N codevectors, and each codevector has m components, the encoding speed is increased by a factor of N over a single processor architecture. The pipeline latency is N+m clock cycles. The throughput rate is constant at 1 pixel/clock for any vector dimension and code book size. Since typically N is chosen to be large to attain good reproduced image quality, a large number of processors are required. Therefore, in accordance with the present invention, by combination of tree-searched VQ and systolic processing, a high throughput VQ encoder can be realized with minimal hardware. 
     Systolic Architecture for Tree-Searched VQ 
     Equation (3) shows that the tree-searched VQ encoder is in effect a series of the full-searched VQ encoders. The key is to correctly address the next level subcodebook. This can be realized by tagging the index of the current tree level l to the indices of the previous tree levels 1,2, . . . l-1. The combined indices are then used to address the next level subcodebook l+1. 
     A systolic architecture for the tree-searched VQ is essentially a concatenation of L systolic arrays of the full-searched VQ, where L is the number of tree levels. Each stage l corresponds to one tree level l. The codevectors of each subcodebook are arranged as follows. Codevector components C i .sbsb.1 . . .  i .sbsb.l (j) are allocated to processor i l  of the lth stage array. There are N 1  . . . N l-1  m codevector components in each processor of the l th  stage array. During the VQ encoding, the codevector components are addressed by the combined indices of the previous stages, i 1  . . . i l-1 . For this pipeline architecture the l th  stage contains N l  processors, which in total is ##EQU9## processors. The pipeline latency is ##EQU10## clock cycles. The system throughput rate is 1 pixel/clock, constant for any tree-structured codebook. 
     Systolic Architecture for Binary Tree-Search Raw Codebook VQ 
     A systolic architecture for the raw codebook binary tree-searched VQ (RCVQ) defined by Equation (6) is shown in FIG. 4 where the blocks d l  (0) and d l  (1) are distortion computation elements for implementing Equation (6); CP(0) and CP(1) are elements for comparison of the distortion; and buffer elements l delay the input data sufficiently to maintain synchronization of the data flow through the pipeline of distortion computation elements with the concatenated indices used to address the next stage l+1 codebooks. The preferred organization of each stage will be described more fully in the next sections. 
     The input data sequence continuously flows into the array. Note that at each stage the data vector is compared with two codevectors in memory. After the index of the current tree stage (level) is obtained, it is tagged to the indices of the previous tree stages (levels) to address the next stage (level) subcodebook. The index is attained at a rate of one bit per stage. At the end of the array, the concatenated indices, n=L bits in length, are formed to represent the coded data. 
     Since n=L for the binary tree-searched VQ, the overall system requires 2n processors. The pipeline latency equals n(2+m) clock cycles. The input data rate is 1 pixel per clock cycle, and the output data rate is n bits per m clock cycles. Therefore, the output data rate is effectively reduced by a factor of Km/n, the compression ratio. This systolic architecture of FIG. 4 only requires a small number of processors compared to the full-searched VQ scheme. It has the advantages of modularity, regular data flow, simple interconnection, localized communication, simple global control, and parallel/pipelined processing such that it is well suited for VLSI implementation. 
     Preferred Design of Systolic Binary Tree-Searched Raw Codebook VQ 
     An example of a preferred design RCVQ which lends itself to VLSI implementation for EOS on-board SAR applications is detailed in this section for a 10-bit codebook of a 4×4 pixel vector dimension. This results in 12.8:1 maximum compression ratio. Limited flexibility in compression ratio can be realized by varying the vector dimension. The mean square error criterion is chosen as the distortion measure. FIG. 5 illustrates the major functional blocks of a systolic binary tree-searched VQ encoder which are the processing element (PE) array 20, the VQ codebook memory banks 21 and an array controller 22, all of which are under synchronized control of an EOS Control and Data System (CDS) 23 as are a SAR processor 24 which presents the serial pixels in digital form and a downlink packetizer 25 which forms packets of VQ data for transmission to a ground station. 
     Detailed RCPE Design 
     The PE array 20 performs the distortion computation of the VQ algorithm. For a VQ encoder with an n-bit codebook, this can be realized by n identical PEs. FIG. 6 shows a functional block diagram of a PE for a RCVQ. It is designed to compute the mean square error distortion between an input data vector and each codevector pair. 
     The distortion computing of the raw codebook processing element (RCPE) design is primarily two mean square error operations. During the VQ encoding, the codevector pair components are addressed by the combined indices of the previous PEs i 1  i 2  . . . i l-1 . An accumulator accumulates the intermediate result as the codevector pair component C 1  and C 0  moves downward and the input data x(j) moves to the right synchronously. After m clock cycles, the accumulator will consecutively contain the mean square errors d 1  and d 0  between the input data vector x and the selected codevector pairs. 
     The index generator compares the distortion measurement d 1  and d 0 . If d 1  ≧d 0  then i l  =0 else i l  =1. Index i l  is tagged to the indices of the previous tree levels to correctly address the next level subcodebook. At the end of the array, the concatenated indices, n bits in length, are formed to represent the coded data. 
     The RCPEs are identical, designed to fit into a single chip using VLSI space-qualifiable 1.25 μm CMOS technology. Assessment based on a detailed logic diagram and VLSI layout of the RCPE shows that the gate count is about 3,000 and the pin count about 37, which is well within the capability of present VLSI technology. 
     A detailed functional design of an RCPE is shown in FIG. 6. The pin name and definition of the RCPE and associated Memory Bank shown in FIGS. 7a and 7b is summarized in the following table: 
     
         ______________________________________Signal  Type    Description______________________________________MEMORY BANKCLK     Input   System clockHA.sub.-- EN   Input   To enable the pixel address generatorHA.sub.-- LD   Input   To load the hierarchical vector addressCS (10:1)   Input   To enable the memory module #1 to #10A (15:0)   Input   System address busH/A     Input   To select either system address or hier-           archical encoding addressR/W     Input   To select either memory read or memory           writeOE      Input   Tri-state output controlD (15:0)   Input   System data busDCn (15:0)   Output  16-bit output port of subcodebook #nPROCESSING ELEMENTDC (15:0)   Input   Codevector pairs from subcodebook moduleCLK     Input   System clock (at pixel rate)DI (7:0)   Input   8-bit input image dataDO (7:0)   Output  8-bit 16-stage pipelined image dataHn      Output  Index of vector generated at PE#n______________________________________ 
    
     Detailed Memory Bank Design 
     The memory bank is composed of subcodebook memory modules, each storing a VQ subcodebook. FIGS. 7a and 7b show a detailed functional design of the memory bank 21 in FIG. 5. For the binary tree-searched VQ, the n-bit codebook is divided into n(=L for binary tree-searched VQ) hierarchical levels. The codevectors in each level l are stored in their corresponding memory module l. The size of the memory module l is 2 l  mK(=2 l+7 ) bits. The total size of the memory bank is (2 n+1  -2)mK(=2 n+8  -2 8 ) bits. Although the modules of the memory bank differ in size, they assume a regular structure in terms of memory cell design. To enable the programmability of the codebook, the memory bank can be accessed in both read and write modes by the host system 23 of FIG. 5 via the array controller 22 during the initialization. During VQ encoding operation, each memory module can only be accessed to read or write by its associated RCPE. The total size in terms of the primitive memory cell for a 10-bit codebook is 2 18  bits. 
     Systolic Architecture for Binary Tree-Searched Difference Codebook VQ 
     FIGS. 8 and 9 show the architecture of the systolic array for the difference-codebook BTSVQ. The input data vector sequence continuously flows into the array. For difference-codebook BTSVQ at each stage, the inner product between input data vectors and the difference codevectors is computed and compared with the 2 th  order difference codewords. After the index of the current tree level is obtained, it is tagged to the indices of the previous tree levels to address the next level subcodebook. The index is attained at a rate of one bit per stage. At the end of the array, the concatenated indices of n-bit length are formed and represent the coded data of the corresponding input data vector. 
     The array controller 22 interprets control parameters from the host system via the on-board SAR processor to set up P-0 the BTSVQ encoder and provides status data for the host system to do house keeping. It also provides the interface timing to upload/download the data among the VQPEs, SAR processor 24 and downlink formatter 25. It also generates timing and control signals to operate the VQPEs 22. The array controller is implemented with a programmable logic array (PLA) device and several data buffers. Due to the localized data/control flow of systolic array processors, the array controller logic is simple. 
     In this systolic difference codebook BTSVQ, each PE corresponds to one of several binary tree-levels, such as ten numbered 1 through 10 in the example to be described. The major functional blocks of each VQPE1, 2 . . . n of a BTSVQ shown in FIG. 8 are a subcodebook memory 26, distortion computation data path 27 and index generator 32. 
     For the DCPE of a BTSVQ, an n-bit codebook is divided and converted into n difference subcodebooks. The first-order and second-order differences of each codevector pair in level l are stored in the subcodebook as shown in FIG. 9. The size of difference subcodebook memory of DCPE at level l is 2 l-1  [m(K+1)+(2K+log m)] bits. 
     Referring to FIG. 9, the distortion computing datapath 27 of the DCPE design is primarily an inner product operator which is much simpler than the distortion calculator of the RCPE. During the VQ encoding, the difference-codevector components are addressed by the combined indices of the previous PEs, i 1 , i 2  . . . i l-1 . An accumulator accumulates the intermediate result as the difference-codevector component δ(j) moves downward and the input data x(j) moves to the right synchronously. After m clock cycles, the accumulator will consecutively contain the inner product Δ&#39; between the input data vector x and the selected difference codevector. 
     The index generator compares the 2 th  order difference codeword Δ with the distortion measurement Δ&#39;. If Δ≧Δ&#39;, then i l  =1 else i l  =0. Index i l  is tagged to the indices of the previous tree levels to correctly address the next level subcodebook. At the end of the array, the concatenated indices, n bits in length, are formed to represent the coded data. The comparator-based index generator makes it easy to perform error detection for PE. However, the subtracter-based index generator has simpler hardware. 
     Preferred Design of Systolic Binary Tree-Searched Difference Codebook VQ 
     To attain the light-weight, small-volume, and low-power requirements, VLSI technology is preferred for implementation of the DCPE of FIG. 9 as shown in FIG. 10. The building blocks include a pipeline buffer 30, one ID register 31, multiplexers 32, 33 and 34, static RAM array 35, complement or 36, multiplier array 37, carry save adder 38, and comparator 39. The on-chip static RAM array 35 includes a 512×9 RAM and an 32×20 RAM which are used to store the difference subcodebook up to level 6. For levels from 7 to 10, an additional external subcodebook memory is required for each level. An external memory interface is represented by an input EXTCD(8&#39;.0) from external memory to a multiplexer 33 enabled by an input EXTCDEN for levels 7-10. This interface is built as part of each DCPE to support a 10-level systolic BTSVQ encoder with a common VLSI chip for each DCPE. 
     To enable the programmability, the difference subcodebook memory 35 can be read out of and written into by the host system via the controller 20 (FIG. 8) during the setup mode. While in the encoding mode, each subcodebook memory can only be read out of and written into by its associated PE. In the setup mode, the first-order codevector differences δ are stored into the subcodebook memory 35. Meanwhile, the second-order codevector differences Δ are entered and stored in a threshold register 40 of each PE. In the encoding mode, the input vectors, D1(7:0), are received from the on-board SAR processor 24 via the array controller 22. 
     The PE performs an inner product between the input vectors and the codevector differences. The inner product is stored in a register 41 and compared with the second-order codevector differences Δ stored in the threshold register 40 at the rising edge of a vector clock VCLK. A one-bit index bit is generated at level l and concatenated with index bits of the previous PEs for lower levels to address the next level l+1 subcodebook. The concatenated index bits of the last PE thus formed represent the coded data for the input data vector x. The pin name and definition of DCPE is summarized in the following table: 
     
         ______________________________________Signal   Type    Description______________________________________VCLK     Input   Vector clockPCLK1    Input   Pixel clock (phase 1)PCLK2    Input   Pixel clock (phase 2)AB (8:0) Input   9-bit system address bus for subcodebook            memoryD (19:0) Input   20-bit system data bus for subcodebook            memoryWRCD*    Input   Write enable of subcodebook (active low)DI (7:0) Input   8-bit input image dataDO (7:0) Output  8-bit 16-stage pipelined image dataWRCSD*   Input   Write enable of threshold registerEXTCD (8:0)    Input   9-bit codeword from the external subcode-            book memoryEXTCDEN  Input   To enable multiplexer to accept            EXTCD (8:0)AP (3:0) Input   Address of pixel elements of vectorsIDP (8:0)    Input   9-bit concatenated indices from previous            PEsID (9:0) Output  10-bit concatenated indices______________________________________ 
    
     Fault Tolerance Design 
     For a space mission, it is reasonable to assume a 5 to 10 year unmaintained mission life with a processor reliability goal well above 0.95. A fault tolerant architecture is required to achieve these goals. By combination of architectural fault tolerance and inherent error detection capability, a highly reliable VQ encoder can be attained, such as by a programmed diagnostic routine initiated by the control and data system which supervises the SAR processor, VQ compressor and downlink packetizer. When a fault is detected in any one PE, a &#34;fault&#34; signal is generated and associated with the PE suffering a fault. 
     As shown in FIG. 11, the linear systolic array of the VQ encoder is augmented with a spare Processing element SPE at the end of the array and dynamic reconfiguration switches (RS). Two switch designs, type RS-A and type B, are presented to support the fault tolerance reconfiguration. If there is a permanent fault in any active PE, the faulted PE will be detected and bypassed by a type RS-B switch at its output. Meanwhile the spare Processing element SPE at the end of the array will be activated by type RS-A switches for all PEs downstream in the array. The spare Processing element SPE is bypassed by a type RS-B switch at its output until called upon to serve. It is at that time that the VQ codebooks of the PEs are all switched starting with the PE having a fault and thus shifting each PE code book to the next PE of the array in a direction from the input end to the output end of the PE array. The reconfiguration switches are controlled by a &#34;fault&#34; signal stored in an array register by the diagnostic subroutine system which conducts the tests for detection of a faulty PE during the set-up time before encoding SAR data for transmissions. 
     In detecting a fault, a single computation unit (such as multiplier or adder) fault model may be used where it is assumed that at most one PE could suffer a fault within a given period of time which will be reasonably short compared with the mean time between failures. Since effective error detecting and correcting schemes, such as parity and Hamming codes, exist for communication lines and memories, failures in these parts can be readily detected and corrected by those methods. The fault mode concentrates on the permanent failures of a PE. 
     Two basic mechanisms can be applied to detecting faults in this type of system: on-line concurrent error detection and periodic self-test. On-line single error correction for arithmetic operations can be accomplished by arithmetic codes such as AN code or Residue code. For the EOS SAR processor, temporary distortion of images due to transient faults may be tolerable. Hence second error if any can be detected by periodic self-test which is performed during power-up and periodically during operation by temporarily halting compression of data. For the dual data path (RCPE) implementation, each PE is tested by applying the same input data and codevector to both its paths and use the comparator to determine if the two results are equal or not. If they are not equal, a permanent or a transient fault may exist in the PE. To determine whether it is a transient fault or a permanent fault, the same input and codevector are reapplied following the first detection of error. If the two data paths still generate different results, a permanent fault has been detected and reconfiguration is needed to avoid faulty PE. 
     For the DCPE design, predetermined test inputs are applied since there is only one data path and precomputed results corresponding to the inputs need to be stored. The comparator then compares the generated results with the stored values. If the two are the same, the PE is fault-free: otherwise, the same input is reapplied to find out whether it is a permanent or transient fault. Following the location of the faulty PE, the spare PE is switched in to maintain the size of the PE array. 
     The hardware overhead of the self-test and reconfiguration scheme is about 20%. In PE level, the overhead hardware includes two reconfiguration switches, one multiplexer, two registers, two comparators, one flag resister, one n-input OR gate, one control line, n input lines, and one output line. In PE array level, only one spare PE is required. It has been shown that error correction using arithmetic code is also cost effective. The encoding introduces redundant bits in the number representation. A proportional hardware increase takes place in register array and data path. The estimated hardware overhead is from 20% to 40% which should be able to fit in the PE chip of available die size 300 mils×300 mils. 
     The reliability improvement can be addressed as follows: If each PE has a reliability of R, then the reliability of 10 PEs is R 10 . For the reconfigurable array with one spare PE, the reliability becomes R 11  +11 R 10  (1-R). For example, if R=0.95, the reliability of nonredundant PE array is 0.60 while the reliability of redundant array is 0.90. This represents a 50% increase in reliability. 
     Conclusion 
     Although particular embodiments of the invention have been described and illustrated herein, it is recognized that modifications and variations may readily occur to those skilled in the art. Consequently, it is intended that the claims be interpreted to cover such modifications and variations.