You are on page 1of 2

2 Req

Senders action Receivers action

Ack 3 Data 1 Cycle 1 5 1 Cycle 2

4-phase handshaking for transferring enables/data between asynchronous domains: Sender and Receiver are the participants. Sender has a "req", Receiver a "ack". The "quiet state" is req = 0, ack = 0. 1) Sender wants to transfer data / enable to receiver. Raises req 2) Receiver detects rise in req, raises ack 3) Sender detects rise in ack, lowers req 4) Receiver detects low req, lowers ack 5)... Back to the initial state. Now, with "req" enables and/or data can be transferred from the sender to the receiver or back. This is a robust protocol, but it has a high overhead.

Req Ack SENDER Data RECEIVER

2 Req

Ack

(a) Sender-receiver configuration

Data

1 cycle 1

1 cycle 2 Senders action Receivers action (b) Timing diagram

2-phase is a simplification. The key: two quiet states: req/ack = 0/0 or 1/1

1) Sender wants to transfer data / enable to receiver. Lowers req 2) Receiver detects fall in req, lowers ack 3) Sender detects fall of ack - transaction ended.

Next time: 1) Sender wants to transfer data / enable to receiver. Raises req 2) Receiver detects rise in req, raises ack 3) Sender detects rise of ack - transaction ended.

The 2-phase protocol has less overhead than the 4-phase, but it also has some deficiencies. What are those deficiencies ? I know of one: when we want transfer data bidirectionally between the sender and the receiver using this protocol, we need two separate data lanes, as opposed to 4-phase where a single data lane is enough. This is because in "pull" operations where the sender reads data from the receiver, the receiver doesn't know it has to release the data lane before the next transaction starts.

You might also like