In many data communication applications, there is a need to transfer digital data across a domain boundary. A domain boundary is a border between two systems operating with different clock signals. Data transfers across a boundary are typically accomplished with a synchronizer.
Some existing synchronizers are relatively complex devices that perform full handshaking operations, and that are designed to provide generalized synchronization solutions. These synchronizers are not typically implemented very efficiently (e.g., in terms of gate count).
Thus, there is a need in the art for further improvements in the systems and techniques for effecting data transfers across domain boundaries with minimal errors, and for specific applications, such as the transfer of data between a first system that transmits data with a dual clock and a second system that receives data with a single clock.
One form of the present invention provides a synchronizer for passing data from a first system that transmits data based on a first clock and a second clock, to a second system that receives data based on a third clock. The synchronizer includes a first set of flip-flops for receiving data from the first system based on the first clock. The synchronizer includes a second set of flip-flops for receiving data from the first system based on the second clock. The synchronizer includes a first multiplexer coupled to outputs of the flip-flops in the first and the second set. The synchronizer includes a controller for controlling the first multiplexer to output data from selected ones of the flip-flops based on the third clock, thereby generating output data to be provided to the second system.
In the following Detailed Description, reference is made to the accompanying drawings, which form a part hereof, and in which is shown by way of illustration specific embodiments in which the invention may be practiced. It is to be understood that other embodiments may be utilized and structural or logical changes may be made without departing from the scope of the present invention. The following Detailed Description, therefore, is not to be taken in a limiting sense, and the scope of the present invention is defined by the appended claims.
In one embodiment, system A 102 is in a first clock domain and system B 106 is in a second clock domain, which is different than the first clock domain. In one embodiment, the first and the second clock domains are coherent (synchronous) clock domains. In the embodiment shown in
In one form of the invention, communication system 100 uses “8B10B” encoding. With 8B10B encoding, each 8-bit word of data is associated with a 10-bit code-word. In one embodiment, 10-bit code-words are clocked into and out of synchronizer 104 at a rate of 125 MHz. In other embodiments, other communication protocols and speeds may be used.
Synchronizer 104 according to one embodiment is a first-in-first-out (FIFO) based synchronizer that reliably passes data between system A 102 and system B 106. In one form of the invention, the synchronizer 104 transfers data words sourced at one clock rate by system A 102, to system B 106, which removes the data words at another clock rate. In one embodiment, synchronizer 104 is configured to operate in an application that meets the following assumptions: (1) Only the phase relationship between the two clock domains is unknown (i.e., the clocks are assumed to be coherent, and the amount of constant phase difference is unknown); (2) clock jitter is bounded to under one clock period; (3) the flow of data from the transmitter (i.e., system A 102) cannot be throttled.
The “0” input of multiplexers 202A and 202B, and the “1” input of multiplexers 202C and 202D, are coupled to communication link 103C (data_in). The “1” input of multiplexers 202A and 202B is coupled to the output of flip-flops 204A and 204B, respectively. The “0” input of multiplexers 202C and 202D is coupled to the output of flip-flops 204C and 204D, respectively. The outputs of multiplexers 202A-202D are coupled to the inputs of flip-flops 204A-204D via communication links 203A-203D, respectively. Multiplexers 202 receive control signals or selection signals on communication link 215A, which is coupled to the first output (out1) of flip-flop 214. If the selection signal is low (e.g., a logical zero), multiplexers 202 each output the signal at the “0” input of the multiplexer 202. If the selection signal is high (e.g., a logical one), multiplexers 202 each output the signal at the “1” input of the multiplexer 202.
Communication link 103A (clock A) is coupled to the clock input of flip-flops 204A and 204C. Communication link 103B (clock B) is coupled to the clock input of flip-flops 204B, 204D, and 214. The outputs of flip-flops 204A-204D are coupled to “00”, “01”, “11”, and “10” inputs, respectively, of multiplexer 206 via communication links 205A-205D. Multiplexer 206 receives a two-bit selection signal on communication links 211A and 211B from state machine 212. If both bits of the selection signal are low (i.e., logical zeros), multiplexer 206 outputs the signal at the “00” input of the multiplexer 206. If both bits of the selection signal are high (i.e., logical ones), multiplexer 206 outputs the signal at the “11” input of the multiplexer 206. If the first bit of the selection signal is low, and the second bit is high, multiplexer 206 outputs the signal at the “01” input of the multiplexer 206. If the first bit of the selection signal is high, and the second bit is low, multiplexer 206 outputs the signal at the “10” input of the multiplexer 206.
The output of multiplexer 206 is coupled to the “0” input of multiplexer 208 via communication link 207A. The “1” input of multiplexer 208 is coupled to a “/V/” signal via communication link 207B. The “/V/” signal is an error code in the 8B10B protocol. Multiplexer 208 receives a selection signal on communication link 211C from state machine 212. If the selection signal is low (e.g., a logical zero), multiplexer 208 outputs the signal at the “0” input of the multiplexer 208. If the selection signal is high (e.g., a logical one), multiplexer 208 outputs the signal at the “1” input of the multiplexer 208.
The output of multiplexer 208 is coupled to the data input of flip-flop 210 via communication link 209. Communication link 103D (clock C) is coupled to the clock input of flip-flops 210 and 216, and is also coupled to state machine 212. Flip-flop 210 outputs data (data_out) to system B 106 (
The first output (out1) of flip-flop 214 is coupled to the input of flip-flop 216 via communication link 215A. The second output (out2) of flip-flop 214 is an inverted output that is coupled to the input of flip-flop 214. Flip-flop 214 provides synchronization pulses to flip-flop 216 on communication link 215A. The output of flip-flop 216 is coupled to state machine 212 via communication link 217. Flip-flop 216 provides synchronization pulses to state machine 212 on communication link 217. The signal output by flip-flop 216 to state machine 212 causes the state machine 212 to transition through various states, as described in further detail below with reference to
As shown in
It will be understood by persons of ordinary skill in the art that the logic shown in
In one embodiment, state machine 212 begins in state 306, which is a reset/error state. The three-bit value corresponding to state 306 is “100”. In state 306, state machine 212 outputs a “1” selection signal to multiplexer 208 on communication link 211C, and a “00” selection signal to multiplexer 206 on communication links 211A and 211B. State machine 212 remains in state 306 as long as the signal output by flip-flop 216 on communication link 217 is low (i.e., a logical zero). When the signal output by flip-flop 216 to state machine 212 goes high (i.e., a logical one), state machine 212 transitions from state 306 to state 310.
The three-bit value corresponding to state 310 is “011”. In state 310, state machine 212 outputs a “0” selection signal to multiplexer 208 on communication link 211C, and a “11” selection signal to multiplexer 206 on communication links 211A and 211B. In state 310, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical one, state machine 212 transitions from state 310 to state 312. In state 310, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical zero, state machine 212 transitions from state 310 to state 316.
The three-bit value corresponding to state 312 is “010”. In state 312, state machine 212 outputs a “0” selection signal to multiplexer 208 on communication link 211C, and a “10” selection signal to multiplexer 206 on communication links 211A and 211B. In state 312, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical one, state machine 212 transitions from state 312 to state 314. In state 312, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical zero, state machine 212 transitions from state 312 to state 302.
The three-bit value corresponding to state 314 is “111”. State 314 is an error state. In state 314, state machine 212 outputs a “1” selection signal to multiplexer 208 on communication link 211C, and a “11” selection signal to multiplexer 206 on communication links 211A and 211B. State machine 212 remains in state 314 as long as the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical one. In state 314, if the signal output by flip-flop 216 to state machine 212 on communication link 217 transitions to a logical zero, state machine 212 transitions from state 314 to state 302.
The three-bit value corresponding to state 316 is “110”. In state 316, state machine 212 outputs a “0” selection signal to multiplexer 208 on communication link 211C, and a “10” selection signal to multiplexer 206 on communication links 211A and 211B. In state 316, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical one, state machine 212 transitions from state 316 to state 314. In state 316, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical zero, state machine 212 transitions from state 316 to state 302.
The three-bit value corresponding to state 302 is “000”. In state 302, state machine 212 outputs a “0” selection signal to multiplexer 208 on communication link 211C, and a “00” selection signal to multiplexer 206 on communication links 211A and 211B. In state 302, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical one, state machine 212 transitions from state 302 to state 308. In state 302, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical zero, state machine 212 transitions from state 302 to state 304.
The three-bit value corresponding to state 304 is “001”. In state 304, state machine 212 outputs a “0” selection signal to multiplexer 208 on communication link 211C, and a “01” selection signal to multiplexer 206 on communication links 211A and 211B. In state 304, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical one, state machine 212 transitions from state 304 to state 310. In state 304, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical zero, state machine 212 transitions from state 304 to state 306.
The three-bit value corresponding to state 308 is “101”. In state 308, state machine 212 outputs a “0” selection signal to multiplexer 208 on communication link 211C, and a “01” selection signal to multiplexer 206 on communication links 211A and 211B. In state 308, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical one, state machine 212 transitions from state 308 to state 310. In state 308, if the signal output by flip-flop 216 to state machine 212 on communication link 217 is a logical zero, state machine 212 transitions from state 308 to state 306.
Signal 410 shows the data words from the signal 406 that are output by flip-flop 204A (
As shown by signals 410-416 in
The operation of synchronizer 104 is affected by the clock C signal output by system B 106 (
Clock C signal 418A represents a clock signal output by system B 106 (
As shown by signal 422A, state machine 212 begins in state “100”, which is a reset state, remains in this state for a few clock cycles, and then transitions to state “011”. In state “100”, state machine 212 causes multiplexer 208 (
In state “011”, state machine 212 causes multiplexer 208 to output the value at the “0” input of the multiplexer 208, which is coupled to the output of multiplexer 206. The least two significant bits of the state “011” are “11”. Thus, state machine 212 causes multiplexer 206 to output the value at the “11” input of the multiplexer 206, which is coupled to the output of flip-flop 204C. As shown by signal 414, the value held at the output of flip-flop 204C during state “011” is the data word number 1. Multiplexer 206 outputs the data word number 1 through multiplexer 208 to the input of flip-flop 210, which outputs the data word number 1 on communication link 103E during the next low-to-high transition of the clock signal 418A.
After state “011”, state machine 212 transitions to the other states shown in signal 422A: “010”, “000”, “001”, . . . , “010”. The least two significant bits of the three-bit state values correspond to one of the flip-flops 204A-204D. As shown by signal 422A, the least significant two bits of the states are in a pattern, 11, 10, 00, 01, which is continually repeated. Thus, after causing multiplexer 206 to select the output from flip-flop 204C in state “011”, state machine 212 then causes multiplexer 206 to select, in turn, the outputs from flip-flop 204D, flip-flop 204A, and then flip-flop 204B. State machine 212 then returns to flip-flop 204C, and the process is repeated. Each time one of the flip-flops 204A-204D is selected by multiplexer 206, the data word held at the output of the selected flip-flop 204 is output through multiplexers 206 and 208 to the input of flip-flop 210, which outputs the data word on communication link 103E during the next low-to-high transition of the clock signal 418A.
Signals 418B-424B illustrate a second example of the operation of synchronizer 104. Clock C signal 418B represents a clock signal output by system B 106 (
For signals 418B-424B, state machine 212 causes multiplexer 206 to select, in turn, the outputs from flip-flop 204C, flip-flop 204D, flip-flop 204A, and then flip-flop 204B, in a repeating pattern, in the same manner as described above with respect to signals 418A-424A. However, as shown by signal 422B, during the time that data word number 6 (from flip-flop 204D) is being output by flip-flop 210, state machine 212 is in state “111”, which is an error state. In state “111”, state machine 212 causes multiplexer 208 to output the value at the “1” input of the multiplexer 208, which is an error code. The error code is output from multiplexer 208 to flip-flop 210, which outputs the error code on communication link 103E during the next low-to-high transition of the clock signal 418B. As shown by signal 422B, the next state after state “111” is state “000”, which corresponds to flip-flop 204A. Thus, after the error code is inserted into the data stream, data word number 7 from flip-flop 204A is output by flip-flop 210 on communication link 103E, and state machine 212 continues to select the flip-flops 204A-204D in the repeating pattern.
One form of the present invention provides a synchronizer 104 that is more efficient (e.g., in terms of gate count) than prior synchronizers, and has a minimum amount of latency. The synchronizer 104 according to one embodiment resists high frequency jitter in the clocks up to a magnitude of one clock period. In one form of the invention, the synchronizer 104 includes error detection capabilities to help guarantee the reliability of the data transferred by the synchronizer. In one embodiment, the synchronizer 104 incorporates built-in recovery from a FIFO overflow or underflow state that may have resulted from a violation of the assumptions (described above with respect to
Although specific embodiments have been illustrated and described herein, it will be appreciated by those of ordinary skill in the art that a variety of alternate and/or equivalent implementations may be substituted for the specific embodiments shown and described without departing from the scope of the present invention. This application is intended to cover any adaptations or variations of the specific embodiments discussed herein. Therefore, it is intended that this invention be limited only by the claims and the equivalents thereof.