The clock signal is amplified, processed by a duty cycle corrector and received by a delay lock loop. The delay lock loop generates multiple clock signals having a known and fixed relationship to one another. A first interpolator receives the multiple clock signals and outputs the smp_clk_ph_0 and smp_clk_hp_180 signals to track the data edges. A second interpolator receives the multiple clock signals and outputs the smp_clk_ph_90 and smp_clk_ph_270 signals to sample valid data twice per clock cycle. The smp_clk_ph_90 and smp_clk_ph_270 signals are differential signals having a fixed phase difference.
The interpolator filter and interpolator control registers may adjust the phase of the smp_clk_ph_90 and smp_clk_ph_270 signals in unison with respect to the data signal by transmitting suitable control signals to the second interpolator. Such adjustment may allow receiver 100 to compensate for drift between the received clock signal and the received data signal at the samplers.
Applicants have discovered that clock and data duty cycle errors can cause a significant loss of timing margin even in conjunction with circuits such as receiver 100. For example, sampling clock signals may be distorted by clock distribution circuits in a manner that doesn't match the distortion of the incoming data signal at the samplers. One or both of the clock signals and the data signal may therefore exhibit a non-50% duty cycle at the samplers. The phases of the clock signals at the samplers may also be non-linear due to distortions in the input to the delay lock loop (DLL), and/or due to improperly matched or imperfect interpolators.
Interpolator 310 receives clock signals 1 through 5. Clock signals 1 through 5 are each associated with a different phase. Any number of clock signals may be received by interpolator 310 according to some embodiments. Interpolator 310 outputs clock signal Clk_ph_A based on the received clock signals.
Interpolator 320 receives clock signals 6 through 10 and outputs clock signal Clk_ph_B. Clock signals 6 through 10 are each associated with a different phase, and one or more of clock signals 6 through 10 may be associated with a same phase as one of clock signals 1 through 5. According to some embodiments, both interpolator 310 and interpolator 320 receive clock signals 1 through 5. Although illustrated as single-ended signals, one or more of clock signals 1 through 10 may comprise a differential signal. Additionally, one or more of clock signals 1 through 10 may be generated by a DLL.
Sampler 330 receives clock signal Clk_ph_A from interpolator 310 and data signal DATA from a transmitter. In some embodiments, the transmitter transmits data signal DATA and a clock signal to receiver 300. The received clock signal is used to generate clock signals 1 through 10. Sampler 330 acquires a first sample based on clock signal Clk_ph_A.
The first sample is associated with a first data eye of a clock cycle. In this regard, data signal DATA may provide two or more data symbols per clock cycle. Sampler 340 acquires a second sample of data signal DATA based on clock signal Clk_ph_B received from interpolator 320. The second sample is associated with a second data eye of the clock cycle.
The first and second samples are transmitted to tuning device 350. Tuning device 350 also receives an Expected Data signal that represents data associated with the first and second data eyes. The Expected Data signal may represent data that is transmitted to receiver 300 via data signal DATA during a tuning process.
Accordingly, tuning device 350 determines whether the received first sample reflects expected data associated with the first data eye, and determines whether the received second sample reflects expected data associated with the second data eye. Tuning device 350 then controls the phase of clock signal Clk_ph_A based on whether the first sample reflects expected data associated with the first data eye. As shown in
Tuning device 350 may also control the phase of clock signal Clk_ph_B based on whether the second sample reflects expected data associated with the second data eye. The phase of clock signal Clk_ph_B may be controlled by controlling interpolator 310 so as to move the sampling point of sampler 340 towards the center of the second data eye of data signal DATA. A detailed description of receiver 300 according to some embodiments is provided below.
Process 400 begins at 410, in which a first sample of a data signal is acquired. The first sample is acquired based on a first clock signal associated with a first phase, and the first sample is associated with a first data eye of a clock cycle. Sampler 330 of receiver 300 may execute 410 according to some embodiments. More specifically, sampler 330 may acquire a first sample of data signal DATA based on clock signal Clk_ph_A. In this regard, interpolator 310 is initially controlled such that clock signal Clk_ph_A roughly corresponds to the first data eye of the clock cycle.
A second sample of the data signal is acquired at 420. The second sample is acquired based on a second clock signal associated with a second phase, and the second sample is associated with a second data eye of the clock cycle. Continuing with the present example, sampler 340 acquires a second sample of data signal DATA based on clock signal Clk_ph_B. Clk_ph_B is controlled to roughly correspond to the second data eye of the clock cycle, therefore the second sample is associated with the second data eye of the clock cycle. Data signal DATA may provide two or more data symbols per clock cycle.
At 430, it is determined whether the first sample reflects expected data associated with the first data eye. As described above, tuning device 350 may execute the determination at 430 based on an Expected Data signal that represents data associated with the first and second data eyes.
The first phase of the first clock signal is then controlled at 440 based on whether the first sample reflects the expected data associated with the first data eye. As also mentioned above, tuning device 350 may control the phase of clock signal Clk_ph_A by controlling interpolator 310 to adjust the phase of clock signal Clk_ph_A. The adjustment may move the sampling point of sampler 330 towards the center of the first data eye of data signal DATA.
It is then determined, at 450, whether the second sample reflects expected data associated with the second data eye. Tuning device 350 may also execute the determination at 450 based on the Expected Data signal. Tuning device 350 may also control the phase of clock signal Clk_ph_B at 460 by controlling interpolator 320 to adjust the phase of clock signal Clk_ph_B to move the sampling point of sampler 340 towards the center of the second data eye of data signal DATA.
Amplifier 510 receives the clock signal and duty cycle corrector 520 corrects the duty cycle thereof. DLL 530 receives the corrected clock signal and generates multiple clock signals associated with multiple phases. Specifically, DLL outputs four signals corresponding to Clk+ and having phase relationships thereto of 0, 45, 90 and 135 degrees, and four signals corresponding to Clk− and having phase relationships of 0, 45, 90 and 135 degrees thereto.
Interpolator block 540 receives the clock signals from DLL 530. Interpolator block 540 includes interpolators 542, 544 and 546. Interpolators 542, 544 and 546 may comprise any current- or hereafter-known interpolators for receiving two or more clock signals having a fixed and known phase relationship and generating an output clock signal having a controllable phase between the phases of the two or more clock signals. Although illustrated as single-ended, each of the output clock signals may comprise a differential signal.
Interpolator 542 corresponds to edges of the incoming data signal, interpolator 544 corresponds to a first data eye of the incoming data signal, and interpolator 546 corresponds to a second data eye of the incoming data signal. Each interpolator is controlled by a phase select (_ph_sel) signal that indicates which of the received clock signals will be used to generate an output signal, and a control (_ctl) signal that indicates a degree to which the phase of each indicated clock signal will contribute to the phase of the output signal (i.e. the mixing ratio). As mentioned above, some embodiments may use different types of interpolators, which may or may not be controlled in manners different from those described herein.
Interpolator 542 outputs the smp_clk_ph_0 clock signal and its inverse, the smp_clk_ph_180 clock signal. Interpolator 544 outputs the smp_clk_ph_90 signal, and interpolator 546 outputs the smp_clk_ph_270 signal. Some embodiments operate without an interpolator corresponding to the data edges of the data signal, and therefore operate without the smp_clk_ph_0 and smp_clk_ph_180 clock signals.
Some embodiments provide one interpolator for each data symbol per clock cycle. Therefore, in a quad data rate system having four data symbols per clock cycle, interpolator block 540 may comprise four interpolators, and an optional fifth interpolator for outputting the smp_clk_ph_0 and smp_clk_ph_180 clock signals. Each of the third and fourth additional interpolators would receive two or more clock signals having different phases and output a sampling clock signal associated with a respective data eye (i.e., third or fourth) of an incoming data signal.
Sampler block 550 receives the clock signals from interpolator block 540 as well as the incoming data signal. Sampler block 550 acquires samples of the data signal based on the received clock signals. Sampler 550 as illustrated includes one flip-flop for each clock signal, triggered by a rising edge of its associated clock signal. In this regard, the rising edge of the smp_clk_ph_90 signal is intended to coincide with a center of the first data eye of the data signal, and the rising edge of the smp_clk_ph_270 signal is intended to coincide with a center of the second data eye of the data signal.
In the quad data rate system mentioned above, sampler block 550 would also include a sampler to acquire a sample associated with the third data eye based on the third clock signal, and a sampler to acquire a sample associated with the fourth data eye based on the fourth clock signal.
The data signal may be processed by an amplifier and/or correction logic prior to receipt by sampler block 550. Any type of flip-flop, latch or sampling system may be used in conjunction with some embodiments, including but not limited to falling edge-triggered latches and integration circuits.
The samples are transmitted from sampler block 550 to data aligner 560. Data aligner 560 may align the four samples to clocking domain of interpolator filter 570. This clocking domain may be based on the smp_clk_ph_180 signal. The functions attributed herein to data aligner 560 may be performed by any transfer mechanism for aligning a first clocking domain to a second clocking domain, including but not limited to a First-In, First-Out buffer.
Interpolator filter 570 determines whether and how to control interpolator block 540 based on the received samples. Briefly, interpolator filter 570 determines whether the smp_clk_ph_180 signal is aligned with a data edge of the incoming data signal and transmits edge signals to interpolator control register block 580 to correct any determined misalignment. Interpolator filter 570 may also determine a left edge and a right edge of the first data eye and a left edge and right edge of the second data eye.
Interpolator control register block 580 receives signals that indicate the aforementioned left and right edges. Using these signals and internal registers, interpolator control register block 580 outputs control signals to interpolator block 540. The signals are intended to center the rising edges of the smp_clk_ph_90 and smp_clk_ph_270 signals within the first and second data eyes, respectively, of the incoming data signal.
Initially, at 601, a phase of an edge sampling clock is set. In some embodiments, the phase is set at ninety degrees from a first data sampling clock and from a second data sampling clock. With reference to the
Interpolator 542 is controlled at 602 to align the edge sampling clock (smp_clk_ph_0 or smp_clk_ph_180) with a data edge of an incoming data signal.
The edge sampling clock may be aligned with the data edge of the incoming data signal at 602 according to any suitable system.
Vote generator 5701 transmits its determination to a proportional filter comprised of up/down counter 5702 and threshold detector 5703. Counter 5702 increments for each early (or late) determination, and decrements for each late (or early) determination. Accordingly, counter 5702 would hold a count of five after receiving 30 early determinations and 25 late determinations. Threshold detector 5703 transmits a signal to multiplexer (mux) 5704 when the count reaches a pre-programmed threshold.
Vote generator 5701 may also transmit its determination to a rate-tracking filter comprised of majority detector 5705, evaluate unit 5706 and counter 5707. Majority detector 5705 and evaluate unit 5706 determine whether more early or late determinations are received in an amount of time specified by counter 5707. This determination is also transmitted to mux 5704.
Register 5708 is preprogrammed with an instruction to select either the upper or lower input of mux 5704. In either case, mux 5704 transmits an edge up/down signal to interpolator control register block 580. The edge up/down signal increments or decrements a value stored in edge 180 center register 5801 of
A first interpolator is controlled at 603 to set a phase of a first data sampling clock. The phase is set to coincide with an expected first edge of the first data eye. Similarly, a second interpolator is controlled at 604 to set a phase of a second data sampling clock so as to coincide with an expected first edge of the second data eye.
Registers 5709 and 5710 store register settings for the leftmost and rightmost edges of the second data eye. Registers 5711 and 5712 store register settings for the leftmost and rightmost edges of the first data eye. These register pairs are connected to mux 5713 and 5714, respectively. In order to set the phases of the first and second data sampling clocks at 603 and 604, state machine 5715 selects either the upper or lower inputs of muxes 5713 and 5714. The selected inputs are transmitted to corresponding muxes 5802 and 5803 of
A known test pattern is received over interconnects 503 and 504 at 605. The test pattern may comprise alternating 0's and 1's or any other suitable test pattern. According to some embodiments, the test pattern comprises a pseudo-random bit sequence to simulate a wideband frequency that may be encountered in operation. Process 600 may then split into two independent and simultaneously-executed branches after 605, as illustrated in
In the first branch, first data is sampled using the first data sampling clock at 606. The data may comprise data associated with the first data eye and may be sampled using the smp_clk_ph_90 sampling clock signal. Eye evaluation and adjustment unit 5710 may determine at 609 if the sampled first data matches the first data that was expected based on the known input pattern. If so, the value of register 5711 is decremented and the upper inputs of muxes 5714 and 5803 are selected so as to move the phase of the smp_clk_ph_90 sampling clock signal away from the center of the first data eye at 610. If not, the value of register 5711 is incremented and the upper inputs of muxes 5714 and 5803 are again selected so as to move the phase of the smp_clk_ph_90 sampling clock signal toward the center of the first data eye at 611. According to some embodiments, moving the phase of the smp_clk_ph_90 sampling clock signal in either direction does not cause movement of the phase of the smp_clk_ph_270 sampling clock signal.
According to the second branch, second data is sampled at 607 using the second data sampling clock. The data may comprise data associated with the second data eye and may be sampled using the smp_clk_ph_270 sampling clock signal. Unit 5710 determines at 612 if the sampled second data matches the second data that was expected based on the known input pattern. If the data matches, the value of register 5709 is decremented and the upper input of muxes 5713 and 5802 are selected so as to move the phase of the smp_clk_ph_270 sampling clock signal away from center of the second data eye at 613. If the data does not match, the value of register 5709 is incremented and the upper inputs of muxes 5713 and 5802 are again selected so as to move the phase of the smp_clk_ph_270 sampling clock signal toward the center of the second data eye at 614. Again, moving the phase of the smp_clk_ph_270 sampling clock signal in either direction might not result in movement of the phase of the smp_clk_ph_90 sampling clock signal.
Flow continues from all of 610, 611, 613 and 614 to 608, where it is determined whether a timeout period has been reached. The timeout period may comprise a programmable number of iterations. Flow returns to 605 and continues as described above if the timeout period has not been reached. Flow continues to 615 if the period has been reached.
In some embodiments of 608, a detection scheme determines whether a final alignment position has been found. Flow returns to 605 and continues as described above if the final alignment position has not been found, and continues to 615 if the final alignment position has been found. Such a detection scheme may comprise a system to determine whether the values stored in registers 5709 through 5712 are dithering around particular values.
Registers 5804 and 5805 store values corresponding to the center phase of the smp_clk_ph_270 and smp_clk_ph_90 signals during operation. According to some embodiments, registers 5804 and 5805 are therefore incremented or decremented each time a corresponding one of registers 5709 and 5711 are incremented or decremented, but at half the rate. Such a process maintains the value of the center phase between the values stored in corresponding left edge and right edge registers of interpolator filter 570.
615 through 626 of process 600 proceed as described above with respect to 603 through 614 above. However, 615 through 626 proceed in conjunction with second edges of the first and second data eyes. Continuing with the above example, the second edges would be the right edges of the data eyes. Accordingly, registers 5710 and 5712 would be employed instead of registers 5709 and 5711.
Again, registers 5804 and 5805 may be incremented or decremented each time a corresponding one of registers 5710 and 5712 are incremented or decremented, but at half the rate. This process maintains the value of the center phase of the data clocking signals between the values stored in corresponding left edge and right edge registers of interpolator filter 570.
Returning to process 600, receiver 500 may enter an operational mode at 627. In the operational mode, the lower inputs of muxes 5716, 5717, 5802 and 5803 are selected. The operational mode may correct for any subsequent drift between the incoming clock and data signals.
Data is received over interconnects 503 and 504 at 627. Next, at 628, elements 5701 through 5708 may operate as described above to determine if the edge sampling clock (i.e. smp_clk_ph_180 and smp_clk_ph_0) is aligned with the data edge of the received data. If so, flow returns to 627 and cycles between 627 and 628 until the determination at 628 is negative.
Then, at 629, an interpolator associated with the edge sampling clock is controlled to change the phase of the edge sampling clock by a particular number of degrees. The particular number may be equal to a number of degrees required to re-align the edge sampling clock with the data edge. According to some embodiments of 629, interpolator 542 is controlled by transmitting an edge0 up/down signal to register 5801 of register block 580. The value stored in register block 5801 is thereby changed and control signals edge_ph_sel and/or edge_ctl are changed based on the changed value.
The first interpolator is controlled at 630 to change the phase of the first data sampling clock by the particular number of degrees, and the second interpolator is controlled at 631 to change the phase of the second data sampling clock by the particular number of degrees. Such changes are intended to maintain the previously-tuned phase relationships between the edge sampling clock, the first data sampling clock, and the second data sampling clock.
According to some embodiments of 630 and 631, the edge0 up/down signal flows through muxes 5716 and 5717 to change the values stored in registers 5804 and 5805. Control signals data270_ph_sel and/or data270_ctl are changed based on the changed value of register 5804, and signals data90_ph_sel and/or data90_ctl are changed based on the changed value of register 5805. Flow may return to 628 from 631 to continue tracking of and correction for the aforementioned drift.
Although the foregoing describes positioning two or more clock signals at the centers of respective data eyes, some embodiments may be used to independently adjust two or more clock signals for positioning at any portion of the respective data eyes.
The several embodiments described herein are solely for the purpose of illustration. Some embodiments may incorporate, in part or in whole, any currently or hereafter-known DLLs, interpolators, samplers, registers and muxes. Therefore, persons in the art will recognize from this description that other embodiments may be practiced with various modifications and alterations.