From 102b0667fd3443bffacc345a859eb9505ade1a8a Mon Sep 17 00:00:00 2001 From: "Lukas Steiner (2)" Date: Mon, 23 Sep 2019 20:07:00 +0200 Subject: [PATCH] Added bankgroups to address decoding. --- .../configs/amconfigs/am_ranktest.xml | 12 +++--- .../configs/mcconfigs/fifoStrict.xml | 2 +- .../configs/memspecs/memspec_ranktest.xml | 2 +- .../library/src/common/XmlAddressDecoder.cpp | 38 ++++++++++++------- .../library/src/common/XmlAddressDecoder.h | 3 ++ DRAMSys/library/src/common/utils.h | 2 +- 6 files changed, 37 insertions(+), 22 deletions(-) diff --git a/DRAMSys/library/resources/configs/amconfigs/am_ranktest.xml b/DRAMSys/library/resources/configs/amconfigs/am_ranktest.xml index 11b68c5c..fc62b956 100644 --- a/DRAMSys/library/resources/configs/amconfigs/am_ranktest.xml +++ b/DRAMSys/library/resources/configs/amconfigs/am_ranktest.xml @@ -16,11 +16,11 @@ B B B | R R R R R R R R R R R R R R | C C C C C C C C C C | Y Y Y --> - - - - - - + + + + + + diff --git a/DRAMSys/library/resources/configs/mcconfigs/fifoStrict.xml b/DRAMSys/library/resources/configs/mcconfigs/fifoStrict.xml index 64b06284..1226d09a 100644 --- a/DRAMSys/library/resources/configs/mcconfigs/fifoStrict.xml +++ b/DRAMSys/library/resources/configs/mcconfigs/fifoStrict.xml @@ -1,6 +1,6 @@ - + diff --git a/DRAMSys/library/resources/configs/memspecs/memspec_ranktest.xml b/DRAMSys/library/resources/configs/memspecs/memspec_ranktest.xml index cd5852ec..6fc6b6be 100644 --- a/DRAMSys/library/resources/configs/memspecs/memspec_ranktest.xml +++ b/DRAMSys/library/resources/configs/memspecs/memspec_ranktest.xml @@ -5,7 +5,7 @@ - + diff --git a/DRAMSys/library/src/common/XmlAddressDecoder.cpp b/DRAMSys/library/src/common/XmlAddressDecoder.cpp index 2da48e45..7b476781 100644 --- a/DRAMSys/library/src/common/XmlAddressDecoder.cpp +++ b/DRAMSys/library/src/common/XmlAddressDecoder.cpp @@ -79,6 +79,12 @@ void XmlAddressDecoder::setConfiguration(std::string addressConfigURI) masks.rank = pow(2.0, to + 1.0) - pow(2.0, from + 0.0); amount.rank = pow(2.0, to - from + 1.0); } + else if (std::strcmp(child->Name(), "bankgroup") == 0) + { + shifts.bankgroup = from; + masks.bankgroup = pow(2.0, to + 1.0) - pow(2.0, from + 0.0); + amount.bankgroup = pow(2.0, to - from + 1.0); + } else if (std::strcmp(child->Name(), "bank") == 0) { shifts.bank = from; @@ -107,10 +113,12 @@ void XmlAddressDecoder::setConfiguration(std::string addressConfigURI) SC_REPORT_FATAL("XmlAddressDecoder", ("Unknown field " + std::string(child->Name())).c_str()); } - banksPerRank = amount.bank; - amount.bank = amount.bank * amount.rank; - amount.bankgroup = Configuration::getInstance().memSpec->NumberOfBankGroups; - banksPerGroup = amount.bank / amount.bankgroup; + banksPerGroup = amount.bank; + banksPerRank = banksPerGroup * amount.bankgroup; + amount.bank = banksPerRank * amount.rank; + + bankgroupsPerRank = amount.bankgroup; + amount.bankgroup = bankgroupsPerRank * amount.rank; } @@ -119,8 +127,10 @@ DecodedAddress XmlAddressDecoder::decodeAddress(uint64_t addr) DecodedAddress result; result.channel = (addr & masks.channel) >> shifts.channel; result.rank = (addr & masks.rank) >> shifts.rank; - result.bankgroup = result.bank / banksPerGroup; - result.bank = ((addr & masks.bank) >> shifts.bank) + result.rank * banksPerRank; + result.bankgroup = ((addr & masks.bankgroup) >> shifts.bankgroup) + + result.rank * bankgroupsPerRank; + result.bank = ((addr & masks.bank) >> shifts.bank) + + result.bankgroup * banksPerGroup; result.row = (addr & masks.row) >> shifts.row; result.column = (addr & masks.column) >> shifts.column; result.bytes = (addr & masks.bytes) >> shifts.bytes; @@ -131,7 +141,8 @@ uint64_t XmlAddressDecoder::encodeAddress(DecodedAddress n) { return (n.channel << shifts.channel) | (n.rank << shifts.rank) | - ((n.bank % banksPerRank) << shifts.bank) | + ((n.bankgroup % bankgroupsPerRank) << shifts.bankgroup) | + ((n.bank % banksPerGroup) << shifts.bank) | (n.row << shifts.row) | (n.column << shifts.column) | (n.bytes << shifts.bytes); @@ -153,11 +164,12 @@ void XmlAddressDecoder::print() { std::cout << headline << std::endl; std::cout << "Address Mapping:" << std::endl << std::endl; - std::cout << std::setw(10) << "channel: " << std::bitset<64>(masks.channel) << std::endl; - std::cout << std::setw(10) << "rank: " << std::bitset<64>(masks.rank) << std::endl; - std::cout << std::setw(10) << "bank: " << std::bitset<64>(masks.bank) << std::endl; - std::cout << std::setw(10) << "row: " << std::bitset<64>(masks.row) << std::endl; - std::cout << std::setw(10) << "column: " << std::bitset<64>(masks.column) << std::endl; - std::cout << std::setw(10) << "bytes: " << std::bitset<64>(masks.bytes) << std::endl; + std::cout << std::setw(11) << "channel: " << std::bitset<64>(masks.channel) << std::endl; + std::cout << std::setw(11) << "rank: " << std::bitset<64>(masks.rank) << std::endl; + std::cout << std::setw(11) << "bankgroup: " << std::bitset<64>(masks.bankgroup) << std::endl; + std::cout << std::setw(11) << "bank: " << std::bitset<64>(masks.bank) << std::endl; + std::cout << std::setw(11) << "row: " << std::bitset<64>(masks.row) << std::endl; + std::cout << std::setw(11) << "column: " << std::bitset<64>(masks.column) << std::endl; + std::cout << std::setw(11) << "bytes: " << std::bitset<64>(masks.bytes) << std::endl; std::cout << std::endl; } diff --git a/DRAMSys/library/src/common/XmlAddressDecoder.h b/DRAMSys/library/src/common/XmlAddressDecoder.h index b0c848d7..85a9c0ca 100644 --- a/DRAMSys/library/src/common/XmlAddressDecoder.h +++ b/DRAMSys/library/src/common/XmlAddressDecoder.h @@ -55,6 +55,7 @@ private: { uint64_t channel = 0; uint64_t rank = 0; + uint64_t bankgroup = 0; uint64_t bank = 0; uint64_t row = 0; uint64_t column = 0; @@ -65,6 +66,7 @@ private: { unsigned channel = 0; unsigned rank = 0; + unsigned bankgroup = 0; unsigned bank = 0; unsigned row = 0; unsigned column = 0; @@ -73,6 +75,7 @@ private: unsigned banksPerGroup; unsigned banksPerRank; + unsigned bankgroupsPerRank; tinyxml2::XMLElement *addressmapping; diff --git a/DRAMSys/library/src/common/utils.h b/DRAMSys/library/src/common/utils.h index e997d99a..9def2069 100644 --- a/DRAMSys/library/src/common/utils.h +++ b/DRAMSys/library/src/common/utils.h @@ -92,7 +92,7 @@ bool isIn(const T &value, const std::vector &collection) } constexpr const char headline[] = - "=========================================================================="; + "==========================================================================="; static inline void loadbar(unsigned int x, unsigned int n,