-
Notifications
You must be signed in to change notification settings - Fork 0
/
superscalar.h
69 lines (42 loc) · 1.32 KB
/
superscalar.h
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
#ifndef SUPERSCALAR_H
#define SUPERSCALAR_H
#include "instruction.h"
#include "superscalar_units.h"
#include "tomasulo.h"
#include <queue>
#include <vector>
#include <unordered_map>
#define ALU_COUNT 2
#define LDST_COUNT 2
class SuperscalarOoOPipeline {
public:
int instructions_executed = 0;
SuperscalarFetchUnit fetch_unit;
SuperscalarIssueUnit issue_unit;
std::vector<ALU> ALUs;
std::vector<LDSTUnit> ldst_units;
std::vector<BranchUnit> branch_units;
PipelineBuffers pipeline_buffers;
SuperscalarWriteUnit write_unit;
SuperscalarCommitUnit commit_unit;
SuperscalarOoOPipeline() {
fetch_unit = SuperscalarFetchUnit();
issue_unit = SuperscalarIssueUnit();
for (int i = 0; i < ALU_COUNT; i++) {
ALUs.push_back(ALU());
}
for (int i = 0; i < LDST_COUNT; i++) {
ldst_units.push_back(LDSTUnit());
}
branch_units.push_back(BranchUnit());
pipeline_buffers = PipelineBuffers();
write_unit = SuperscalarWriteUnit();
commit_unit = SuperscalarCommitUnit();
}
void clock_cycle(Hardware &hw, std::vector<Instruction> program);
void advance_pipeline(Hardware &hw);
void reset_regs(Hardware &hw);
void reset_all_res_stns();
void flush_pipeline();
};
#endif