Abstract:
In a digital computer system having a main memory operable at a first speed, a high speed buffer operating at a second speed for temporarily storing selected portions of the main memory, an associative memory for temporarily storing selected main memory addresses and comparing the stored addresses with a newly received address in a read/write operation to generate comparison data, a read only memory a bit configuration reflecting an algorithm, connected to the associative memory for generating a new order of priority for the memory address stored in the associative memory, and a storage unit connected from the read only memory for storing that order of priority for subsequent feedback to the read only memory in a subsequent cycle as a previous order of priority.

Description:
CROSS REFERENCE TO RELATED APPLICATIONS 
     Filed simultaneously with this application is a patent application assigned to the same assignee as this application and is identified as Ser. No. 436,022 filed Jan. 23, 1974 for Automatic Data Priority Technique and, entitled Automatic Data Priority Technique by Joseph Thomas West. 
     1. Field of the Invention 
     The field of art to which the present invention pertains is to memory systems in general and, in particular, to the improvement of memory systems utilizing high speed buffers for establishing a storage hierarchy. 
     2. Description of the Prior Art 
     Access to memories of high speeds is of utmost concern in order to provide for the rapid processing of data and to take advantage of the high speed CPU systems available today. One manner of achieving increased memory speed is providing for a memory hierarchy scheme where a large slow memory and a small fast memory are connected to a central processing unit (CPU). The fast memory, commonly known as a cache, serves as a window for the CPU to look at slow memory. Data from slow memory is loaded in the cache in quantities of usually several words (or bytes) at once in anticipation that subsequent memory request will be for that data, If so, then memory speed is increased by serving the CPU from the cache. 
     A memory system of this type requires management which has to determine: first, whether a CPU request for memory is in cache and if so, where; second, if not in cache, at what location in cache is the data from the slow memory to be loaded; third, how does the CPU modify fast and slow memory, and; fourth, how is the system to be initialized on power-up. 
     Inherent in the cache scheme is an associative memory which contains the address of data in the cache as related to the slow memory. This associative memory is effectively implemented as a content addressable memory (CAM) which provides for a simultaneous search of all its locations to determine if the data desired by the CPU is in the cache, and if so, where. 
     Among the several items governing the performance of a memory system of the type being discussed, is the ratio of speed between the slow memory and the cache. This also may be determined by the relative size of the cache and slow memory. Once a cache size and speed is selected that provides the desirable performance, the problem arises as to how to derive an efficient method of replacement of old words in cache with new ones. 
     If the system is to operate efficiently, replacement of data in the cache must be carefully accomplished. Although a complete knowledge of program behavior would produce the ideal replacement, this may be impractical because of the economics involved. A good approximation is to replace the least recently used entry. This will require maintaining a priority which is updated at each memory access. Efficiency can be further improved if invalidated addresses can be placed at the bottom of the schedule so they can be replaced first without destroying the valid entries. 
     SUMMARY OF THE INVENTION 
     Accordingly, an object of the present invention is to provide an improved high speed memory system by implementation of a least recently used technique having a bit configuration representing an algorithm, with an associative memory to keep track not only of the least recently used word, but in addition, to establish an order of word state priority for manipulating cache stored data, allowing a data priority locating scheme to be dynamically updated as new usage information becomes available. 
     Another object of this invention is to provide a programmed word state priority order based on usage that is normally not affected by effecting storage operations in main memory. 
     A further object of the present invention is to provide a programmed word state priority based on usage, which when containing an address location in an associative memory that is subsequently written into in main memory, invalidates the associative memory. 
    
    
     DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is an overall block diagram of the preferred embodiment of the invention. 
     FIG. 2 is a circuit diagram of the CAM 34, program logic array 35 and priority register 36, and portions of memory control logic 37, shown in FIG. 1. 
     FIG. 3 is a flow diagram depicting the sequence of events in the present invention in a read cycle. 
     FIG. 4 is a flow diagram depicting the sequence of events in the present invention in a write cycle. 
     FIG. 5 is a series of time based waveforms illustrating, with certain signals, the manner of operation of the invention during a read cycle. 
     FIG. 6 is a series of time based waveforms illustrating, with certain signals, the manner of operation of the invention during a write cycle. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENT 
     With reference to the drawings, a block diagram generally describing the present invention is illustrated at FIG. 1, wherein there is shown a main semi-conductor memory 31 having a cycle time, for example, of 600 ns and a smaller fast semi-conductor memory 32, generally referred to as a cache, having a cycle time, for example, of 100 ns to 200 ns. Main memory 31 is connected from the memory data bus and, in addition, from a memory address register 33, the latter in turn connected from the memory bus. 
     Connected from the memory address on register 33 is an associative memory in the form of a content addressable memory (CAM) 34, which is designed to compare data on its inputs with data already stored in its memory and indicates a match when these data are identical. This equality search is performed on all bits in parallel. The stored data is four 12-bit words and the signal input is one eleven-bit word from the memory address register 33 and a validity bit 33. The outputs of CAM 34 include a match signal to a cache memory 32 and the main memory 31 and, in addition, an address denoted as RA and RB, designating a fast memory location in cache 32. 
     The main memory 31 is also connected for loading the cache 32 with four words or one block of memory data when instructed to do so. The WA and WB signals which are supplied to the cache 32 will always denote the cache address where the data from main memory is to be written, which is to be described in greater detail. This signal might also be called the LRU, as it identifies the location of the least recently used data in the cache system and then the cache address to be loaded, should a situation call for loading of the cache. The LRU signal is also supplied to an input of the CAM to update the least recently used data location of the CAM with the main memory address of the new data that is loaded in the cache. 
     The LRU is derived from a program logic array 35 which might comprise of a selected combination of discrete gates or a read only memory (ROM). The program logic array defines an LRU algorithm for the four word associative memory or CAM 34. The LRU algorithm is such that not only will the least recently used word be known, but also the next to least recently used word and so forth. This allows the LRU algorithm to be dynamically updated in terms of a time and usage basis as newly used information becomes available. In the present embodiment, since four words of data are to be used with the CAM 34 and cache 32, these might be defined as the MRU (most recently used), NMRU (next most recently used), NLRU (next least recently used) and LRU (least recently used). It is evident, that for these four words there are 24 possible states of the algorithm defining 24 distinct combinations of four word arrangements, depending upon the order of priorities ascertained. 
      In order to dynamically update the algorithm, it is necessary to know the state or order of priority of the immediately previous combination of four words, as well as the address in CAM 34 of the new information loaded from the memory address register 33. The WA and WB signals on the LRU lead denote the address location in the CAM 34 of the newly entered main memory address and the corresponding location in cache 52 of that address data for the newly entered information. The RASV and RBSV signals are delayed versions of the RA and RB signals, as will be discussed hereinafter, to identify the locations in the CAM, if any, which the new information matches. The information as to the absence of a match or if a match was matched, all contribute to re-establish the new order of priority for determining the new LRU data. As may be seen, the priority register is utilized for temporarily storing the immediately previous order of priority information, enabling it to be re-circulated during the next cycle back into the program logic array 35. 
     The memory control logic 37 is connected to each, cache 32, main memory 31, CAM 34, program logic array 35, and priority register 36, to ensure that the proper sequence of information handling is maintained, as will become evident hereinafter. 
     A more detailed description of CAM 34, priority register 36, and program logic array 35, may be seen with reference to FIG. 2, wherein there is shown a four word, four-bit array and 12 bit CAM 34 comprising units 41, 42 and 43. Four input LRU leads to each of these units contain LRU information and four other leads to these respective units comprise three sets of four bit inputs mutually denoted as M 1 , M 2  and M 3 . The outputs of the memory address register 33 comprise 11 bits, representing the signal received from the memory address bus, identifying the location in main memory 31 at which data is to be read in or written out. The twelfth bit is a validity bit to denote a validity condition of the signal written in and therefore if written invalid, the other 11 bits will be ignored. Each of the three units 41, 42 and 43 are also fed with a LOAD CACHE ADR signal which, when enabled, allows the LRU identified address in CAM 34 to receive the newly entered main memory address from memory address register to update the units 41, 42 and 43. 
     The program logic array 35 is shown in the form of two read only memories, ROM 44 and ROM 45, each having common inputs including: L 1  through L 4  from the priority register; L 5  + L 6  RASV and RBSV, and; REMSV. The signal REMSV to be discussed hereinafter will indicate whether a CAM stored main memory address is to be invalidated or not. One possible program logic array table for the ROM&#39;s is shown on the following page, where given each of the 24 different word state orders of priority is a binary output on leads L 1  through L 8 . An octal output is provided for the eight binary output values on the leads of the combined ROM&#39;s 44 and 45. 
     
         PROGRAM LOGIC ARRAY WORD STATE TABLEActual Word   Output                  OutputStates  L.sub.1      L.sub.2         L.sub.3            L.sub.4               L.sub.5                  L.sub.6                     L.sub.7                        L.sub.8                           Octal Code__________________________________________________________________________1230    0  0  0  1  0  1  1  1  0271320    0  0  1  0  0  1  1  1  0472130    0  0  1  1  0  1  1  1  0672310    0  1  0  0  0  1  1  1  1073120    0  1  0  1  0  1  1  1  1273210    0  1  1  0  0  1  1  1  1470231    1  0  0  1  1  0  1  1  2330321    1  0  1  0  1  0  1  1  2532031    1  0  1  1  1  0  1  1  2732301    1  1  0  0  1  0  1  1  3133021    1  1  0  1  1  0  1  1  3333201    1  1  1  0  1  0  1  1  3530132    0  0  0  1  1  1  0  1  0360312    0  0  1  0  1  1  0  1  0551032    0  0  1  1  1  1  0  1  0751302    0  1  0  0  1  1  0  1  1153012    0  1  0  1  1  1  0  1  1353102    0  1  1  0  1  1  0  1  1550213    1  0  0  1  1  1  1  0  2360213    1  0  1  0  1  1  1  0  2561023    1  0  1  1  1  1  1  0  2761203    1  1  0  0  1  1  1  0  3162013    1  1  0  1  1  1  1  0  3362103    1  1  1  0  1  1  1  0  356__________________________________________________________________________ 
    
     In addition, there is a portion of one possible ROM truth table on the following page showing previous priority state possibilities and the variations of the inputs RASV, RBSV AND REMSV along with the octal output code for each output state depending on the variation of the input signals. The octal input on the following page is based upon the following input signals in a left to right order: LR1; LR2; LR3; LR4; LR5 + LR6; RB; RA; REM. For example, in word order 0132, the Octal Input for Octal Output 047 would read left to right 000 10 000.ROM TRUTH TABLEWord   Octal    Octal      Word   Octal  OctalOrder  Input    Output     Order  Input  Output______________________________________0132   020      047        1032   060    047  021      035               061    035  022      253               062    353  023      075               063    075  024      035               064    075  025      336               065    356  026      236               066    276  027      135               067    1551230   030      027        2130   070    067  031      236               071    256  032      313               072    313  033      027               073    027  034      115               074    115  035      067               075    067  036      316               076    356  037      127               077    1470312   040      127        1302   100    047  041      055               101    035  042      253               102    333  043      075               103    115  044      055               104    115  045      273               105    067  046      236               106    276  047      135               107    1551320   050      047        2310   110    107  051      035               111    233  052      353               112    313  053      047               113    027  054      115               114    155  055      067               115    107  056      316               116    356  057      127               117    147______________________________________ 
     When REMSV is true, it indicates a write instruction had occurred and address was matched at the zero location in the CAM 34 so that the zero location had to be invalidated and made the LRU as new information is to be written into that main memory address. 
     With reference to the above table, it will be seen that given an order of priority of 0132 for locations in the CAM 34 and cache 32, a different order or priority output (octal code) will result for different RASV, RBSV and REMSV signals. If RASV and RBSV are both zeros and REMSV is true, the new order of priority is changed to 1320 represented by octal code 047. 
     If this were not done, it can be readily observed that confusion might occur during the reading of subsequent information. When REMSV is false, information is not to be invalidated. However, since the zero location is the one that is matched and active, the same order of priority 0132 is maintained as is represented by the octal output 035 which can be verified by looking at the illustrated program logic array word state table above. 
     The four outputs from ROM 44 and the two outputs L 5  and L 6  from ROM 45, are connected back into the priority register 26 L 1  to L 6  to the inputs of ROM&#39;s 44 and 45, for allowing this information to be used during a subsequent cycle to establish a new set order priority should the signals RASV, RBSV and REMSV require such. 
     As will be noted, the signals L 5  and L 6  in being returned to ROM&#39;s 44 and 45 are returned via a NOR gate 46. Furthermore, the REMSV signal from a register 47 is entered into ROM&#39;s 44 and 45 only upon the presence of a change in the order of priority, as when the address of information to be written in main memory matches a CAM address that CAM address is to be invalidated and made the LRU. The DATA TO BUS signal is used to clear the REMSV on the next cache access. 
     It is also noted, signal BUMP LR triggers the priority register to enter into the ROM&#39;s the old priority order and then receive the new priority order for the next cycle in a manner to be hereinafter discussed. 
     The output of the CAM 34, including units 41, 42 and 43 provide, via an inverter coupling OR gate 50 and inverter 49, a MATCH AND MATCH indication respectively denoting whether or not the 11-bit address received from the memory address register is common to any one of the four word, 12 bit arrays stored in the CAM. Signals RA, RB denote the CAM location of the address of the data as to which a match has been detected. The signals RA and RB which are respectively derived from NAND gates 49 and 51 are mutually routed to registers 52 and 53, so that the signals RA and RB can be stored and supplied as RASV and RBSV during a successive cycle depending on whether the conditions entered into C input of the registers 52 and 53 are met. 
     As will be seen, memory control logic 37, upon the presence of a read and match false signal, will enable an AND gate 59 connected to one input of a NOR gate 51, the second input of NOR gate 61 supplied from an AND gate 62 having write and match inputs. These two inputs to NOR gate 61 generate a LOAD CACHE ADR signal. The output of AND gate 62 also provides a signal which may be denoted as BUMP LR. The write signal supplied to an input of an AND gate 63 is a write signal and MATCH signal to generate an output REMOVE. Other signals that are conventional put out by the memory control logic include a DATA TO BUS signal denoting that data has been put on the memory data bus. A reset signal for a resetting condition is also generated and a MEM SEL signal is generated denoting the loading of an address from the memory address bus into the memory address register 33. A RESET SV signal is also delayed for a subsequent cycle. 
     The BUMP LR signal from AND gate 62 occurs when the CAM has indicated a match in a WRITE condition. BUMP LR will also occur from the memory address register 33 in the form of a delayed load RA, whereby load RA denotes a previous READ operation with data loaded into the memory address register from the memory address bus. Thus, BUMP LR always enables the priority register to load the ROM&#39;s each time an operation has been effected in CAM 34 in a READ condition and a match occurs in a WRITE condition. No BUMP LR signal occurs when in a WRITE operation and match is false. 
     The various signals fed into the NOR gates 55 to 58 which are connected to AND gate 54, establish the condition LOAD RA which is generated immediately following the MEM SEL signal that occurs with a READ or WRITE signal at the loading of the memory address register. 
     OPERATION 
     The operation of the present invention will now be discussed in connection with the flow diagrams for READ and WRITE conditions respectively depicted in FIGS. 3 and 4 and the waveform diagrams for the READ and WRITE conditions respectively depicted in FIGS. 5 and 6. 
     First, an assumption will be made that a READ condition exists where the computer is reading the address of a data word that is stored in the cache. The memory address of the data is read into the memory address register 33 from the memory address bus and then fed into the CAM 34 on level line M1, M2 and M3. The CAM has already been updated at the leading edge of LOAD RA with the previous LRU address information from ROM 45. In the CAM, an equality search is made between address and the four memory addresses stored in the CAM to ascertain whether or not a match exists. 
     Assuming a match is detected, this indicates that the memory address is already in the CAM and therefore the corresponding memory data is stored within the cache. Upon occurrence of a match, a match signal is generated at the output of Inverter 48 and signals RA and RB are also generated to identify at which one of four locations in the CAM a match occurred. The match location in terms of RA and RB is set into registers 52 and 53 to be saved for updating the priority register after this read cycle. At the same time, signals RA and RB identify the location of the data in the cache 32 which is to be read out onto the memory data bus. The BUMP LR signal, as may be seen from FIG. 5, which is LOAD RA delayed, enables the priority register 36 to store the order of priority generated during the present cycle. At the beginning of the next cycle, the RA and RB CAM location match saved from the previous cycle is generated and together with the signals L 1  through L 6  from priority register 36 are fed along with REMSV to ROM&#39;s 44 and 45. The information at the output LRU leads of ROM 45 is represented by WA and WB and is available for input to the CAM 34 allowing the CAM 34 location of the LRU information to be identified for loading in a memory address of new information upon the presence of a LOAD CACHE ADR signal. The LRU information represented by the WA and WB signals also is available for input to the cache 32 to identify the location in the cache at which data is to be read into from the main memory 31, in a manner hereinafter to be discussed. 
     Next, assuming that the computer reads a word which is not in cache, instead of having a MATCH output, a MATCH output is generated at the output of CAM 34. This output enables main memory to load the data at the address specified at the memory address register into the cache 32. The cache location in which the data is loaded is indicated by WA and WB which represent the location of the LRU information from the last cycle. This data is then read out of the cache onto the memory data bus. The MATCH signal also in turn generates the signal LOAD CACHE ADR to load the CAM with the new memory address information in the LRU/CAM location. This, of course, occurs before the BUMP LR signal causes the priority register to store the new order of priority. 
     If REMSV is false, no invalidity of the address occurs and then the priority of the signals is changed so that the previous least recently used location in the CAM is provided with the new memory address and made the most recently used location and the previous next to least recently used location is now denoted as the LRU location. 
     Next, assuming that a WRITE condition exists, if the memory address information is not matched in the CAM 34, the data is written into the main memory address from the memory address register, but the priority register is not changed at all. 
     This, however, will not be the case when a MATCH occurs in the CAM during a WRITE operation. Again, a loading of the main memory 31 at the memory address from the memory address register. As may be seen with reference to FIGS. 4 and 6 at the MEM SEL signal, the memory address register is loaded. If a match occurs, the signals RASV and RBSV denoting the CAM location of the match cause that location to be made the LRU location upon the presence of a REMSV signal. At the same time, the REMOVE signal at the twelfth bit of the memory address register causes the address loaded into the CAM at that location where a match occurred to be invalidated, as the same memory address has now been used for a write entry. 
     An interesting aspect of the machine may be seen with reference to when the computer would say &#34;write something in a location&#34; and then &#34;read from that same location.&#34; What happens to the priority table in this case is that it never changes. For example, if one would consider the case where the computer reads that location, it puts the address read in the CAM and makes it the most recently used in terms of priority. The immediately next period when it goes to write in that same memory address location, it determines that the memory address location is in the CAM and invalidates that location to make it the least recently used in the priority truth table. The next occasion it goes to read that same location, it will now read from the same main memory address and load that CAM location (which is now the least recently used) and make it the most recently used location. As is evident here, the sequence goes back and forth, but what is important is that the other entries in the other three addresses in the CAM are undisturbed so that once a program stream is finished with this sort of re-cycling operation, it can proceed with previously stored information occurring before the re-cycling already in the cache. 
     It should be noted, that in a &#34;power-up&#34; condition, all the data in the cache is automatically invalidated by automatically setting all valid bits to false. This is effected for the reason that when power-up condition occurs, because of the fact that the cache and CAM used are semi-conductor memories and therefore will power up in a random state. It should be evident from the occurrence of power-up, that although the CAM is completely invalidated, it is forced to a pseudo-priority so that one can never have the same two words in cache simultaneously. 
     This occurs as a consequence of the proper use of the determinations MATCH and MATCH, whereby in a CAM match, the order of priority of the addresses already within the priority register is properly updated by the ROM&#39;s 44 and 45 which consider the new location of the newly entered memory address which caused the MATCH signal to occur. 
     As may be observed from the above, the two bits RASV and RBSV comprise information for causing the ROM&#39;s 44 and 45 to the arrangement of the order of word state priority stored in the priority register, whereas the last bit or REMSV is used to invalidate, if necessary, information stored in a specific location of the CAM.