The disclosures herein relate generally to memory systems, and more particularly, to instruction or command queues in memory systems that information handling systems employ.
An information handling system (IHS) may include one or more address queues that store information designating memory locations that the IHS should access. Memory may include volatile storage such as system memory and non-volatile storage such as media drives. In the case of volatile storage such as system memory, an IHS typically includes a memory controller with an address queue. An address queue generally includes a number of latches, each latch storing a respective queue entry such as a memory access command. Each memory access command in the queue includes address information that refers to a respective target address or location in the system memory that the memory controller should access. Address queue designers usually desire that a queue be as large as possible to store a maximum number of ready-to-execute memory access commands. Unfortunately, larger queues require more power to operate than smaller queues. Moreover, larger queues consume greater amounts of valuable semiconductor chip real estate than smaller queues.
A typical address queue includes an input that receives queue entries and an output which provides queue entries for execution. More particularly, the address queue input receives a queue entry and stores the queue entry in a respective latch. A queue entry percolates from latch to latch in the queue as it progresses from the queue input to the queue output prior to execution. When system memory includes a number of pages or banks, page mode logic may couple the output of the address queue to the system memory. The page mode logic may combine two memory access commands that exit the output of the address queue to more efficiently access system memory if these two memory access commands reference addresses in the same bank and row of the system memory. While such a page mode logic configuration may improve memory access efficiency, it does not address the size problem of physically large address queues.
What is needed is an address queue apparatus and methodology that addresses the problems above.
Accordingly, in one embodiment, a method is disclosed for accessing information in a memory. The method includes providing an address queue including a plurality of queue entry locations, each queue entry location including a main information location and a supplemental information location. The method also includes testing, by a queue controller, first and second memory access commands to determine if the first and second memory access commands refer to consecutive memory locations in a memory. The method further includes storing the first memory access command and a portion of the second memory access command in the same queue entry location of the memory queue if the testing step determines that the first and second memory access commands refer to consecutive memory locations in the memory. The method still further includes storing the first memory access command and the second memory access command in different queue entry locations, respectively, of the memory queue if the testing step determines that first and second memory access commands do not refer to consecutive memory locations in the memory.
In another embodiment, a method is disclosed for accessing information in a memory. The method includes providing an address queue including a plurality of queue entry locations, each queue entry location including a main information location and a supplemental information location. The method also includes receiving, by a queue controller, a plurality of memory access commands including a new memory access command that refers to a target address. The method further includes storing, by the queue controller, a subset of the target address of the new memory access command in the supplemental information location of a particular queue entry location if the subset corresponds to the target address of another memory access command stored in the main information location of the particular queue entry location. The method still further includes otherwise storing, by the queue controller, the full target address of the new memory access command in a main information location of a queue entry location other than the particular queue entry location.
In yet another embodiment, a memory controller is disclosed that includes a queue controller that receives a plurality of memory access commands including a new memory access command that refers to a target address. The memory controller also includes an address queue, coupled to the queue controller, including a plurality of queue entry locations, each queue entry location including a main information location and a supplemental information location. In this embodiment, the queue controller stores a subset of the target address of the new memory access command in the supplemental information location of a particular queue entry location if the subset corresponds to the target address of another memory access command stored in the main information location of the particular queue entry location. Otherwise the queue controller stores the full target address of the new memory access command in a main information location of a queue entry location other than the particular queue entry location.
The appended drawings illustrate only exemplary embodiments of the invention and therefore do not limit its scope because the inventive concepts lend themselves to other equally effective embodiments.
In one embodiment, system 100 receives a sequence of memory access commands, for example memory write commands, at input 100A. Each memory write command includes a memory write address that specifies a location in system memory 110 to which memory controller 105 should write data or information. The memory write command also includes an indication of the data that memory controller 110 should write to the specified address in system memory 110. While in this particular example system 100 performs write operations, the same methodology applies as well to read operations. The term “memory access command” includes both memory write commands and memory read commands. Address command is another term for memory access command.
Memory controller 105 includes a queue entry handler 107A that couples to an input 120A of address queue 120. Address queue 120 receives a command or instruction stream that includes address commands such as memory access commands. Address queue 120 includes a number of queue address locations Q0, Q1, Q2, . . . Q7 for storing address commands, namely address entries. Each address location includes a main information location and a smaller supplemental information location. For example, address location Q0 includes a main information location Q0-M including 45 bits and a supplemental information location Q0-S including 5 bits. The main information locations Q0-M, Q1-M, Q2-M, . . . Q7-M and the supplemental information locations Q0-S, Q1-S, Q2-S . . . . Q7-S of address queue 120 may employ a larger or smaller number of bits than this example as long as the main information locations include more bits than the supplemental information locations. In one embodiment, each of the main information locations exhibits the same number of bits and the supplemental information locations exhibit the same smaller number of bits. While in this particular embodiment, address queue 120 includes 8 queue entry locations, address queue 120 may include a greater or smaller number of queue entry locations than 8, depending upon the particular application.
Memory controller 105 is capable of compressing two adjacent address commands into a single address queue location, such as address queue location Q0 for example. To achieve this, queue entry handler 107A tests each address command passing therethrough to determine if the address command points to a system memory target address that is consecutive to or adjacent a system memory target address to which another command in the address command instruction stream points. For example, in one embodiment, queue entry handler 107A receives a first address command followed by a second address command in the address command stream that input 100A provides to queue entry handler 107A. The first and second address commands are adjacent commands because one immediately follows the other in the address command stream. If queue entry handler 107A determines that the first address command and the second address command reference or point to consecutive addresses in system memory 110, then queue entry handler 107A stores the first address command in main information location Q0-M and a portion of the second address command in the smaller supplemental information location Q0-S in address queue 120. Because the second address command points to address space consecutive with the address space to which the first address command points, the supplemental information location Q0-S need not store the entire address command. In one embodiment, the supplemental information location Q0-S stores a subset of the full address command, namely the least significant bits (LSBs) of the address command. This provides the minimal amount of information that the memory controller may use in conjunction with the address in the main information location to specify the target address of the second address command. The supplemental information locations, such as Q0-S, may store more information than just the LSBs of the second address command, such as the bank, rank, row and column information of the target address of the command, but it need not do so. The smaller the supplemental information location Q0-S becomes, the more efficient in terms of chip real estate and power consumption a chip containing this circuitry becomes. In the above example, memory controller 105 thus stores two address commands in the same entry of the address queue, namely entry Q0.
This compression methodology is most effective with streaming data, namely an address command instruction stream where adjacent instructions point to adjacent or consecutive addresses in system memory. If queue entry handler 107A should determine that the first and second address commands do not point to consecutive addresses in system memory 110, then the first and second address commands are not eligible for compression into the same queue entry location as before. Instead, queue entry handler 107A stores the first address command in main information location Q0-M and the second address command in another main information location Q1-M. In this scenario, memory controller 105 thus stores two address commands in the different entries of the address queue, namely entries or queue address locations Q0 and Q1.
The address commands that address queue 120 stores percolate from input 120A to output 120B as time moves forward. In other words, while queue entry handler 107A adds new address commands into queue entry Q0, the address command previously in queue address location Q0 moves to queue address location Q1. This process continues as more address commands flow into address queue 120 and address commands ultimately reach queue output 120B after which the specified memory access at queue output 120B occurs. Write bank busy logic 130 couples between address queue 120 and system memory 110. Write bank busy logic 130 tests to confirm satisfaction of all memory timing requirements so that further commands to a bank of memory may issue. Page mode logic 125 couples between address queue output 120B and system memory 110. Page mode logic 125 detects commands to the same page of system memory 110 and allows the issuance of such commands consecutively without going through a bank precharge period. This allows the memory controller 105 to better utilize the memory.
A new memory access command is a term that describes an address command as it enters queue entry handler 107A of queue controller 107. Address queue 120 may already store one or more address commands in its entries Q0, Q1, . . . Q7. Queue entry handler 107A determines whether address queue 120 stores a new incoming memory access command in a main information location or a supplemental information location of address queue 120. Queue controller 107 includes queue loader logic 107B that makes this determination using information from comparator bank 107C. Comparator bank 107C includes comparators C0, C1, . . . C7 that couple respectively to each queue address location Q0, Q1, . . . Q7 as shown. The comparators monitor the outputs of each queue address location Q0, Q1, . . . Q7 to determine if the target address of the new memory access command at the address queue input 120A matches any of the target addresses that queue address locations Q0, Q1, . . . Q7 already store. In one embodiment, the comparators exclude the column addresses in the comparison. The comparator bank 107C thus informs queue loader logic 107B if address queue 120 exhibits a hit, namely a match between the non-column address portion of the target address of the new memory access command and the non-column address portion of a target address that address queue 120 already stores. The comparator bank 107C also informs queue loader logic 107B if address queue 120 exhibits a miss, namely there is no match between the non-column address portion of the target address of the new memory access command and a non-column address portion of a target address that the address queue already stores. In the event of a hit, then queue loader logic 107B causes queue entry handler 107A to store a subset of the target address of the current memory access command in the particular supplemental information location Q0-S, Q1-S, . . . Q7-S of the entry for which the hit occurred.
In more detail, each comparator of comparator bank 107C includes a common input that couples to the output of queue entry handler 107A so that all comparators receive the new memory write address that handler 107A provides. The remaining inputs of comparators C0, C1, . . . C7 couple respectively to the outputs of queue address locations Q0, Q1, . . . Q7 as shown. The outputs of comparators C0, C1, . . . C7 couple to the queue loader logic 107B to enable queue loader logic 107B to control when memory queue entry handler 107A is able to store supplemental information in supplemental information locations Q0-S, Q1-S, . . . Q7-S. In other words, queue loader logic 107B monitors comparators C0, C1, . . . C7 to determine where to instruct queue entry handler 107A to load each new entry in address queue 120.
Acting collectively, comparators C0, C1, . . . C7 compare the non-column address portion of each new memory write address entering address queue 120 with the non-column address portion of any memory write addresses already in main information locations Q0-M, Q1-M, . . . Q7-M. If the output of one of comparators C0, C1, . . . C7 goes active, this state change constitutes a hit. The hit indicates that the new memory write address includes address information in common with a memory write address that one of the main information locations Q0-M, Q1-M, . . . Q7-M already stores. For example, if the output of comparator C0 goes active, this hit indicates that the new memory write address from handler 107A includes address information in common memory the write address that main information location Q0-M stores. This hit condition causes queue loader logic 107B to instruct queue entry handler 107A to store address information from the new memory write address in an address location in system memory 110 consecutive with the information that main information location Q0-M will store in system memory 110. More particularly, when this hit condition occurs, rather than storing the entire address or full address referenced by the new memory write address command in main information location Q0-M, instead queue entry handler 107A stores a subset of that new memory write address in supplemental information location, Q0-S. As described above, that subset may include the least significant bits (LSBs) of the new memory write access command, namely those bits of the new memory write access command that are different from the address that main information location Q0-M stores. Thus, this scenario results in a combination of multiple memory access commands in a single address queue location for which a hit occurs, namely address location Q0 in this particular example. When the entries corresponding to main information location Q0-M and supplemental information location Q0-S ultimately exit address queue 120, memory controller 105 stores data for these entries in consecutive addresses in system memory 110, in one embodiment.
However, if no hit results from the above-described compare operations, this condition indicates that the new memory write address does not reference address space in system memory 110 that is consecutive or adjacent with respect to one of the addresses that main information locations Q0-M, Q1-M, . . . Q7-M stores. In this scenario, address queue 120 stores the new memory write address as a full target address entry in queue address location Q1, namely the main information location Q1-M thereof. Alternatively, address queue 120 advances the memory address command in location Q0-M to location Q1-M and stores the new memory write address in location Q0-M. In contrast to the immediately preceding scenario, this scenario does not result in a combination of multiple memory access commands or entries at a single address queue location. Rather, in this particular scenario, two memory access commands that address non-consecutive address space in system memory 110 result in the storing of the referenced addresses in respective different queue address locations Q0 and Q1.
The above description notes that the output of each address queue location couples to the input of the address queue location immediately below in address queue 120. The output of each address queue location also couples to a respective comparator of comparator bank 107C as shown in
Queue entry handler 107A receives the new memory access command, as per block 310. Comparators C0, C1, . . . C7 receive the target address of the new memory access command from queue entry handler 107A. Comparators C0, C1, . . . C7 compare the non-column address portion of the target address of the new memory access command with the non-column address portion of the target address of each of main information locations Q0-M, Q1-M, . . . Q7-M in the address queue, as per block 315. If the compare operation results in a hit, as per block 320, then the non-column address portion of the target address of the new memory access command matches the non-column address portion of the target address of an entry already in a main information location of the address queue, for example the target address in the first queue entry Q0-M. This match or hit indicates that the target address of the new memory access command is consecutive with respect to the target address of the address command stored in Q0-M, as per block 325. In this case, the address queue need not store the entire target address of the new memory access command. Rather, the address queue stores a subset of the target address of the new memory access command in the supplemental information location Q0-S of address queue entry Q0 where the match occurred. Process flow then continues back to block 305 at which memory controller 105 receives the next new memory access command and the process repeats.
However, if no hit occurs at block 320, then the target address of the new memory access command is not consecutive with respect to any address command entry that address queue 120 already stores. In this event, the address command entry in the first address queue location Q0 moves to the second address queue location Q1 and address queue 120 then stores the full target address of the new memory access command in queue address location Q0, namely in Q0-M. Process flow then continues back to block 305 at which memory controller 105 receives the next new memory access command and the process repeats.
In one embodiment, the compare operation 315 checks to determine if the new memory access command refers to a target address in memory in the same memory row as an entry already in a main information location of the address queue. In another embodiment, the compare operation 315 checks to determine if the new memory access command refers to a target address in memory on the same memory page as an entry already in a main information location of the address queue. If the compare operation determines that the new memory access command does refer to a target address in memory on the same page as an entry already in a main information location of the address queue, then a hit occurs at decision block 320. In the event of such a hit, address queue 120 stores the entire column address of the new memory access command as an entry in the address queue. While this increases the size of the supplemental information locations of the address queue, it also increases the chances that the address queue will use the supplemental information location. In one embodiment, the address queue 120 stores entire store commands including the target address, type bits and tag bits.
The foregoing discloses a memory controller system that in one embodiment combines, within an address queue, address commands that point to consecutive locations in memory. These address commands or memory access commands may include write operations such as store operations. These address commands may also include read operations such as load operations. In one embodiment, the memory controller combines address commands that exhibit consecutive target addresses in the same queue address location or entry within the address queue. In another embodiment the memory controller combines, within a queue address location or queue entry location, related address commands that include target addresses within the same page of memory. This methodology may perform especially well for instruction streams whose instructions frequently reference consecutive target addresses, such as in the case of streaming data, for example. By providing expanded queue address locations with both a main information location and a supplemental information location, the address queue may combine multiple address commands in one queue address location or entry. While the particular example above shows a methodology for queuing memory access commands such as write commands, the methodology applies as well to read commands. Although the specific embodiment shown involves an address queue in a memory controller for a system memory, the methodology applies to other address queues as well. For example, the methodology applies to an address queue in an address controller for a media drive such as a magnetic or optical media drive, Flash memory drives and other address queues for both volatile and non-volatile storage. In actual practice, memory 110 of
Modifications and alternative embodiments of this invention will be apparent to those skilled in the art in view of this description of the invention. Accordingly, this description teaches those skilled in the art the manner of carrying out the invention and is intended to be construed as illustrative only. The forms of the invention shown and described constitute the present embodiments. Persons skilled in the art may make various changes in the shape, size and arrangement of parts. For example, persons skilled in the art may substitute equivalent elements for the elements illustrated and described here. Moreover, persons skilled in the art after having the benefit of this description of the invention may use certain features of the invention independently of the use of other features, without departing from the scope of the invention.
Number | Name | Date | Kind |
---|---|---|---|
5450600 | Abe | Sep 1995 | A |
5513135 | Dell | Apr 1996 | A |
5613155 | Baldiga et al. | Mar 1997 | A |
5644786 | Gallagher et al. | Jul 1997 | A |
6101568 | Richardson | Aug 2000 | A |
6173382 | Dell | Jan 2001 | B1 |
6226695 | Kaiser | May 2001 | B1 |
6510100 | Grundon et al. | Jan 2003 | B2 |
6587912 | Leddige et al. | Jul 2003 | B2 |
6801620 | Smith et al. | Oct 2004 | B2 |
6807588 | Hoang et al. | Oct 2004 | B2 |
6931501 | Narayanaswamy | Aug 2005 | B1 |
7162550 | Douglas | Jan 2007 | B2 |
7299324 | Shrader et al. | Nov 2007 | B2 |
7392333 | Chiu | Jun 2008 | B2 |
20020059476 | Yamada | May 2002 | A1 |
20040019706 | Smith | Jan 2004 | A1 |
20050005261 | Severin | Jan 2005 | A1 |
20050240649 | Elkington | Oct 2005 | A1 |
Number | Date | Country | |
---|---|---|---|
20080091881 A1 | Apr 2008 | US |