Memory hub and access method having internal prefetch buffers

Information

  • Patent Grant
  • 8127081
  • Patent Number
    8,127,081
  • Date Filed
    Monday, August 4, 2008
    17 years ago
  • Date Issued
    Tuesday, February 28, 2012
    13 years ago
Abstract
A memory module includes a memory hub coupled to several memory devices. The memory hub includes history logic that predicts on the basis of read memory requests which addresses in the memory devices from which date are likely to be subsequently read. The history logic applies prefetch suggestions corresponding to the predicted addresses to a memory sequencer, which uses the prefetch suggestions to generate prefetch requests that are coupled to the memory devices. Data read from the memory devices responsive to the prefetch suggestions are stored in a prefetch buffer. Tag logic stores prefetch addresses corresponding to addresses from which data have been prefetched. The tag logic compares the memory request addresses to the prefetch addresses to determine if the requested read data are stored in the prefetch buffer. If so, the requested data are read from the prefetch buffer. Otherwise, the requested data are read from the memory devices.
Description
TECHNICAL FIELD

This invention relates to computer systems, and, more particularly, to a computer system having a memory hub coupling several memory devices to a processor or other memory access device.


BACKGROUND OF THE INVENTION

Computer systems use memory devices, such as dynamic random access memory (“DRAM”) devices, to store data that are accessed by a processor. These memory devices are normally used as system memory in a computer system. In a typical computer system, the processor communicates with the system memory through a processor bus and a memory controller. The processor issues a memory request, which includes a memory command, such as a read command, and an address designating the location from which data or instructions are to be read. The memory controller uses the command and address to generate appropriate command signals as well as row and column addresses, which are applied to the system memory. In response to the commands and addresses, data are transferred between the system memory and the processor. The memory controller is often part of a system controller, which also includes bus bridge circuitry for coupling the processor bus to an expansion bus, such as a PCI bus.


Although the operating speed of memory devices has continuously increased, this increase in operating speed has not kept pace with increases in the operating speed of processors. Even slower has been the increase in operating speed of memory controllers coupling processors to memory devices. The relatively slow speed of memory controllers and memory devices limits the data bandwidth between the processor and the memory devices.


In addition to the limited bandwidth between processors and memory devices, the performance of computer systems is also limited by latency problems that increase the time required to read data from system memory devices. More specifically, when a memory device read command is coupled to a system memory device, such as a synchronous DRAM (“SDRAM”) device, the read data are output from the SDRAM device only after a delay of several clock periods. Therefore, although SDRAM devices can synchronously output burst data at a high data rate, the delay in initially providing the data can significantly slow the operating speed of a computer system using such SDRAM devices.


One approach to alleviating the memory latency problem is to use multiple memory devices coupled to the processor through a memory hub. In a memory hub architecture, a system controller or memory controller is coupled to several memory modules, each of which includes a memory hub coupled to several memory devices. The memory hub efficiently routes memory requests and responses between the controller and the memory devices. Computer systems employing this architecture can have a higher bandwidth because a processor can access one memory device while another memory device is responding to a prior memory access. For example, the processor can output write data to one of the memory devices in the system while another memory device in the system is preparing to provide read data to the processor. Although computer systems using memory hubs may provide superior performance, they nevertheless often fail to operate at optimum speed for several reasons. For example, even though memory hubs can provide computer systems with a greater memory bandwidth, they still suffer from latency problems of the type described above. More specifically, although the processor may communicate with one memory device while another memory device is preparing to transfer data, it is sometimes necessary to receive data from one memory device before the data from another memory device can be used. In the event data must be received from one memory device before data received from another memory device can be used, the latency problem continues to slow the operating speed of such computer systems.


One technique that has been used to reduce latency in memory devices is to prefetch data, i.e., read data from system memory before the data are requested by a program being executed. Generally the data that are to be prefetched are selected based on a pattern of previously fetched data. The pattern may be as simple as a sequence of addresses from which data are fetched so that data can be fetched from subsequent addresses in the sequence before the data are needed by the program being executed. The pattern, which is known as a “stride,” may, of course, be more complex.


Although data prefetching can reduce memory access latencies in conventional computer systems, prefetching of data has not been effectively used in a manner that provides optimum performance in computer systems using memory hubs. In particular, the vast amount of data that can be addressed in a computer system having several memory hubs makes it difficult to accurately predict which data will be subsequently needed. Furthermore, even if the data that will be required can be correctly anticipated, it can be unduly time consuming to couple the data from memory devices in a memory module, and through a memory hub in the memory module to a prefetch buffer in the system controller or memory controller. The need to couple the data from the memory module to the prefetch buffer can also reduce the memory bandwidth of the system if the data are being prefetched at a time when normal memory accesses are being attempted.


There is therefore a need for a computer architecture that provides the advantages of a memory hub architecture and also minimize the latency problems common in such systems, thereby providing memory devices with high bandwidth and low latency.


SUMMARY OF THE INVENTION

A memory module that may be used in a computer system includes a plurality of memory devices coupled to a memory hub. The memory hub includes a link interface receiving memory requests for access to memory cells in at least one of the memory devices. A memory device interface couples memory requests to the memory devices and receives read data responsive to at least some of the memory requests. A history logic unit included in the memory hub receives memory requests from the link interface and predicts on the basis of the memory requests the addresses in the memory devices that are likely to be accessed. The history logic unit then generates prefetching suggestions indicative of the predicted addresses. The memory hub also includes a memory sequencer that couples memory requests to the memory device interface responsive to memory requests received from the link interface. The memory sequencer also generates and couples prefetching requests to the memory device interface responsive to prefetching suggestions received from the history logic unit. A prefetch buffer included in the memory hub receives and stores read data from memory cells being accessed responsive to the prefetching requests. Finally, a data read control unit included in the memory hub determines from a read memory request received from the link interface if the read data are stored in the prefetch buffer. If the read data are stored in the prefetch buffer, the read data are read from the prefetch buffer. If the read data are not stored in the prefetch buffer, the read data are read from the memory devices.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 is a block diagram of a computer system according to one example of the invention in which a memory hub is included in each of a plurality of memory modules.



FIG. 2 is a block diagram of a memory hub used in the computer system of FIG. 1, which contains a prefetch buffer according to one example of the invention.





DETAILED DESCRIPTION OF THE INVENTION

A computer system 100 according to one example of the invention is shown in FIG. 1. The computer system 100 includes a processor 104 for performing various computing functions, such as executing specific software to perform specific calculations or tasks. The processor 104 includes a processor bus 106 that normally includes an address bus, a control bus, and a data bus. The processor bus 106 is typically coupled to cache memory 108, which, as previously mentioned, is usually static random access memory (“SRAM”). Finally, the processor bus 106 is coupled to a system controller 110, which is also sometimes referred to as a “North Bridge” or “memory controller.”


The system controller 110 serves as a communications path to the processor 104 for a variety of other components. More specifically, the system controller 110 includes a graphics port that is typically coupled to a graphics controller 112, which is, in turn, coupled to a video terminal 114. The system controller 110 is also coupled to one or more input devices 118, such as a keyboard or a mouse, to allow an operator to interface with the computer system 100. Typically, the computer system 100 also includes one or more output devices 120, such as a printer, coupled to the processor 104 through the system controller 110. One or more data storage devices 124 are also typically coupled to the processor 104 through the system controller 110 to allow the processor 104 to store data or retrieve data from internal or external storage media (not shown). Examples of typical storage devices 124 include hard and floppy disks, tape cassettes, and compact disk read-only memories (CD-ROMs).


The system controller 110 is coupled to several memory modules 130a,b . . . n, which serve as system memory for the computer system 100. The memory modules 130 are preferably coupled to the system controller 110 through a high-speed link 134, which may be an optical or electrical communication path or some other type of communications path. In the event the high-speed link 134 is implemented as an optical communication path, the optical communication path may be in the form of one or more optical fibers, for example. In such case, the system controller 110 and the memory modules will include an optical input/output port or separate input and output ports coupled to the optical communication path. The memory modules 130 are shown coupled to the system controller 110 in a multi-drop arrangement in which the single high-speed link 134 is coupled to all of the memory modules 130. However, it will be understood that other topologies may also be used, such as a point-to-point coupling arrangement in which a separate high-speed link (not shown) is used to couple each of the memory modules 130 to the system controller 110. A switching topology may also be used in which the system controller 110 is selectively coupled to each of the memory modules 130 through a switch (not shown). Other topologies that may be used will be apparent to one skilled in the art.


Each of the memory modules 130 includes a memory hub 140 for controlling access to 8 memory devices 148, which, in the example illustrated in FIG. 2, are synchronous dynamic random access memory (“SDRAM”) devices. However, a fewer or greater number of memory devices 148 may be used, and memory devices other than SDRAM devices may, of course, also be used. The memory hub 140 is coupled to each of the system memory devices 148 through a bus system 150, which normally includes a control bus, an address bus and a data bus.


One example of the memory hub 140 of FIG. 1 is shown in FIG. 2. The memory hub 140 includes a link interface 152 that is coupled to the high-speed link 134. The nature of the link interface 152 will depend upon the characteristics of the high-speed link 134. For example, in the event the high-speed link 134 is implemented using an optical communications path, the link interface 152 will include an optical input/output port or separate input and output ports and will convert optical signals received through the optical communications path into electrical signals and electrical signals into optical signals that are transmitted to the optical communications path. In any case, the link interface 152 may include a variety of conventional interface circuitry such as, for example, a first-in, first-out buffer (not shown), for receiving and storing memory requests as they are received through the high-speed link 134. The memory requests can then be stored in the link interface until they can be processed by the memory hub 140.


A memory request received by the link interface 152 is processed by first transferring the request to a memory sequencer 160. The memory sequencer 160 converts the memory requests from the format output from the system controller 110 (FIG. 1) into a memory request having a format that can be used by the memory devices 148. These re-formatted request signals will normally include memory command signals, which are derived from memory commands contained in the memory request received by the memory hub 140, and row and column address signals, which are derived from an address contained in the memory request received by the memory hub 140. In the event the memory request is a write memory request, the re-formatted request signals will normally include write data signals which are derived from write data contained in the memory request received by the memory hub 140. For example, where the memory devices 148 are conventional DRAM devices, the memory sequencer 160 will output row address signals, a row address strobe (“RAS”) signal, an active low write/active high read signal (“W*/R”), column address signals and a column address strobe (“CAS”) signal. The re-formatted memory requests are preferably output from the sequencer 160 in the order they will be used by the memory devices 148.


The memory sequencer 160 applies the re-formatted memory requests to a memory device interface 166. The nature of the memory device interface 166 will again depend upon the characteristics of the memory devices 148. In any case, the memory device interface 166, like the link interface 152, may include a FIFO buffer (not shown), for receiving and storing one or more memory requests as they are received from the link interface 152. The memory request can be stored in the FIFO buffer until they can be processed by the memory devices 148. Alternatively, the memory device interface can simply pass the memory requests to the memory devices 148.


In the event the memory device interface 166 stores several memory requests until they can be processed by the memory devices 148, the memory device interface 166 may re-order the memory requests so that they are applied to the memory devices 148 in some other order. For example, the memory requests may be stored in the interface 166 in a manner that causes one type of request, e.g., read requests, to be processed before other types of requests, e.g., write requests.


The memory requests are described above as being received by the memory hub 140 in a format that is different from the format that the memory requests are applied to the memory devices 148. However, the system controller 110 may instead re-format memory requests from the processor 104 (FIG. 1) to a format that can be used by the memory devices 148. In such case, it is not necessary for the sequencer 160 to re-format the memory request. Instead, the sequencer 160 simply schedules the re-formatted memory request signals in the order needed for use by the memory devices 148. The memory request signals for one or more memory requests are then transferred to the memory device interface 166 so they can subsequently be applied to the memory devices 148.


As previously explained, one of the disadvantages of using memory hubs is the increased latency they can sometimes create. As also previously explained, prefetch approaches that are traditionally used to reduce memory read latency are not well suited to a memory system using memory hubs. In contrast, the memory hub 140 shown in FIG. 2 provides relatively low memory read latency by including a prefetch system 170 in the memory hub 140 that correctly anticipates which data will be needed during execution of a program, and then prefetches those data and stores them in one or more buffers that are part of the prefetch system 170. The prefetch system 170 includes several prefetch buffers 176, the number of which can be made variable depending upon operating conditions, as explained in greater detail below. The prefetch buffers 176 receive prefetched data from the memory device interface 166. The data are stored in the prefetch buffers 176 so that they will be available for a subsequent memory access. The data are then coupled through a multiplexer 178 to the link interface 152.


The prefetch system 170 also includes history logic 180 that receives the memory requests from the link interface 152. The history logic 180 analyzes the memory request using conventional algorithms to detect a pattern or stride from which future memory requests can be predicted. The history logic 180 couples prefetching suggestions to the memory sequencer 160, which then generates corresponding prefetching requests to read the suggested data. The memory sequencer 160 preferably prefetches data from the memory devices 148 for storage in the prefetch buffers 176 when the memory hub 140 is not busy responding to memory requests from the system controller 110. More specifically, when the sequencer 160 is not busy servicing memory requests from the link interface 152, the sequencer 160 generates the prefetch requests based on the prefetching suggestions, which are applied to the memory device interface 166. Prefetch data read from the memory devices 148 responsive to the prefetching requests are stored in the prefetch buffers 176. The prefetch data are stored in the prefetch buffers 176 along with identifying information, such as the address from which the data were read to allow the correct data to be subsequently read from the memory devices 148.


Although data may be prefetched from any address in the memory devices 148, the data are preferably prefetched only from rows in the memory devices 148 that are currently active or “open” so that the prefetching will not require a row of memory cells in the memory devices 148 to be precharged.


The history logic 180 may also detect the existence of several strides from which different sets of memory requests can be predicted. For example, the history logic 180 may detect a first stride containing addresses 100, 101, 102 . . . , a second stride containing addresses 305, 405, 505 . . . , and a third stride containing addresses 300, 304, 308 . . . . Data being read responsive to memory requests that are in different strides are preferably stored in different sections of the prefetch buffers 176. The data read from addresses 100, 101, 102 . . . in the first stride are preferably stored in a first section of the prefetch buffers 176, data read from addresses 305, 405, 505 . . . in the second stride are preferably stored in a second section of the prefetch buffers 176, data read from addresses 300, 304, 308 . . . a third stride are preferably stored in a third section of the prefetch buffers 176, etc. Therefore, the history logic 180 also preferably determines the number of strides in existence and enables or creates respective sections of the prefetch buffers 176 to store the data read from the addresses that are in the corresponding stride. The sections of the prefetch buffers 176 may be enabled or created using a variety of conventional techniques. For example, the prefetch buffers 176 may be implemented as a single static random access memory (“SRAM”) device that is partitioned into a number of sections corresponding to the number of strides in existence. The prefetch buffers 176 may also be separate registers or memory devices that are enabled as they are needed to store data from a respective stride. Other means of dividing the prefetch buffers 176 into different sections will be apparent to one skilled in the art. For example, in addition to adjusting the number of sections created in the prefetch buffers 176, the history logic 180 may adjust the size of each prefetch buffer section to match the amount of prefetch data in each stride.


The history logic 180 may also selectively enable or disable prefetching depending on whether or not a stride is detected by the history logic 180. However, prefetching may also be enabled all of the time. If the memory requests applied to the history logic 180 have very little locality, i.e., they are for addresses in different rows of memory or are somewhat random, it may be desirable to disable prefetching. If, however, the memory requests applied to the history logic 180 have good locality, the history logic 180 may enable prefetching. Alternatively, the history logic 180 may enable or disable prefetching based on the percentage of memory requests that result in reading the requested data from the prefetch buffers 176 rather than from the memory devices 148.


When a memory module 130 containing a memory hub 140 receives a read memory request, it first determines whether or not the data or instruction called for by the request is stored in the prefetch buffers 176. This determination is made by coupling the memory request to tag logic 186. The tag logic 186 receives prefetch addresses from the history logic 180 corresponding to each prefetch suggestion. Alternatively, the tag logic 186 could receive prefetch addresses from the memory sequencer 160 corresponding to each prefetch request coupled to the memory device interface 166. Other means could also be used to allow the tag logic 186 to determine if data called for by a memory read request are stored in the prefetch buffer 176. In any case, the tag logic 186 stores the prefetch addresses to provide a record of the data that have been stored in the prefetch buffers 176. Using conventional techniques, the tag logic 186 compares the address in each memory request received from the link interface 152 with the prefetch addresses stored in the tag logic 186 to determine if the data called for by the memory request are stored in the prefetch buffers 176. If the tag logic 186 determines the data are not stored in the prefetch buffers 176, it couples a low HIT/MISS* signal to the memory sequencer 160.


The memory sequencer 160 responds to a low HIT/MISS* signal by coupling the memory request received from the link interface 152 to the memory device interface 166 for coupling to the memory devices 148. The data called for by the memory request are then read from the memory devices 148 and coupled to the memory device interface 166. The low HIT/MISS* signal is also applied to the multiplexer 178, thereby causing the multiplexer 178 to couple the read data from the memory device interface 166 to the link interface 152. The time required for all of these events to occur responsive to a memory request can be considerable, and may result in a considerable read latency. It is for this reason that data prefetching is desirable.


If the Tag Logic 186 determines the data called for by a memory request are stored in the prefetch buffers 176, it couples a high HIT/MISS* signal to the memory sequencer 160. The sequencer 160 then couples the memory request received from the link interface 152 to the prefetch buffers 176 rather than to the memory device interface 166, as was the case for a low HIT/MISS* signal. The data called for by the memory request are then read from the prefetched buffers 176 and applied to the multiplexer 178. The high HIT/MISS* signal causes the multiplexer 178 to couple the read data from the prefetch buffers to the link interface 152.


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.

Claims
  • 1. A system for prefetching data, comprising: a link interface configured to receive a memory request;a memory device interface operable to transmit memory requests and to receive read data responsive to at least some of the transmitted memory requests;a storage device configured to store data; anda prefetch circuit coupled to the link interface, the memory device interface and the storage device, the prefetch circuit being configured to receive memory requests from the link interface and to receive at least some of the read data received by the memory device interface, the prefetch circuit operable to: detect a pattern from which addresses to the memory requests that are likely to be accessed are predicted based on the memory requests previously received by the link interface,based on the pattern, generate prefetch suggestions indicative of addresses corresponding to the predicted memory requests,couple read memory requests to the memory device interface according to the prefetch suggestions, andcause at least some of the read data received by the memory device interface to be stored in the storage device,wherein the prefetch circuit comprises a data read control circuit coupled to the memory device interface, the link interface, and the storage device, the data read control circuit operable to determine from read memory requests received by the link interface if the data corresponding to the read memory requests are stored in the storage device, the data read control circuit further operable to transfer the data corresponding to the read memory requests from the storage device if the data corresponding to the read memory requests are stored in the storage device,wherein the prefetch circuit is operable to transfer the read memory requests received by the link interface to the memory device interface if the data corresponding to the read memory requests are not stored in the storage device.
  • 2. The system of claim 1 wherein the storage device comprises a prefetch buffer configured to provide the read data stored in the storage device to the link interface responsive to subsequent memory requests received by the link interface.
  • 3. The system of claim 1 wherein the storage device comprises a single static random access memory device partitioned into a plurality of sections corresponding a plurality of strides.
  • 4. The system of claim 1 wherein the data read control circuit comprises a tag logic unit coupled to the link interface and the storage device, the tag logic unit operable to store addresses of the data stored in the storage device, the tag logic unit further operable to receive memory requests from the link interface, compare the addresses of the received memory requests to the addresses of the stored data, and generate a hit control signal indicative of whether an address match was determined.
  • 5. The system of claim 4 wherein the data read control circuit comprises a multiplexer having data inputs coupled to the storage device, to the tag logic unit and to the memory device interface, and a data output coupled to the link interface, the multiplexer operable to transfer the data input from the storage device to the data output responsive to an active hit control signal received from the tag logic unit, and to transfer data input form the memory device interface to the data output responsive to an inactive hit control signal received from the tag logic unit.
  • 6. A processor-based system, comprising: a processor;an input device coupled to the processor;an output device coupled to the processor;a storage device coupled to the processor; a plurality of memory modules, each of the memory modules comprising:a plurality of memory devices; anda system for prefetching data, comprising: a storage device configured to store data; anda prefetch circuit coupled to the processor, the storage device, and the plurality of memory devices, the prefetch circuit being configured to:receive memory requests from the processor,receive at least some of the read data received from the plurality of memory devices,detect a pattern from which addresses to the memory requests that are likely to be accessed are predicted based on the memory requests previously received from the processor,based on the pattern, generate prefetch suggestions indicative of addresses corresponding to the predicted memory requests,couple read memory requests to the memory devices according to the prefetch suggestions, andcause at least some of the read data received from the plurality of memory devices to be stored in the storage device,wherein the prefetch circuit further comprises a data read control circuit coupled to the plurality of memory devices, processor, and the storage device, the data read control circuit operable to determine from read memory requests received from the processor if the data corresponding to the read memory requests are stored in the storage device, the data read control circuit further operable to transfer the data corresponding to the read memory requests from the storage device to the processor if the data corresponding to the read memory requests are stored in the storage device, the prefetch circuit further being operable to transfer the read memory requests received from the processor to the plurality of memory device if the data corresponding to the read memory requests are not stored in the storage device.
  • 7. The system of claim 6 wherein the storage device comprises a prefetch buffer configured to provide the read data stored in the storage device to the processor responsive to subsequent memory requests received from the processor.
  • 8. The system of claim 6 wherein the storage device comprises a single static random access memory device partitioned into a plurality of sections corresponding a plurality of strides.
  • 9. The system of claim 6 wherein the data read control circuit comprises a tag logic unit coupled to the processor and the storage device, the tag logic unit operable to store addresses of the data stored in the storage device, the tag logic unit further operable to receive memory requests from the processor, compare the addresses of the received memory requests to the addresses of the stored data, and generate a hit control signal indicative of whether an address match was determined.
  • 10. The system of claim 9 wherein the data read control circuit comprises a multiplexer having data inputs coupled to the storage device, to the tag logic unit and to the plurality of memory devices, the multiplexer operable to transfer the data input from the storage device to the processor responsive to an active hit control signal received from the tag logic unit, and to transfer data input from the plurality of memory devices to the processor responsive to an inactive hit control signal received from the tag logic unit.
  • 11. A method of prefetching data in a memory system having a memory module containing a plurality of memory devices, the method comprising: receiving memory requests at the memory module for access to memory cells in the plurality of memory devices;coupling the received memory requests to the memory devices within the memory module, at least some of the memory requests being memory requests to read data;receiving read data within the memory module responsive to the read memory requests;prefetching data from the memory devices that are likely to be accessed using predicted addresses based on the received memory requests and storing the prefetched data;dividing the stored prefetched data into a plurality of sections each corresponding to a respective stride;storing the prefetched data from the memory devices indicative of the predicted addresses in the section corresponding to the respective stride;transferring the prefetched data from the memory module responsive to subsequent memory requests;storing in the memory module prefetch addresses corresponding to the stored prefetched data;receiving memory request addresses at the memory module corresponding to subsequent memory requests;comparing each received memory request address to the prefetch addresses within the memory module;determining that the requested read data are stored in the memory module as prefetched data in the event of an address match;transferring read data stored as prefetched data from the memory module responsive to determining that the requested read data are stored as prefetched data in the memory module; andtransferring read data from the memory devices responsive to determining that the requested read data are not stored as prefetched data, the read data being transferred from the memory module.
  • 12. The method of claim 11, further comprising prefetching data from memory cells that are currently accessed such that the prefetching does not require the selected memory cells to be precharged.
  • 13. The method of claim 11 wherein prefetching data from the memory devices comprises prefetching data only when the memory requests are not being received.
  • 14. The method of claim 11 further comprising selectively enabling prefetching based on the nature of the received memory requests.
  • 15. The method of claim 11 wherein the act of receiving memory requests for access to memory cells in a plurality of memory devices comprises receiving optical signals at the memory module corresponding to the memory requests.
  • 16. A method of prefetching data within a memory module, comprising: receiving memory requests at the memory module;coupling the received memory requests to the memory devices within the memory module, at least some of the memory requests being memory requests to read data;receiving read data responsive to the read memory requests;prefetching data from the memory devices within the module that are likely to be accessed using predicted addresses devices based on the received memory requests;storing the prefetched data within the memory module;dividing the stored prefetched data into a plurality of sections each corresponding to a respective stride;storing the prefetched data indicative of the predicted addresses in the section corresponding to the respective stride;transferring the prefetched data stored in the memory module from the memory module responsive to subsequent memory requests;storing prefetch addresses corresponding to the stored prefetched data within the memory module;receiving memory request addresses at the memory module corresponding to subsequent memory requests;comparing each received memory request address to the prefetch addresses within the memory module;in the event of an address match, determining within the memory module that the requested read data are stored as prefetched data within the memory module;transferring from the memory module read data stored as prefetched data within the memory module responsive to determining that the requested read data are stored within the memory module as prefetched data; andtransferring read data from the memory devices responsive to determining that the requested read data are not stored within the memory module as prefetched data.
  • 17. The method of claim 16 further comprising prefetching data from memory cells in the memory devices that are currently accessed such that the prefetching does not require the selected memory cells to be precharged.
  • 18. The method of claim 16 wherein prefetching data from the memory devices comprises prefetching data only when the memory requests are not being received by the memory module.
  • 19. The method of claim 16 further comprising selectively enabling prefetching based on the nature of the memory requests received by the memory module.
  • 20. The method of claim 16 wherein the act of receiving memory requests for access to memory cells in a plurality of memory devices comprises receiving optical signals at the memory module corresponding to the memory requests.
Parent Case Info

This application is a continuation of U.S. Pat. No. 7,412,566 Ser. No. 11/510,150 filed Aug. 24, 2006, which is a continuation of U.S. Pat. No. 7,260,685 Ser. No. 10/601,252 filed Jun. 20, 2003. The previously mentioned applications and patents are all hereby incorporated by reference in their entirety.

US Referenced Citations (326)
Number Name Date Kind
3742253 Kronies Jun 1973 A
4045781 Levy et al. Aug 1977 A
4240143 Besemer et al. Dec 1980 A
4245306 Besemer et al. Jan 1981 A
4253144 Bellamy et al. Feb 1981 A
4253146 Bellamy et al. Feb 1981 A
4608702 Hirzel et al. Aug 1986 A
4707823 Holdren et al. Nov 1987 A
4724520 Athanas et al. Feb 1988 A
4831520 Rubinfeld et al. May 1989 A
4891808 Williams Jan 1990 A
4930128 Suzuki et al. May 1990 A
4953930 Ramsey et al. Sep 1990 A
5133059 Ziegler et al. Jul 1992 A
5241506 Motegi et al. Aug 1993 A
5243703 Farmwald et al. Sep 1993 A
5251303 Fogg, Jr. et al. Oct 1993 A
5269022 Shinjo et al. Dec 1993 A
5313590 Taylor May 1994 A
5317752 Jewett et al. May 1994 A
5319755 Farmwald et al. Jun 1994 A
5327553 Jewett et al. Jul 1994 A
5355391 Horowitz et al. Oct 1994 A
5432823 Gasbarro et al. Jul 1995 A
5432907 Picazo, Jr. et al. Jul 1995 A
5442770 Barratt Aug 1995 A
5461627 Rypinski Oct 1995 A
5465229 Bechtolsheim et al. Nov 1995 A
5465343 Henson et al. Nov 1995 A
5479370 Furuyama et al. Dec 1995 A
5497476 Oldfield et al. Mar 1996 A
5502621 Schumacher et al. Mar 1996 A
5544319 Acton et al. Aug 1996 A
5566325 Bruce, II et al. Oct 1996 A
5577220 Combs et al. Nov 1996 A
5581767 Katsuki et al. Dec 1996 A
5606717 Farmwald et al. Feb 1997 A
5613075 Wade et al. Mar 1997 A
5619670 Shindo Apr 1997 A
5638334 Farmwald et al. Jun 1997 A
5638534 Mote, Jr. Jun 1997 A
5659713 Goodwin et al. Aug 1997 A
5659798 Blumrich et al. Aug 1997 A
5687325 Chang Nov 1997 A
5706224 Srinivasan et al. Jan 1998 A
5710733 Chengson et al. Jan 1998 A
5715456 Bennett et al. Feb 1998 A
5729709 Harness Mar 1998 A
5748616 Riley May 1998 A
5796413 Shipp et al. Aug 1998 A
5818844 Singh et al. Oct 1998 A
5819304 Nilsen et al. Oct 1998 A
5822255 Uchida Oct 1998 A
5832250 Whittaker Nov 1998 A
5838931 Regenold et al. Nov 1998 A
5875352 Gentry et al. Feb 1999 A
5875454 Craft et al. Feb 1999 A
5887159 Burrows Mar 1999 A
5889714 Schumann et al. Mar 1999 A
5928343 Farmwald et al. Jul 1999 A
5953743 Jeddeloh Sep 1999 A
5963942 Igata Oct 1999 A
5966724 Ryan Oct 1999 A
5973935 Schoenfeld et al. Oct 1999 A
5973951 Bechtolsheim et al. Oct 1999 A
5978567 Rebane et al. Nov 1999 A
5987196 Noble Nov 1999 A
6006340 O'Connell Dec 1999 A
6011741 Wallace et al. Jan 2000 A
6023726 Saksena Feb 2000 A
6029250 Keeth Feb 2000 A
6031241 Silfvast et al. Feb 2000 A
6033951 Chao Mar 2000 A
6038630 Foster et al. Mar 2000 A
6061263 Boaz et al. May 2000 A
6061296 Ternullo, Jr. et al. May 2000 A
6067262 Irrinki et al. May 2000 A
6067649 Goodwin May 2000 A
6073190 Rooney Jun 2000 A
6076139 Welker et al. Jun 2000 A
6079008 Clery, III Jun 2000 A
6092158 Harriman et al. Jul 2000 A
6098158 Lay et al. Aug 2000 A
6105075 Ghaffari Aug 2000 A
6111757 Dell et al. Aug 2000 A
6125431 Kobayashi Sep 2000 A
6128703 Bourekas et al. Oct 2000 A
6128706 Bryg et al. Oct 2000 A
6131149 Lu et al. Oct 2000 A
6134624 Burns et al. Oct 2000 A
6137709 Boaz et al. Oct 2000 A
6144587 Yoshida Nov 2000 A
6145033 Chee Nov 2000 A
6157743 Goris et al. Dec 2000 A
6157962 Hodges et al. Dec 2000 A
6167465 Parvin et al. Dec 2000 A
6167486 Lee et al. Dec 2000 A
6175571 Haddock et al. Jan 2001 B1
6185352 Hurley Feb 2001 B1
6185676 Poplingher et al. Feb 2001 B1
6186400 Dvorkis et al. Feb 2001 B1
6191663 Hannah Feb 2001 B1
6201724 Ishizaki et al. Mar 2001 B1
6208180 Fisch et al. Mar 2001 B1
6212590 Melo et al. Apr 2001 B1
6216178 Stracovsky et al. Apr 2001 B1
6216219 Cai et al. Apr 2001 B1
6219725 Diehl et al. Apr 2001 B1
6223301 Santeler et al. Apr 2001 B1
6233376 Updegrove May 2001 B1
6243769 Rooney Jun 2001 B1
6243831 Mustafa et al. Jun 2001 B1
6246618 Yamamoto et al. Jun 2001 B1
6247107 Christie Jun 2001 B1
6249802 Richardson et al. Jun 2001 B1
6252821 Nizar et al. Jun 2001 B1
6256692 Yoda et al. Jul 2001 B1
6266730 Perino et al. Jul 2001 B1
6272609 Jeddeloh Aug 2001 B1
6285349 Smith Sep 2001 B1
6286083 Chin et al. Sep 2001 B1
6294937 Crafts et al. Sep 2001 B1
6301637 Krull et al. Oct 2001 B1
6327642 Lee et al. Dec 2001 B1
6330205 Shimizu et al. Dec 2001 B2
6330639 Fanning et al. Dec 2001 B1
6347055 Motomura Feb 2002 B1
6349363 Cai et al. Feb 2002 B2
6356573 Jonsson et al. Mar 2002 B1
6367074 Bates et al. Apr 2002 B1
6370068 Rhee Apr 2002 B2
6370611 Callison et al. Apr 2002 B1
6373777 Suzuki Apr 2002 B1
6381190 Shinkai Apr 2002 B1
6389514 Rokicki May 2002 B1
6392653 Malandain et al. May 2002 B1
6401149 Dennin et al. Jun 2002 B1
6401213 Jeddeloh Jun 2002 B1
6405280 Ryan Jun 2002 B1
6421744 Morrison et al. Jul 2002 B1
6430696 Keeth Aug 2002 B1
6433785 Garcia et al. Aug 2002 B1
6434639 Haghighi Aug 2002 B1
6434696 Kang Aug 2002 B1
6434736 Schaecher et al. Aug 2002 B1
6438622 Haghighi et al. Aug 2002 B1
6438668 Esfahani et al. Aug 2002 B1
6449308 Knight, Jr. et al. Sep 2002 B1
6453393 Holman et al. Sep 2002 B1
6457116 Mirsky et al. Sep 2002 B1
6460108 McCoskey et al. Oct 2002 B1
6460114 Jeddeloh Oct 2002 B1
6462978 Shibata et al. Oct 2002 B2
6463059 Movshovich et al. Oct 2002 B1
6467013 Nizar Oct 2002 B1
6470422 Cai et al. Oct 2002 B2
6473828 Matsui Oct 2002 B1
6477592 Chen et al. Nov 2002 B1
6477614 Leddige et al. Nov 2002 B1
6477621 Lee et al. Nov 2002 B1
6479322 Kawata et al. Nov 2002 B2
6487556 Downs et al. Nov 2002 B1
6487628 Duong et al. Nov 2002 B1
6490188 Nuxoll et al. Dec 2002 B2
6493803 Pham et al. Dec 2002 B1
6496193 Surti et al. Dec 2002 B1
6496909 Schimmel Dec 2002 B1
6501471 Venkataraman et al. Dec 2002 B1
6502161 Perego et al. Dec 2002 B1
6505287 Uematsu Jan 2003 B2
6523092 Fanning Feb 2003 B1
6523093 Bogin et al. Feb 2003 B1
6526483 Cho et al. Feb 2003 B1
6526498 Mirsky et al. Feb 2003 B1
6539490 Forbes et al. Mar 2003 B1
6552564 Forbes et al. Apr 2003 B1
6553476 Ayaki et al. Apr 2003 B1
6553479 Mirsky et al. Apr 2003 B2
6564329 Cheung et al. May 2003 B1
6587912 Leddige et al. Jul 2003 B2
6590816 Perner Jul 2003 B2
6594713 Fuoco et al. Jul 2003 B1
6594722 Willke, II et al. Jul 2003 B1
6598154 Vaid et al. Jul 2003 B1
6615325 Mailloux et al. Sep 2003 B2
6622227 Zumkehr et al. Sep 2003 B2
6628294 Sadowsky et al. Sep 2003 B1
6629220 Dyer Sep 2003 B1
6631440 Jenne et al. Oct 2003 B2
6633959 Arimilli et al. Oct 2003 B2
6636110 Ooishi et al. Oct 2003 B1
6646929 Moss et al. Nov 2003 B1
6647470 Janzen Nov 2003 B1
6658509 Bonella et al. Dec 2003 B1
6662304 Keeth et al. Dec 2003 B2
6665202 Lindahl et al. Dec 2003 B2
6667895 Jang et al. Dec 2003 B2
6681292 Creta et al. Jan 2004 B2
6681302 Cho et al. Jan 2004 B2
6697926 Johnson et al. Feb 2004 B2
6704817 Steinman et al. Mar 2004 B1
6715018 Farnworth et al. Mar 2004 B2
6718440 Maiyuran et al. Apr 2004 B2
6721195 Brunelle et al. Apr 2004 B2
6724685 Braun et al. Apr 2004 B2
6728800 Lee et al. Apr 2004 B1
6731548 Pax May 2004 B2
6735679 Herbst et al. May 2004 B1
6735682 Segelken et al. May 2004 B2
6745275 Chang Jun 2004 B2
6751113 Bhakta et al. Jun 2004 B2
6751703 Chilton Jun 2004 B2
6751722 Mirsky et al. Jun 2004 B2
6754117 Jeddeloh Jun 2004 B2
6754812 Abdallah et al. Jun 2004 B1
6756661 Tsuneda et al. Jun 2004 B2
6760833 Dowling Jul 2004 B1
6771538 Shukuri et al. Aug 2004 B2
6772295 Spencer et al. Aug 2004 B2
6775747 Venkatraman Aug 2004 B2
6782466 Steele et al. Aug 2004 B1
6785780 Klein et al. Aug 2004 B1
6788104 Singh et al. Sep 2004 B2
6789173 Tanaka et al. Sep 2004 B1
6792059 Yuan et al. Sep 2004 B2
6792496 Aboulenein et al. Sep 2004 B2
6795899 Dodd et al. Sep 2004 B2
6799246 Wise et al. Sep 2004 B1
6799268 Boggs et al. Sep 2004 B1
6804760 Wiliams Oct 2004 B2
6804764 LaBerge et al. Oct 2004 B2
6807630 Lay et al. Oct 2004 B2
6811320 Abbott Nov 2004 B1
6816947 Huffman Nov 2004 B1
6820181 Jeddeloh et al. Nov 2004 B2
6821029 Grung et al. Nov 2004 B1
6823023 Hannah Nov 2004 B1
6829705 Smith Dec 2004 B2
6832303 Tanaka Dec 2004 B2
6845409 Talagala et al. Jan 2005 B1
6889304 Perego et al. May 2005 B2
6901500 Hussain et al. May 2005 B1
6904556 Walton et al. Jun 2005 B2
6910109 Holman et al. Jun 2005 B2
6928528 Hewitt Aug 2005 B1
6941433 Libby et al. Sep 2005 B1
6947672 Jiang et al. Sep 2005 B2
6980042 LaBerge Dec 2005 B2
7107415 Jeddeloh et al. Sep 2006 B2
7117316 Jeddeloh Oct 2006 B2
7120727 Lee et al. Oct 2006 B2
7133972 Jeddeloh Nov 2006 B2
7162567 Jeddeloh Jan 2007 B2
7188219 Jeddeloh Mar 2007 B2
7213082 Jeddeloh May 2007 B2
7249236 Jeddeloh et al. Jul 2007 B2
7254075 Woo et al. Aug 2007 B2
7260685 Lee et al. Aug 2007 B2
7315053 Hosomi et al. Jan 2008 B2
7318130 Morrow et al. Jan 2008 B2
7330992 Jeddeloh et al. Feb 2008 B2
7412566 Lee et al. Aug 2008 B2
20010039612 Lee Nov 2001 A1
20020002656 Honma et al. Jan 2002 A1
20020078298 Jeddeloh Jun 2002 A1
20020112119 Halbert et al. Aug 2002 A1
20020116588 Beckert et al. Aug 2002 A1
20020120709 Chow et al. Aug 2002 A1
20020144064 Fanning Oct 2002 A1
20020178319 Sanchez-Olea Nov 2002 A1
20030005223 Coulson et al. Jan 2003 A1
20030014578 Pax Jan 2003 A1
20030043158 Wasserman et al. Mar 2003 A1
20030043426 Baker et al. Mar 2003 A1
20030065836 Pecone Apr 2003 A1
20030093630 Richard et al. May 2003 A1
20030095559 Sano et al. May 2003 A1
20030149809 Jensen et al. Aug 2003 A1
20030156639 Liang Aug 2003 A1
20030158995 Lee et al. Aug 2003 A1
20030163649 Kapur et al. Aug 2003 A1
20030177320 Sah et al. Sep 2003 A1
20030193927 Hronik Oct 2003 A1
20030217223 Nino, Jr. et al. Nov 2003 A1
20030223295 Ozguz et al. Dec 2003 A1
20030229762 Maiyuran et al. Dec 2003 A1
20030235072 Kim et al. Dec 2003 A1
20040006671 Handgen et al. Jan 2004 A1
20040015666 Rojas et al. Jan 2004 A1
20040019728 Sharma Jan 2004 A1
20040022094 Radhakrishnan et al. Feb 2004 A1
20040024959 Taylor Feb 2004 A1
20040034753 Jeddeloh Feb 2004 A1
20040039886 Christofferson et al. Feb 2004 A1
20040044833 Ryan Mar 2004 A1
20040049649 Durrant Mar 2004 A1
20040064602 George Apr 2004 A1
20040122988 Han et al. Jun 2004 A1
20040126115 Levy et al. Jul 2004 A1
20040128449 Osborne et al. Jul 2004 A1
20040144994 Lee et al. Jul 2004 A1
20040158677 Dodd Aug 2004 A1
20040170196 Susnow Sep 2004 A1
20040236885 Fredriksson et al. Nov 2004 A1
20040268061 Khare et al. Dec 2004 A1
20050044327 Howard et al. Feb 2005 A1
20050060533 Woo et al. Mar 2005 A1
20050071542 Weber et al. Mar 2005 A1
20050078506 Rao et al. Apr 2005 A1
20050105350 Zimmerman May 2005 A1
20050166006 Talbot et al. Jul 2005 A1
20050223161 Jeddeloh Oct 2005 A1
20050246558 Ku Nov 2005 A1
20050286506 LaBerge Dec 2005 A1
20060085616 Zeighami et al. Apr 2006 A1
20060168407 Stern Jul 2006 A1
20060200642 LaBerge Sep 2006 A1
20060206679 Jeddeloh et al. Sep 2006 A1
20060212655 Jeddeloh et al. Sep 2006 A1
20060212666 Jeddeloh Sep 2006 A1
20070011392 Lee et al. Jan 2007 A1
20070033353 Jeddeloh Feb 2007 A1
20070055817 Jeddeloh Mar 2007 A1
20070088915 Archambault et al. Apr 2007 A1
20070113027 Jeddeloh May 2007 A1
20070271435 Jeddeloh et al. Nov 2007 A1
Foreign Referenced Citations (21)
Number Date Country
0395559 Oct 1990 EP
0843261 May 1998 EP
0849685 Jun 1998 EP
1 199 637 Apr 2002 EP
2244157 Nov 1991 GB
06-004401 Jan 1994 JP
06-028180 Feb 1994 JP
08-185383 Jul 1996 JP
10-228413 Aug 1998 JP
2001265539 Sep 2001 JP
00-0067533 Nov 2000 KR
491970 Jun 2002 TW
9318459 Sep 1993 WO
WO 9319422 Sep 1993 WO
97-04401 Feb 1997 WO
WO 9857489 Dec 1998 WO
99-23570 May 1999 WO
99-34294 Jul 1999 WO
0026798 May 2000 WO
00-43902 Jul 2000 WO
WO 0227499 Apr 2002 WO
Related Publications (1)
Number Date Country
20090187714 A1 Jul 2009 US
Continuations (2)
Number Date Country
Parent 11510150 Aug 2006 US
Child 12185615 US
Parent 10601252 Jun 2003 US
Child 11510150 US