Skip to content

Commit 1517941

Browse files
authored
[cache] fix minimal cache block size (#1310)
2 parents 9ef9deb + eadd842 commit 1517941

File tree

10 files changed

+11
-10
lines changed

10 files changed

+11
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ mimpid = 0x01040312 -> Version 01.04.03.12 -> v1.4.3.12
2929

3030
| Date | Version | Comment | Ticket |
3131
|:----:|:-------:|:--------|:------:|
32+
| 09.07.2025 | 1.11.7.9 | :bug: fix minimal cache block size (has to be at least 8 bytes / 2 words) | [#](https://github.com/stnolting/neorv32/pull/1310) |
3233
| 08.07.2025 | 1.11.7.8 | :warning: remove top `HART_BASE` generic | [#1308](https://github.com/stnolting/neorv32/pull/1308) |
3334
| 07.07.2025 | 1.11.7.7 | minor rtl edits and cleanups | [#1307](https://github.com/stnolting/neorv32/pull/1307) |
3435
| 06.07.2025 | 1.11.7.6 | :sparkles: add configurable number of HW triggers (break-/watchpoints) | [#1304](https://github.com/stnolting/neorv32/pull/1304) |

docs/datasheet/soc.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ The generic type "`suv(x:y)`" is an abbreviation for "`std_ulogic_vector(x downt
261261
| `ICACHE_NUM_BLOCKS` | natural | 4 | Number of blocks ("lines") Has to be a power of two.
262262
| `DCACHE_EN` | boolean | false | Implement the data cache (D$)
263263
| `DCACHE_NUM_BLOCKS` | natural | 4 | Number of blocks ("lines"). Has to be a power of two.
264-
| `CACHE_BLOCK_SIZE` | natural | 64 | Size in bytes of each block (I$ and D$). Has to be a power of two.
264+
| `CACHE_BLOCK_SIZE` | natural | 64 | Size in bytes of each block (I$ and D$). Has to be a power of two, min 8.
265265
4+^| **<<_processor_external_bus_interface_xbus>> (Wishbone / AXI4)**
266266
| `XBUS_EN` | boolean | false | Implement the external bus interface.
267267
| `XBUS_TIMEOUT` | natural | 255 | Clock cycles after which a pending external bus access will auto-terminate and raise a bus fault exception.

docs/datasheet/soc_dcache.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
| Top entity ports: | none |
1212
| Configuration generics: | `DCACHE_EN` | implement processor-internal, CPU-exclusive data cache (D$) when `true`
1313
| | `DCACHE_NUM_BLOCKS` | number of cache blocks ("cache lines"); has to be a power of two
14-
| | `CACHE_BLOCK_SIZE` | size of a cache block in bytes; has to be a power of two (global configuration for I$ and D$)
14+
| | `CACHE_BLOCK_SIZE` | size of a cache block in bytes; has to be a power of two (global configuration for I$ and D$), min 8
1515
| CPU interrupts: | none |
1616
|=======================
1717

docs/datasheet/soc_icache.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
| Top entity ports: | none |
1212
| Configuration generics: | `ICACHE_EN` | implement processor-internal, CPU-exclusive instruction cache (I$) when `true`
1313
| | `ICACHE_NUM_BLOCKS` | number of cache blocks ("cache lines"); has to be a power of two
14-
| | `CACHE_BLOCK_SIZE` | size of a cache block in bytes; has to be a power of two (global configuration for I$ and D$)
14+
| | `CACHE_BLOCK_SIZE` | size of a cache block in bytes; has to be a power of two (global configuration for I$ and D$), min 8
1515
| CPU interrupts: | none |
1616
|=======================
1717

rtl/core/neorv32_cache.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use neorv32.neorv32_package.all;
2626
entity neorv32_cache is
2727
generic (
2828
NUM_BLOCKS : natural range 2 to 1024; -- number of cache blocks (min 2), has to be a power of 2
29-
BLOCK_SIZE : natural range 4 to 32768; -- cache block size in bytes (min 4), has to be a power of 2
29+
BLOCK_SIZE : natural range 8 to 32768; -- cache block size in bytes (min 8), has to be a power of 2
3030
UC_BEGIN : std_ulogic_vector(3 downto 0); -- begin of uncached address space (page number / 4 MSBs of address)
3131
READ_ONLY : boolean -- read-only accesses for host
3232
);

rtl/core/neorv32_package.vhd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ package neorv32_package is
2929

3030
-- Architecture Constants -----------------------------------------------------------------
3131
-- -------------------------------------------------------------------------------------------
32-
constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01110708"; -- hardware version
32+
constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01110709"; -- hardware version
3333
constant archid_c : natural := 19; -- official RISC-V architecture ID
3434
constant XLEN : natural := 32; -- native data path width
3535

@@ -845,7 +845,7 @@ package neorv32_package is
845845
ICACHE_NUM_BLOCKS : natural range 1 to 4096 := 4;
846846
DCACHE_EN : boolean := false;
847847
DCACHE_NUM_BLOCKS : natural range 1 to 4096 := 4;
848-
CACHE_BLOCK_SIZE : natural range 4 to 1024 := 64;
848+
CACHE_BLOCK_SIZE : natural range 8 to 1024 := 64;
849849
-- External bus interface (XBUS) --
850850
XBUS_EN : boolean := false;
851851
XBUS_TIMEOUT : natural := 255;

rtl/core/neorv32_top.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ entity neorv32_top is
9191
ICACHE_NUM_BLOCKS : natural range 1 to 4096 := 4; -- i-cache: number of blocks (min 1), has to be a power of 2
9292
DCACHE_EN : boolean := false; -- implement data cache (d-cache)
9393
DCACHE_NUM_BLOCKS : natural range 1 to 4096 := 4; -- d-cache: number of blocks (min 1), has to be a power of 2
94-
CACHE_BLOCK_SIZE : natural range 4 to 1024 := 64; -- i-cache/d-cache: block size in bytes (min 4), has to be a power of 2
94+
CACHE_BLOCK_SIZE : natural range 8 to 1024 := 64; -- i-cache/d-cache: block size in bytes (min 8), has to be a power of 2
9595

9696
-- External bus interface (XBUS) --
9797
XBUS_EN : boolean := false; -- implement external memory bus interface

rtl/system_integration/neorv32_libero_ip.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ entity neorv32_libero_ip is
8585
ICACHE_NUM_BLOCKS : natural range 1 to 4096 := 4;
8686
DCACHE_EN_INT : integer range 0 to 1 := 0;
8787
DCACHE_NUM_BLOCKS : natural range 1 to 4096 := 4;
88-
CACHE_BLOCK_SIZE : natural range 4 to 1024 := 64;
88+
CACHE_BLOCK_SIZE : natural range 8 to 1024 := 64;
8989
-- External Bus Interface --
9090
XBUS_EN_INT : integer range 0 to 1 := 1;
9191
XBUS_REGSTAGE_EN_INT : integer range 0 to 1 := 1;

rtl/system_integration/neorv32_vivado_ip.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ entity neorv32_vivado_ip is
8686
ICACHE_NUM_BLOCKS : natural range 1 to 4096 := 4;
8787
DCACHE_EN : boolean := false;
8888
DCACHE_NUM_BLOCKS : natural range 1 to 4096 := 4;
89-
CACHE_BLOCK_SIZE : natural range 4 to 1024 := 64;
89+
CACHE_BLOCK_SIZE : natural range 8 to 1024 := 64;
9090
-- External Bus Interface --
9191
XBUS_EN : boolean := false;
9292
XBUS_REGSTAGE_EN : boolean := false;

sim/neorv32_tb.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ entity neorv32_tb is
5757
ICACHE_NUM_BLOCKS : natural range 1 to 4096 := 64; -- i-cache: number of blocks (min 1), has to be a power of 2
5858
DCACHE_EN : boolean := true; -- implement data cache
5959
DCACHE_NUM_BLOCKS : natural range 1 to 4096 := 32; -- d-cache: number of blocks (min 1), has to be a power of 2
60-
CACHE_BLOCK_SIZE : natural range 4 to 1024 := 32; -- i-cache/d-cache: block size in bytes (min 4), has to be a power of 2
60+
CACHE_BLOCK_SIZE : natural range 8 to 1024 := 32; -- i-cache/d-cache: block size in bytes (min 8), has to be a power of 2
6161
-- external memory A --
6262
EXT_MEM_A_EN : boolean := false; -- enable memory
6363
EXT_MEM_A_BASE : std_ulogic_vector(31 downto 0) := x"00000000"; -- base address, has to be word-aligned

0 commit comments

Comments
 (0)