7 | | This VCI initiator is a generic cache controller, fully compliant with the |
8 | | VCI advanced protocol. This hardware component can be used to interface any |
9 | | 32 bits RISC processor (such as Mips R3000, Sparc V8, or PPC 405) to a VCI based multi-processor system. |
10 | | It acts directly as a wrapper for any ISS (Instruction Set Simulator) respecting the standardized API |
| 7 | These 4 hardware components are generic cache controllers, fully compliant with the |
| 8 | VCI advanced protocol. They can be used to interface any - single instruction issue - |
| 9 | 32 bits RISC processor (such as Mips R3000, Sparc V8, Xilinx microBlaze, Altera Nios, or PPC 405) to a VCI based multi-processor system. |
| 10 | They act directly as a wrapper for any ISS (Instruction Set Simulator) respecting the standardized API |
18 | | * The VCI ADDRESS and DATA fields must have 32 bits, and the VCI ERROR field has 1 bit. |
| 16 | * The !VciXcacheWrapper provides the same functionalities as the previous !VciXcache component. It has an higher simulation speed, and supports associativity (for both the instruction and data caches). |
| 17 | * The !VciVcacheWrapper implement a generic paged MMU (see below). |
| 18 | * The !VciCcacheWrapper implement a directory-based cache coherence protocol (see below). |
| 19 | * The !VciCcVcachewrapper supports both the generic MMU and the cache coherence. |
| 20 | |
| 21 | || || No Virtual memory || With Virtual Memory || |
| 22 | ||No Cache Coherence || !VciXcacheWrapper || !VciVcacheWrapper || |
| 23 | ||With Cache Coherence|| !VciCcXcacheWrapper || !VciCcVcacheWrapper || |
| 24 | |
| 25 | === General features === |
| 26 | |
| 27 | The general characteristics are the following |
| 28 | * The VCI DATA field must have 32 bits, |
| 29 | * The VCI ADDRESS field must have 32 bits (when there is no MMU), |
| 30 | * The VCI ERROR field has 1 bit. |
23 | | In order to garanty the memory consistency, this component does NOT start a new VCI transaction |
24 | | until the previous transaction is completed. Therefore, it does not use the VCI PKTID and TRDID fields. |
| 35 | According to the VCI advanced specification, these components use one word VCI command packets |
| 36 | for Read MISS, and accept one word VCI response packets for Write bursts. |
| 37 | In order to garanty the memory consistency, these cache controllers do NOT start a new VCI transaction |
| 38 | until the previous transaction is completed. Therefore, they do NOT use the VCI PKTID and TRDID fields. |
50 | | == 3) CABA Implementation == |
| 64 | The CC_Xcache & CC_Vcache components implement a directory-based cache coherence protocol. |
| 65 | The global memory directory itself should be implemented in a dedicated memory controller such as the !VciMemCache component. |
| 66 | The cache coherence protocol is strongly simplified by the WRITE-THROUGH policy and is implemented by three types of packets. |
| 67 | The CC_Xcache (or CC_Vcache) component has one VCI target port, and can receive UPDATE or INVALIDATE packets, from the memory controller. When the CC-Xcache (or CC_Vcache) component discard a cache line (due to a cache line replacement following a MISS), it signals this change by a CLEANUP packet sent to the cache controller. All those ''coherence'' packets are implemented as VCI write packets to dedicated memory mapped registers. |
| 68 | * an UPDATE packet (memory controller to cache) has N+2 words : the first word contains the the line index of the modified cache line. The second word contains the index of the first modified word in the line. The N following words contain the N data values. |
| 69 | * an INVALIDATE packet (memory controller to cache) has 1 word : it contains the line index of the modified cache line. |
| 70 | * a CLEANUP packet (cache to memory controller) has 1 word : it contains the line index of the discarded cache line. |
| 78 | '''Vcache'' |
| 79 | * Usage : source:trunk/soclib/soclib/module/internal_component/vci_vcache_wrapper/caba/metadata/vci_vcache_wrapper.sd |
| 80 | * interface : source:trunk/soclib/soclib/module/internal_component/vci_vcache_wrapper/caba/source/include/vci_vcache_wrapper.h |
| 81 | * implementation : source:trunk/soclib/soclib/module/internal_component/vci_vcache_wrapper/caba/source/src/vci_vcache_wrapper.cpp |
| 82 | '''CC_Vcache''' |
| 83 | * Usage : source:trunk/soclib/soclib/module/internal_component/vci_cc_xcache_wrapper/caba/metadata/vci_cc_xcache_wrapper.sd |
| 84 | * interface : source:trunk/soclib/soclib/module/internal_component/vci_xcache_wrapper/caba/source/include/vci_xcache_wrapper.h |
| 85 | * implementation : source:trunk/soclib/soclib/module/internal_component/vci_cc_xcache_wrapper/caba/source/src/vci_cc_xcache_wrapper.cpp |
| 86 | '''Cc_Vcache''' |
| 87 | * Usage : source:trunk/soclib/soclib/module/internal_component/vci_cc_vcache_wrapper/caba/metadata/vci_cc_vcache_wrapper.sd |
| 88 | * interface : source:trunk/soclib/soclib/module/internal_component/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h |
| 89 | * implementation : source:trunk/soclib/soclib/module/internal_component/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp |