Fix demux R channel backpressure#37
Conversation
|
Nice catch! I'm wondering if it would make more sense to stall the request that changes the select_q instead of buffering the full response inside the demux - the same performance could be achieved then by adding a cut module or a module based on a fall-through reg, enabling flexibility and tighter area overhead control. |
|
I felt like I was missing some better way to do it, yeah I think I agree, your proposal is better. I will change it accordingly. |
e17fa4c to
a4833cc
Compare
|
OUTDATED
MUX: DEMUX:
|
The mux could let the response route and upstream rready disagree while a destination R phase was backpressured. Derive rready from the existing response FIFO head so UseRReady keeps response payloads stable without adding owner state or buffering the payload.
The demux could change its selected response source while the upstream R phase was stalled. Keep routing responses through the existing selected source and block source changes until the response phase completes so the upstream response remains stable.
a4833cc to
517ae25
Compare
|
Turns out if you are not tired this is actually way easier to fix and doesn't cost more state at all. |
When rready is used, obi_demux could expose a downstream response directly to the upstream manager and then let it change while the manager was stalled (rready is not there but demux moves on).
Add a one-entry response hold stage so stalled R-channel payload remains stable until accepted.