A gated clock is the same clock with some edges removed, so logic on the gated clock and logic on its parent are usually one timing domain: the clock-tree tool balances them together and static timing covers the paths between them. That pleasant fact holds only while the enable behaves, which is why the enable path gets its own rules.
Condition | Why it matters |
|---|---|
The gate is a library cell with characterised timing | Static timing models the enable setup and hold checks and the gated-clock delay (see clock gating). |
Enable meets its gating checks at every corner | A late enable shortens or drops a pulse; the domain assumption rests on this check passing. |
Trees are balanced through the gate | Skew between gated and ungated flops is bounded by construction, not by luck. |
The enable is synchronous to the parent clock | An enable from another domain is a crossing and needs synchronising first. |
When all four hold, a path from an ungated flop to a gated flop is an ordinary same-clock path. No synchroniser, no handshake, no inventory row beyond noting the gating.
The enable is the fragile part. It launches from a flop on the parent clock and must arrive at the gate before the latch closes, a full-cycle path that is easy to meet when the enable is registered but easy to break when it is decoded from deep logic. A late enable is reported as a clock-gating setup violation, and a design that waives those violations has silently turned one domain into an unanalysed one.
The enable comes from another clock domain. Synchronise it first; the synchronised enable is still on the parent clock, but the unsynchronised wire is a crossing.
The gating is implemented outside the standard flow, for example with hand-built logic instead of a library cell. Without characterised checks, timing between the two sides is not proven.
The gated clock can be stopped for long periods while the parent runs. Timing is still one domain, but functionally the crossing lessons of crossing with gated clocks apply.
The enable path is now a crossing: synchronise the new enable into the parent domain before it reaches the gate, and add the crossing to the inventory. The data paths stay same-domain; only the enable changed character.