summaryrefslogtreecommitdiff
path: root/ext/drampower/src/MemCommand.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/drampower/src/MemCommand.h')
-rw-r--r--ext/drampower/src/MemCommand.h170
1 files changed, 170 insertions, 0 deletions
diff --git a/ext/drampower/src/MemCommand.h b/ext/drampower/src/MemCommand.h
new file mode 100644
index 000000000..4159fe008
--- /dev/null
+++ b/ext/drampower/src/MemCommand.h
@@ -0,0 +1,170 @@
+/*
+ * 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 MEMCOMMAND_H
+#define MEMCOMMAND_H
+
+#include <stdint.h>
+#include <cassert>
+#include <string>
+
+#include "MemorySpecification.h"
+
+namespace Data {
+class MemCommand {
+ public:
+ /*
+ * 1. ACT - Activate
+ * 2. RD - Read
+ * 3. WR - Write
+ * 4. PRE - Explicit Precharge per bank
+ * 5. REF - Refresh all banks
+ * 6. END - To indicate end of trace
+ * 7. RDA - Read with auto-precharge
+ * 8. WRA - Write with auto-precharge
+ * 9. PREA - Precharge all banks
+ * 10. PDN_F_PRE - Precharge Power-down Entry command (Fast-Exit)
+ * 11. PDN_S_PRE - Precharge Power-down Entry command (Slow-Exit)
+ * 12. PDN_F_ACT - Active Power-down Entry command (Fast-Exit)
+ * 13. PDN_S_ACT - Active Power-down Entry command (Slow-Exit)
+ * 14. PUP_PRE - Precharge Power-down Exit
+ * 15. PUP_ACT - Active Power-down Exit
+ * 16. SREN - Self-Refresh Entry command
+ * 17. SREX - Self-refresh Exit
+ * 18. NOP - To indicate end of trace
+ */
+
+ enum cmds {
+ ACT = 0,
+ RD = 1,
+ WR = 2,
+ PRE = 3,
+ REF = 4,
+ END = 5,
+ RDA = 6,
+ WRA = 7,
+ PREA = 8,
+ PDN_F_PRE = 9,
+ PDN_S_PRE = 10,
+ PDN_F_ACT = 11,
+ PDN_S_ACT = 12,
+ PUP_PRE = 13,
+ PUP_ACT = 14,
+ SREN = 15,
+ SREX = 16,
+ NOP = 17
+ };
+
+ MemCommand();
+ MemCommand(
+ // Command Type
+ MemCommand::cmds type,
+ // Target Bank
+ unsigned bank = 0,
+ // Command Issue Timestamp (in cc)
+ double timestamp = 0);
+
+ // Get command type
+ cmds getType() const;
+
+ // Set command type
+ void setType(MemCommand::cmds type);
+
+ // Set target Bank
+ void setBank(unsigned bank);
+
+ // Get target Bank
+ unsigned getBank() const;
+
+ // Set timestamp
+ void setTime(double _timestamp);
+
+ // Get timestamp
+ double getTime() const;
+ int64_t getTimeInt64() const;
+
+ cmds typeWithoutAutoPrechargeFlag() const;
+
+ // To calculate precharge offset after read or write with auto-precharge
+ int getPrechargeOffset(const MemorySpecification& memSpec,
+ MemCommand::cmds type) const;
+
+ // To check for equivalence
+
+ bool operator==(const MemCommand& other) const
+ {
+ if ((getType() == other.getType()) &&
+ (getBank() == other.getBank())
+ ) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ static const unsigned int nCommands = 18;
+
+ static std::string* getCommandTypeStrings()
+ {
+ static std::string type_map[nCommands] = { "ACT", "RD", "WR", "PRE", "REF",
+ "END", "RDA", "WRA", "PREA", "PDN_F_PRE","PDN_S_PRE", "PDN_F_ACT",
+ "PDN_S_ACT", "PUP_PRE", "PUP_ACT", "SREN", "SREX", "NOP" };
+
+ return type_map;
+ }
+
+ // To identify command type from name
+ static cmds getTypeFromName(const std::string name)
+ {
+ std::string* typeStrings = getCommandTypeStrings();
+
+ for (size_t typeId = 0; typeId < nCommands; typeId++) {
+ if (typeStrings[typeId] == name) {
+ cmds commandType = static_cast<cmds>(typeId);
+ return commandType;
+ }
+ }
+ assert(false); // Unknown name.
+ }
+
+ private:
+ MemCommand::cmds type;
+ unsigned bank;
+ double timestamp;
+};
+}
+#endif // ifndef MEMCOMMAND_H