CmdScheduler.h (10428:0caf62b57dfd) CmdScheduler.h (11555:2efa95cf8504)
1/*
2 * Copyright (c) 2012-2014, TU Delft
3 * Copyright (c) 2012-2014, TU Eindhoven
4 * Copyright (c) 2012-2014, TU Kaiserslautern
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are

--- 45 unchanged lines hidden (view full) ---

54 #define ACTIVATE 2
55 #define PRECHARGE 3
56 #define POWER_DOWN 1
57 #define SELF_REFRESH 2
58
59 // the format of a transaction.
60 class trans {
61 public:
1/*
2 * Copyright (c) 2012-2014, TU Delft
3 * Copyright (c) 2012-2014, TU Eindhoven
4 * Copyright (c) 2012-2014, TU Kaiserslautern
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are

--- 45 unchanged lines hidden (view full) ---

54 #define ACTIVATE 2
55 #define PRECHARGE 3
56 #define POWER_DOWN 1
57 #define SELF_REFRESH 2
58
59 // the format of a transaction.
60 class trans {
61 public:
62 int type;
63 double timeStamp;
64 unsigned logicalAddress;
62 int64_t type;
63 int64_t timeStamp;
64 uint64_t logicalAddress;
65 };
66
67 std::vector<trans> transTrace; // to store the transactions.
68
69 // the format of physical address.
70 class physicalAddr {
71 public:
65 };
66
67 std::vector<trans> transTrace; // to store the transactions.
68
69 // the format of physical address.
70 class physicalAddr {
71 public:
72 unsigned rowAddr;
73 unsigned bankAddr;
74 unsigned bankGroupAddr;
75 unsigned colAddr;
72 uint64_t rowAddr;
73 uint64_t bankAddr;
74 uint64_t bankGroupAddr;
75 uint64_t colAddr;
76 };
77
78 // the format of a command.
79 class commandItem {
80 public:
76 };
77
78 // the format of a command.
79 class commandItem {
80 public:
81 int Type;
82 int bank;
83 double time;
81 int64_t Type;
82 int64_t bank;
83 int64_t time;
84 std::string name;
85 physicalAddr PhysicalAddr;
86 // sorting the commands according to their scheduling time.
87 struct commandItemSorter : public std::binary_function<commandItem&,
88 commandItem&, bool>{
89 bool operator()(const commandItem& lhs,
90 const commandItem& rhs) const
91 {

--- 10 unchanged lines hidden (view full) ---

102 // PRE is sued to keep recording the time when a precharge occurs.
103 std::vector<commandItem> PRE;
104 // the scheduled READ or WRITE commands are stored in RDWR.
105 std::vector<std::vector<commandItem> > RDWR;
106 // all the scheduled commands for a transaction is stored by cmdScheduling.
107 std::vector<commandItem> cmdScheduling;
108 std::vector<commandItem> cmdList;
109 unsigned elements;
84 std::string name;
85 physicalAddr PhysicalAddr;
86 // sorting the commands according to their scheduling time.
87 struct commandItemSorter : public std::binary_function<commandItem&,
88 commandItem&, bool>{
89 bool operator()(const commandItem& lhs,
90 const commandItem& rhs) const
91 {

--- 10 unchanged lines hidden (view full) ---

102 // PRE is sued to keep recording the time when a precharge occurs.
103 std::vector<commandItem> PRE;
104 // the scheduled READ or WRITE commands are stored in RDWR.
105 std::vector<std::vector<commandItem> > RDWR;
106 // all the scheduled commands for a transaction is stored by cmdScheduling.
107 std::vector<commandItem> cmdScheduling;
108 std::vector<commandItem> cmdList;
109 unsigned elements;
110 int BI, BC, BGI;
110 int64_t BI, BC, BGI;
111
112 // the function used to translate a transaction into a sequence of
113 // commands which are scheduled to the memory.
111
112 // the function used to translate a transaction into a sequence of
113 // commands which are scheduled to the memory.
114 void transTranslation(Data::MemorySpecification memSpec,
114 void transTranslation(const MemorySpecification& memSpec,
115 std::ifstream& trans_trace,
116 int grouping,
117 int interleaving,
118 int burst,
119 int powerdown);
120 // get the transactions by reading the traces.
121 void getTrans(std::ifstream& pwr_trace,
115 std::ifstream& trans_trace,
116 int grouping,
117 int interleaving,
118 int burst,
119 int powerdown);
120 // get the transactions by reading the traces.
121 void getTrans(std::ifstream& pwr_trace,
122 MemorySpecification memSpec);
122 const MemorySpecification& memSpec);
123 // the initialization function for scheduling.
123 // the initialization function for scheduling.
124 void schedulingInitialization(MemorySpecification memSpec);
124 void schedulingInitialization(const MemorySpecification& memSpec);
125 // the function used to schedule commands according to the timing constraints.
125 // the function used to schedule commands according to the timing constraints.
126 void analyticalScheduling(MemorySpecification memSpec);
126 void analyticalScheduling(const MemorySpecification& memSpec);
127 // translate the logical address into physical address.
128 physicalAddr memoryMap(trans Trans,
127 // translate the logical address into physical address.
128 physicalAddr memoryMap(trans Trans,
129 MemorySpecification memSpec);
129 const MemorySpecification& memSpec);
130 // the power down and power up are scheduled by pdScheduling
130 // the power down and power up are scheduled by pdScheduling
131 void pdScheduling(double endTime,
132 double timer,
133 MemorySpecification memSpec);
131 void pdScheduling(int64_t endTime,
132 int64_t timer,
133 const MemorySpecification& memSpec);
134 // get the timings for scheduling a precharge since a read or write command
135 // is scheduled.
134 // get the timings for scheduling a precharge since a read or write command
135 // is scheduled.
136 int getRWTP(int transType,
137 MemorySpecification memSpec);
136 int64_t getRWTP(int64_t transType,
137 const MemorySpecification& memSpec);
138 // get different kind of timing constraints according to the used memory.
139 void getTimingConstraints(bool BGSwitch,
138 // get different kind of timing constraints according to the used memory.
139 void getTimingConstraints(bool BGSwitch,
140 MemorySpecification memSpec,
141 int PreType,
142 int CurrentType);
140 const MemorySpecification& memSpec,
141 int64_t PreType,
142 int64_t CurrentType);
143
143
144 double transTime;
144 uint64_t uintLog2(uint64_t in);
145
146 int64_t transTime;
145 // the flag for power down.
147 // the flag for power down.
146 int power_down;
147 int Inselfrefresh;
148 int tRRD_init;
149 int tCCD_init;
150 int tWTR_init;
151 double tREF;
152 double tSwitch_init;
153 double tRWTP;
154 int bankaccess;
155 unsigned nBanks;
156 unsigned nColumns;
157 unsigned burstLength;
158 unsigned nbrOfBankGroups;
148 int64_t power_down;
149 int64_t Inselfrefresh;
150 int64_t tRRD_init;
151 int64_t tCCD_init;
152 int64_t tWTR_init;
153 int64_t tREF;
154 int64_t tSwitch_init;
155 int64_t tRWTP;
156 int64_t bankaccess;
157 int64_t nBanks;
158 int64_t nColumns;
159 int64_t burstLength;
160 int64_t nbrOfBankGroups;
159 bool timingsGet;
161 bool timingsGet;
160 double startTime;
162 int64_t startTime;
161
162 // the scheduling results for all the transactions are written into
163 // commands which will be used by the power analysis part.
164 std::ofstream commands;
165};
166}
167
168#endif // ifndef CMDSCHEDULER_H
163
164 // the scheduling results for all the transactions are written into
165 // commands which will be used by the power analysis part.
166 std::ofstream commands;
167};
168}
169
170#endif // ifndef CMDSCHEDULER_H