Abstract:
A system for reducing or obviating the requirement for a large amount of defect capture memory in memory test and analysis systems by compressing test results. The compression means system reduces or replaces the fault capture memory in the test system or workstation or both, a major cost in test system, while providing for subsequent regeneration of the test results, either without loss, or with the loss of certain features immaterial to the application.

Description:
FIELD OF THE INVENTION 
     The present invention relates to a system for, and a method of, processing information about the locations of defective memory cells. In particular, the invention relates to a system for, and a method of, storing the locations of defective memory cells received from a memory test system so that the size of the memory required for storing the locations is reduced. 
     BACKGROUND OF THE INVENTION 
     In the memory manufacturing industry, memory cells on a memory device (such as a semiconductor memory) are tested after fabrication of the device. 
     Conventionally, memory devices have a main memory comprising a large number of memory cells, and also a small number of redundant memory cell structures which can be substituted for any defective memory cells in the main memory. During the test process, the location of defective cells in the main memory is identified in order that through a process of redundancy allocation, these redundant memory cell structures can be configured to replace the defective cells in the main memory. 
     Other applications of memory test include the examination of electrical or functional parameters of the memory for engineering or quality control purposes, or verification of the operation of the memory. 
     Test systems used for testing memory devices must be able to test each new generation of memory devices at the maximum speed of the new device. The test systems must also be able to record a large number of locations. These factors combine to create a requirement for a large and expensive memory (called the fault capture memory or error catch RAM) in test systems because the fault capture memory must be the same size and operate at the same speed as the memory device under test. Some systems have used FIFOs to reduce the amount of RAM, but this still requires a large memory in the control system to which the tester is connected to process or view the defect data. 
     When the latest generation of memory devices is manufactured, there must be a test system available which is capable of testing these new memory devices; however, these test systems must be fabricated using the previous generation of memory devices. To enable the test systems to operate effectively, the requirement for storing the locations of defective cells is met by emulating the fault generating capacity of the new memory devices to be tested using arrays of smaller (previous generation) memory devices having the fastest timing characteristics available for those (previous generation) devices. 
     For example, a test system having 256 pins, testing sixteen 256 Mbit capacity memory devices, each device being organised as 16 M×16 bits, will require 4 Gbits (256 pins×16 Mb) of high speed fault capture memory to obtain single bit resolution, or if the 2 least significant address bits are ignored to obtain a 4×4 cell resolution, 1 Gbit of high speed memory. A 1024 pin tester would require 4 Gbit of high speed fault capture memory at the same defect resolution (a 4×4 cell) but this would test sixty-four 256 Mbit capacity memory devices. 
     This high speed fault capture memory (also called defect store memory) normally comprises Static Random Access Memory (SRAM) and can cost 30% of the total hardware cost of the test system. It is therefore highly desirable to be able to reduce the amount of fault capture memory required. 
     One proposed solution, which is used in some test systems, is to maintain a list of defects rather than a full map (which would indicate for each cell whether that cell is working or defective). However, this list overflows when the test system is testing a number of memory devices concurrently and one or more of those memory devices contains a large number of defects. When the list overflows, either the test sequence must be interrupted or some defect data must be discarded. Also, the controller to which the tester is attached still requires a large amount of memory, and the transfer of the data to the controller is slow. 
     Another prior art solution is to capture a 1:1 bitmap from the tester, requiring a large amount of storage in the tester and in a computer to which it is linked, and then to apply digital signal processing techniques to filter the data. This produces a system with negative losses, that is, it loses some of the original data, limiting its application. Even with a communication channel between the tester and computer operating at very high speed, this solution is slow because of the volume of data involved. 
     SUMMARY OF THE INVENTION 
     It is an object of the present invention to obviate or mitigate at least one of the disadvantages of the aforementioned systems. 
     This is achieved by using a compression means with defined zero to positive loss characteristics on data restoration to act on the defect data to create a representation of the fail bit map data which is a compressed form of the original data. This allows the lossless restoration of the original data, or a lossy reconstruction of the original data where additional defects may be apparent, as required by the application and the exact implementation chosen for the compression means. 
     This reduces the size of or obviates the fault capture memory in the memory test system, either in the tester or in the controller or workstation or both. This provides the principal advantages of reduced test hardware cost, faster test result downloads, support of fast browsing capabilities in workstations or computers accessing the compressed defect data, and fast selective retrieval from databases employing the compressed defect data. 
     The compression can be effective by using the fact that defective memory cells are distributed preponderantly along rows and columns in a memory device. Thus, where a fault occurs in one cell of a row or column, there is a much higher probability of there being another fault manifest as a dysfunction in another cell in the same row or column. The data compression means of many of the preferred embodiments uses this phenomenon to record the row or column that is defective, and optionally the tile, along with a compressed form of the locations affected. 
     Various statements of invention corresponding to the subject matter in the independent claims and the dependent claims, based on the entire disclosure of the specification are incorporated herein by reference. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     For a better understanding of the present invention and to show how the same may be carried into effect, reference will now be made, by way of example, to the accompanying drawing in which: 
     FIG. 1 is a block diagram of a memory test system according to an embodiment of the present invention; 
     FIGS. 2A-2F shows a VHDL description of an embodiment of the compression means in FIG. 1; 
     FIG. 3 is a procedure for reconstructing the defect map for defects compressed using the compression means of FIG.  1 . 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     FIG. 1 is a block diagram of a memory test apparatus in which an address and pattern generator  10  is connected to a memory device under test  12  via a pin electronics  14 , where the addresses and fault strobes from the pattern generator and pin electronics respectively are linked by hardware or software depending on the application to a defect compression means  16  under control of a control system  18  typically implemented by a personal computer or workstation. The address and pattern generator  10  determines which memory cells are to be tested by the pin electronics  14  by conveying a cell address to the driver circuitry of the pin electronics  14  by bus  20 . 
     A standard memory test apparatus would have a fault capture memory instead of the data compression means  16 ; however, in this embodiment of the present invention the fault capture memory has been replaced by the data compression means  16 . 
     The combination of the address and pattern generator  10  and the pin electronics  14  tests memory cells in the device under test  12  by applying signals to the device  12  as a series of write cycles followed by read cycles in which the data read is compared with a reference set of data, typically sent to the pin electronics at the time the address and patterns are generated. Where the stored reference data differs from the data read from the memory device, a fault strobe is generated. The fault strobe causes the location of the defect to be stored either by setting a bit in a bitmap in the pin electronics  14  head, or by causing the address and other information to be latched into a shift register such as a FIFO (not shown in the interest of clarity), located typically in the pin electronics test head. In this embodiment, the depth of the bitmap or FIFO can be reduced down to one register instead of that normally used as fault capture memory depending on the speed of the compression system. With a slower compression means, for example, lossless compression using software emulation of a process described by this invention, the pin electronics head may require a large FIFO or a large amount of bitmap storage, but this invention reduces the amount of storage required in the control system subsequently. 
     When a defect has been detected by the assertion of the fault strobe, the address and pattern generator supplies the cell address to the data compression means  16  via address bus  22 . The pin electronics  14  supplies fault signals to the compression means  16  via a control bus  24  when a memory cell fails a test. Alternatively the address data may be available as the offset in a stream of bitmap data issued with each clock cycle of a device in the pin electronics wherein a logical 1 represents a failure of that bit, and a logical zero represents a pass, or vice versa. 
     The data compression means  16  receives the fault signals from the pin electronics  14  and an address from the address and pattern generator  10  corresponding to the defective cell. 
     The compression means  16  creates a representation of the received data, the representation being a compressed form of the original data. The process of converting the original data into a compressed format may allow either lossless restoration of the original data or restoration with the losses, where losses mean additional defects appearing during the restoration process as a product of ambiguities created by the compression mean. The choice of lossless or lossy compression is determined by the application: for example, a lossless system is slower to execute than a lossy system and lends itself to applications requiring the engineering analysis of the reconstructed bitmaps. A lossy system can operate in real time and is suited to applications involving the automatic processing of the reconstructed data, either fully or partially reconstructed, such as in redundancy allocation where spare elements are configured to replace defective regions based on the defect distribution across the memory device under test. 
     The compression means  16  sends the compressed data to the control system,  18  or storage system or a display system  26 . The control system runs decompression software, an example of which will be described, to decompress all or part of the data to provide a defect map or a reconstructed bitmap of the memory that was tested. 
     The control system  18  via its integral user interface enables a user to view, evaluate or process the information stored. The control system may also have an interface for coupling to a redundant structure programmer to allow programming of redundant memory cell structures on the device under test  12 . 
     The function and operation of the compression means  16  is described by the VHDL in FIG.  2 . 
     The VHDL description (Very high speed integrated circuit Hardware Description Language) shown in FIG. 2 adopts an industry wide method of describing electronic logic circuits. VHDL is an IEEE Standard Hardware Description Language commonly used by electronic hardware designers for representing the function and structure of a circuit. A VHDL description has a definite implied architecture expressing both function and sufficient implementation information for any of the commercial ASIC houses to manufacture. (See IEEE Standard VHDL Language Reference Manual Std 1076-1987, IEEE New York, 1988; and IEEE Standard VHDL Language Reference Manual Std 1076-1993, IEEE New York, 1994; and also Hunter R and Johnson T, “Introduction to VHDL”, Chapman &amp; Hall, London, 1996 ISBN 0-412-73130-4 and other references given in Appendix 1). 
     A device described by a VHDL listing is manufactured by logic synthesis using any of a wide range of standard commercially available packages such as those provided Synopsis Inc, Cadence and Compass Design Automation, as well as virtually all silicon vendors for use with their proprietary silicon products. Synthesis is an automated mechanism to generate an optimised gate-level representation from a VHDL description. 
     The VHDL can be used directly by simulation or emulation tools. The function described by the VHDL is apparent to any engineer operating in this field. VHDL has been taught to most engineers and computer scientists in undergraduate courses worldwide for at least the past decade. 
     The function and operation of the compression means  16  described by the VHDL in FIG. 2 will now be presented also in plain text for ease of understanding. 
     The input to the compression procedure is a stream of defect locations (X-Y pairs), signaled by an address with a fault strobe. 
     The compression means  16  operates on rectangular regions of the DUT DQ plane, ideally one region being one memory tile. The finer this subdivision of the plane into tiles, the greater the accuracy of the restoration of the original defect map, but the larger the data structures that must be used. 
     For every row and column of the tile, three numbers are stored: the minimum fault address, the maximum fault address and the count of faults falling between these two end points. This data structure is called a span. Two arrays of spans (one for rows and another for columns) are used for each tile. 
     Even if a row or a column has a large number of faults, all these faults are still represented by only three numbers, resulting in a very high compression ratio compared to a raw defect map. 
     The steps involved in the compression procedure are: 
     1. Before receiving fault data, all storage elements must be initialized. The minimum address of each span is set to the length of tile row/column minus 1, while the maximum address and fault count are set to zero. Thus, the address of the first fault is always less than the initial minimum address and the maximum address is always greater than the initial maximum address, ensuring that the first fault is handled correctly. 
     2. Incoming X and Y addresses are decoded to find a tile, and two spans (row and column) within this tile. 
     3. When a fault hits row number Y and column number X, the X value is compared with the XMIN and XMAX values already scored in the row span These functions are carried out in a structure termed a slice: this is one register block in the X and Y storage arrays in the VHDT. The possible slice states and the resulting update actions are described in the table below. 
     
       
         
               
             
               
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 Slice Update Functionality 
               
             
          
           
               
                 Comparison result 
                 XMIN&lt;= 
                 XMAX&lt;= 
                 Counter &lt;= 
               
               
                   
               
               
                 X &lt; XMIN, X &gt; XMAX (1 st   
                 X 
                 X 
                 increment 
               
               
                 X = XMIN, X − XMAX 
                 no change 
                 n.c. 
                 n.c. 
               
               
                 X &lt; XMIN, X &lt; XMAX 
                 X 
                 n.c. 
                 increment 
               
               
                 X = XMIN, X &lt; XMAX 
                 n.c. 
                 n.c. 
                 n.c. 
               
               
                 X &gt; XMIN, X &lt; XMAX 
                 n.c. 
                 n.c. 
                 increment 
               
               
                 X &gt; XMIN, X = XMAX 
                 n.c. 
                 n.c. 
                 n.c. 
               
               
                 X &gt; XMIN, X &gt; XMAX 
                 n.c. 
                 X 
                 increment 
               
               
                   
               
             
          
         
       
     
     Similar actions are performed simultaneously for the column address Y. 
     The slice counter value is limited in the example embodiment to the level of ¼ of row/column length. If this number is exceeded, in the redundancy allocation application for which this particular compression is optimised, the row or the column must be mapped out during the redundancy allocation anyway. The slice counter does not roll over, but keeps its maximum value until reset. 
     For further clarity, a fragment of C source implementing the same compression procedure as the VHDL is shown below. 
     
       
         
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 // Initialize storage arrays 
               
             
          
           
               
                   
                 for ( row=0; row&lt;nRows; row++ ) 
               
             
          
           
               
                   
                 { 
               
             
          
           
               
                   
                 RowSpan[row] .Begin=nCols−1; 
               
               
                   
                 RowSpan[row] .end=0; 
               
               
                   
                 RowSpan[row] .Count=0; 
               
             
          
           
               
                   
                 } 
               
             
          
           
               
                   
                 for ( column=0; column&lt;nCols; column++) 
               
             
          
           
               
                   
                 { 
               
             
          
           
               
                   
                 ColSpan[column] .Begin=nRows−1; 
               
               
                   
                 ColSpan[column] .End=0; 
               
               
                   
                 ColSpan[column] .Count=0; 
               
             
          
           
               
                   
                 } 
               
             
          
           
               
                   
                 // Process defect list 
               
             
          
           
               
                   
                 while (Defect_list_not_empty) 
               
             
          
           
               
                   
                 { 
               
             
          
           
               
                   
                 Get_next_defect ( &amp;column, &amp;row ); 
               
             
          
           
               
                   
                 // Update the row span 
               
             
          
           
               
                   
                 if (RowSpan[row] .Begin &gt; column) 
                 // If 
               
               
                   
                 necessary, 
               
             
          
           
               
                   
                 RowSpan[row] .Begin = column; 
                 // update 
               
             
          
           
               
                   
                 left end 
                   
               
               
                   
                 if (RowSpan[row] .End &lt; column ) 
                 // If 
               
               
                   
                 necessary, 
               
             
          
           
               
                   
                 RowSpan[row] .End = column; 
                 // update 
               
             
          
           
               
                   
                 right end 
               
             
          
           
               
                   
                 // Check conditions when the counter must not be 
               
               
                   
                 incremented 
               
             
          
           
               
                   
                 if ( !(RowSpan[row] .Begin == column 
               
             
          
           
               
                   
                 RowSpan[row] .End == column 
               
               
                   
                 RowSpan[row] .Count == MaxCount) ) 
               
             
          
           
               
                   
                 // If none of them true, increment the counter 
               
             
          
           
               
                   
                 RowSpan[row] .Count++; 
               
             
          
           
               
                   
                 // Do the same for the column span 
               
             
          
           
               
                   
                 if ( ColSpan[column] .Begin &gt; row ) 
               
             
          
           
               
                   
                 ColSpan[column] .Begin = row; 
               
             
          
           
               
                   
                 if ( ColSpan[column] .End &lt; row ) 
               
             
          
           
               
                   
                 ColSpan[column] .End = row; 
               
             
          
           
               
                   
                 if ( !(ColSpan[column] .Begin == row ¦ ¦ 
               
             
          
           
               
                   
                 ColSpan[column] .End == row ¦ ¦ 
               
               
                   
                 ColSpan[column] .Count == MaxCount) ) 
               
             
          
           
               
                   
                 ColSpan[column] .Count++; 
               
             
          
           
               
                   
                 } 
               
               
                   
                   
               
             
          
         
       
     
     It will be appreciated that this fragment may be written in any other suitable programming language, such as PASCAL, APL, FORTRAN, or Smalltalk etc. The output of this procedure is an array of spans termed a Symbolic Map, because it contains information on the defects in a symbolic state. The span location is encoded by its serial number in the symbolic map. If only significant spans with a non-zero fault count are transmitted to the host, this serial number must be added as a fourth field to the span data. 
     In practice, the symbolic maps are decompressed from the lossy format into sparse bit matrices themselves, a form of compression, and are never fully reconstructed as 1:1 bitmaps. However, to facilitiate understanding of the decompression procedure for the compressed data from the compression means in this example embodiment, we shall assume that a 1:1 bitmap is to be reconstructed from the symbolic map. 
     Symbolic maps for each tile are processed independently by the reconstruction procedure. The procedure in this embodiment consists of a sequence of several passes, each of them incrementally adding defects to the restored defect list. During the decompression, the symbolic map is overwritten. 
     Pass 1 
     Mark single points (spans with fault count equal to one). Three cases are possible, distinguished by the length and the position of the span in the two orthogonal directions.                           
     1. Isolated point—in both directions the counters are 
     1. The point is added to the defect list and both spans are deleted from the span list by assigning 0 to the counters. 
     2. The point is an end of the orthogonal span, with the fault count greater than or equal to 2. The point is added to the defect list. The current span is deleted. Nothing is done to the orthogonal span. 
     3. The point is in the middle of the orthogonal span. The point is added to the defect list, the current span is deleted and the counter of the orthogonal span is decremented. 
     The pass is performed first for row and then for column spans. 
     Pass 2 
     Process spans with counter equal 2. Again, three cases are possible for each end of the span.                           
     1. No span in the perpendicular direction (there was a span of length 1, but it was deleted during pass 1). Do nothing, since this point is already in the defect list. 
     2. The point is an end of the orthogonal span, with count greater than or equal to 2. The point is added to the defect list. Nothing is done to the orthogonal span. 
     3. The point is in the middle of the orthogonal span. The point is added to the defect list and the counter of the orthogonal span is decremented. 
     In all cases the current span is deleted (0 assigned to the span defect counter). 
     The pass is performed first for row and then for column spans. 
     After pass 2, new spans with counter=2 may appear, as a result of case 3. Several iterations of pass 2 must be made, until there are no more such spans left. 
     Pass 3 
     Now only spans with the span counter&gt;=3 are left. The only action performed in pass 3 is to add their ends to the defect list. 
     Pass 4 
     Intersections of all remaining spans are added to the defect list. 
     Various simple examples are given below to demonstrate compression and recovery, i.e. decompression, procedures. 
     EXAMPLE 1 
     A Single Point on Column Number X and Row Number Y 
     This defect is coded into two spans: a row span containing (X,X,1) and a column span containing (Y,Y,1). 
     In this case the original defect is found during pass 1 of the recovery procedure. 
     EXAMPLE 2 
     A Continuous Span in the X Direction                           
     The result of the compression is one row span containing (X1,X2,X2-X1) and X2-X1 column spans, each containing (Y,Y,1). All defects are found during pass 1, because all column spans have the span counter equal to 1. Even if there are working cells inside the span (i.e., it is not continuous), the procedure still restores 100% of the original defects, without adding any extra. 
     EXAMPLE 3 
     Five Defects Forming Two Crossing Spans                           
     The symbolic map contains three row spans and three column spans. End points are found during pass 1. The point on the intersection is marked during pass 4.                           
     All points are marked during pass 1 and the counter of the row span is decremented from 3 to 2. Then both spans are deleted during pass 2. No extra point is marked on the intersection. 
     Using the compression procedure of the example embodiment, it is not always possible to determine from the information stored the precise location of each defective cell. In this case, retrieval of the locations of defective cells is limited to the number of defects in a row or column, and a list of alternative positions in which the defect may occur. In many applications, including redundancy allocation, this is not significant because any row or column which has a large number of defective cells will be replaced. 
     Another embodiment of the compression system provides for a compression of the defects for the rows and columns in each tile rather than the rows and columns extending across the entire memory. In this alternative embodiment redundant memory cell structures are allocated for each group of rows and columns in each tile. Where the number of tiles is more than the number of sets of redundant structures, the tiles can be regarded as a hierarchical group and the hardware applied to clusters of tiles, with increased losses, that is with additional ambiguity as to the exact location of some defects. 
     Various modifications can be made to the embodiments here and before described without departing from the scope of the present invention. For example, in other embodiments, the fault signals may be generated by the address and pattern generator  10  rather than the pin electronics  14 . In addition, a count of defective cells between the maximum faulty address and the minimum faulty address may not be used, a sparse bit matrix or a corner stitched structure may be used instead to provide lossless compression. Where the compression means operates slowly, it is necessary to retain some fault capture memory or a FIFO. In this case, the defect compression means can operate to reduce the retrieval times or display times for the bitmaps. In these cases, the defect compression means may be retrofitted to existing test systems. 
     The example embodiment using VHDL can also be expressed by automated translation into either Verilog or circuit diagrams. Verilog is a de-facto standard, widely used as an alternative to VHDL throughout the semiconductor industry, with some advantages for specific applications (Appendix 1). 
     In each of the main embodiments and the alternative embodiments, the decompression means matches the compression means. The term coupled as used herein means any connection whether direct or indirect, and whether by hardware or software or a combination thereof. 
     APPENDIX 1 
     VHDL References: 
     IEEE Standard VHDL Language Reference Manual, Std 1076-1987, IEEE, New York, 1988. 
     IEEE Standard VHDL Language Reference Manual, Std 1076-1993, IEEE, New York, 1994. 
     Hunter, R. and Johnson, T., Introduction to VHDL, Chapman &amp; Hall, London, 1996, ISBN 0-412-73130-4. 
     Pick, J., HVDL Techniques, Experiments, and Caveats, McGraw-Hill, New York, 1996, ISBN 0-07-049906-3. 
     Bhaster, J., A VHDL Primer, Star Galaxy Press, PA, 1996, ISBN 0-9650391-0-2. 
     Bhaster, J., A Guide to VHDL Syntax, Prentice Hall, NJ, 1995, ISBN 0-13-324351-6. 
     Skahill, K., VHDL for Programmable Logic, Addison Wesley, CA, 1996, ISBN 0-201-89586-2. 
     Companies offering a fabrication service from VHDL descriptions: 
     Orbit Semiconductor, Atmel #, LSI Logic Inc, TSMC (Taiwan), UMC (Taiwan), Altera, Lattice Semi, Cypress Semiconductor Corp, Xilinx and more than 20 others. 
     VHDL and Verilog References: 
     Smith, D., HDL Chip Design, Doon Publications, AL, 1996, ISBN 0-9651934-3-8. 
     Verilog References: 
     Bhaster, J., A Verilog HDL Primer, Star Galaxy Press, PA, 1997, ISBN 0-9656277-4-8. 
     Palnitkar, S., Verilog HDL: A Guide to Digital Design And Synthesis, Prentice Hall, NJ, 1996, ISBN 0-13-451675-3. 
     Thomas, D. and Moorby, P., The Verilog Hardware Description Language, Third Edition, Kluwer Academic Publishers, MS, 1997. 
     IEEE Standard Hardware Description Language Based on the Verilog Hardware Description Language, IEEE Std 1364-1995, IEEE, New York, 1995.