-
Notifications
You must be signed in to change notification settings - Fork 0
/
pipeline.cc
50 lines (37 loc) · 1.22 KB
/
pipeline.cc
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
#include "pipeline.h"
using namespace std;
Pipeline::Pipeline(unsigned mem_size,
unsigned rob_size,
unsigned num_int_res_stations,
unsigned num_add_res_stations,
unsigned num_mul_res_stations,
unsigned num_load_res_stations,
unsigned max_issue){
fpregisters = new FPRegisterUnit(32);
intregisters = new FPRegisterUnit(32);
ROB = new ReorderBuffer(rob_size);
int_RSU = new ReservationStationUnit(num_int_res_stations, "Int");
adder_RSU = new ReservationStationUnit(num_add_res_stations, "Add");
mult_RSU = new ReservationStationUnit(num_mul_res_stations, "Mult");
load_RSU = new ReservationStationUnit(num_load_res_stations, "Load");
}
void Pipeline::Clock::posedge(Pipeline& pipeline){
//alert all units with latency that this is start of new clock cycle
pipeline.memory_unit->alert();
//pipeline.adr_unit.alert(); - DON"T DO THIS
pipeline.int_file->alert();
pipeline.adder_file->alert();
pipeline.mult_file->alert();
pipeline.div_file->alert();
pipeline.ROB->alert();
pipeline.adder_RSU->alert();
pipeline.int_RSU->alert();
pipeline.mult_RSU->alert();
pipeline.load_RSU->alert();
}
void Pipeline::initialize(unsigned base_address){
pc.load(base_address);
}
void Pipeline::cycle(){
clock.posedge(*this);
}