Use scoped enums for DRAM types.

This commit is contained in:
Lukas Steiner
2023-06-30 15:49:41 +02:00
parent 4e0891affb
commit 12dcbfd917
35 changed files with 288 additions and 527 deletions

View File

@@ -126,13 +126,15 @@ CheckerDDR5::CheckerDDR5(const Configuration& config)
sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const
{
LogicalRank logicalRank(ControllerExtension::getRank(payload).ID());
PhysicalRank physicalRank(logicalRank.ID() / memSpec->logicalRanksPerPhysicalRank);
DimmRank dimmRank(physicalRank.ID() / memSpec->physicalRanksPerDimmRank);
LogicalRank logicalRank = LogicalRank(ControllerExtension::getRank(payload));
PhysicalRank physicalRank = PhysicalRank(
static_cast<std::size_t>(logicalRank) / memSpec->logicalRanksPerPhysicalRank);
DimmRank dimmRank = DimmRank(static_cast<std::size_t>(physicalRank) / memSpec->physicalRanksPerDimmRank);
BankGroup bankGroup = ControllerExtension::getBankGroup(payload);
Bank bank = ControllerExtension::getBank(payload);
Bank bankInGroup = Bank(logicalRank.ID() * memSpec->banksPerGroup + bank.ID() % memSpec->banksPerGroup);
Bank bankInGroup = Bank(static_cast<std::size_t>(logicalRank) * memSpec->banksPerGroup
+ static_cast<std::size_t>(bank) % memSpec->banksPerGroup);
sc_time lastCommandStart;
sc_time earliestTimeToStart = sc_time_stamp();
@@ -938,15 +940,17 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic
void CheckerDDR5::insert(Command command, const tlm_generic_payload& payload)
{
LogicalRank logicalRank(ControllerExtension::getRank(payload).ID());
PhysicalRank physicalRank(logicalRank.ID() / memSpec->logicalRanksPerPhysicalRank);
DimmRank dimmRank(physicalRank.ID() / memSpec->physicalRanksPerDimmRank);
LogicalRank logicalRank = LogicalRank(ControllerExtension::getRank(payload));
PhysicalRank physicalRank = PhysicalRank(
static_cast<std::size_t>(logicalRank) / memSpec->logicalRanksPerPhysicalRank);
DimmRank dimmRank = DimmRank(static_cast<std::size_t>(physicalRank) / memSpec->physicalRanksPerDimmRank);
BankGroup bankGroup = ControllerExtension::getBankGroup(payload);
Bank bank = ControllerExtension::getBank(payload);
Bank bankInGroup = Bank(logicalRank.ID() * memSpec->banksPerGroup + bank.ID() % memSpec->banksPerGroup);
Bank bankInGroup = Bank(static_cast<std::size_t>(logicalRank) * memSpec->banksPerGroup
+ static_cast<std::size_t>(bank) % memSpec->banksPerGroup);
unsigned burstLength = ControllerExtension::getBurstLength(payload);
PRINTDEBUGMESSAGE("CheckerDDR5", "Changing state on bank " + std::to_string(bank.ID())
PRINTDEBUGMESSAGE("CheckerDDR5", "Changing state on bank " + std::to_string(static_cast<std::size_t>(bank))
+ " command is " + command.toString());
lastScheduledByCommandAndDimmRank[command][dimmRank] = sc_time_stamp();

View File

@@ -632,7 +632,7 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener
}
else if (command == Command::REFP2B)
{
Bank secondBank = Bank(bank.ID() + memSpec->getPer2BankOffset());
Bank secondBank = Bank(static_cast<std::size_t>(bank) + memSpec->getPer2BankOffset());
lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank];
if (lastCommandStart != scMaxTime)
@@ -730,7 +730,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload)
Bank bank = ControllerExtension::getBank(payload);
unsigned burstLength = ControllerExtension::getBurstLength(payload);
PRINTDEBUGMESSAGE("CheckerLPDDR5", "Changing state on bank " + std::to_string(bank.ID())
PRINTDEBUGMESSAGE("CheckerLPDDR5", "Changing state on bank " + std::to_string(static_cast<std::size_t>(bank))
+ " command is " + command.toString());
lastScheduledByCommandAndRank[command][rank] = sc_time_stamp();
@@ -748,7 +748,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload)
if (command == Command::REFP2B)
{
Bank secondBank(bank.ID() + memSpec->getPer2BankOffset());
Bank secondBank = Bank(static_cast<std::size_t>(bank) + memSpec->getPer2BankOffset());
lastScheduledByCommandAndBank[command][secondBank] = sc_time_stamp();
}