temporary undoing of renaming
[riscv-isa-sim.git] / riscv / icsim.h
1 #ifndef _RISCV_ICSIM_H
2 #define _RISCV_ICSIM_H
3
4 // this file models a simple cache to estimate hit/miss rates.
5 // it is currently unused.
6
7 #include <cstring>
8 #include <string>
9 #include <stdint.h>
10
11 class lfsr_t
12 {
13 public:
14 lfsr_t() : reg(1) {}
15 lfsr_t(const lfsr_t& lfsr) : reg(lfsr.reg) {}
16 uint32_t next() { return reg = (reg>>1)^(-(reg&1) & 0xd0000001); }
17 private:
18 uint32_t reg;
19 };
20
21 class icsim_t
22 {
23 public:
24 icsim_t(size_t sets, size_t ways, size_t linesz, const char* name);
25 icsim_t(const icsim_t& rhs);
26 ~icsim_t();
27
28 void tick(uint64_t pc, int insnlen, bool store);
29 void print_stats();
30 private:
31 lfsr_t lfsr;
32
33 size_t sets;
34 size_t ways;
35 size_t linesz;
36 size_t idx_shift;
37 size_t idx_mask;
38
39 uint64_t* tags;
40
41 uint64_t read_accesses;
42 uint64_t read_misses;
43 uint64_t bytes_read;
44 uint64_t write_accesses;
45 uint64_t write_misses;
46 uint64_t bytes_written;
47 uint64_t writebacks;
48
49 std::string name;
50
51 static const uint64_t VALID = 1ULL << 63;
52 static const uint64_t DIRTY = 1ULL << 62;
53 };
54
55 #endif