Added bankgroups to address decoding.
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<mcconfig>
|
||||
<OpenPagePolicy value="1" />
|
||||
<AdaptivePagePolicy value="1" />
|
||||
<AdaptivePagePolicy value="0" />
|
||||
<MaxNrOfTransactions value="8" />
|
||||
<Scheduler value="FifoStrict" />
|
||||
<Capsize value="5" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user