diff --git a/DRAMSys/docs/images/PayloadMemoryManager.svg b/DRAMSys/docs/images/PayloadMemoryManager.svg
index 56a0547f..fc237c0c 100644
--- a/DRAMSys/docs/images/PayloadMemoryManager.svg
+++ b/DRAMSys/docs/images/PayloadMemoryManager.svg
@@ -1,1008 +1,4866 @@
-
-
\ No newline at end of file
+ width="1"
+ height="1"
+ display="inline"
+ overflow="visible"
+ id="foreignObject14165-7">
+
+
+
+
+
+
+ }
+
+
+
+
+
+
+
+ }
+
+
+
+
+
+
+
+ DRAM
+ ...
+
+
+ Power Estimation
+ Thermal Model
+ Error Model ...
+
+
+
+ Scheduler FCFSFR-FCFSPAR-BS...
+
+
+
+ ControllerCore CommandsRefreshPowerdown...
+
+
+
+
+ Special DRAM-AT TLM Protocol
+ Trace Player
+ Arbitration&Mapping
+ Channel Controller
+ Channel Controller
+
+ DRAM
+ Allocate Payload
+ Set auto extension(GenerationExtension)
+ acquire()
+ acquire()
+ acquire()
+ release()
+ release()
+ release()
+ BEGIN_REQ
+ BEGIN_REQ
+ Set auto extension(DramExtension)
+ END_REQ
+ END_REQ
+
+ Get extension DramExtension:getBank, getRow
+ Get extension DramExtension:getBank
+ Get extension DramExtension:getRow
+ Get extension DramExtension:getThread
+ BEGIN_PRE
+ END_PRE
+ BEGIN_ACT
+ END_ACT
+ BEGIN_RD/WR
+ END_RD/WR
+ BEGIN_RESP
+ BEGIN_RESP
+ END_RESP
+ END_RESP
+
+ Time
+
+ free()
+
diff --git a/DRAMSys/simulator/src/common/third_party/DRAMPower b/DRAMSys/simulator/src/common/third_party/DRAMPower
index 5878beed..abcdd018 160000
--- a/DRAMSys/simulator/src/common/third_party/DRAMPower
+++ b/DRAMSys/simulator/src/common/third_party/DRAMPower
@@ -1 +1 @@
-Subproject commit 5878beedbc9123f3cc41481a4bb7431c7bca728b
+Subproject commit abcdd0184e846fcf033ca82af9b559341d840d97
diff --git a/DRAMSys/simulator/src/controller/core/ControllerCore.cpp b/DRAMSys/simulator/src/controller/core/ControllerCore.cpp
index da9df026..cb40e4bb 100644
--- a/DRAMSys/simulator/src/controller/core/ControllerCore.cpp
+++ b/DRAMSys/simulator/src/controller/core/ControllerCore.cpp
@@ -134,17 +134,21 @@ void ControllerCore::triggerRefresh(tlm::tlm_generic_payload& payload)
state->cleanUp(time);
- if (!refreshManager->isInvalidated(payload, time) && !powerDownManager->isInSelfRefresh(bank)) {
+ if (!refreshManager->isInvalidated(payload, time) && !powerDownManager->isInSelfRefresh(bank))
+ {
printDebugMessage("Triggering refresh on bank " + to_string(bank.ID()));
powerDownManager->wakeUpForRefresh(bank, time); //expects PDNA and PDNP to exit without delay
bool pdnpToSrefTransition = false;
- if (config.PowerDownMode == EPowerDownMode::Staggered) {
+ if (config.PowerDownMode == EPowerDownMode::Staggered)
+ {
pdnpToSrefTransition = state->getLastCommand(Command::PDNPX,bank).getStart() >= time;
}
- if (pdnpToSrefTransition) {
+ if (pdnpToSrefTransition)
+ {
powerDownManager->sleep(bank,time);
}
- else {
+ else
+ {
refreshManager->scheduleRefresh(payload, time);
}
}
diff --git a/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp b/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp
index 456d4530..3aac9feb 100644
--- a/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp
+++ b/DRAMSys/simulator/src/controller/core/refresh/RefreshManagerBankwise.cpp
@@ -89,10 +89,10 @@ void RefreshManagerBankwise::scheduleRefresh(tlm::tlm_generic_payload& payload,
ScheduledCommand refresh(Command::AutoRefresh, time, getExecutionTime(Command::AutoRefresh, refreshPayload), extension);
controllerCore.getCommandChecker(Command::AutoRefresh).delayToSatisfyConstraints(refresh);
controllerCore.state->change(refresh);
+ extension.incrementRow();
controllerCore.controller.send(refresh, refreshPayload);
- extension.incrementRow();
- planNextRefresh(extension.getBank());
+ planNextRefresh(extension.getBank());
}
void RefreshManagerBankwise::planNextRefresh(Bank bank)
diff --git a/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp b/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp
index 3dd96e35..aaf0f661 100644
--- a/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp
+++ b/DRAMSys/simulator/src/controller/core/scheduling/checker/PrechargeAllChecker.cpp
@@ -83,7 +83,7 @@ void PrechargeAllChecker::delayToSatisfyConstraints(ScheduledCommand& command) c
}
else if (lastCommand.getCommand() == Command::SREFX)
{
- command.establishMinDistanceFromStart(lastCommand.getEnd(), config.memSpec.tXSR);
+ command.establishMinDistanceFromStart(lastCommand.getStart(), config.memSpec.tXSR);
}
else
reportFatal("Precharge All Checker",
diff --git a/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp b/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp
index 271ce6db..111e3d31 100644
--- a/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp
+++ b/DRAMSys/simulator/src/controller/core/scheduling/checker/RefreshChecker.cpp
@@ -104,7 +104,7 @@ void RefreshChecker::delayToSatisfyConstraints(ScheduledCommand& command) const
}
else if (lastCommand.getCommand() == Command::SREFX)
{
- command.establishMinDistanceFromStart(lastCommand.getEnd(), config.memSpec.tXSR);
+ command.establishMinDistanceFromStart(lastCommand.getStart(), config.memSpec.tXSR);
}
else if (lastCommand.getCommand() == Command::AutoRefresh)
{
diff --git a/README.md b/README.md
index 43602566..4f2d9353 100644
--- a/README.md
+++ b/README.md
@@ -60,7 +60,7 @@ $ git push origin HEAD
You may need to update your submodules.
```bash
-git submodule update --init --recursive
+$ git submodule update --init --recursive
```
### Dependencies