Added bankgroups to address decoding.

This commit is contained in:
Lukas Steiner (2)
2019-09-23 20:07:00 +02:00
parent bda10dca2f
commit 102b0667fd
6 changed files with 37 additions and 22 deletions

View File

@@ -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
-->
<addressmapping>
<channel from="128" to="128" /> <!-- only one channel -->
<rank from="30" to="30" />
<bank from="27" to="29" />
<row from="13" to="26" />
<column from="3" to="12" />
<bytes from="0" to="2" />
<rank from="31" to="31" />
<bankgroup from="29" to="30" />
<bank from="27" to="28" />
<row from="13" to="26" />
<column from="3" to="12" />
<bytes from="0" to="2" />
</addressmapping>

View File

@@ -1,6 +1,6 @@
<mcconfig>
<OpenPagePolicy value="1" />
<AdaptivePagePolicy value="1" />
<AdaptivePagePolicy value="0" />
<MaxNrOfTransactions value="8" />
<Scheduler value="FifoStrict" />
<Capsize value="5" />

View File

@@ -5,7 +5,7 @@
<parameter id="memoryType" type="string" value="DDR3" />
<memarchitecturespec>
<parameter id="width" type="uint" value="8" />
<parameter id="nbrOfBanks" type="uint" value="16" />
<parameter id="nbrOfBanks" type="uint" value="32" />
<parameter id="nbrOfRanks" type="uint" value="2" />
<parameter id="nbrOfColumns" type="uint" value="1024" />
<parameter id="nbrOfRows" type="uint" value="16384" />

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -92,7 +92,7 @@ bool isIn(const T &value, const std::vector<T> &collection)
}
constexpr const char headline[] =
"==========================================================================";
"===========================================================================";
static inline void loadbar(unsigned int x,
unsigned int n,