URL
https://opencores.org/ocsvn/neorv32/neorv32/trunk
Subversion Repositories neorv32
[/] [neorv32/] [trunk/] [docs/] [datasheet/] [soc_icache.adoc] - Rev 71
Compare with Previous | Blame | View Log
<<<:sectnums:==== Processor-Internal Instruction Cache (iCACHE)[cols="<3,<3,<4"][frame="topbot",grid="none"]|=======================| Hardware source file(s): | neorv32_icache.vhd || Software driver file(s): | none | _implicitly used_| Top entity port: | none || Configuration generics: | _ICACHE_EN_ | implement processor-internal instruction cache when _true_| | _ICACHE_NUM_BLOCKS_ | number of cache blocks (pages/lines)| | _ICACHE_BLOCK_SIZE_ | size of a cache block in bytes| | _ICACHE_ASSOCIATIVITY_ | associativity / number of sets| CPU interrupts: | none ||=======================The processor features an optional cache for instructions to improve performance when using memories with highaccess latencies. The cache is directly connected to the CPU's instruction fetch interface and providesfull-transparent buffering of instruction fetch accesses to the entire address space.The cache is implemented if the _ICACHE_EN_ generic is true. The size of the cache memory is defined via_ICACHE_BLOCK_SIZE_ (the size of a single cache block/page/line in bytes; has to be a power of two and >=4 bytes), _ICACHE_NUM_BLOCKS_ (the total amount of cache blocks; has to be a power of two and >= 1) andthe actual cache associativity _ICACHE_ASSOCIATIVITY_ (number of sets; 1 = direct-mapped, 2 = 2-way set-associative,has to be a power of two and >= 1).If the cache associativity (_ICACHE_ASSOCIATIVITY_) is greater than 1 the LRU replacement policy (least recentlyused) is used..Cache Memory HDL[NOTE]The default `neorv32_icache.vhd` HDL source file provides a _generic_ memory design that infers embeddedmemory. You might need to replace/modify the source file in order to use platform-specific features(like advanced memory resources) or to improve technology mapping and/or timing. Also, keep the featuresof the targeted FPGA's memory resources (block RAM) in mind when configuringthe cache size/layout to maximize and optimize resource utilization..Caching Internal Memories[NOTE]The instruction cache is intended to accelerate instruction fetches from _processor-external_ memories.Since all processor-internal memories provide an access latency of one cycle (by default), cachinginternal memories does not bring a relevant performance gain. However, it will slightly reduce traffic on theprocessor-internal bus..Manual Cache Clear/Reload[NOTE]By executing the `ifence.i` instruction (`Zifencei` CPU extension) the cache is cleared and a reload frommain memory is triggered. Among other things this allows to implement self-modifying code..Retrieve Cache Configuration from Software[TIP]Software can retrieve the cache configuration from the <<_sysinfo_cache_configuration>> register.**Bus Access Fault Handling**The cache always loads a complete cache block (_ICACHE_BLOCK_SIZE_ bytes) aligned to it's size every time acache miss is detected. If any of the accessed addresses within a single block do not successfullyacknowledge the transfer (i.e. issuing an error signal or timing out) the whole cache block is invalidated andany access to an address within this cache block will raise an instruction fetch bus error exception.
