From e105d54045c7a879c6bf0018f07c4030b3f22949 Mon Sep 17 00:00:00 2001 From: Janik Schlemminger Date: Wed, 10 Sep 2014 16:10:07 +0200 Subject: [PATCH] added fix for bankgroups and ranks in addressdecoder --- dram/src/common/xmlAddressdecoder.cpp | 9 ++++++--- .../core/configuration/ConfigurationLoader.cpp | 2 ++ dram/src/controller/core/configuration/MemSpec.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/dram/src/common/xmlAddressdecoder.cpp b/dram/src/common/xmlAddressdecoder.cpp index ff3f1ac7..a8b9752b 100644 --- a/dram/src/common/xmlAddressdecoder.cpp +++ b/dram/src/common/xmlAddressdecoder.cpp @@ -2,6 +2,7 @@ #include #include "Utils.h" #include "bitset" +#include "../controller/core/configuration/Configuration.h" using namespace std; using namespace tinyxml2; @@ -48,10 +49,12 @@ DecodedAddress xmlAddressDecoder::decodeAddress(sc_dt::uint64 addr) { DecodedAddress result; result.channel = (addr & masks["channel"]) >> shifts["channel"]; - result.rank = (addr & masks["rank"]) >> shifts["rank"]; - result.bankgroup = (addr & masks["bankgroup"]) >> shifts["bankgroup"]; - result.row = (addr & masks["row"]) >> shifts["row"]; + //result.rank = (addr & masks["rank"]) >> shifts["rank"]; + //result.bankgroup = (addr & masks["bankgroup"]) >> shifts["bankgroup"]; result.bank = (addr & masks["bank"]) >> shifts["bank"]; + result.bankgroup = result.bank % core::Configuration::getInstance().memSpec.NumberOfBankGroups; + result.rank = result.bank % core::Configuration::getInstance().memSpec.NumberOfRanks; + result.row = (addr & masks["row"]) >> shifts["row"]; result.column = (addr & masks["column"]) >> shifts["column"]; result.bytes = (addr & masks["bytes"]) >> shifts["bytes"]; return result; diff --git a/dram/src/controller/core/configuration/ConfigurationLoader.cpp b/dram/src/controller/core/configuration/ConfigurationLoader.cpp index 4af65e63..433d8cac 100644 --- a/dram/src/controller/core/configuration/ConfigurationLoader.cpp +++ b/dram/src/controller/core/configuration/ConfigurationLoader.cpp @@ -111,6 +111,7 @@ void ConfigurationLoader::loadDDR4(Configuration& config, XMLElement* memspec) config.memSpec.NumberOfBanks = queryUIntParameter(architecture, "nbrOfBanks"); config.memSpec.NumberOfBankGroups = queryUIntParameter(architecture, "nbrOfBankGroups"); + config.memSpec.NumberOfRanks = queryUIntParameter(architecture, "nbrOfRanks"); config.memSpec.BurstLength = queryUIntParameter(architecture, "burstLength"); config.memSpec.nActivate = 4; config.memSpec.DataRate = queryUIntParameter(architecture, "dataRate"); @@ -161,6 +162,7 @@ void ConfigurationLoader::loadWideIO(Configuration& config, XMLElement* memspec) config.memSpec.NumberOfBanks = queryUIntParameter(architecture, "nbrOfBanks"); config.memSpec.NumberOfBankGroups = 1; + config.memSpec.NumberOfRanks = 1; config.memSpec.BurstLength = queryUIntParameter(architecture, "burstLength"); config.memSpec.nActivate = 2; config.memSpec.DataRate = queryUIntParameter(architecture, "dataRate"); diff --git a/dram/src/controller/core/configuration/MemSpec.h b/dram/src/controller/core/configuration/MemSpec.h index dd1bcc87..80890d9c 100644 --- a/dram/src/controller/core/configuration/MemSpec.h +++ b/dram/src/controller/core/configuration/MemSpec.h @@ -48,6 +48,7 @@ struct MemSpec unsigned int NumberOfBanks; unsigned int NumberOfBankGroups; + unsigned int NumberOfRanks; unsigned int BurstLength; unsigned int nActivate; unsigned int DataRate;