diff options
author | Wendy Elsasser <wendy.elsasser@arm.com> | 2017-03-28 17:15:14 -0500 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-05-18 09:27:06 +0000 |
commit | ef96b32a28424e0d543198fee0964bb05c88704f (patch) | |
tree | 94b75a62b51e52385e60083f51c36e1ee8675e1a /src/mem/dram_ctrl.hh | |
parent | 76aebd9b607351e5601bf52c9ac42ede6496ee64 (diff) | |
download | gem5-ef96b32a28424e0d543198fee0964bb05c88704f.tar.xz |
mem: Add support for more flexible DRAM timing and topologies
This patch has 2 main aspects:
1) Add new parameter to adjust write-to-write delay
2) Enable support of more than 64 banks per controller
Changes for new parameter:
Incorporated a new parameter, tCCD_L_WR, which defaults to tCCD_L.
This parameter can be used to set a unique delay between writes and
between reads.
To incorporate this parameter in the controller, modified the DRAMCtrl
class to have separate variables for read and write column delays.
Used these variables to account for tRTW, tWTR, tBURST, tCCD_L, and tCS
as well as the new tCCD_L_WR parameter.
Changes to support more than 64 banks:
Modified the logic selecting the next command (reorderQueue
and minBankPrep functions). Replaced the unint64_t variables with
a vector of uint32_t elements. There is a uint32_t element defined
per ranks to allow up to 32 banks per rank. This will automatically
scale with ranks without issue.
Change will allow analysis of memory sub-systems beyond the current
landscape.
Change-Id: I0ce466efed58276f843ad90e9ecc0ece6c37d646
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/10103
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/dram_ctrl.hh')
-rw-r--r-- | src/mem/dram_ctrl.hh | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/mem/dram_ctrl.hh b/src/mem/dram_ctrl.hh index 592e58cd7..11a16edef 100644 --- a/src/mem/dram_ctrl.hh +++ b/src/mem/dram_ctrl.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2017 ARM Limited + * Copyright (c) 2012-2018 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -189,7 +189,8 @@ class DRAMCtrl : public AbstractMemory uint8_t bank; uint8_t bankgr; - Tick colAllowedAt; + Tick rdAllowedAt; + Tick wrAllowedAt; Tick preAllowedAt; Tick actAllowedAt; @@ -198,7 +199,7 @@ class DRAMCtrl : public AbstractMemory Bank() : openRow(NO_ROW), bank(0), bankgr(0), - colAllowedAt(0), preAllowedAt(0), actAllowedAt(0), + rdAllowedAt(0), wrAllowedAt(0), preAllowedAt(0), actAllowedAt(0), rowAccesses(0), bytesAccessed(0) { } }; @@ -823,15 +824,16 @@ class DRAMCtrl : public AbstractMemory /** * Find which are the earliest banks ready to issue an activate - * for the enqueued requests. Assumes maximum of 64 banks per DIMM + * for the enqueued requests. Assumes maximum of 32 banks per rank * Also checks if the bank is already prepped. * * @param queue Queued requests to consider - * @param time of seamless burst command + * @param min_col_at time of seamless burst command * @return One-hot encoded mask of bank indices * @return boolean indicating burst can issue seamlessly, with no gaps */ - std::pair<uint64_t, bool> minBankPrep(const std::deque<DRAMPacket*>& queue, + std::pair<std::vector<uint32_t>, bool> minBankPrep( + const std::deque<DRAMPacket*>& queue, Tick min_col_at) const; /** @@ -939,10 +941,10 @@ class DRAMCtrl : public AbstractMemory * values. */ const Tick M5_CLASS_VAR_USED tCK; - const Tick tWTR; const Tick tRTW; const Tick tCS; const Tick tBURST; + const Tick tCCD_L_WR; const Tick tCCD_L; const Tick tRCD; const Tick tCL; @@ -958,6 +960,9 @@ class DRAMCtrl : public AbstractMemory const Tick tXP; const Tick tXS; const uint32_t activationLimit; + const Tick rankToRankDly; + const Tick wrToRdDly; + const Tick rdToWrDly; /** * Memory controller configuration initialized based on parameter @@ -988,16 +993,16 @@ class DRAMCtrl : public AbstractMemory const Tick backendLatency; /** - * Till when has the main data bus been spoken for already? + * Till when must we wait before issuing next RD/WR burst? */ - Tick busBusyUntil; + Tick nextBurstAt; Tick prevArrival; /** * The soonest you have to start thinking about the next request * is the longest access time that can occur before - * busBusyUntil. Assuming you need to precharge, open a new row, + * nextBurstAt. Assuming you need to precharge, open a new row, * and access, it is tRP + tRCD + tCL. */ Tick nextReqTime; |