What is Handshake?

A scheme that transfers data reliably by exchanging a request (req) from the sender and an acknowledgment (ack) from the receiver. Across clock domains only req and ack are synchronized while the data is held stable, which is safe but takes several cycles or more per transfer.

Japanese name: ハンドシェイク

Handshake appears in 8 practice questions across 2 topics, including Timing analysis and CDC, I/O Interfaces & Buses.

Field: Timing analysis and CDC

Try it: questions about Handshake

In a four-phase handshake using req and ack, what is the correct signal sequence for passing one data item?

  1. ASet req to 1 and start changing the data at the same time → the receiver sets ack to 1 → set req and ack to 0 simultaneously
  2. BThe receiver first sets ack to 1 → the sender settles the data and sets req to 1 → the receiver captures the data → set req and ack to 0 simultaneously
  3. CSettle the data and set req to 1 → the receiver captures the data and sets ack to 1 → set req to 0 → set ack to 0
Show answer and explanation

Answer: C. Settle the data and set req to 1 → the receiver captures the data and sets ack to 1 → set req to 0 → set ack to 0

In a four-phase handshake, req and ack each rise and fall once, so one transfer completes with four transitions in total. The sender settles the data before raising req, and the receiver, seeing the synchronized req, captures the data and raises ack. The sender, seeing the synchronized ack, lowers req, and the receiver, seeing req fall, lowers ack. req and ack are single bits, so they can be passed safely through two-stage synchronizers. Raising req while changing the data risks the receiver capturing a value in transition.

Which is a drawback of transferring data between clock domains with a handshake?

  1. ASynchronization of req and ack makes a round trip, so each transfer takes many cycles, making it unsuited to continuous high-volume transfer
  2. BPassing multi-bit data corrupts it through misalignment of per-bit synchronization
  3. CIt can only be used when the sending and receiving clocks have the same frequency
Show answer and explanation

Answer: A. Synchronization of req and ack makes a round trip, so each transfer takes many cycles, making it unsuited to continuous high-volume transfer

In a four-phase handshake, req takes two synchronization cycles to reach the receiver and ack two cycles to return to the sender, and returning each to 0 takes the same again, so one transfer takes 8 or more cycles in total across both domains. It therefore suits data passed occasionally, such as control register settings. The data stays stable throughout the transfer, so errors from bit misalignment do not occur, and any frequency ratio works. For streaming data almost every cycle, use an asynchronous FIFO.

Handshake in the explanations

Questions that mention Handshake (8)

  1. In a four-phase handshake using req and ack, what is the correct signal sequence for passing one data item?
  2. Which is a drawback of transferring data between clock domains with a handshake?
  3. In the VALID/READY handshake used on each AXI channel, when is data transferred?
  4. Each bit of 4-bit data is passed to another clock domain through its own two-stage synchronizer. What problem can occur when the data changes from 0111 to 1000?
  5. A pulse that is 1 for only one cycle (2 ns) in a 500 MHz clock domain is passed to a 100 MHz domain through a two-stage synchronizer. What problem can occur?
  6. What constraint applies when passing pulses from a fast clock domain to a slow one with toggle synchronization?
  7. What is a characteristic of the AXI bus?
  8. What is a characteristic of AXI4-Stream?

Books on Timing analysis and CDC Ad

As an Amazon Associate I earn from qualifying purchases.

Related terms

Asynchronous FIFO Clock domain AXI Synchronizer Metastability Gray code FPGA Clock uncertainty Critical path CRPR (clock reconvergence pessimism removal)

Back to the glossary