Repository navigation
Expand file tree
/
Copy pathcache.h
More file actions
89 lines (59 loc) · 2.25 KB
/
Copy pathcache.h
File metadata and controls
89 lines (59 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#ifndef CACHE_H
#define CACHE_H
#include <cstdint>
#include <queue>
#include <future>
#include "BusInterconnect.h"
#include <utility> // Para std::pair
using namespace std;
// Clase que representa la memoria caché
class BusInterconnect;
class Cache {
private:
int id; // Identificador de la caché
uint64_t data[8][4]; // Datos almacenados en caché
uint8_t addr[8][4]; // Direcciones de memoria almacenadas en caché
MESIState state[8][4]; // Estado MESI de cada bloque
bool valid[8][4]; // Indica si el bloque es válido
bool dirty[8][4]; // Indica si el bloque es sucio
int first[8][4]; // Indicador de la primera vez que se usa un bloque
std::queue<std::pair<int, int>> fifo_queue; // Cola FIFO para el reemplazo de bloques
int miss_count; // Contador de fallos de caché
int hit_count;
int inv_count; // Contador de invalidaciones
BusInterconnect& bus; // Referencia a la interconexión de bus
uint8_t Last_addr;
MESIState Last_oldState;
MESIState Last_newState;
public:
// Constructor
Cache(int cache_id, BusInterconnect& bus);
// Métodos de acceso a los atributos
void set_data(int block_num, int pos, uint64_t value);
uint64_t read(uint8_t address);
void write(uint8_t address, uint64_t value);
int get_id() const;
int get_miss_count() const;
int get_invalidation_count() const;
// Métodos para interactuar con la memoria
uint64_t read_memory(uint8_t address);
// Métodos de utilidad
pair<int, int> get_index(uint8_t address);
bool is_in_cache(uint8_t address);
uint64_t get_data(int row, int col);
MESIState get_state(int i, int j);
uint8_t get_address(int i, int j);
void Writeback(int i, int j);
void write_memory(int i, int j);
void set_state(int i, int j, MESIState mesiState);
int get_first(int i, int j);
void displayStats();
int getID();
int get_miss_count();
int get_inv_count();
int get_hit_count();
uint8_t get_last_addr();
MESIState get_last_oldState();
MESIState get_last_newState();
};
#endif // CACHE_H