Timing analysis and CDC

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.

Practice this topic Back to topic

Books on Timing analysis and CDC Ad

As an Amazon Associate I earn from qualifying purchases.

More Timing analysis and CDC questions

  1. Which is a drawback of transferring data between clock domains with a handshake?
  2. Why are the write and read pointers of an asynchronous FIFO converted to Gray code before being synchronized into the other domain?
  3. What is the 4-bit binary value 0110 (decimal 6) converted to Gray code?
  4. In a 16-word-deep asynchronous FIFO, why are the write and read pointers made 5 bits, one bit more than the address?
  5. In a 16-word-deep asynchronous FIFO with 5-bit Gray code pointers, what is the correct condition for detecting full on the write side?