An asynchronous pipeline for high-speed applications uses simple transparent latches in its
datapath and small latch controllers for each pipeline stage. The stages communicate with each other using request signals and acknowledgment signals. Each transition on the request
signal indicates the arrival of a distinct new data item. Each stage comprises a data latch that is normally enabled to allow data to pass through, and a latch controller that enables and disables the data latch. The request
signal and the data are inputs to the data latch. Once the stage has latched the data, a done
signal is produced, which is sent to the latch controller, to the previous stage as an acknowledgment signal, and to the next stage as a request signal. The latch controller disables the latch upon
receipt of the done signal, and re-enables the data latch upon
receipt of the acknowledgment signal from the next stage. For correct operation, the request signal must arrive at the stage after the data inputs have stabilized. The asynchronous pipeline may incorporate logic elements to combine data, as well as matched
delay elements for the request, acknowledgment, and done signals. The asynchronous pipeline may also incorporate clocked
CMOS logic gates. Fork and join structures are also provided by the asynchronous pipeline design.