Skip to content

Spit xbar into two levels #301

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

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

elliotb-lowrisc
Copy link
Contributor

@elliotb-lowrisc elliotb-lowrisc commented Oct 31, 2024

Attempt to reduce the depth of xbar logic on critical timing paths to/from the HyperRAM/SRAM by moving most peripherals from the main cross-bar to a new "peri" (peripheral) sub-crossbar. Keeps addresses the same, but some few devices have increased access latency due to being moved to xbar_peri or to improve QoR.

Blocks with increased access latency: timer, system_info, & hw_rev.

Blocks with decreased access latency: plic.

Seems to improve timing and area utilisation.

@elliotb-lowrisc elliotb-lowrisc marked this pull request as ready for review October 31, 2024 09:59
@elliotb-lowrisc elliotb-lowrisc marked this pull request as draft October 31, 2024 10:00
@elliotb-lowrisc
Copy link
Contributor Author

rebased onto draft pinmux changes

@elliotb-lowrisc
Copy link
Contributor Author

rebased

@elliotb-lowrisc elliotb-lowrisc marked this pull request as ready for review November 4, 2024 14:59
HU90m
HU90m previously requested changes Nov 4, 2024
% for block in config.blocks:
% if not block.name == "gpio":
% if block.name not in ["gpio", "i2c", "spi"]:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it may be nicer to add field to a block which states which crossbar it should be in. Instead of hard coding certain blocks in the templates.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair enough, I've had a go. How does it look to you now?

@elliotb-lowrisc
Copy link
Contributor Author

rebase

@marnovandermaas marnovandermaas marked this pull request as draft November 11, 2024 10:28
@elliotb-lowrisc elliotb-lowrisc marked this pull request as ready for review November 11, 2024 11:24
@elliotb-lowrisc elliotb-lowrisc marked this pull request as draft November 11, 2024 11:24
Attempt to reduce the depth of xbar logic on critical timing paths
to/from the HyperRAM/SRAM by moving most peripherals
from the main cross-bar to a new "peri" (peripheral) sub-crossbar.
Keeps addresses the same, but some few devices have increased
access latency due to being moved to xbar_peri or to improve QoR.

Blocks with increased access latency: timer, system_info, & hw_rev.

Blocks with decreased access latency: plic.
@elliotb-lowrisc elliotb-lowrisc dismissed HU90m’s stale review June 11, 2025 10:21

Have addressed HU90m's comments, but he is no longer around to approve them

@elliotb-lowrisc
Copy link
Contributor Author

Current utilisation (as I build it) is:

Type Used Available Percentage Change from main
Slice LUTs 25,848 32,600 79.29% -1.22%pt
Slice Registers 15,079 65,200 23.13% -0.77%pt
Block RAM Tiles 41 75 54.67% 0%pt
DSPs 13 120 10.83% 0%pt

It also seemed to reduce the bitstream build time by several minutes for me.

@elliotb-lowrisc elliotb-lowrisc marked this pull request as ready for review June 11, 2025 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants