-
Notifications
You must be signed in to change notification settings - Fork 922
[xbar,rtl] support fifo_depth>1 #28841
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
base: master
Are you sure you want to change the base?
Conversation
3bd1706 to
2972f23
Compare
This commit adds the possibility to increase the fifo depth in the xbar to values > 1 to support multiple outstanding transactions. Why this is beneficial: The ibex instruction cache issues two 32b requests to the flash controller. Inside xbar_main a pipeline register is added to break the critical path to the flash. The pipeline register is added with a fifo of depth=1 for req and rsp data and effectively inserts a bubble after each request and response because the fifo is immediately full. Ibex and flash_ctrl can deal with up to 2 outstanding transactions. The impact on performance is low because the instruction cache reads the critical word first and hides the additional latency that is inserted by the fifo with depth=1. Nonetheless, in phases with many cache misses, the performance can be improved at the price of an additional fifo entry. Signed-off-by: Michael Gautschi <[email protected]>
2972f23 to
40202d2
Compare
vogelpi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, this looks good and it seems like a nice improvement!
Two questions:
- Could you observe any performance improvement e.g. for CoreMark?
- Shall we also enable this for Darjeeling (executes from a big SRAM but also has the I-Cache present)?
| rsp_fifo_pass = True | ||
|
|
||
| # FIFO depth option. default is 1 | ||
| # If pipeline is false or req/rsp_fifo_pass are true, this field has no meaning |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why does the depth have no meaning if the either of the pass options are true? I guess it's just a limitation of the current implementation, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- If req/rsp_fifo_pass is set, the requests can pass through immediately. I guess in this case we could also make the depth variable. on the other hand, the requests+responses can be buffered by the receiving side if pass-through is set.
- if pipeline is false, the depth is set to 0
earlgrey sets this to 0 while darjeeling sets it to 1. (which also sets the fifo depth to 2, similar to this PR) I think these are the main differences:
I'm not sure which is better, I think both can be justified. |


This commit adds the possibility to increase the fifo depth in the xbar to values > 1 to support multiple outstanding transactions.
Why this is beneficial:
The ibex instruction cache issues two 32b requests to the flash controller. Inside xbar_main a pipeline register is added to break the critical path to the flash. The pipeline register is added with a fifo of depth=1 for req and rsp data and effectively inserts a bubble after each request and response because the fifo is immediately full. Ibex and flash_ctrl can deal with up to 2 outstanding transactions.
The impact on performance is low because the instruction cache reads the critical word first and hides the additional latency that is inserted by the fifo with depth=1. Nonetheless, in phases with many cache misses, the performance can be improved at the price of an additional fifo entry.