E
Eli Bendersky
Guest
Hello,
I'm sure the details of these protocols are familiar to most of you,
but I will repeat them here shortly for the completeness of my
question:
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.
So 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. Raises req
2) Receiver detects rise in req, raises ack
3) Sender detects rise of ack - transaction ended.
Next time:
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.
The 2-phase protocol has less overhead than the 4-phase, but it also
has some deficiencies. And we finally reach my question. 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.
Are you aware of any other disadvantages of the 2-phase protocol as
opposed to the 4-phase ?
Thanks in advance
Eli
I'm sure the details of these protocols are familiar to most of you,
but I will repeat them here shortly for the completeness of my
question:
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.
So 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. Raises req
2) Receiver detects rise in req, raises ack
3) Sender detects rise of ack - transaction ended.
Next time:
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.
The 2-phase protocol has less overhead than the 4-phase, but it also
has some deficiencies. And we finally reach my question. 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.
Are you aware of any other disadvantages of the 2-phase protocol as
opposed to the 4-phase ?
Thanks in advance
Eli