-
Notifications
You must be signed in to change notification settings - Fork 59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SerialAdapter should require minLatency > 0 #88
Comments
Thanks for filing this @mwachs5.
See also: "Request Response Ordering" (immediately before Fig 4.3) in TileLink Spec v1.8
I've encountered a case where a deadlock does occur. I'd be happy to submit a PR that at least adds buffering in front of the TL interface if that would be helpful. |
Thanks for pointing this out, Megan. We do this a lot throughout our TileLink code. I'll scan through all the existing code and see where else we need to add requires. |
There is a state machine in the Serial Adapter that seems to assume that d_valid will not be asserted on the same cycle as a_valid when writing. It can't accept the ack on the same cycle that the data is being written. The state machine won't advance if this is the case, even though that is valid Tile Link behavior.
There should be a
require(outer.node.minLatency > 0)
e.g. here to detect this case, or the state machine should be corrected to handle it:testchipip/src/main/scala/SerialAdapter.scala
Line 51 in 2797a6c
This is my understanding, the state machine won't accept the write ack (by asserting d_ready) unless it's in write ack state:
testchipip/src/main/scala/SerialAdapter.scala
Line 105 in 2797a6c
But it won't go into write-ack state unless the write is actually accepted:
testchipip/src/main/scala/SerialAdapter.scala
Line 178 in 2797a6c
But in tile link it is legal to have a_ready = d_ready.
The text was updated successfully, but these errors were encountered: