Synchronous circuits are circuits that are driven by a central/external clock signal. The vast majority of the complex circuits we currently use are synchronous, due to the lack of good tools and expertise related to asynchrony.
Synchronous circuits present some advantages over their asynchronous counterparts.
- No need to handle metastability - Techniques used in synchronous circuits are immune to metastability issues.
- Availability of good tools and expertise - Most tools are designed around synchronous circuits and most hardware designers work on synchronous designs.
- Easier to test - The clock can be stopped at any time with the expectation of a stable state.
However, synchronous circuits present some disadvantages too.
- Slower execution - Execution speed is bound by the clock frequency, which in turn is bound by the slowest execution stage. Additionally, worst-case scenarios are usually assumed, thus further reducing clock frequency.
- Maximised energy consumption - Much of the energy consumed goes for propagating the clock signal.
- Assumed environmental conditions - Synchronous circuits are assumed to work under some conditions that affect operation speed (e.g. temperature ranges, wire length, etc) and the clock is tuned for that. Changing the conditions would make the clock too slow or too fast for the circuit itself (in the first case wasting processing time and in the second case making the circuit outright unusable). Synchronous circuits have also a harder time for modularity.
- Possible "clock-skew" problems - The clock signal may not arrive at the same time to all inputs.