107c107
< Rank* rank = new Rank(*this, p);
---
> Rank* rank = new Rank(*this, p, i);
109,132d108
<
< rank->actTicks.resize(activationLimit, 0);
< rank->banks.resize(banksPerRank);
< rank->rank = i;
<
< for (int b = 0; b < banksPerRank; b++) {
< rank->banks[b].bank = b;
< // GDDR addressing of banks to BG is linear.
< // Here we assume that all DRAM generations address bank groups as
< // follows:
< if (bankGroupArch) {
< // Simply assign lower bits to bank group in order to
< // rotate across bank groups as banks are incremented
< // e.g. with 4 banks per bank group and 16 banks total:
< // banks 0,4,8,12 are in bank group 0
< // banks 1,5,9,13 are in bank group 1
< // banks 2,6,10,14 are in bank group 2
< // banks 3,7,11,15 are in bank group 3
< rank->banks[b].bankgr = b % bankGroupsPerRank;
< } else {
< // No bank groups; simply assign to bank number
< rank->banks[b].bankgr = b;
< }
< }
1629c1605
< DRAMCtrl::Rank::Rank(DRAMCtrl& _memory, const DRAMCtrlParams* _p)
---
> DRAMCtrl::Rank::Rank(DRAMCtrl& _memory, const DRAMCtrlParams* _p, int rank)
1633c1609
< refreshState(REF_IDLE), inLowPowerState(false), rank(0),
---
> refreshState(REF_IDLE), inLowPowerState(false), rank(rank),
1635c1611,1612
< wakeUpAllowedAt(0), power(_p, false), numBanksActive(0),
---
> wakeUpAllowedAt(0), power(_p, false), banks(_p->banks_per_rank),
> numBanksActive(0), actTicks(_p->activation_limit, 0),
1638c1615,1635
< { }
---
> {
> for (int b = 0; b < _p->banks_per_rank; b++) {
> banks[b].bank = b;
> // GDDR addressing of banks to BG is linear.
> // Here we assume that all DRAM generations address bank groups as
> // follows:
> if (_p->bank_groups_per_rank > 0) {
> // Simply assign lower bits to bank group in order to
> // rotate across bank groups as banks are incremented
> // e.g. with 4 banks per bank group and 16 banks total:
> // banks 0,4,8,12 are in bank group 0
> // banks 1,5,9,13 are in bank group 1
> // banks 2,6,10,14 are in bank group 2
> // banks 3,7,11,15 are in bank group 3
> banks[b].bankgr = b % _p->bank_groups_per_rank;
> } else {
> // No bank groups; simply assign to bank number
> banks[b].bankgr = b;
> }
> }
> }