1. Field of the Invention
This invention relates to the field of data processing systems. More particularly, this invention concerns the detection of faults within address decoders used when accessing arrays of memory cells.
2. Description of the Prior Art
It is known to provide memories comprising one or more arrays of memory cells each with an address decoder serving to decode an input address so as to generate a word line signal for accessing a row of memory cells within the array. As process geometries scale to smaller sizes and operating voltages lower there is an increase in the likelihood of the occurrence of soft errors and/or hard errors within such memories, e.g. a strike from a charged particle inducing a disruption which changes the value of a bit being stored within a memory or a gate failing thereby corrupting the data value concerned. Some memory devices can be used in critical environments where the integrity of the data is very important. In order to help reduce the problems associated with data corruption, it is known to provide error correcting codes (ECCs) stored within the memory in association with the data. Such error correcting codes allow for the detection of an error in a stored bit value and the correction of that bit value. Depending upon the particular error correcting code scheme employed, it may be possible to correct bit errors using an associated error correcting code, but the amount of storage required for the ECC codes increases with the maximum number of bit errors they are able to correct. Such ECC memory consumes more circuit area due to the need to store the error correcting codes in addition to the data of interest. This additional overhead is disadvantageous in terms of cost, power consumption and efficiency, but is justified when the integrity of the data is important and a degree of fault tolerance is necessary, e.g. in a safety critical system, such as a car anti-lock break system.
Another more subtle problem which can arise with memories concerns the correct operation of the address decoder. Soft or hard errors can arise in an address decoder such that an input address signal is decoded, but serves to generate a word line signal to the incorrect row of memory cells with the data from that incorrect row of memory cells then being returned as if it had come from the correct row of memory cells. The data itself will match its error correcting code values and thus will not be detected as erroneous. Within a safety critical system, such an error in address decoder operation could have severe consequences. One proposal for dealing with such errors within the address decoder is to split the data and the error correcting codes into different portions of the memory, each with their own address decoder such that an input address is separately decoded by the different address decoders to access the data values and the error correcting codes for those data values. Thus, if an error occurs in either of the address decoders, then the error correcting codes will not match the data values and it may be possible to detect an error.
Whilst this is a superficially attractive proposal, it suffers from significant real life disadvantages. The area overhead associated with having to provide a second address decoder is significant and disadvantageous. Furthermore, error correcting codes are primarily intended for the detection and correction of one or two single bit errors within a data value covered by that error correcting code. In the case of address decoder malfunction, the data values are likely to be completely different to those intended to be covered by the error correcting code thus overwhelming any capacity of the error correcting code to correct those errors, and in some circumstances producing a false result in which the error correcting code by chance happens to match completely different data recovered as a consequence of the address decoder fault. For example, a single error correct double error detect (SEC-DED) code may fail to detect address decoder errors in up to 25% of cases. This level of potential error may be unacceptable in certain applications.
Viewed from one aspect the present invention provides a memory comprising:
an array of memory cells;
an address decoder responsive to an input address to generate a word line signal to enable access to a row of memory cells within said array, said word line signal also enabling a read of address identifying data associated with said row and indicative of an address of said row; and
a decoder fault detecting circuit responsive to said input address and said address identifying data to detect incorrect address decoder operation if said address identifying data of said row accessed with said word line signal does not match said input address.
The invention recognises that a word line signal generated by an address decoder to access a row of data values within a memory array can also be used to access data values indicative of the address of that row of memory cells. Thus, the data returned will include both the data values themselves and data indicative of the address of those data values. The data indicative of the address of those data values can then be compared within the input address which was supplied to the address decoder and any mismatch therebetween can be used to detect an error in the address decoder. Since the addresses associated with the rows of memory cells are static, the data identifying the addresses can be stored in a relatively efficient manner reducing the overhead associated with its storage.
Whilst it would be possible for different rows of memory cells to share common data identifying address values so as to reduce the number of bits which need to be provided in the data identifying the address values, such an arrangement would mean that in a small number of cases an address decoder fault could by coincidence access an incorrect row of memory cells that happens to have the correct address identifying data. Such a possibility can be avoided if each of the rows of memory cells has a different address identifying data associated therewith.
The address identifying data could take a variety of different forms, such as being the result of a hashing function performed upon the input address. Another possibility is to form the address identifying data from one or more of those bits of the input address which vary for the different rows of the memory array. High order bits which are common to all rows of the memory array need not be used and similarly low order bits which correspond to different positions within a row of memory cells need not be used. If unique address identifying data for each row of memory cells is desired, then this may be formed from all of the bits which vary within the input address for the different rows of memory cells.
The address identifying data can be stored in a variety of different ways. It could be stored physically separately from the memory cells storing the data values providing that the same word line signal is used to at least trigger access both the data values and the address identifying data. However, in practice it will be likely to be more efficient and convenient to store the address identifying data in close association with the row of memory cells concerned in the form of either further programmable memory cells or read only memory cells.
Read only memory cells can be smaller and more efficient than programmable memory cells reducing the overhead associated with the current technique, but suffer from the disadvantage of requiring a higher degree of custom design and being less well adapted for automated generation with existing memory compiler tools. When programmable memory cells are used to store the address identifying data, it is desirable that these should be programmed with address identifying data in a manner which does not use the address decoder for which fault protection is being provided. If the protected address decoder is used, then it is possible that erroneous operation thereof may result in the incorrect address identifying data being programmed into a row of memory cells and incorrect operation not being properly identified. In some embodiments, the address identifying data can be programmed by a separate programming circuit acting independently of the address decoder and/or by a process which operates upon initialisation of the memory either before or after a test has been performed (i.e. associated with the test) to confirm the correct operation of the address decoder, such as a BIST (built in self test) operation performed at system boot.
As previously mentioned memories can be provided with error correcting codes serving to detect errors within the data values stored therein and provide a facility for correcting small numbers of such errors. Such techniques can synergistically be used in combination with the present technique of storing address identifying data for the rows of memory cells. Thus, the error correcting codes provide protection for the data values stored and the address identifying data provides protection to ensure the correct data is accessed in response to an input address. These techniques used in combination provide a highly fault resistant and robust memory system.
It will be appreciated that the memory to which the present technique is applied can take a wide variety of different forms. As examples, it may be part of a cache memory or a random access memory as well as other different forms of memory. The memory may be a compiled memory, in which the extra memory cells to store the address identifying data are provided by adjusting the compilation parameters for that memory.
The memory may be provided on a discrete integrated circuit, but is likely to be formed as part of a system-on-chip integrated circuit in combination with other circuit elements.
Viewed from another aspect the present invention provides a memory comprising:
an array of memory cells;
address decoder means for generating a word line signal in response to an input address to enable access to a row of memory cells within said array, said word line signal also enabling a read of address identifying data associated with said row and indicative of an address of said row; and
decoder fault detecting means for detecting incorrect address decoder operation in response to said input address and said address identifying data if said address identifying data of said row accessed with said word line signal does not match said input address.
Viewed from a further aspect the present invention provides a method of operating a memory having an array of memory cells, said method comprising the steps of:
decoding an input address to generate a word line signal to enable access to a row of memory cells within said array, said word line signal also enabling a read of address identifying data associated with said row and indicative of an address of said row; and
detecting incorrect decoding if said address identifying data of said row accessed with said word line signal does not match said input address.
The above, and other objects, features and advantages of this invention will be apparent from the following detailed description of illustrative embodiments which is to be read in connection with the accompanying drawings.
Associated with each row of memory cells within the array 4 are 4-bits of address identifying data stored within the ROM array 8. There is one group of 4-bits of address identifying data for each row of memory cells within the array 4. The individual address identifying data entries can be, for example, a simple 4-bit number ranging between 0 and 15 labelling the different respective rows of memory cells within the array 4. When a word line signal WL is generated by the address decoder 16, then it is used to provide access to one of the rows of memory cells within the array 4 and is also passed to the ROM array 8 where it triggers a read operation of the address identifying data (label) for that memory row with that address identifying data being passed to the fault detecting circuitry 10. Within the fault detecting circuitry 10 the address identifying data read from the ROM array 8 for the row of memory cells which is being accessed by the word line signal WL which has been generated is compared with the 4-bit address upon the address bus 12. If these match, then the correct row of memory cells has been accessed. If these do not match, then the incorrect row of memory cells has been accessed and there is a fault within the address decoder 6.
Various error recovery operations may be performed when an error in the address decoder 6 is detected. It may be that the memory access is simply aborted and then tried again. This would likely deal with a soft error due to a particle strike, since the affect of such a particle strike in producing erroneous operation of the address decoder would likely be temporary and would not affect a subsequent memory access. A hard (permanent or semi-permanent) error would likely persist and accordingly when the memory access was retried, if it failed again, then a more severe recovery strategy could be attempted, such as a system reset or disabling the system with an indication of a fault being passed elsewhere.
It will be appreciated that the number of bits within the address identifying data can vary. The greater the number of bits provided within the address identifying data for each row of memory cells, then the more likely it is that an individual row can be uniquely identified. As an example, if a single bit was dedicated to the address identifying data, then this could only be used to differentiate between odd numbered and even numbered rows within the array 4. An error in the address decoder 6 would likely result in a mismatch in whether the word line signal WL generated properly accessed an odd or even row only approximately half of the time and accordingly the error detection rate would likely only be approximately 50%.
In the example memory being considered in the table of
Also illustrated in
As before, the input address is compared with the address identifying data within a decoder fault detecting circuit 22. In this example, the address identifying data may be hash data representing the result of a hashing operation performed upon the input address which properly corresponds to that row of memory cells. Such hash data may be more compact than the full address, or relevant portion of the full address. If such a hashing operation is involved, then the input address supplied to the decoder fault detecting circuit 22 will also be subject to the same hashing operation before the result of that hashing operation is compared with the address identifying data (hash data) retrieved for the memory row being accessed from the RAM array 24. A mismatch is indicative of a decoder fault. It will be appreciated that the hashing operation performed can take a wide variety of different forms.
Although illustrative embodiments of the invention have been described in detail herein with reference to the accompanying drawings, it is to be understood that the invention is not limited to those precise embodiments, and that various changes and modifications can be effected therein by one skilled in the art without departing from the scope and spirit of the invention as defined by the appended claims.