Skip to content
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

⚠️ Rework SoC bus system and memory map #648

Merged
merged 31 commits into from
Jul 17, 2023
Merged

⚠️ Rework SoC bus system and memory map #648

merged 31 commits into from
Jul 17, 2023

Conversation

stnolting
Copy link
Owner

@stnolting stnolting commented Jul 15, 2023

Part 1: Version 1.8.6.3

  • remove files neorv32_bus_keeper.vhd and neorv32_busswitch.vhd - new file neorv32_intercon.vhd now includes all modules for the internal bus system
  • add centralized gateway that redirects core accesses to the new 6 main address space regions
    • instruction address space (IMEM)
    • data address space (DMEM)
    • memory-mapped XIP address space
    • bootloader ROM address space
    • IO address space
    • the "void" (unmapped addresses; redirected to the external memory interface if implemented)
  • fixed XIP memory page to 0xE (address range 0xE0000000 to 0xEfffffff)
  • removed IO space PMAs (physical memory attributes); instruction fetches and non-32bit-word accesses to the IO space are now allowed (but not recommended as the behavior might be undefined)

⚠️ The modifications from this PR are not backwards compatible!

@stnolting stnolting added HW Hardware-related experimental Experimental feature optimization Make things faster, smaller and more efficient labels Jul 15, 2023
@stnolting stnolting self-assigned this Jul 15, 2023
@stnolting
Copy link
Owner Author

stnolting commented Jul 15, 2023

Part 2: Version 1.8.6.4

⚠️ The modifications from this PR are not backwards compatible!

@stnolting
Copy link
Owner Author

stnolting commented Jul 15, 2023

Part 3: Version 1.8.6.5

  • re-add PMAs (physical memory attributes)

This is what the updated address space looks like:
address_space

⚠️ The modifications from this PR are not backwards compatible!

@biosbob
Copy link
Collaborator

biosbob commented Jul 16, 2023

i've started playing with this PR, specifically see its impact on my own IceBreaker LUT baseline of 4361....

my first step was to update my own fork to the latest upstream main.... once accomodating the changes, my IceBreaker LUT baseline became 4356 (which is effectively unchanged)....

i then switched this PR, which required me to update the *mem_ice40up_spram.vhd along the lines of the *mem_default.vhd files....

my IceBreaker now became 4306, which is definitely a measurable improvement!!!!

once i fold this PR into my own compressed address branch (where the latest LUT was ~3760) i'm expecting some further reductions....

all moving in the right direction....

@stnolting
Copy link
Owner Author

stnolting commented Jul 16, 2023

@biosbob

my IceBreaker now became 4306, which is definitely a measurable improvement!!!!

Great to hear!!! What do you think about the address mapping? Do you think the address map is configurable enough to support your compressed address space proposal?


This is the new SoC bus architecture:
neorv32_bus

* write accesses to the IO space are no longer size-constrained
* the IO space also provides eXecute permissions (required for the on-chip debugger)
@stnolting stnolting merged commit c1ac576 into main Jul 17, 2023
@stnolting stnolting deleted the dev branch July 17, 2023 20:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
experimental Experimental feature HW Hardware-related optimization Make things faster, smaller and more efficient
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Rework bus system and memory map
2 participants