1 | #include "../include/Cache.h" |
---|
2 | |
---|
3 | namespace environnement { |
---|
4 | namespace cache { |
---|
5 | |
---|
6 | // Return the time to have the data |
---|
7 | // latence is call on the same port in a single cycle, only the last access is save |
---|
8 | // { NOTE } : type_cache = 0 : icache, 1 : dcache |
---|
9 | uint32_t Cache::latence (cache_t type_cache, |
---|
10 | uint32_t num_entity, |
---|
11 | uint32_t num_port , |
---|
12 | uint32_t address , |
---|
13 | uint32_t trdid , |
---|
14 | type_req_cache_t type , |
---|
15 | direction_req_cache_t dir ) |
---|
16 | { |
---|
17 | if (num_entity >= param->nb_cache_dedicated) |
---|
18 | { |
---|
19 | std::cerr << "<Cache.latence> {ERROR} num_entity must be >= nb_cache_dedicated" << std::endl; |
---|
20 | exit (1); |
---|
21 | } |
---|
22 | |
---|
23 | cache_multilevel::Cache_MultiLevel * cache; |
---|
24 | if (type_cache == INSTRUCTION_CACHE) |
---|
25 | cache = icache_dedicated [num_entity]; |
---|
26 | else |
---|
27 | cache = dcache_dedicated [num_entity]; |
---|
28 | |
---|
29 | if (num_port >= cache->param->nb_port) |
---|
30 | { |
---|
31 | std::cerr << "<Cache.latence> {ERROR} num_port can be >= nb_port" << std::endl; |
---|
32 | exit (1); |
---|
33 | } |
---|
34 | |
---|
35 | // Make a access with this level "dedicated" |
---|
36 | std::cout << "cache dedicated : access" << std::endl; |
---|
37 | cache_multilevel::Access access_dedicated = cache->access(num_port,address,trdid,type,dir); |
---|
38 | |
---|
39 | if (access_dedicated.hit == MISS) |
---|
40 | { |
---|
41 | std::cout << "cache shared : access" << std::endl; |
---|
42 | // Make a access with this level "shared" |
---|
43 | cache_multilevel::Access access_shared = cache_shared->access(range_port (type_cache,num_entity)+num_port,address,trdid,type,dir); |
---|
44 | |
---|
45 | cache_shared->update_access (access_shared); |
---|
46 | |
---|
47 | access_dedicated.last_nb_level = param->nb_cache_dedicated-1; // Update all cache |
---|
48 | access_dedicated.latence += access_shared.latence; |
---|
49 | } |
---|
50 | |
---|
51 | std::cout << "end access, update access" << std::endl; |
---|
52 | |
---|
53 | cache->update_access (access_dedicated); |
---|
54 | |
---|
55 | std::cout << "end access, update access" << std::endl; |
---|
56 | |
---|
57 | return access_dedicated.latence; |
---|
58 | } |
---|
59 | |
---|
60 | }; |
---|
61 | }; |
---|