// channel, respectively
uint8_t rank;
uint8_t bank;
- uint16_t row;
+ // use a 64-bit unsigned during the computations as the row is
+ // always the top bits, and check before creating the DRAMPacket
+ uint64_t row;
// truncate the address to the access granularity
Addr addr = dramPktAddr / burstSize;
assert(rank < ranksPerChannel);
assert(bank < banksPerRank);
assert(row < rowsPerBank);
+ assert(row < Bank::NO_ROW);
DPRINTF(DRAM, "Address: %lld Rank %d Bank %d Row %d\n",
dramPktAddr, rank, bank, row);
void
DRAMCtrl::activateBank(Tick act_tick, uint8_t rank, uint8_t bank,
- uint16_t row, Bank& bank_ref)
+ uint32_t row, Bank& bank_ref)
{
assert(0 <= rank && rank < ranksPerChannel);
assert(actTicks[rank].size() == activationLimit);
/** Will be populated by address decoder */
const uint8_t rank;
const uint8_t bank;
- const uint16_t row;
+ const uint32_t row;
/**
* Bank id is calculated considering banks in all the ranks
Bank& bankRef;
DRAMPacket(PacketPtr _pkt, bool is_read, uint8_t _rank, uint8_t _bank,
- uint16_t _row, uint16_t bank_id, Addr _addr,
+ uint32_t _row, uint16_t bank_id, Addr _addr,
unsigned int _size, Bank& bank_ref)
: entryTime(curTick()), readyTime(curTick()),
pkt(_pkt), isRead(is_read), rank(_rank), bank(_bank), row(_row),
* @param bank_ref Reference to the bank
*/
void activateBank(Tick act_tick, uint8_t rank, uint8_t bank,
- uint16_t row, Bank& bank_ref);
+ uint32_t row, Bank& bank_ref);
/**
* Precharge a given bank and also update when the precharge is