This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)(Learn how and when to remove this template message)
Globally asynchronous locally synchronous (GALS) is an architecture for designing electronic circuits which addresses the problem of safe and reliable data transfer between independent clock domains. GALS is a model of computation that emerged in the 1980s. It allows to design computer systems consisting of several synchronous islands (using synchronous programming for each such island) interacting with other islands using asynchronous communication, e.g. with FIFOs.
A GALS circuit consists of a set of locally synchronous modules communicating with each other via asynchronous wrappers. Each synchronous subsystem ("clock domain") can run on its own independent clock (frequency). Advantages include much lower electromagnetic interference (EMI). The CMOS circuit (logic gates) requires relatively large supply current when changing state from 0 to 1. These changes are aggregated for synchronous circuit as most changes are initialised by an active clock edge. Therefore, large spikes on supply current occur at active clock edges. These spikes can cause large electromagnetic interference, and may lead to circuit malfunction. In order to limit these spikes large number of decoupling capacitors are used. Another solution is to use a GALS design style, i.e. design (locally) is synchronous (thus easier to be designed than asynchronous circuit) but globally asynchronous, i.e. there are different (e.g. phase shifted, rising and falling active edge) clock signal regimes thus supply current spikes do not aggregate at the same time. Consequently, GALS design style is often used in system on a chip (SoC). It is especially used in network on a chip (NoC) architectures for SoCs.
Some larger GALS circuits contain multiple CPUs. Generally each CPU in such an asynchronous array of simple processors has its own independent oscillator. That oscillator can be halted when there's no work for its CPU to do.
In some cases each CPU is further divided into smaller modules, each with their own independent clock, or in a few cases no clock at all (Asynchronous circuit § Asynchronous CPU).
- Synchronous programming
- Asynchronous programming
- Concurrency (computer science)
- Asynchronous system
- Clock domain crossing
- SIGNAL – a dataflow-oriented synchronous language enabling multi-clock and GALS specifications