@@ -178,7 +178,8 @@ optimize the system for certain design goals like minimal area or maximum perfor
178
178
179
179
.Default Values
180
180
[NOTE]
181
- All _optional_ configuration generics provide default values in case they are not explicitly assigned during instantiation.
181
+ All configuration generics provide default values in case they are not explicitly assigned during instantiation.
182
+ By default, all configuration options are **disabled** .
182
183
183
184
.Software Discovery of Configuration
184
185
[TIP]
@@ -195,7 +196,6 @@ and do not impact timing.
195
196
[NOTE]
196
197
The generic type "`suv(x:y)` " is an abbreviation for "`std_ulogic_vector(x downto y)` ".
197
198
198
-
199
199
.NEORV32 Processor Generic List
200
200
[cols="<3,^2,^2,<8"]
201
201
[options="header",grid="rows"]
@@ -226,7 +226,7 @@ The generic type "`suv(x:y)`" is an abbreviation for "`std_ulogic_vector(x downt
226
226
| `RISCV_ISA_Zbkx` | boolean | false | Enable <<_zbkx_isa_extension>> (scalar cryptography crossbar permutations).
227
227
| `RISCV_ISA_Zbs` | boolean | false | Enable <<_zbs_isa_extension>> (single-bit bit-manipulation instructions).
228
228
| `RISCV_ISA_Zfinx` | boolean | false | Enable <<_zfinx_isa_extension>> (single-precision floating-point unit).
229
- | `RISCV_ISA_Zicntr` | boolean | true | Enable <<_zicntr_isa_extension>> (CPU base counters).
229
+ | `RISCV_ISA_Zicntr` | boolean | false | Enable <<_zicntr_isa_extension>> (CPU base counters).
230
230
| `RISCV_ISA_Zicond` | boolean | false | Enable <<_zicond_isa_extension>> (integer conditional instructions).
231
231
| `RISCV_ISA_Zihpm` | boolean | false | Enable <<_zihpm_isa_extension>> (hardware performance monitors).
232
232
| `RISCV_ISA_Zknd` | boolean | false | Enable <<_zknd_isa_extension>> (scalar cryptography NIST AES decryption instructions).
@@ -244,8 +244,8 @@ The generic type "`suv(x:y)`" is an abbreviation for "`std_ulogic_vector(x downt
244
244
4+^| **Physical Memory Protection (<<_smpmp_isa_extension>>)**
245
245
| `PMP_NUM_REGIONS` | natural | 0 | Number of implemented PMP regions (0..16).
246
246
| `PMP_MIN_GRANULARITY` | natural | 4 | Minimal region granularity in bytes. Has to be a power of two, min 4.
247
- | `PMP_TOR_MODE_EN` | boolean | true | Implement support for top-of-region (TOR) mode.
248
- | `PMP_NAP_MODE_EN` | boolean | true | Implement support for naturally-aligned power-of-two (NAPOT & NA4) modes.
247
+ | `PMP_TOR_MODE_EN` | boolean | false | Implement support for top-of-region (TOR) mode.
248
+ | `PMP_NAP_MODE_EN` | boolean | false | Implement support for naturally-aligned power-of-two (NAPOT & NA4) modes.
249
249
4+^| **Hardware Performance Monitors (<<_zihpm_isa_extension>>)**
250
250
| `HPM_NUM_CNTS` | natural | 0 | Number of implemented hardware performance monitor counters (0..13).
251
251
| `HPM_CNT_WIDTH` | natural | 40 | Total LSB-aligned size of each HPM counter. Min 0, max 64.
@@ -271,7 +271,7 @@ The generic type "`suv(x:y)`" is an abbreviation for "`std_ulogic_vector(x downt
271
271
| `XBUS_CACHE_NUM_BLOCKS` | natural | 64 | Number of blocks ("lines"). Has to be a power of two.
272
272
| `XBUS_CACHE_BLOCK_SIZE` | natural | 32 | Size in bytes of each block. Has to be a power of two.
273
273
4+^| **Peripheral/IO Modules**
274
- | `IO_DISABLE_SYSINFO` | boolean | false | Disable <<_system_configuration_information_memory_sysinfo>> module; ⚠️ not recommended - for advanced users only!
274
+ | `IO_DISABLE_SYSINFO` | boolean | false | Disable <<_system_configuration_information_memory_sysinfo>> module; not recommended - for advanced users only!
275
275
| `IO_GPIO_NUM` | natural | 0 | Number of general purpose input/output pairs of the <<_general_purpose_input_and_output_port_gpio>>, max 32.
276
276
| `IO_CLINT_EN` | boolean | false | Implement the <<_core_local_interruptor_clint>>.
277
277
| `IO_UART0_EN` | boolean | false | Implement the <<_primary_universal_asynchronous_receiver_and_transmitter_uart0>>.
@@ -646,10 +646,10 @@ The reservation-set controller implements the _strong semnatics_. An active rese
646
646
:sectnums:
647
647
==== Memory Coherence
648
648
649
- Depending on the configuration, the NEORV32 processor provides several _layer_ of memory consisting
649
+ Depending on the configuration, the NEORV32 processor provides several _layers_ of memory consisting
650
650
of caches, buffers and storage.
651
651
652
- * The CPU instruction prefetch buffer (" level-0" )
652
+ * The CPU pipeline and its instruction prefetch buffer (level-0)
653
653
* The <<_processor_internal_data_cache_dcache>> (level-1)
654
654
* The <<_processor_internal_instruction_cache_icache>> (level-1)
655
655
* The cache of the <<_processor_external_bus_interface_xbus>> (level-2)
@@ -665,6 +665,13 @@ regardless of the actual CPU/ISA configuration:
665
665
* `fence` (<<_i_isa_extension>> / <<_e_isa_extension>>)
666
666
* `fence.i` (<<_zifencei_isa_extension>>)
667
667
668
+ .Weak Coherence Model
669
+ [IMPORTANT]
670
+ The NEORV32-specific implementation of the `fence[.i]` ordering instructions only provides a rather **weak**
671
+ coherence model. A core's `fence` just orders all memory accesses towards main memory. Hence, they _can_ become
672
+ visible by other agents (the secondary CPU core, the DMA, processor-external modules) if these agents also
673
+ synchronize (e.g. reload) their cache(s).
674
+
668
675
By executing the "data" `fence` instruction the CPU's load/store operations are ordered
669
676
and synchronized across the entire system:
670
677
0 commit comments