-
Notifications
You must be signed in to change notification settings - Fork 62
Description
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:
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
mem.d.ready := state.isOneOf(s_write_ack, s_read_data) |
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
when (state === s_write_data && mem.a.ready) { |
But in tile link it is legal to have a_ready = d_ready.