MemCommand.cc (10428:0caf62b57dfd) | MemCommand.cc (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 --- 30 unchanged lines hidden (view full) --- 39 40#include <algorithm> // for max 41 42#include "MemorySpecification.h" 43 44using namespace Data; 45using namespace std; 46 | 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 --- 30 unchanged lines hidden (view full) --- 39 40#include <algorithm> // for max 41 42#include "MemorySpecification.h" 43 44using namespace Data; 45using namespace std; 46 |
47MemCommand::MemCommand() : 48 type(MemCommand::PRE), 49 bank(0), 50 timestamp(0) 51{ 52} | |
53 54MemCommand::MemCommand(MemCommand::cmds type, | 47 48MemCommand::MemCommand(MemCommand::cmds type, |
55 unsigned bank, double timestamp) : | 49 unsigned bank, int64_t timestamp) : |
56 type(type), 57 bank(bank), 58 timestamp(timestamp) 59{ 60} 61 62void MemCommand::setType(MemCommand::cmds _type) 63{ --- 11 unchanged lines hidden (view full) --- 75} 76 77unsigned MemCommand::getBank() const 78{ 79 return bank; 80} 81 82// For auto-precharge with read or write - to calculate cycle of precharge | 50 type(type), 51 bank(bank), 52 timestamp(timestamp) 53{ 54} 55 56void MemCommand::setType(MemCommand::cmds _type) 57{ --- 11 unchanged lines hidden (view full) --- 69} 70 71unsigned MemCommand::getBank() const 72{ 73 return bank; 74} 75 76// For auto-precharge with read or write - to calculate cycle of precharge |
83int MemCommand::getPrechargeOffset(const MemorySpecification& memSpec, | 77int64_t MemCommand::getPrechargeOffset(const MemorySpecification& memSpec, |
84 MemCommand::cmds type) const 85{ | 78 MemCommand::cmds type) const 79{ |
86 int precharge_offset = 0; | 80 int64_t precharge_offset = 0; |
87 | 81 |
88 int BL(static_cast<int>(memSpec.memArchSpec.burstLength)); 89 int RTP(static_cast<int>(memSpec.memTimingSpec.RTP)); 90 int dataRate(static_cast<int>(memSpec.memArchSpec.dataRate)); 91 int AL(static_cast<int>(memSpec.memTimingSpec.AL)); 92 int WL(static_cast<int>(memSpec.memTimingSpec.WL)); 93 int WR(static_cast<int>(memSpec.memTimingSpec.WR)); 94 int B = BL/dataRate; | 82 int64_t BL = memSpec.memArchSpec.burstLength; 83 int64_t RTP = memSpec.memTimingSpec.RTP; 84 int64_t dataRate = memSpec.memArchSpec.dataRate; 85 int64_t AL = memSpec.memTimingSpec.AL; 86 int64_t WL = memSpec.memTimingSpec.WL; 87 int64_t WR = memSpec.memTimingSpec.WR; 88 int64_t B = BL/dataRate; |
95 96 const MemoryType::MemoryType_t& memType = memSpec.memoryType; 97 98 // Read with auto-precharge 99 if (type == MemCommand::RDA) { 100 if (memType == MemoryType::DDR2) { | 89 90 const MemoryType::MemoryType_t& memType = memSpec.memoryType; 91 92 // Read with auto-precharge 93 if (type == MemCommand::RDA) { 94 if (memType == MemoryType::DDR2) { |
101 precharge_offset = B + AL - 2 + max(RTP, 2); | 95 precharge_offset = B + AL - 2 + max(RTP, int64_t(2)); |
102 } else if (memType == MemoryType::DDR3) { | 96 } else if (memType == MemoryType::DDR3) { |
103 precharge_offset = AL + max(RTP, 4); | 97 precharge_offset = AL + max(RTP, int64_t(4)); |
104 } else if (memType == MemoryType::DDR4) { 105 precharge_offset = AL + RTP; 106 } else if (memType == MemoryType::LPDDR) { 107 precharge_offset = B; 108 } else if (memType == MemoryType::LPDDR2) { | 98 } else if (memType == MemoryType::DDR4) { 99 precharge_offset = AL + RTP; 100 } else if (memType == MemoryType::LPDDR) { 101 precharge_offset = B; 102 } else if (memType == MemoryType::LPDDR2) { |
109 precharge_offset = B + max(0, RTP - 2); | 103 precharge_offset = B + max(int64_t(0), RTP - 2); |
110 } else if (memType == MemoryType::LPDDR3) { | 104 } else if (memType == MemoryType::LPDDR3) { |
111 precharge_offset = B + max(0, RTP - 4); | 105 precharge_offset = B + max(int64_t(0), RTP - 4); |
112 } else if (memType == MemoryType::WIDEIO_SDR) { 113 precharge_offset = B; 114 } 115 } else if (type == MemCommand::WRA) { // Write with auto-precharge 116 if (memType == MemoryType::DDR2) { 117 precharge_offset = B + WL + WR; 118 } else if (memType == MemoryType::DDR3) { 119 precharge_offset = B + WL + WR; --- 8 unchanged lines hidden (view full) --- 128 } else if (memType == MemoryType::WIDEIO_SDR) { 129 precharge_offset = B + WL + WR - 1; 130 } 131 } 132 133 return precharge_offset; 134} // MemCommand::getPrechargeOffset 135 | 106 } else if (memType == MemoryType::WIDEIO_SDR) { 107 precharge_offset = B; 108 } 109 } else if (type == MemCommand::WRA) { // Write with auto-precharge 110 if (memType == MemoryType::DDR2) { 111 precharge_offset = B + WL + WR; 112 } else if (memType == MemoryType::DDR3) { 113 precharge_offset = B + WL + WR; --- 8 unchanged lines hidden (view full) --- 122 } else if (memType == MemoryType::WIDEIO_SDR) { 123 precharge_offset = B + WL + WR - 1; 124 } 125 } 126 127 return precharge_offset; 128} // MemCommand::getPrechargeOffset 129 |
136void MemCommand::setTime(double _timestamp) | 130void MemCommand::setTime(int64_t _timestamp) |
137{ 138 timestamp = _timestamp; 139} 140 | 131{ 132 timestamp = _timestamp; 133} 134 |
141double MemCommand::getTime() const | 135int64_t MemCommand::getTimeInt64() const |
142{ 143 return timestamp; 144} 145 | 136{ 137 return timestamp; 138} 139 |
146int64_t MemCommand::getTimeInt64() const 147{ 148 return static_cast<int64_t>(timestamp); 149} 150 | |
151MemCommand::cmds MemCommand::typeWithoutAutoPrechargeFlag() const 152{ 153 if (type == MemCommand::RDA) { 154 return MemCommand::RD; 155 } else if (type == MemCommand::WRA) { 156 return MemCommand::WR; 157 } 158 return type; 159} | 140MemCommand::cmds MemCommand::typeWithoutAutoPrechargeFlag() const 141{ 142 if (type == MemCommand::RDA) { 143 return MemCommand::RD; 144 } else if (type == MemCommand::WRA) { 145 return MemCommand::WR; 146 } 147 return type; 148} |