Not applicable.
1. Field of the Invention
The present invention generally relates to a mechanism that reduces skew in data and clock signal timing between related source-synchronous data channels. More particularly, the invention relates to a memory controller that reduces skew between related skewed data channels. More particularly still, the invention relates to reducing skew between data channels and providing an automatic feature to initialize the logic used to reduce the skew.
2. Background of the Invention
Digital electronic systems, such as all types of computers, cellular telephones, DVD players, etc., have various technical issues that must be addressed when designing such systems. This disclosure focuses on one such issue—how to transmit digital data between two points within the system.
Digital signals are electrical signals whose voltage level at any point in time is either at one predetermined level or another (e.g., 3.3V and 0V). Information is encoded into a digital signal by way of the voltage levels and/or the sharp transitions (referred to as “edges”) between the voltage levels. Digital signals typically are synchronized to a clock signal. A clock signal is a periodic digital signal which repeatedly oscillates between two voltage levels. When transmitting digital data from a source point to a receiving point within a digital system, both the source device and the receiving device must use a clock signal to send and receive the data. Each clock signal is generated with some type of clock generating circuit, such as a crystal oscillator. Further, the source device and receiving device may generate their own clocks independently of each other. As such, although both devices may generate and use, for example, a 100 Megahertz (“MHz”) clock (i.e., 100 million cycles per second), the two clocks may not be synchronized. This means that the rising and falling edges of the two clocks do not coincide with respect to time.
Generally, there are two types of clocking schemes available to send data between devices in a digital system—receiver-synchronous clocking and source-synchronous clocking. In receiver-synchronous clocking, the source device uses its clock to transmit the data and the receiving device uses the receivers clock to receive the data. That is, both devices use their own, unsynchronized clocks. The advantage of receiver-synchronous clocking is that a clock signal does not need to be transmitted along with the data, thereby saving a wire or signal trace on a printed circuit board. Additionally, once the transmitted data is clocked into an input buffer in the receiving device, the data is already in the clock “domain” of the receiving device (i.e., the data is synchronized to the clock of the receiving device). A disadvantage of receiver-synchronous clocking is that the circuitry needed to receive the transmitted data into an input buffer in the receiving device is relatively complex because the transmitted data is not already synchronized with the receivers clock.
Source-synchronous clocking requires the source device to transmit its clock along with the data to the receiving device. The receiving device then uses the source's clock to latch in the transmitted data into the receiver's input buffer and uses the same clock signal to provide data back to the source.
Source-synchronous clocking enables the receiver to have a relatively simple input circuit to clock in the transmitted data, but disadvantageously requires an extra wire for the source's clock and, following receipt by the receiver, also requires the transmitted data to be synchronized by the receiver to the receiver's clock.
The present disclosure addresses issues that arise in a source-synchronous transmission scheme in a digital system. For example, referring to
Some digital transmission systems use a “valid” signal that is transmitted along with data to a receiving device. The valid signal alerts the receiving, device that valid data is present on the bus and should be latched in to the receiving device. Although a generally effective scheme, the valid signal requires a separate wire dedicated to the valid signal. A system may have many such valid signals. Valid signals thus disadvantageously occupy valuable real estate on a printed circuit board that might be better used for other functionality.
Accordingly, there is a need to solve reduce or eliminate skew in multi-channel digital communication system. Further, such a solution should also be relatively easy to initialize and avoid, if possible, using a valid signal. Despite the advantages such a system would provide, to date no such system is known to exist.
The problems noted above are solved in large part by a computer system having a memory controller that includes read buffers coupled to a plurality of memory channels. The memory controller advantageously eliminates the inter-channel skew caused by memory modules being located at different distances from the memory controller. The memory controller preferably includes a channel interface and synchronization logic circuit for each memory channel. This circuit includes read and write buffers and load and unload pointers for the read buffer. Unload pointer logic generates the unload pointer and load pointer logic generates the load pointer. The pointers preferably are free-running pointers that increment in accordance with two different clock signals. The load pointer increments in accordance with a clock generated by the memory controller but that has been routed out to and back from the memory modules. The unload pointer increments in accordance with a clock generated by the computer system itself.
Because the trace length of each memory channel may differ, the time that it takes for a memory module to provide read data back to the memory controller may differ for each channel. The “skew” is defined as the difference in time between when the data arrives on the earliest channel and when data arrives on the latest channel. The skew is determined a priori and programmed into the system.
During system initialization, the pointers are synchronized. A predetermined bit pattern (e.g., all 1s) is written to each of the memory channels and then read back approximately simultaneously from the channels. Each channel's load pointer is held at 0 until the predetermined bit pattern is received on that particular channel. When the bit pattern is detected on a channel, that channel's read pointer is released and permitted to continue incrementing. After the system issues the read command to the memory modules, the system counts an amount of time approximately equal to the predetermined skew. At the end of that time, the memory controller should have at least begun receiving the requested bit pattern from the latest memory channel. At that time, each of the unload pointers are released and allowed to increment. At this point, the pointers are initialized. Consequently, using these pointers to load and unload the read buffers causes the effects of the skew to be eliminated. This and other benefits will become apparent upon reviewing the following description.
For a detailed description of the preferred embodiments of the invention, reference will now be made to the accompanying drawings in which:
Certain terms are used throughout the following description and claims to refer to particular system components. As one skilled in the art will appreciate, computer companies may refer to a component by different names. This document does not intend to distinguish between components that differ in name but not function. In the following discussion and in the claims, the terms “including” and “comprising” are used in an open-ended fashion, and thus should be interpreted to mean “including, but not limited to . . .”. Also, the term “couple” or “couples” is intended to mean either an indirect or direct electrical connection. Thus, if a first device couples to a second device, that connection may be through a direct electrical connection, or through an indirect electrical connection via other devices and connections.
The preferred embodiment of the invention described herein addresses the problems noted above with respect to a memory controller. A memory controller was chosen merely to illustrate an embodiment of the invention, and should not be used to limit the scope of the patent. It should be noted that the concepts and techniques can readily be extended to any type of digital system that experiences the problems noted above. Unless otherwise stated in the claims, the claims should not be limited to the specific embodiment described below.
Referring to
Referring to
Referring still to
In accordance with the preferred embodiment of the invention, the memory controller 100 uses source-synchronous logic to transfer data on the data busses 112. As such, each channel interface and synch logic 110 provides an internally generated clock labeled as CHx CFM (“clock from master”) to the memory modules 200. Each set of memory modules 200 uses its associated CFM clock to latch in data from the bus 112 during a write operation. As shown, each CFM clock is routed back to the channel interface and synch logic 110 from which it came. The return path clock is labeled as CHx CTM (“clock to master”). Preferably, the memory modules synchronize their read data to the CTM clock when providing data back to the memory controller 100 in response to a read request.
The memory controller 100 and memory modules 200 are shown in block diagram form, not physical layout, in FIG. 4. It should be recognized that each group of memory modules 200 physically may be located a different distance from its associated channel interface and synch logic 110. As such, skew may, and likely will, be present with respect to the various CTM clock signals. Each channel interface and synch logic 110 reduces or eliminates the effects of the skew present on the CTM signals.
Although not all of the input and output signals to and from the memory controller 100 are shown, those signals particularly relevant to solving the skew problem are shown in
In general, each channel interface and synch logic circuit 110 effectively removes the skew that may be present between the various memory module channels. The skew that is removed by the synch logic circuits 110 is the time delay associated with a read command between the fastest channel and the slowest channel. In other words, referring to
Data to be written to the memory modules 200 is temporarily stored in the WR BFR 130 and at the appropriate time transferred to the memory modules over data bus 112. Data provided by the memory modules 200 in response to a read command is temporarily stored in RD BFR 140 and subsequently transferred via data bus 114 to the device (not shown) in the system that requested the data. The WR BFR 130 preferably is designed to have capacity for any desired number of bytes of write data. The RD BFR 140 preferably is larger than the maximum skew (e.g., an 8-entry buffer), although a different number of entries is also acceptable.
The LD PTR LOGIC 144 generates a LD PTR 150 that points to the next entry in the read buffer into which read data sent by a memory module 200 is to be stored. The LD PTR LOGIC 140 increments the LD PTR 150 for each subsequent unit of data. The LD PTR LOGIC 150 uses the CHx CTM clock from the memory modules 200 to increment the LD PTR 150. The SYNCH ARM signal 118 also is provided as an input signal to the LD PTR LOGIC 144.
The UNLD PTR LOGIC 140 generates an UNLDR PTR pointer 148 that points to the entry in the RD BFR 140 from which data is to be extracted and provided on data bus 114 to the device that issued the read command. Several input signals are provided to the UNLD PTR LOGIC 142, namely the SYNCH ARM signal 118, the RD_STRB signal 120 and an UNLD CLK signal from clock divider 146. Clock divider 146 can be included if desired to divide down the SYS CLK 116 to a suitable frequency for use in operating taking data out of the RD BFR 140. The clock divider 146 naturally will be specific to the particular application at hand. For example, if the SYS CLK 116 signal has a frequency of 1 GHz and the UNLD PTR LOGIC 142 requires a 100 MHz clock, the clock divider 146 may be a “divide by 10” clock to generate an UNLD CLK that is 10 times slower than the SYS CLK 116. The clock divider 146 preferably generates both the UNLD CLK for the UNLD PTR LOGIC 142 and the CHx CFM clock for the memory modules 200. The frequency of the CHx CFM clock may or may not be the same as the frequency of the UNLD CLK signal.
The use of the channel interface and synch logic 110 to de-skew the various memory module channels will now be described. In some suitable manner, the skew associated with the slowest channel (i.e., farthest channel in terms of trace distance from the memory controller 100) should be determined. For example, the skew can be calculated given the trace lengths or measured with appropriate test equipment on a given system or in some other suitable manner. Once determined, and assuming all circuit boards are fabricated substantially the same, the skew should thus be known for all such computer systems. In general, the system corrects for this skew between channels by waiting to retrieve data from any of the RD BFRs 140 until the RD BFR 140 associated with the slowest channel begins receiving its data from its associated memory modules 200. In other words, the system waits until all of the channels begin receiving data and before beginning consuming data from the read buffers. This process will be described in more detail below.
Before the memory system is used to eliminate the skew, it should be initialized. Referring now to
In step 414, the memory controller 100 issues a read command substantially simultaneously to each of the sets of memory modules 200. In step 418, each channel interface and synch logic 110 waits for the requested bit pattern from the associated memory modules 200. With reference to
In step 422, the UNLD PTR 148 is initialized. The system in which the memory controller 100 resides issues the read request in step 414. Preferably, the skew explained above has been predetermined, calculated, or measured. After the system issues the read command, the system counts an amount of time approximately equal to the skew. At the expiration of that time, the system asserts the RD_STRB signal 120 to all of the channel interface and synch logics 110. The RD_STRB signal 120 directs each UNLD PTR LOGIC 142 to release its UNLD PTR 148 to increment with each successive cycle or edge of the UNLD CLK signal. Because the RD_STRB signal 120 is asserted to each channel interface and synch logic 110 at approximately the same time, each of the UNLD PTR signals 148 will be released to increment at approximately the same time, and thus be synchronized with each other. By synchronizing all of the UNLD PTR signals, all of the channel interface and synch logic circuits 110 will retrieve data from their RD BFRs 140 in unison.
Finally, the initialization process 400 completes in step 426. At that point all of the LD PTR signals 150 are permitted to continue incrementing with the CTM clocks. The LD PTR signals are free running pointers that continuously increment using the CTM clocks and, upon reaching entry 7 in the exemplary buffer of
In normal operation, the system may, for example, desire to read data from each memory module. The requested data from each channel may be a portion of a larger set of data and thus, the system may need to read a data block from each of the channels concurrently. To that end, the system will issue a read command through the memory controller 100 to read a first block of data from each channel simultaneously. The requested data from each channel will be received over the data bus 112 to the respective read buffers in the channel interface and synch logics 110. The system will consume the data from the RD BFRs 140. Because of the skew problem, however, the system may consume data from one channel's RD BFR 140 before the corresponding data from another, more distant, channel has been written to its RD BFR. The preferred embodiment of the present invention solves this problem.
Because the LD PTRs 150 have all been synchronized to each other, each block of read data provided over the data busses 112 will be written to the same entry in each RD BFR 140. That is, a first data block on each channel will be written, for example, to entry number 0 in each RD BFR 140, although the first data block may not arrive at each channel interface and synch logic 110 at precisely the same time because of the skew. As such, the read data is loaded into the RD BFR in a synchronized fashion so that each entry in the buffers contain data corresponding to associated data in each entry in the other channels.
The system, after issuing the read command to the channels, preferably counts an amount of time approximately equal to the predetermined skew value. At the end of that time, the system is assured that data from the farthest (i.e., slowest) channel has made its way to its associated RD BFR 140. At that point, it is safe for the system to begin consuming data from all of the RD BFRs 140.
The preferred embodiment of the invention described herein provides one or more of the following benefits. First, the effects of any inter-channel skew is eliminated. Second, the preferred embodiment avoids having to use valid signals to signify the beginning of a data stream. Also, initialization is performed automatically which greatly simplifies the implementation as compared to prior art systems. Once synchronized, synchrony is maintained even though the load and unload pointers are free running. Finally, the preferred embodiment permits the load and unload pointers to be reinitialized under software control in the event of a hardware fault condition. The aforementioned benefits should in no way limit the claims which follow.
The above discussion is meant to be illustrative of the principles and various embodiments of the present invention. Numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. It is intended that the following claims be interpreted to embrace all such variations and modifications.
This application is a divisional of application Ser. No. 09/652,480 filed on Aug. 31, 2000, entitled, “Mechanism For Synchronizing Multiple Skewed Source-Synchronous Data Channels With Automatic Initialization Feature,” now U.S. Pat. No. 6,636,955 (incorporated herein by reference as if reproduced in full below), and this application further relates to the following commonly assigned co-pending applications entitled: This application relates to the following commonly assigned co-pending applications entitled: “Apparatus And Method For Interfacing A High Speed Scan-Path With Slow-Speed Test Equipment,” Ser. No. 09/653,642, filed Aug. 31, 2000, “Priority Rules For Reducing Network Message Routing Latency” Ser. No. 09/652,322, filed Aug. 31, 2000, “Scalable Directory Based Cache Coherence Protocol” Ser. No. 09/652,703, filed Aug. 31, 2000, “Scalable Efficient I/O Port Protocol,” Ser. No. 09/652,391, filed Aug. 31, 2000, “Efficient Translation Lookaside Buffer Miss Processing In Computer Systems With A Large Range Of Page Sizes,” Ser. No. 09/652,552, filed Aug. 31, 2000, “Fault Containment And Error Recovery Techniques In A Scalable Multiprocessor” Ser. No. 09/651,949, filed Aug. 31, 2000, “Speculative Directory Writes In A Directory Based Cache Coherent Nonuniform Memory Access Protocol,” Ser. No. 09/652,834, filed Aug. 31, 2000, “Special Encoding Of Known Bad Data,” Ser. No. 09/652,314, filed Aug. 31, 2000, “Broadcast Invalidate Scheme,” Ser. No. 09/652,165, filed Aug. 31, 2000; “Mechanism To Track All Open Pages In A DRAM Memory System,” Ser. No. 09/652,704, filed Aug. 31, 2000, “Programmable DRAM Address Mapping Mechanism,” Ser. No. 09/653,093, filed Aug. 31, 2000; “Computer Architecture And System For Efficient Management Of Bi-Directional Bus,” Ser. No. 09/652,323, filed Aug. 31, 2000, “An Efficient Address Interleaving With Simultaneous Multiple Locality Options,” Ser. No. 09/652,452, filed Aug. 31, 2000; “A High Performance Way Allocation Strategy For A Multi-Way Associative Cache System,” Ser. No. 09/653,092, filed Aug. 31, 2000; “Method And System For Absorbing Defects In High Performance Microprocessor With A Large N-Way Set Associative Cache,” Ser. No. 09/651,948, filed Aug. 31, 2000; “A Method For Reducing Directory Writes And Latency In A High Performance, Directory-Based, Coherency Protocol,” Ser. No. 09/652,324, filed Aug. 31, 2000; “Mechanism To Reorder Memory Read And Write Transactions For Reduced Latency And Increased Bandwidth,” Ser. No. 09/653,094, filed Aug. 31, 2000; “System For Minimizing Memory Bank Conflicts In A Computer System,” Ser. No. 09/652,325, filed Aug. 31, 2000; “Computer Resource Management And Allocation System,” Ser. No. 09/651,945, filed Aug. 31, 2000; “Input Data Recovery Scheme,” Ser. No. 09/653,643, filed Aug. 31, 2000; “Fast Lane Prefetching,” Ser. No. 09/652.451, filed Aug. 31, 2000; “Mechanism To Control The Allocation Of An N-Source Shared Buffer,” Ser. No. 09/651.924, filed Aug. 31, 2000; and “Chaining Directory Reads And Writes To Reduce DRAM Bandwidth In A Directory Based CC-NUMA Protocol,” Ser. No. 09/652,315, filed Aug. 31, 2000, all of which are incorporated by reference herein.
Number | Name | Date | Kind |
---|---|---|---|
4864543 | Ward et al. | Sep 1989 | A |
5261066 | Jouppi et al. | Nov 1993 | A |
5317718 | Jouppi | May 1994 | A |
5634043 | Self et al. | May 1997 | A |
5745732 | Cherukuri et al. | Apr 1998 | A |
5758183 | Scales | May 1998 | A |
5761729 | Scales | Jun 1998 | A |
5787480 | Scales et al. | Jul 1998 | A |
5802585 | Scales et al. | Sep 1998 | A |
5809450 | Chrysos et al. | Sep 1998 | A |
5875151 | Mick | Feb 1999 | A |
5890201 | McLellan et al. | Mar 1999 | A |
5893931 | Peng et al. | Apr 1999 | A |
5915104 | Miller | Jun 1999 | A |
5918250 | Hammond | Jun 1999 | A |
5918251 | Yamada et al. | Jun 1999 | A |
5923872 | Chrysos et al. | Jul 1999 | A |
5950228 | Scales et al. | Sep 1999 | A |
5964867 | Anderson et al. | Oct 1999 | A |
5983325 | Lewchuk | Nov 1999 | A |
6000044 | Chrysos et al. | Dec 1999 | A |
6033441 | Herbert | Mar 2000 | A |
6070227 | Rokicki | May 2000 | A |
6085300 | Sunaga et al. | Jul 2000 | A |
6134638 | Olarig et al. | Oct 2000 | A |
6636955 | Kessler et al. | Oct 2003 | B1 |
Number | Date | Country | |
---|---|---|---|
20030204697 A1 | Oct 2003 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 09652480 | Aug 2000 | US |
Child | 10441451 | US |