This invention relates to self-test circuits for redundant memories, and more specifically to the calculation of redundancy implementation for those memory circuits.
Integrated circuit memories may be complex, and tend to be among the densest forms of semiconductor structures. Memories may be stand-alone packaged devices, or may be embedded on logic, system on chip (SOC), or processor chips. The amount of memory on non-memory chips grows every year and may become the dominant feature of semiconductor chips.
Manufacturing lines for integrated circuits are inherently imperfect, and will invariably introduce defects into circuits etched onto a silicon wafer. As memories become larger, the shear amount of circuitry presents an increasing probability that each memory circuit will contain one or more of these defects. The density and distribution of manufacturing defects across a silicon wafer may cause a high percentage of memory circuits to have defects present while the remainder of the chip is perfectly good. To address these good semiconductor chips with defective memories and enhance chip yield, the concept of spare memory elements was developed. The spare memory elements are normally in the form of extra rows or columns of memory cells broadly referred to as “redundancy.”
Built-in self-test (BIST) logic has emerged as a technique for testing chips with embedded memories. This BIST logic resides on the chip, and provides stimulus to the memory in the form of various test patterns selected to detect known manufacturing defects. The BIST logic may also examine the memory outputs to evaluate whether the circuitry is functioning properly in response to the provided test pattern. For a memory without redundancy, the detection of a failure means that the chip must be discarded. For a memory with redundancy, the redundant elements may be allocated to the defective memory location(s). For memories with multiple dimensions of redundancy, e.g. spare rows and columns, the self-test logic must make a decision whether to allocate a row or a column for each defective location.
Redundancy can be implemented at time of manufacture via “hard” implementation techniques. These techniques include allocating redundancy and then blowing the appropriate laser or electronic fuses. This fusing process associates the redundant element(s) with the defective memory locations from then on during the life of the chip. Redundancy can also be implemented via “soft” means where BIST is executed and redundancy is calculated at each power up of the chip. The soft redundancy calculation information is not retained once power is removed from the chip.
During test, if a single cell fail is encountered, either a spare row or a spare column can be utilized. If, however, a partial row or a partial column failure is encountered then a spare row or spare column, respectively, should be chosen for redundancy. The determination of whether to utilize a spare row or spare column is quite complicated in a BIST environment, since multiple cycle's pass/fail information needs to be accumulated before the appropriate redundancy dimension can be chosen.
For a stand alone memory chip, the whole memory may be tested with all of the failing locations identified by an external tester. Once all of the failing locations are identified the various redundancy solutions would be tried via software simulation means prior to implementing any of the redundancy in hardware. Often, all possible solutions are exercised prior to selecting the redundancy solution to implement. However, embedded memories may not be directly or conveniently accessible by an external tester.
In a BIST environment it is not practical to store all of the failing locations since a large memory may be required. Indeed, since BIST functions are ancillary to the purpose for which a chip is designed, very little space is typically allocated. Instead, the BIST logic must make a determination part way through the testing as to which redundant element dimension to utilize. Historically, several solutions have been employed.
One BIST environment solution is the arbitrary implementation of redundant elements. In this case, the first failure might have a row allocated to it with the next fail being replaced by a column, and so on. An arbitrary replacement scheme clearly would not lead to optimal redundancy repair since, for example a row failure might have a column arbitrarily allocated to a failed element in the row, which would fail to repair the entire row. More generally an arbitrary scheme may fail to repair a chip that is in fact repairable with the existing redundancy. When non-optimal redundancy implementation techniques are utilized, the yield is diminished since chips which are fixable end up not being repaired. Viable redundancy solutions may be missed when applying a limited redundancy calculation algorithm to a limited amount of redundant elements.
Another BIST environment solution is to place a counter on each one of the columns and count the number of fails on each. Based on this fail count, the column with more fails than available redundant rows would be selected as a must-fix column redundancy repair. Then must-fix rows would be implemented. These redundancy calculations would be followed up by repairing remaining failures with any available spare columns and spare rows.
Other approaches to the allocation of redundant elements in a BIST environment have been tried. However, they generally suffer from excessive on-chip logic for the redundancy calculation, or a poor redundancy implementation determination, or a combination of both. There remains a need for a multi-dimensional redundancy calculation technique suitable for deployment in a BIST environment.
A built-in-self-test circuit selectively couples memory outputs to fault detection circuitry during a self-test, thereby reducing the size of fault detection circuitry and storage required to properly test and repair a memory with multi-dimensional redundancy. The circuit may store information concerning memory elements having the greatest number of faults and select these for replacement prior to addressing redundancy in another dimension. Redundancy may then be allocated in the other dimension to repair any remaining faults. When a memory element, such as a column, has a greater number of fails than the number of perpendicular redundant elements, the memory element may be identified for immediate replacement.
The foregoing and other objects and advantages of the invention will be appreciated more fully from the following further description thereof, with reference to the accompanying drawings, wherein:
Unless specifically indicated otherwise like numbers throughout the figures refer to like elements.
It will be appreciated that the term “memory element”, as used herein, is intended to refer to a row, column, or I/O, or group thereof (as might be found in a quadrant or other memory region or subcircuit) that might be repaired through a redundant, corresponding memory circuit. Similarly, the term “redundant memory element”, as used herein, is intended to refer to the redundant corresponding memory circuit that might be used to replace a memory element. The term “perpendicular”, as used herein, is intended to refer to orthogonal or otherwise separately addressable memory elements. For example rows are perpendicular memory elements to columns, and columns are perpendicular memory elements to rows. It should be noted that perpendicular memory elements may overlap, as rows and columns overlap to define an address space for a memory. Thus perpendicular as used herein does not in any manner imply exclusive of or exclusive from.
For each of the memory inputs there is a multiplexer 112 for data inputs from a self-test engine 110, and a multiplexer 114 for address and control inputs. The multiplexers 112, 114 allow inputs to the memory to be switched between normal operation and self-test stimuli. The stimuli is generated by the self-test engine 110. The self-test engine 110 also generates expect data which corresponds to outputs for a properly functioning memory. The expect data is compared with data coming out of the memory. Compare logic 116 performs the comparison and sends a pass/fail result to a redundancy calculator 118. When a fail is detected, i.e., when expect data does not match data out of the memory, information on the address location being exercised may be provided to the redundancy calculator 118 from the self-test engine 110.
In operation, the self-test engine 110 coordinates addressing of the memory and application of data to the memory inputs, while also coordinating reads from the memory and generation of expected outputs for comparison to the actual outputs.
It will be appreciated that each of the components depicted in
Whenever the data coming from the memory 100 and the expect data coming from the self-test engine 110 differ the XOR gate 120 provides a “1” output. The output of each XOR gate 120 is provided as input to a wide OR logic gate 122. Whenever one of the XOR gates 120 detects a difference, the output of the OR gate 122 becomes a “1”, indicating a fail was detected by the memory. This fail condition may be flagged and provided to the redundancy calculator 118 to help identify the appropriate redundancy replacement. If row-only redundancy is utilized then a fail would indicate that the associated row address need always be replaced by a redundant row element.
A spare or redundant column 140 is shown. This column can be used to replace any single column in a single data out mux. This redundant column can therefore repair a single cell fail, a vertically paired cell fail, a full column failure, or any other type of fail exclusively associated with a single column. It will be appreciated that, although a single redundant column is shown, multiple redundant columns may be included in a memory to repair distinct defects.
It should be noted that by examining the output of XOR gate 202, a cycle-by-cycle pass/fail determination can be made. If this signal is sent off chip a full bit fail map can be generated detailing any fails in the memory. Based on the cycle number when the fail was detected, the exact bit that is defective can be identified. The resulting bit fail map may be used for diagnostics purposes.
It will be appreciated that the components depicted in
If fewer fails are encountered than the number of redundant rows then the total number of fails in the I/O may be compared with any previously stored value of fail counts 308. If more fails are detected on the I/O currently under consideration then this I/O's number and the fail count may be stored 310. If this is not the case then it may be determined whether all of the I/O have completed test 312. If all have been tested then a determination may be made whether any fail information was stored during the test 322. If no fails were seen 324 then the chip may be perfect and requires no repair. If fails were seen then the chip is fixable and requires repair 326. The test may then be concluded 328.
If all of the I/O have not been tested then the I/O may be incremented 314 and the test may continue 302.
The example shown in
It will be appreciated that the order of steps described above with reference to
It will also be appreciated that it may be desirable to test the integrity of redundant memory elements before allocating them for repair. For a redundant column, for example, this may entail testing a redundant column to determine a number of failing bits and determining if any of the columns in memory have a number of fails that is greater than the number of failing bits in the redundant column. Such a column may be productively replaced with the redundant column in a multi-dimensional memory where redundant rows will be subsequently employed for repair.
Thus, while the invention has been disclosed in connection with the preferred embodiments shown and described in detail, various modifications and improvements thereon will become readily apparent to those skilled in the art. Accordingly, the spirit and scope of the present invention is to be limited only by the following claims.