Difference between revisions of "Synchronizer"

From Computer History Wiki
Jump to: navigation, search
(A decent start)
 
(Various improvements)
Line 1: Line 1:
A '''synchronizer''' is a device which interfaces between two groups of circuitry which are either:
+
A '''synchronizer''' is a device which interfaces between a block of [[synchronous]] circuity (such a block of circuitry, all using a common clock, forms a so-called 'clock domain'), and an input from either:
  
* both [[synchronous]], but using clocks which are not fixed relative to one another; or
+
* another block of synchronous circuitry, but using a clock which is not fixed relative to that of the destination (receiving) clock domain; or
* at least one of the two is [[asynchronous]].
+
* an [[asynchronous]] circuit.
  
(A group of circuity all using a common clock forms a so-called 'clock domain'.)
+
Signals which pass across the boundary must be handled in such a way that they reliably appear to the circuitry inside the destination clock domain to be in one state or another. If the incoming signal, and the clock in the destination clock domain are aligned 'just right' (in other words, 'just wrong'), this process can be subject to [[meta-stability]] issues.
  
Signals which pass across the boundary must be handled in such a way that they reliably appear to be in one state or another, to the circuitry inside the destination clock domain.
+
Note that if an incoming signal is passed through two synchronizers in parallel (for use in differing parts of the same clock domain), it is entirely possible for one synchronizer to decide that the signal was a '0', and the other a '1'; such designs should therefore be avoided.
  
If the incoming signal, and the clock in the destination clock domain are aligned 'just right' (in other words, 'just wrong'), this process can be subject to [[meta-stability]] issues.
+
(Interesting question: if such a signal is passed to two ''different'' clock domains in parallel, it appears to be possible to have one see it as '0', whilst the other sees it as '1'.)
  
At a higher level, a bit string passing across a clock domain boundary must be the same on both sides.
+
At a higher level, a synchronizer should result in a bit string passed across a clock domain boundary being the same on both sides.
 +
 
 +
One common way to implement a synchronizer is with two [[flip-flops]] in series, driven by a common clock. This allows the signal from the first flop (which is effectively 'sampling' the input) an entire clock period to settle out from any potential meta-stability, before it is passed on by the second flop; it does however mean that the signal undergoes significant real-time delay.
 +
 
 +
It is possible to describe a synchronizer as an [[arbiter]] where one of the input signals to the arbiter is the clock of the destination clock domain.
 +
 
 +
==Further reading==
 +
 
 +
* Ran Ginosar, "''Fourteen Ways  to Fool Your Synchronizer''", 'ASYNC '03: Proceedings of the 9th International Symposium on Asynchronous Circuits and Systems', 2003, pp. 89-96 - An interesting discussion of synchronizers and synchronizer issues

Revision as of 20:13, 2 December 2016

A synchronizer is a device which interfaces between a block of synchronous circuity (such a block of circuitry, all using a common clock, forms a so-called 'clock domain'), and an input from either:

  • another block of synchronous circuitry, but using a clock which is not fixed relative to that of the destination (receiving) clock domain; or
  • an asynchronous circuit.

Signals which pass across the boundary must be handled in such a way that they reliably appear to the circuitry inside the destination clock domain to be in one state or another. If the incoming signal, and the clock in the destination clock domain are aligned 'just right' (in other words, 'just wrong'), this process can be subject to meta-stability issues.

Note that if an incoming signal is passed through two synchronizers in parallel (for use in differing parts of the same clock domain), it is entirely possible for one synchronizer to decide that the signal was a '0', and the other a '1'; such designs should therefore be avoided.

(Interesting question: if such a signal is passed to two different clock domains in parallel, it appears to be possible to have one see it as '0', whilst the other sees it as '1'.)

At a higher level, a synchronizer should result in a bit string passed across a clock domain boundary being the same on both sides.

One common way to implement a synchronizer is with two flip-flops in series, driven by a common clock. This allows the signal from the first flop (which is effectively 'sampling' the input) an entire clock period to settle out from any potential meta-stability, before it is passed on by the second flop; it does however mean that the signal undergoes significant real-time delay.

It is possible to describe a synchronizer as an arbiter where one of the input signals to the arbiter is the clock of the destination clock domain.

Further reading

  • Ran Ginosar, "Fourteen Ways to Fool Your Synchronizer", 'ASYNC '03: Proceedings of the 9th International Symposium on Asynchronous Circuits and Systems', 2003, pp. 89-96 - An interesting discussion of synchronizers and synchronizer issues