You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| 22.12.2024 | 1.10.7.7 |:warning: move clock gating switch from processor top to CPU clock; `CLOCK_GATING_EN` is now a CPU tuning option |[#1124](https://github.com/stnolting/neorv32/pull/1124)|
34
35
| 21.12.2024 | 1.10.7.6 | minor rtl cleanups and optimizations |[#1123](https://github.com/stnolting/neorv32/pull/1123)|
| 6 | The "**void**" | `rwxac-` | Unmapped address space. All accesses to this region(s) are redirected to the <<_processor_external_bus_interface_xbus>> (if implemented).
491
+
| # | Region | PMAs | Description
492
+
| 1 | Internal IMEM address space | `rwxac` | For instructions / code and constants; mapped to the internal <<_instruction_memory_imem>> if implemented.
493
+
| 2 | Internal DMEM address space | `rwxac` | For application runtime data (heap, stack, etc.); mapped to the internal <<_data_memory_dmem>>) if implemented.
494
+
| 3 | Memory-mapped XIP flash | `r-xac` | Transparent memory-mapped access to an external <<_execute_in_place_module_xip>> SPI flash.
495
+
| 4 | IO/peripheral address space | `rwxa-` | Processor-internal peripherals / IO devices including the <<_bootloader_rom_bootrom>>.
496
+
| - | The "**void**" | `rwxa[c]` | Unmapped address space. All accesses to this region(s) are redirected to the <<_processor_external_bus_interface_xbus>> if implemented.
496
497
|=======================
497
498
498
-
.Privileged IO and BOOTROM Access Only
499
-
[IMPORTANT]
500
-
Only privileged accesses (M-mode) to the IO/peripheral and bootloader address spaces are allowed.
501
-
If an unprivileged application tries to access this address space a bus access error exception is raised.
502
-
503
-
.Custom PMAs
504
-
[TIP]
505
-
Custom physical memory attributes enforced by the CPU's _physcial memory protection_ (<<_smpmp_isa_extension>>)
506
-
can be used to further constrain the physical memory attributes.
507
-
508
499
509
500
:sectnums:
510
501
==== Bus System
511
502
512
-
The CPU can access all of the 32-bit address space from the instruction fetch interface and also from the data access
513
-
interface. Both CPU interfaces can be equipped with optional caches (<<_processor_internal_data_cache_dcache>> and
514
-
<<_processor_internal_instruction_cache_icache>>). The two CPU interfaces are multiplexed by a simple bus switch into
515
-
a _single processor-internal bus_. Optionally, this bus is further switched by another instance of the bus switch so the
516
-
<<_direct_memory_access_controller_dma>> controller can also access the entire address space. Accesses via the
517
-
resulting SoC bus are split by the <<_bus_gateway>> that redirects accesses to the according main address regions
518
-
(see table above). Accesses to the processor-internal IO/peripheral devices are further redirected via a
519
-
dedicated <<_io_switch>>.
503
+
The CPU provides individual interfaces for instruction fetch and data access. It can can access all of the 32-bit
504
+
address space from each of the interface. Both of them can be equipped with optional caches (<<_processor_internal_data_cache_dcache>>
505
+
and <<_processor_internal_instruction_cache_icache>>).
506
+
507
+
The two CPU interfaces are multiplexed by a simple bus switch into a _single processor-internal bus_. Optionally,
508
+
this bus is further multiplexed by another instance of the bus switch so the <<_direct_memory_access_controller_dma>>
509
+
controller can also access the entire address space. Accesses via the resulting SoC bus are split by the <<_bus_gateway>>
510
+
that redirects accesses to the according main address regions (see table above). Accesses to the processor-internal
511
+
IO/peripheral devices are further redirected via a dedicated <<_io_switch>>.
520
512
521
513
.Processor-Internal Bus Architecture
522
514
image::neorv32_bus.png[1300]
@@ -533,31 +525,27 @@ See sections CPU <<_architecture>> and <<_bus_interface>> for more information r
533
525
:sectnums:
534
526
==== Bus Gateway
535
527
536
-
The central bus gateway serves two purposes: **redirect** core accesses to the according modules (e.g. memory accesses
537
-
vs. memory-mapped IO accesses) and **monitor** all bus transactions. The redirection of access request is based on a
528
+
The central bus gateway serves two purposes: it **redirects** accesses to the according modules (e.g. memory accesses
529
+
vs. memory-mapped IO accesses) and also **monitors** all bus transactions. The redirection of access request is based on a
538
530
customizable memory map implemented via VHDL constants in the main package file (`rtl/core/neorv323_package.vhd`):
539
531
540
532
.Main Address Regions Configuration in the VHDL Package File
<|`31:20`_reserved_ ^| r/- <| reserved, read as zero
157
-
| `0xffffed04` | `SRC_BASE` |`31:0` | r/w | Source base address (shows the last-accessed source address when read)
158
-
| `0xffffed08` | `DST_BASE` |`31:0` | r/w | Destination base address (shows the last-accessed destination address when read)
159
-
.6+<| `0xffffed0c` .6+<| `TTYPE` <|`23:0``DMA_TTYPE_NUM_MSB : DMA_TTYPE_NUM_LSB` ^| r/w <| Number of elements to transfer (shows the last-transferred element index when read)
157
+
| `0xffed0004` | `SRC_BASE` |`31:0` | r/w | Source base address (shows the last-accessed source address when read)
158
+
| `0xffed0008` | `DST_BASE` |`31:0` | r/w | Destination base address (shows the last-accessed destination address when read)
159
+
.6+<| `0xffed000c` .6+<| `TTYPE` <|`23:0``DMA_TTYPE_NUM_MSB : DMA_TTYPE_NUM_LSB` ^| r/w <| Number of elements to transfer (shows the last-transferred element index when read)
160
160
<|`26:24`_reserved_ ^| r/- <| reserved, read as zero
0 commit comments