summaryrefslogtreecommitdiff
path: root/ext/drampower/src/CmdScheduler.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/drampower/src/CmdScheduler.h')
-rw-r--r--ext/drampower/src/CmdScheduler.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/ext/drampower/src/CmdScheduler.h b/ext/drampower/src/CmdScheduler.h
new file mode 100644
index 000000000..3c60ea886
--- /dev/null
+++ b/ext/drampower/src/CmdScheduler.h
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2012-2014, TU Delft
+ * Copyright (c) 2012-2014, TU Eindhoven
+ * Copyright (c) 2012-2014, TU Kaiserslautern
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Karthik Chandrasekar
+ *
+ */
+
+#ifndef CMDSCHEDULER_H
+#define CMDSCHEDULER_H
+
+#include <string>
+#include <vector>
+#include <functional> // for binary_function<>
+#include <fstream>
+
+#include "MemorySpecification.h"
+#include "Utils.h"
+
+namespace Data {
+class cmdScheduler {
+ public:
+ #define READ 0
+ #define WRITE 1
+ #define ACTIVATE 2
+ #define PRECHARGE 3
+ #define POWER_DOWN 1
+ #define SELF_REFRESH 2
+
+ // the format of a transaction.
+ class trans {
+ public:
+ int type;
+ double timeStamp;
+ unsigned logicalAddress;
+ };
+
+ std::vector<trans> transTrace; // to store the transactions.
+
+ // the format of physical address.
+ class physicalAddr {
+ public:
+ unsigned rowAddr;
+ unsigned bankAddr;
+ unsigned bankGroupAddr;
+ unsigned colAddr;
+ };
+
+ // the format of a command.
+ class commandItem {
+ public:
+ int Type;
+ int bank;
+ double time;
+ std::string name;
+ physicalAddr PhysicalAddr;
+ // sorting the commands according to their scheduling time.
+ struct commandItemSorter : public std::binary_function<commandItem&,
+ commandItem&, bool>{
+ bool operator()(const commandItem& lhs,
+ const commandItem& rhs) const
+ {
+ return lhs.time < rhs.time;
+ }
+ };
+ };
+
+ commandItem cmd;
+ commandItem transFinish; // the last scheduled command for a transaction.
+ commandItem PreRDWR; // the latest scheduled READ or WRITE command.
+ // the scheduled ACTIVATE commands are stored in ACT.
+ std::vector<commandItem> ACT;
+ // PRE is sued to keep recording the time when a precharge occurs.
+ std::vector<commandItem> PRE;
+ // the scheduled READ or WRITE commands are stored in RDWR.
+ std::vector<std::vector<commandItem> > RDWR;
+ // all the scheduled commands for a transaction is stored by cmdScheduling.
+ std::vector<commandItem> cmdScheduling;
+ std::vector<commandItem> cmdList;
+ unsigned elements;
+ int BI, BC, BGI;
+
+ // the function used to translate a transaction into a sequence of
+ // commands which are scheduled to the memory.
+ void transTranslation(Data::MemorySpecification memSpec,
+ std::ifstream& trans_trace,
+ int grouping,
+ int interleaving,
+ int burst,
+ int powerdown);
+ // get the transactions by reading the traces.
+ void getTrans(std::ifstream& pwr_trace,
+ MemorySpecification memSpec);
+ // the initialization function for scheduling.
+ void schedulingInitialization(MemorySpecification memSpec);
+ // the function used to schedule commands according to the timing constraints.
+ void analyticalScheduling(MemorySpecification memSpec);
+ // translate the logical address into physical address.
+ physicalAddr memoryMap(trans Trans,
+ MemorySpecification memSpec);
+ // the power down and power up are scheduled by pdScheduling
+ void pdScheduling(double endTime,
+ double timer,
+ MemorySpecification memSpec);
+ // get the timings for scheduling a precharge since a read or write command
+ // is scheduled.
+ int getRWTP(int transType,
+ MemorySpecification memSpec);
+ // get different kind of timing constraints according to the used memory.
+ void getTimingConstraints(bool BGSwitch,
+ MemorySpecification memSpec,
+ int PreType,
+ int CurrentType);
+
+ double transTime;
+ // the flag for power down.
+ int power_down;
+ int Inselfrefresh;
+ int tRRD_init;
+ int tCCD_init;
+ int tWTR_init;
+ double tREF;
+ double tSwitch_init;
+ double tRWTP;
+ int bankaccess;
+ unsigned nBanks;
+ unsigned nColumns;
+ unsigned burstLength;
+ unsigned nbrOfBankGroups;
+ bool timingsGet;
+ double startTime;
+
+ // the scheduling results for all the transactions are written into
+ // commands which will be used by the power analysis part.
+ std::ofstream commands;
+};
+}
+
+#endif // ifndef CMDSCHEDULER_H