Latches and flip-flops are circuits that can be used to store state information and to change state by signals applied to one or more control inputs. In modern computing and communications electronics, these are basic storage elements in memories and sequential logic. A latch is asynchronous, with its output changing as soon as its data input does (or at least after a small propagation delay), provided the latch is enabled via an enable input. A flip-flop is synchronous and edge-triggered and only changes state when a clocking control signal goes from high to low or low to high. Thus, a conventional D flip-flop, e.g., one implemented in CMOS, has two binary inputs, a data input D and a clock input, and at least one output, Q. The D flip-flop captures the value of the D input at a definite portion of an input clock cycle, e.g., a rising edge or a falling edge, known as the capture time. That captured value becomes the Q output. The output Q does not change except at the capture time (or some small propagation delay thereafter). In practical implementations it is required that a data input D be stable for some setup time prior to the capture time and for some hold time after the capture time for the input to be reliably captured and propagated to the output. A conventional D latch, with an enable input rather than a clock input, behaves similarly, except that the output can change according to the data input so long as an enable input remains asserted.