110428Sandreas.hansson@arm.com/* 210428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Delft 310428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Eindhoven 410428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Kaiserslautern 510428Sandreas.hansson@arm.com * All rights reserved. 610428Sandreas.hansson@arm.com * 710428Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 810428Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 910428Sandreas.hansson@arm.com * met: 1010428Sandreas.hansson@arm.com * 1110428Sandreas.hansson@arm.com * 1. Redistributions of source code must retain the above copyright 1210428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer. 1310428Sandreas.hansson@arm.com * 1410428Sandreas.hansson@arm.com * 2. Redistributions in binary form must reproduce the above copyright 1510428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1610428Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution. 1710428Sandreas.hansson@arm.com * 1810428Sandreas.hansson@arm.com * 3. Neither the name of the copyright holder nor the names of its 1910428Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 2010428Sandreas.hansson@arm.com * this software without specific prior written permission. 2110428Sandreas.hansson@arm.com * 2210428Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 2310428Sandreas.hansson@arm.com * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2410428Sandreas.hansson@arm.com * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 2510428Sandreas.hansson@arm.com * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2610428Sandreas.hansson@arm.com * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2710428Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 2810428Sandreas.hansson@arm.com * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2910428Sandreas.hansson@arm.com * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 3010428Sandreas.hansson@arm.com * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 3110428Sandreas.hansson@arm.com * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3210428Sandreas.hansson@arm.com * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3310428Sandreas.hansson@arm.com * 3410428Sandreas.hansson@arm.com * Authors: Karthik Chandrasekar 3510428Sandreas.hansson@arm.com * 3610428Sandreas.hansson@arm.com */ 3710428Sandreas.hansson@arm.com 3810428Sandreas.hansson@arm.com#ifndef MEMCOMMAND_H 3910428Sandreas.hansson@arm.com#define MEMCOMMAND_H 4010428Sandreas.hansson@arm.com 4110428Sandreas.hansson@arm.com#include <stdint.h> 4210428Sandreas.hansson@arm.com#include <cassert> 4310428Sandreas.hansson@arm.com#include <string> 4410428Sandreas.hansson@arm.com 4510428Sandreas.hansson@arm.com#include "MemorySpecification.h" 4610428Sandreas.hansson@arm.com 4710428Sandreas.hansson@arm.comnamespace Data { 4810428Sandreas.hansson@arm.comclass MemCommand { 4910428Sandreas.hansson@arm.com public: 5010428Sandreas.hansson@arm.com /* 5110428Sandreas.hansson@arm.com * 1. ACT - Activate 5210428Sandreas.hansson@arm.com * 2. RD - Read 5310428Sandreas.hansson@arm.com * 3. WR - Write 5410428Sandreas.hansson@arm.com * 4. PRE - Explicit Precharge per bank 5510428Sandreas.hansson@arm.com * 5. REF - Refresh all banks 5612266Sradhika.jagtap@arm.com * 6 REFB- Refresh a particular bank 5712266Sradhika.jagtap@arm.com * 7. END - To indicate end of trace 5812266Sradhika.jagtap@arm.com * 8. RDA - Read with auto-precharge 5912266Sradhika.jagtap@arm.com * 9. WRA - Write with auto-precharge 6012266Sradhika.jagtap@arm.com * 10. PREA - Precharge all banks 6112266Sradhika.jagtap@arm.com * 11. PDN_F_PRE - Precharge Power-down Entry command (Fast-Exit) 6212266Sradhika.jagtap@arm.com * 12. PDN_S_PRE - Precharge Power-down Entry command (Slow-Exit) 6312266Sradhika.jagtap@arm.com * 13. PDN_F_ACT - Active Power-down Entry command (Fast-Exit) 6412266Sradhika.jagtap@arm.com * 14. PDN_S_ACT - Active Power-down Entry command (Slow-Exit) 6512266Sradhika.jagtap@arm.com * 15. PUP_PRE - Precharge Power-down Exit 6612266Sradhika.jagtap@arm.com * 16. PUP_ACT - Active Power-down Exit 6712266Sradhika.jagtap@arm.com * 17. SREN - Self-Refresh Entry command 6812266Sradhika.jagtap@arm.com * 18. SREX - Self-refresh Exit 6912266Sradhika.jagtap@arm.com * 19. NOP - To indicate end of trace 7010428Sandreas.hansson@arm.com */ 7110428Sandreas.hansson@arm.com 7210428Sandreas.hansson@arm.com enum cmds { 7310428Sandreas.hansson@arm.com ACT = 0, 7410428Sandreas.hansson@arm.com RD = 1, 7510428Sandreas.hansson@arm.com WR = 2, 7610428Sandreas.hansson@arm.com PRE = 3, 7710428Sandreas.hansson@arm.com REF = 4, 7812266Sradhika.jagtap@arm.com REFB = 5, 7912266Sradhika.jagtap@arm.com END = 6, 8012266Sradhika.jagtap@arm.com RDA = 7, 8112266Sradhika.jagtap@arm.com WRA = 8, 8212266Sradhika.jagtap@arm.com PREA = 9, 8312266Sradhika.jagtap@arm.com PDN_F_PRE = 10, 8412266Sradhika.jagtap@arm.com PDN_S_PRE = 11, 8512266Sradhika.jagtap@arm.com PDN_F_ACT = 12, 8612266Sradhika.jagtap@arm.com PDN_S_ACT = 13, 8712266Sradhika.jagtap@arm.com PUP_PRE = 14, 8812266Sradhika.jagtap@arm.com PUP_ACT = 15, 8912266Sradhika.jagtap@arm.com SREN = 16, 9012266Sradhika.jagtap@arm.com SREX = 17, 9112266Sradhika.jagtap@arm.com NOP = 18, 9212266Sradhika.jagtap@arm.com UNINITIALIZED = 19 9310428Sandreas.hansson@arm.com }; 9410428Sandreas.hansson@arm.com 9511555Sjungma@eit.uni-kl.de// MemCommand(); 9610428Sandreas.hansson@arm.com MemCommand( 9710428Sandreas.hansson@arm.com // Command Type 9811555Sjungma@eit.uni-kl.de MemCommand::cmds type = UNINITIALIZED, 9910428Sandreas.hansson@arm.com // Target Bank 10010428Sandreas.hansson@arm.com unsigned bank = 0, 10110428Sandreas.hansson@arm.com // Command Issue Timestamp (in cc) 10211555Sjungma@eit.uni-kl.de int64_t timestamp = 0L); 10310428Sandreas.hansson@arm.com 10410428Sandreas.hansson@arm.com // Get command type 10510428Sandreas.hansson@arm.com cmds getType() const; 10610428Sandreas.hansson@arm.com 10710428Sandreas.hansson@arm.com // Set command type 10810428Sandreas.hansson@arm.com void setType(MemCommand::cmds type); 10910428Sandreas.hansson@arm.com 11010428Sandreas.hansson@arm.com // Set target Bank 11110428Sandreas.hansson@arm.com void setBank(unsigned bank); 11210428Sandreas.hansson@arm.com 11310428Sandreas.hansson@arm.com // Get target Bank 11410428Sandreas.hansson@arm.com unsigned getBank() const; 11510428Sandreas.hansson@arm.com 11610428Sandreas.hansson@arm.com // Set timestamp 11711555Sjungma@eit.uni-kl.de void setTime(int64_t _timestamp); 11810428Sandreas.hansson@arm.com 11910428Sandreas.hansson@arm.com // Get timestamp 12010428Sandreas.hansson@arm.com int64_t getTimeInt64() const; 12110428Sandreas.hansson@arm.com 12210428Sandreas.hansson@arm.com cmds typeWithoutAutoPrechargeFlag() const; 12310428Sandreas.hansson@arm.com 12410428Sandreas.hansson@arm.com // To calculate precharge offset after read or write with auto-precharge 12511555Sjungma@eit.uni-kl.de int64_t getPrechargeOffset(const MemorySpecification& memSpec, 12610428Sandreas.hansson@arm.com MemCommand::cmds type) const; 12710428Sandreas.hansson@arm.com 12810428Sandreas.hansson@arm.com // To check for equivalence 12910428Sandreas.hansson@arm.com 13010428Sandreas.hansson@arm.com bool operator==(const MemCommand& other) const 13110428Sandreas.hansson@arm.com { 13210428Sandreas.hansson@arm.com if ((getType() == other.getType()) && 13310428Sandreas.hansson@arm.com (getBank() == other.getBank()) 13410428Sandreas.hansson@arm.com ) { 13510428Sandreas.hansson@arm.com return true; 13610428Sandreas.hansson@arm.com } else { 13710428Sandreas.hansson@arm.com return false; 13810428Sandreas.hansson@arm.com } 13910428Sandreas.hansson@arm.com } 14010428Sandreas.hansson@arm.com 14112266Sradhika.jagtap@arm.com static const unsigned int nCommands = 20; 14210428Sandreas.hansson@arm.com 14310428Sandreas.hansson@arm.com static std::string* getCommandTypeStrings() 14410428Sandreas.hansson@arm.com { 14511555Sjungma@eit.uni-kl.de static std::string type_map[nCommands] = { "ACT", 14611555Sjungma@eit.uni-kl.de "RD", 14711555Sjungma@eit.uni-kl.de "WR", 14811555Sjungma@eit.uni-kl.de "PRE", 14911555Sjungma@eit.uni-kl.de "REF", 15012266Sradhika.jagtap@arm.com "REFB", 15111555Sjungma@eit.uni-kl.de "END", 15211555Sjungma@eit.uni-kl.de "RDA", 15311555Sjungma@eit.uni-kl.de "WRA", 15411555Sjungma@eit.uni-kl.de "PREA", 15511555Sjungma@eit.uni-kl.de "PDN_F_PRE", 15611555Sjungma@eit.uni-kl.de "PDN_S_PRE", 15711555Sjungma@eit.uni-kl.de "PDN_F_ACT", 15811555Sjungma@eit.uni-kl.de "PDN_S_ACT", 15911555Sjungma@eit.uni-kl.de "PUP_PRE", 16011555Sjungma@eit.uni-kl.de "PUP_ACT", 16111555Sjungma@eit.uni-kl.de "SREN", 16211555Sjungma@eit.uni-kl.de "SREX", 16311555Sjungma@eit.uni-kl.de "NOP", 16411555Sjungma@eit.uni-kl.de "UNINITIALIZED" }; 16510428Sandreas.hansson@arm.com 16610428Sandreas.hansson@arm.com return type_map; 16710428Sandreas.hansson@arm.com } 16810428Sandreas.hansson@arm.com 16910428Sandreas.hansson@arm.com // To identify command type from name 17011555Sjungma@eit.uni-kl.de static cmds getTypeFromName(const std::string& name) 17110428Sandreas.hansson@arm.com { 17210428Sandreas.hansson@arm.com std::string* typeStrings = getCommandTypeStrings(); 17310428Sandreas.hansson@arm.com 17410428Sandreas.hansson@arm.com for (size_t typeId = 0; typeId < nCommands; typeId++) { 17510428Sandreas.hansson@arm.com if (typeStrings[typeId] == name) { 17610428Sandreas.hansson@arm.com cmds commandType = static_cast<cmds>(typeId); 17710428Sandreas.hansson@arm.com return commandType; 17810428Sandreas.hansson@arm.com } 17910428Sandreas.hansson@arm.com } 18010428Sandreas.hansson@arm.com assert(false); // Unknown name. 18110490Sandreas.hansson@arm.com return NOP; // For clang compilation 18210428Sandreas.hansson@arm.com } 18310428Sandreas.hansson@arm.com 18410428Sandreas.hansson@arm.com private: 18510428Sandreas.hansson@arm.com MemCommand::cmds type; 18610428Sandreas.hansson@arm.com unsigned bank; 18711555Sjungma@eit.uni-kl.de int64_t timestamp; 18810428Sandreas.hansson@arm.com}; 18910428Sandreas.hansson@arm.com} 19010428Sandreas.hansson@arm.com#endif // ifndef MEMCOMMAND_H 191