Abstract:
A memory device generator for generating memory devices in a CAD environment, the generator composed of a library file containing predefined basic circuit components; memory array generation algorithm interacting with the library file for generating a variable-size memory array representation having a variable number of memory elements, and at least one redundant memory element; memory element selection circuit generation algorithm interacting with the library file for generating a memory element selection circuit to be associated with the memory array for selecting at least one memory element according to memory device address inputs. The memory element selection circuit generation algorithm having a subroutine for generating a variable-size content-addressable memory representation having a plurality of content-addressable memory locations each one associated to a respective memory element or to a redundant memory element, each of the content-addressable memory locations suitable for storing one of a set of values of the memory device address inputs and for selecting the respective memory element or redundant memory element when the memory device address inputs take the one value.

Description:
TECHNICAL FIELD 
     The present invention relates to the field of memory device generators for the generation of memory devices in a Computer Aided Design (CAD) environment. More particularly, the invention is directed to a memory device generator for generating memory devices with redundancy. 
     BACKGROUND OF THE INVENTION 
     It is known that in the field of complex integrated circuits manufacturing CAD tools have been developed to facilitate and speed up the designers&#39; job. Such tools make use of libraries of standard, predefined circuit components and/or building blocks (e.g., logic gates, elementary memory cells, etc.), and generally comprise device generators that interact with the user and the predefined component libraries to generate a resultant complex integrated circuit satisfying the user&#39;s needs. 
     In particular, memory device generators operating in CAD environments have been developed that allow the user to generate a memory device, either stand-alone or to be embedded in a more complex integrated circuit, starting from predefined basic building blocks such as the elementary memory cells. The user can specify the desired size of the memory device to be generated, as well as other parameters. The memory device generator is capable of generating memory devices of variable size. 
     A single port RAM generator is for example described in EP-A-600142, which is incorporated herein in its entirety by reference. 
     With respect to a full custom design approach, intended to optimize some aspects such as the silicon area occupation and the circuit speed, this design approach aims at reducing the design time. 
     Memory devices generated in this way suffer however of the same problems as conventional, fixed-size memories resulting from full-custom design approaches. 
     One of these problems is the possibility that the resulting memory device contains defective memory elements. In fact, due to the size of the memory cell array and manufacturing process yield problems, it could be desirable to generate a memory device with redundancy capability. This normally involves the provision of additional (i.e., redundant) memory rows and/or columns which, if no defects are present, are left unused, but in case of defects act as an extra memory to be used as a replacement for defective memory rows and/or columns. 
     During the device testing phase, if a defective memory cell is detected, the entire row or column to which the defective cell belongs is normally replaced by a redundant row or column. 
     In custom-designed, fixed-size memory devices the implementation of redundancy normally requires the provision of non-volatile memory registers for permanently replacing the defective cells. 
     Implementation of redundancy in a memory device automatically generated by means of a memory device generator poses problems. In fact, due to the unpredictability of the choices selectable by the user, who can usually specify the number of memory words, the word length (number of bits per word) and sometimes also the memory array aspect ratio (number of rows divided by the number of columns), the insertion by default of some predetermined number of redundant rows and/or columns may result in an inefficiently generated memory. 
     Additionally, since the memory registers normally used to implement redundancy have to be non-volatile, fuses or Unerasable Programmable ROM (UPROM) memory cells are normally used to form such registers. Integration of standard redundancy techniques in a memory device generator could complicate the manufacturing process of the automatically-generated memory device, because if for example the memory device to be generated is a RAM, integration of fuses or UPROMs memory cells can be achieved only by providing dedicated process steps. 
     SUMMARY OF THE INVENTION 
     In view of the state of the art described, it is an object of the present invention to provide a memory device generator to be used in a CAD environment capable of generating automatically memory devices with redundancy, overcoming the problems outlined above. 
     According to an embodiment of the present invention, such object is achieved by means of a memory device generator for generating memory devices in a CAD environment, the generator comprising: 
     a library containing predefined basic circuit components; 
     memory array generation interacting with said library for generating a variable-size memory array comprising a variable number of memory elements, and at least one redundant memory element; 
     memory element selection circuit generation means interacting with said library means for generating a memory element selection circuit to be associated with the memory array for selecting at least one memory element according to address inputs of the memory device; 
     wherein said memory element selection circuit generation means comprises means for generating a variable-size content-addressable memory means having a plurality of content-addressable memory locations each one associated with at least one respective memory element or with the at least one redundant memory element, each of said content-addressable memory locations suitable for storing one of a set of values of the memory device address inputs and for selecting the respective memory element or redundant memory element when the memory device address inputs take said one value. 
     Thanks to the present invention, there is provided a memory device generator suitable for generating memory devices with redundancy capability, overcoming the problems of conventional redundancy techniques. This is made possible by the fact that the memory generator generates memory element selection circuits comprising content-addressable memory means, instead of conventional address decoder circuits. While in fact conventional address decoder circuits have a structure which is fixed once and for all during the design phase, a content-addressable memory can be easily reconfigured. If during testing a memory element is found defective, it can be replaced by a redundant memory element by simply storing in the content-addressable location associated with the redundant element the address configuration initially addressing the defective element. 
     These and other features and advantages of the present invention will be made more evident by the following detailed description of some embodiments thereof, illustrated as non-limiting examples in the annexed drawings, wherein: 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a functional block diagram of a memory device generator according to the present invention. 
     FIG. 2 is a schematic diagram of a first embodiment of a memory device generated by the memory device generator of FIG.  1 . 
     FIG. 3 is a schematic diagram of a second embodiment of a memory device generated by the memory device generator of FIG.  1 . 
     FIG. 4 schematically shows the operation of the memory device of FIG.  2 . 
     FIGS. 5A and 5B schematically show the operation of the memory device of FIG.  3 . 
     FIG. 6 schematically shows a third embodiment of a memory device generated by the memory device generator of FIG.  1 . 
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     With reference to FIG. 1, a functional block diagram of a memory device generator according to the invention is schematically shown. In this drawing, only those elements of the memory generator which are essential to the understanding of the present invention are shown. Also, the basic functional blocks of the generator will not be described in detail, their structure being well known to the average skilled person. 
     The memory generator  1  shown in FIG. 1 operates in a conventional Computer Aided Design (CAD) environment, typically running on a workstation, and comprises libraries of standard circuit components or blocks (e.g., SRAM memory core cells, DRAM memory core cells, CMOS logic gates, etc.). The elements of the libraries are used by the generator as basic building blocks for building a complex integrated circuit, in this case a memory device  100  shown in FIG. 2 or  3 . 
     Making now reference to both FIGS. 1 and 2, a memory generator  1  according to one embodiment of the invention comprises a memory cell array generator  2  for generating an array  3  of memory cells. The memory cell array generator interacts with the libraries of components  4  wherein several kinds of standard elementary memory cells are stored. The specific type of elementary memory cell is chosen by the designer of the device (i.e., the designer of the memory device  100  of FIG. 2) according to the type of memory device  100  to be generated; if for example the memory device  100  to be generated is a Static RAM (SRAM), the memory cell array generator  2  will use the standard SRAM elementary memory cell contained in the libraries  4  for building the array of memory cells  3 . The user normally supplies the memory generator  1  with input parameters IP by means of which it is possible to define the characteristics of the memory device  100  to be generated. Typically, the user can specify the size of the memory device  100  to be generated; to this purpose, the user can for example specify the so-called “aspect ratio” of the memory cell array  3 , supplying the memory generator  1  with the number of rows and the number of columns of the memory cell array  3  in the memory device  100  to be generated, and also the length of the output word of the memory device. Also, according to the present invention, the user can specify that redundant rows and/or redundant columns are to be provided inside the memory cell array. According to the input parameters IP provided by the user, the memory cell array generator  2  generates the memory cell array  3 , wherein the memory cells  5  are conventionally arranged in rows R and columns C. The number of rows R and columns C of the memory cell array  3  depends on the user-specified row and column numbers, as well as on the choice to provide the memory cell array with redundant rows and/or redundant columns (extra rows and columns). That is, the generated memory cell array  3  will generally comprise a number of rows R equal to the row number specified by the user, plus a number of redundant rows; similarly, the generated memory cell array  3  will comprise a number of columns C equal to the column number specified by the user, plus a number of redundant columns. 
     In one embodiment, the number of redundant rows and columns can be automatically set by the memory cell array generator  2  once the user has specified that he desires to implement redundancy in the memory device to be generated; in this case the memory cell array generator  2  determines the optimum number of redundant rows and columns on the basis of the row and column numbers, and the output word length. 
     In another embodiment, the user can specify that only redundant rows or redundant columns are to be provided, and again the memory cell array generator will automatically determine the optimum number of redundant rows or redundant columns to be provided. 
     Alternatively, in order to give the user more flexibility in the design of the memory device  100 , the user can not only specify that redundant rows and/or redundant columns are to be provided, but he can also specify the exact number of redundant rows and/or redundant columns to be provided in the memory cell array  3 . 
     The memory generator  1  further comprises a row selection circuit generator  6  for generating a row selection circuit  7  to be associated to the memory cell array  3  for selecting a particular row R according to the row address inputs RADD of the memory device  100 . Conventionally, both in custom-designed, fixed-size memory devices and in automatically-generated memory devices the row selection circuit comprises a decoder, made up of logic gates, that is supplied with the row address inputs RADD and has a number of outputs equal to the number of rows of the memory cell array. The structure of the decoder is thus fixed, in the sense that the specific row R of the memory array  3  that is selected by a particular logic configuration of the row address inputs RADD is determined once and for all during the design phase. According to the present invention, instead, the row selection circuit generator  6  generates a Content-Addressable Memory (CAM) having a number of content-addressable memory locations  8  equal to the overall number of rows R of the memory array  3  (i.e., the number of rows specified by the user, plus the number of redundant rows). Each content-addressable memory location  8  is associated to a respective row or redundant row R of the memory cell array  3 . The row selection circuit generator  6  receives as inputs the user-defined input parameters IP, wherein it is specified the number of rows of the memory cell array  3 , and the choice to provide redundant rows (or the desired number of redundant rows to be provided). The row selection circuit generator  6  interacts with the libraries  4 , wherein the standard basic building blocks of the CAM are stored. The CAM can be a Static RAM or any other kind of memory device, such as an electrically-programmable non-volatile memory. If no redundancy rows are to be provided, then the row selection circuit generator  6  can generate a conventional row address decoder made up of logic gates (conventional row selection). 
     The memory generator  1  also comprises a column multiplexer generator  30  for generating column multiplexers  11  to be associated to the memory cell array  3 . The column multiplexer generator  30  receives the user-defined input parameters IP specifying the number of columns of the memory cell array  3 , the output word length, and the choice to provide redundant columns (or the desired number of redundant columns to be provided), because the number of column multiplexers to be provided depends on the output word length, while the structure of each column multiplexer depends on the output word length and on the overall number of columns C of the memory array  3 . Conventionally, each column multiplexer  11  is associated with a respective packet of columns C of the memory array  3 . For the sake of simplicity, in the drawing the column multiplexers  11  are assumed to contain also the sensing circuitry for sensing the addressed memory cell. The outputs of the column multiplexers  11  form the output word D 0 -Dn of the memory device  100 . 
     The memory generator  1  also comprises a column selection circuit generator  9  for generating a column selection circuit  10  to be associated to the memory cell array  3  for driving the column multiplexers  11  so as to select columns C according to the column address inputs CADD. Conventionally, as in the case of the row selection circuit, the column selection circuit comprises a decoder that is supplied with the column address inputs CADD to decode the same for activating one output signal that is used to drive column multiplexers  11 . The decoder is made up of logic gates. Thus, the structure of the decoder is fixed, in the sense that the columns to be selected in response to a particular logic configuration of the column address inputs CADD are determined once and for all during the design phase. According to the present invention, instead, if redundant columns are to be provided inside the memory cell array  3 , the column selection circuit  10  generated by the column selection circuit generator  9  comprises a content-addressable memory having a number of content-addressable memory locations  12  equal to the number of columns of the memory cell array divided by the output word length, plus the number of redundant columns provided for each packet of columns associated to a respective bit D 0 -Dn of the output word. The column selection circuit generator  9  receives the user-defined input parameters IP specifying the number of columns of the memory cell array  3 , the output word length and the choice to provide redundant columns (or the desired number of redundant columns to be provided), and interacts with the libraries  4  wherein the basic building blocks for generating the CAM  10  are stored. If no redundant columns are to be provided, then the column selection circuit generated by the column selection circuit generator  9  can be a conventional column address decoder made up of logic gates. 
     Referring to FIG. 4, the operation of the memory device  100  generated by the memory device generator  1  according to the present invention will be now described. For the sake of simplicity, it is assumed that the generated memory device  100  comprises a memory cell array  3  having eight rows R 0 -R 7  and seven redundant rows RR 0 -RR 6 . The row selection circuit  7  generated by the row selection circuit generator  6  is a CAM having fifteen content-addressable memory locations LOC 0 -LOC 14 , each location associated with a respective row or redundant row of the memory cell array  3 . The CAM is supplied with three row address signals RADD suitable for individually addressing one of eight rows of the memory cell array  3 . Each content-addressable memory location LOC 0 -LOC 14  comprises four bits: three bits (e.g., the least significant bits) for storing the address of the respective row of the array associated to said CAM location, and one bit (e.g., the most significant bit) used as a flag for indicating that the respective row is defective (“0”)/non-defective (“1”). Initially, the first eight locations LOC 0 -LOC 7  of the CAM  7 , associated to the rows R 0 -R 7  of the memory array, are loaded with the following content: 
     LOC 0  :1000 (R 0 ) 
     LOC 1  :1001 (R 1 ) 
     LOC 2  :1010 (R 2 ) 
     LOC 3  :1011 (R 3 ) 
     LOC 4  :1100 (R 4 ) 
     LOC 5  :1101 (R 5 ) 
     LOC 6  :1110 (R 6 ) 
     LOC 7  :1111 (R 7 ). 
     The remaining CAM locations LOC 8 -LOC 14  are all loaded with the content 0XXX, where X means a “don&#39;t care” logic state. 
     Then, the memory array is addressed for testing. Let&#39;s assume that, during testing of the memory device, rows R 3  (address  011 ) and R 6  (address  110 ) are found defective. Then, the most significant bit of the CAM locations LOC 3  and LOC 6  (associated to the defective rows) is changed to “0”, to mean that the respective rows are not to be selected. Two of the seven redundant rows RR 0 -RR 6  can be used to replace the defective rows R 3  and R 6 . Let&#39;s assume that redundant row RR 0  is used to replace defective row R 3 , and redundant row RR 1  is used to replace defective row R 6 . Then, CAM locations LOC 8  and LOC 9  are respectively loaded with the content  1011  and  1110 , as shown in FIG.  3 . During normal operation of the memory device, when address  011  is supplied to the CAM, the latter identifies that such address is stored in both locations LOC 3  and LOC 8 ; however, since the flag bit in location LOC 3  is set to “0”, defective row R 3  is not selected, and redundant row RR 0  is selected instead. The same happens when address  110  is supplied: redundant row RR 1  is selected in place of defective row R 6 . 
     The row selection circuit  7 , being a memory, can suffer of the same defectivity problems as the memory cell array  3 . Thus, during the testing phase, it is better to test the correct functionality of the CAM first, then test the functionality of the memory cell array  3 . During the test of the CAM, if some CAM locations are found defective, they can be replaced by other available CAM locations: for example, if CAM location LOC 1  is found defective, it can be replaced by one of the CAM locations LOC 8 -LOC 14  associated to the redundant rows RR 0 -RR 6 . This means that in order to determine the number of redundant rows to be provided, not only the degree of defectivity of the memory cell array  3  has to be considered, but also that of the CAM. However, since the CAM has a size much smaller than that of the memory cell array  3 , the overhead will be limited. 
     The above example is limited for simplicity to the case of the rows, but identical reasoning can be made for the columns of the memory array. 
     An advantage of the memory generator of the invention is that it allows for generating memory devices with redundancy able not only to overcome defects detected during the testing phase, but also occurring during the entire life of the integrated device in which the memory device is integrated. In fact, being the row selection circuit a CAM, it can be reconfigured at any time, for example at the device power-on, so that initially unused redundancy rows can be subsequently used to replace other defective rows. 
     Referring now to FIGS. 1 and 3 another embodiment of the memory generator will be described. In this embodiment, the memory device generator  1  additionally comprises a Built-In Self Test (BIST) generator  120  for generating a BIST circuit block  13  to be associated to the memory device  100  to be generated. The detailed structure of the BIST generator  120  and that of the BIST block  13  are not described in detail, being well-known to the skilled technician. BIST techniques are more and more employed in the field of complex integrated circuits for reducing the testing time. The BIST block  13  associated to the memory device  100  allows for automatically performing, inside the integrated circuit, testing of the memory device. The BIST block preferably performs a testing of the CAMs  7  and  10 , then it performs a testing of the memory cell array  3 . 
     Referring to FIGS.  5 A and SB, the same example of FIG. 4 is taken to explain the operation of the memory device  100  generated by the memory generator  1 , now considering also the BIST generator block  120 . Initially (FIG. 5A) the BIST block  13  tests the CAM  7  to verify the existence of defective CAM locations. Let&#39;s assume that CAM locations LOC 0 , LOC 2 , LOC 3 , LOC 7  and LOC 10  are found defective. Then, these locations are loaded with the content “0XXX”, to mean that they are defective and are not to be used. The remaining locations of the CAM are loaded with the following content: 
     LOC 1  :1000 (R 1 ) 
     LOC 4  :1001 (R 4 ) 
     LOC 5  :1010 (R 5 ) 
     LOC 6  :1011 (R 6 ) 
     LOC 8  :100 (RR 0 ) 
     LOC 9  :1101 (RR 1 ) 
     LOC 11 :1110 (RR 3 ) 
     LOC 12 :1111 (RR 4 ) 
     LOC 13 :0XXX (RR 5 ) 
     LOC 14 :0XXX (RR 6 ). 
     Thus, rows R 0 , R 2 , R 3 , R 7  and redundant row RR 2  of the memory array  3  will not be used, even if they are not defective, because the associated CAM location has been found defective. 
     Then, the BIST block  13  tests the eight rows R 4 , R 5 , R 6 , RR 0 , RR 1 , RR 3 , RR 4  of the array to verify if they are defective or non-defective. Let&#39;s suppose that row R 6  and redundant row RR 3  are found defective; then, the flag bit in each of the corresponding CAM locations LOC 6  and LOC 1  is set to “0”, and the two still unused redundant rows RR 5 , RR 6  are used to replace such defective rows; to this purpose, the CAM locations LOC 13  and LOC 14  are respectively loaded with the contents “1011” and“1110”. 
     Same reasoning can be straightforwardly applied to the CAM  10  for the columns of the memory array. 
     FIG. 6 shows a different embodiment of a memory device that can be generated through the memory device generator schematically shown in FIG.  1 . In this embodiment the column selection circuit generator  9 , instead of generating a single CAM  10  for driving all the column multiplexers  11 , generates as many CAMs  10 - 1  to  10 -n as the number of column multiplexers  11 . This allows for a better usage of the redundant columns provided in the memory array. In fact, while in the former embodiments if a defective column of a given column packet is replaced by a redundant column of the same packet the same replacement takes place also for identical-address columns of other packets, in this embodiment a defective column of a given column packet can be replaced by a redundant column of such packet without causing a same substitution to occur in the remaining packets. 
     From the foregoing it will be appreciated that, although specific embodiments of the invention have been described herein for purposes of illustration, various modifications may be made without deviating from the spirit and scope of the invention. Accordingly, the invention is not limited except as by the appended claims.