| 1 | [wiki:Component SocLib Components General Index] |
| 2 | |
| 3 | = !VciXcacheWrapper = |
| 4 | |
| 5 | == 1) Functional Description == |
| 6 | |
| 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 |
| 11 | defined [wiki:WritingRules/RISC here]. |
| 12 | |
| 13 | This cache controller implements two separated instruction and data caches, sharing the same VCI interface. |
| 14 | |
| 15 | It provides the same functionalities as the previous VciXcache component, with an higher simulation speed, |
| 16 | an full support for associativity (for both the instruction and data caches). |
| 17 | |
| 18 | * The VCI ADDRESS and DATA fields must have 32 bits, and the VCI ERROR field has 1 bit. |
| 19 | * The number of lines must be a power of 2, and cannot be larger than 1024. |
| 20 | * The number of words must be a power of 2, and cannot be larger than 32. |
| 21 | * The number of associativity levels must be a power of 2, and cannot be larger than 16. |
| 22 | |
| 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. |
| 25 | |
| 26 | === Instruction Cache === |
| 27 | |
| 28 | * It is read-only. |
| 29 | * It uses the [wiki:Component/MappingTable Mapping Table] to support uncached segments. |
| 30 | * In case of read MISS, or read uncached, the processor is stalled until the missing instruction is available. |
| 31 | * The only VCI transaction generated by the Instruction cache is a read burst corresponding to a missing cache line. |
| 32 | |
| 33 | === Data Cache === |
| 34 | |
| 35 | * The write policy is WRITE-THROUGH (the data is immediately written in memory, and the cache is updated only in case of HIT). |
| 36 | * The Data cache contains a write buffer (8 words), and builds a burst when there are successive write requests with incrementing addresses. |
| 37 | * It uses the [wiki:Component/MappingTable Mapping Table] to support uncached segments. |
| 38 | * The Data Cache supports the following requests : Read, Write, Linked load, and Store Conditional |
| 39 | * The Data cache accepts a line invalidate command. |
| 40 | * Three types of VCI transactions can be generated by the data cache: |
| 41 | * read burst of fixed length, corresponding to a cached read MISS, |
| 42 | * one word transaction, corresponding to an uncached read, a linked load, or a store conditional. |
| 43 | * write burst of variable length, |
| 44 | * The processor is stalled in case of cached read MISS, in case of uncached read, or in case of write, if the write buffer is full. |
| 45 | |
| 46 | == 2) Component definition & usage == |
| 47 | |
| 48 | source:trunk/soclib/soclib/module/internal_component/vci_xcache/caba/metadata/vci_xcache_wrapper.sd |
| 49 | |
| 50 | == 3) CABA Implementation == |
| 51 | |
| 52 | * interface : source:trunk/soclib/soclib/module/internal_component/vci_xcache/caba/source/include/vci_xcache_wrapper.h |
| 53 | * implementation : source:trunk/soclib/soclib/module/internal_component/vci_xcache/caba/source/src/vci_xcache_wrapper.cpp |
| 54 | |
| 55 | === CABA template parameters === |
| 56 | |
| 57 | This component has two template parameters, defining respectively the width of the various VCI signals, |
| 58 | and the instanciated ISS. |
| 59 | {{{ |
| 60 | template<typename vci_param, typename iss_t> |
| 61 | }}} |
| 62 | |
| 63 | === CABA constructor parameters === |
| 64 | {{{ |
| 65 | |
| 66 | VciXcacheWrapper( |
| 67 | sc_module_name insname, |
| 68 | int proc_id, |
| 69 | const soclib::common::MappingTable &mt, |
| 70 | const soclib::common::IntTab &index, |
| 71 | size_t icache_lines, |
| 72 | size_t icache_words, |
| 73 | size_t icache_sets, |
| 74 | size_t dcache_lines, |
| 75 | size_t dcache_words |
| 76 | size_t dcache_sets ); |
| 77 | }}} |
| 78 | |
| 79 | === CABA ports === |
| 80 | |
| 81 | * sc_in<bool> '''p_resetn''' : Global system reset |
| 82 | * sc_in<bool> '''p_clk''' : Global system clock |
| 83 | * soclib::caba::!VciInitiator<vci_param> '''p_vci''' : The VCI port |
| 84 | |
| 85 | == 4) TLM-T Implementation == |
| 86 | |
| 87 | * interface : source:trunk/soclib/soclib/module/internal_component/vci_xcache/tlmt/source/include/vci_xcache_wrapper.h |
| 88 | * implementation : source:trunk/soclib/soclib/module/internal_component/vci_xcache/tlmt/source/src/vci_xcache_wrapper.cpp |
| 89 | |
| 90 | === TLM-T template parameters === |
| 91 | |
| 92 | === TLM-T constructor parameters === |
| 93 | |
| 94 | === TLM-T ports === |
| 95 | |
| 96 | |