diff --git a/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.cpp b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.cpp index b2400ef2..88864358 100644 --- a/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.cpp +++ b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.cpp @@ -46,47 +46,55 @@ namespace DRAMSys CheckerDDR5::CheckerDDR5(const Configuration& config) { - memSpec = dynamic_cast(config.memSpec.get()); + memSpec = dynamic_cast(config.memSpec.get()); if (memSpec == nullptr) SC_REPORT_FATAL("CheckerDDR5", "Wrong MemSpec chosen"); - lastScheduledByCommandAndDimmRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->dimmRanksPerChannel, scMaxTime)); - lastScheduledByCommandAndPhysicalRank = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->physicalRanksPerChannel, scMaxTime)); - lastScheduledByCommandAndLogicalRank = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->logicalRanksPerChannel, scMaxTime)); - lastScheduledByCommandAndBankGroup = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndDimmRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->dimmRanksPerChannel, scMaxTime)); + lastScheduledByCommandAndPhysicalRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->physicalRanksPerChannel, scMaxTime)); + lastScheduledByCommandAndLogicalRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->logicalRanksPerChannel, scMaxTime)); + lastScheduledByCommandAndBankGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); // Required for Same Bank Refresh - lastScheduledByCommandAndBankInGroup = std::vector>(Command::numberOfCommands(), - ControllerVector(memSpec->ranksPerChannel * memSpec->banksPerGroup, scMaxTime)); + lastScheduledByCommandAndBankInGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel * memSpec->banksPerGroup, + scMaxTime)); lastCommandOnBus = scMaxTime; dummyCommandOnBus.start = scMaxTime; dummyCommandOnBus.end = scMaxTime; - last4ActivatesLogical = ControllerVector>(memSpec->logicalRanksPerChannel); - last4ActivatesPhysical = ControllerVector>(memSpec->physicalRanksPerChannel); + last4ActivatesLogical = + ControllerVector>(memSpec->logicalRanksPerChannel); + last4ActivatesPhysical = + ControllerVector>(memSpec->physicalRanksPerChannel); - lastBurstLengthByCommandAndDimmRank = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->dimmRanksPerChannel)); - lastBurstLengthByCommandAndPhysicalRank = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->physicalRanksPerChannel)); - lastBurstLengthByCommandAndLogicalRank = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->logicalRanksPerChannel)); - lastBurstLengthByCommandAndBankGroup = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->bankGroupsPerChannel)); - lastBurstLengthByCommandAndBank = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->banksPerChannel)); + lastBurstLengthByCommandAndDimmRank = std::vector>( + Command::WRA + 1, ControllerVector(memSpec->dimmRanksPerChannel)); + lastBurstLengthByCommandAndPhysicalRank = std::vector>( + Command::WRA + 1, + ControllerVector(memSpec->physicalRanksPerChannel)); + lastBurstLengthByCommandAndLogicalRank = std::vector>( + Command::WRA + 1, ControllerVector(memSpec->logicalRanksPerChannel)); + lastBurstLengthByCommandAndBankGroup = std::vector>( + Command::WRA + 1, ControllerVector(memSpec->bankGroupsPerChannel)); + lastBurstLengthByCommandAndBank = std::vector>( + Command::WRA + 1, ControllerVector(memSpec->banksPerChannel)); lastBurstLengthByCommand = std::vector(Command::WRA + 1); - lastBurstLengthByCommandAndBankInGroup = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->ranksPerChannel * memSpec->banksPerGroup)); + lastBurstLengthByCommandAndBankInGroup = std::vector>( + Command::WRA + 1, + ControllerVector(memSpec->ranksPerChannel * memSpec->banksPerGroup)); cmdLengthDiff = memSpec->cmdMode * memSpec->tCK; @@ -97,43 +105,45 @@ CheckerDDR5::CheckerDDR5(const Configuration& config) tWRPRE = memSpec->tWL + tBURST16 + memSpec->tWR; tRDAACT = memSpec->tRTP + memSpec->tRP; tWRAACT = tWRPRE + memSpec->tRP; - tCCD_L_RTW_slr = memSpec->tRL - memSpec->tWL + tBURST16 + 2 * memSpec->tCK - - memSpec->tRDDQS + memSpec->tRPST + memSpec->tWPRE; - tCCD_S_RTW_slr = memSpec->tRL - memSpec->tWL + tBURST16 + 2 * memSpec->tCK - - memSpec->tRDDQS + memSpec->tRPST + memSpec->tWPRE; - tCCD_RTW_dlr = memSpec->tRL - memSpec->tWL + tBURST16 + 2 * memSpec->tCK - - memSpec->tRDDQS + memSpec->tRPST + memSpec->tWPRE; + tCCD_L_RTW_slr = memSpec->tRL - memSpec->tWL + tBURST16 + 2 * memSpec->tCK - memSpec->tRDDQS + + memSpec->tRPST + memSpec->tWPRE; + tCCD_S_RTW_slr = memSpec->tRL - memSpec->tWL + tBURST16 + 2 * memSpec->tCK - memSpec->tRDDQS + + memSpec->tRPST + memSpec->tWPRE; + tCCD_RTW_dlr = memSpec->tRL - memSpec->tWL + tBURST16 + 2 * memSpec->tCK - memSpec->tRDDQS + + memSpec->tRPST + memSpec->tWPRE; tRDRD_dpr = tBURST16 + memSpec->tRTRS; tRDRD_ddr = tBURST16 + memSpec->tRTRS; - tRDWR_dpr = memSpec->tRL - memSpec->tWL + tBURST16 + memSpec->tRTRS - - memSpec->tRDDQS + memSpec->tRPST + memSpec->tWPRE; - tRDWR_ddr = memSpec->tRL - memSpec->tWL + tBURST16 + memSpec->tRTRS - - memSpec->tRDDQS + memSpec->tRPST + memSpec->tWPRE; + tRDWR_dpr = memSpec->tRL - memSpec->tWL + tBURST16 + memSpec->tRTRS - memSpec->tRDDQS + + memSpec->tRPST + memSpec->tWPRE; + tRDWR_ddr = memSpec->tRL - memSpec->tWL + tBURST16 + memSpec->tRTRS - memSpec->tRDDQS + + memSpec->tRPST + memSpec->tWPRE; tCCD_L_WTR_slr = memSpec->tWL + tBURST16 + memSpec->tWTR_L; tCCD_M_WTR_slr = memSpec->tWL + tBURST16 + memSpec->tWTR_M; // tWTR_M is max(16nck, 10ns) tCCD_S_WTR_slr = memSpec->tWL + tBURST16 + memSpec->tWTR_S; tCCD_WTR_dlr = memSpec->tWL + tBURST16 + memSpec->tWTR_S; tWRWR_dpr = std::max(memSpec->tCCD_WR_dpr, tBURST16 + memSpec->tRTRS); tWRWR_ddr = tBURST16 + memSpec->tRTRS; - tWRRD_dpr = memSpec->tWL - memSpec->tRL + tBURST16 + memSpec->tRTRS - + memSpec->tRDDQS + memSpec->tWPST + memSpec->tRPRE; - tWRRD_ddr = memSpec->tWL - memSpec->tRL + tBURST16 + memSpec->tRTRS - + memSpec->tRDDQS + memSpec->tWPST + memSpec->tRPRE; + tWRRD_dpr = memSpec->tWL - memSpec->tRL + tBURST16 + memSpec->tRTRS + memSpec->tRDDQS + + memSpec->tWPST + memSpec->tRPRE; + tWRRD_ddr = memSpec->tWL - memSpec->tRL + tBURST16 + memSpec->tRTRS + memSpec->tRDDQS + + memSpec->tWPST + memSpec->tRPRE; tRDPDEN = memSpec->tRL + tBURST16 + cmdLengthDiff; tWRPDEN = memSpec->tWL + tBURST16 + memSpec->tWR + cmdLengthDiff; tWRAPDEN = memSpec->tWL + tBURST16 + memSpec->tWR + cmdLengthDiff; } -sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { LogicalRank logicalRank = LogicalRank(ControllerExtension::getRank(payload)); - PhysicalRank physicalRank = PhysicalRank( - static_cast(logicalRank) / memSpec->logicalRanksPerPhysicalRank); - DimmRank dimmRank = DimmRank(static_cast(physicalRank) / memSpec->physicalRanksPerDimmRank); + PhysicalRank physicalRank = + PhysicalRank(static_cast(logicalRank) / memSpec->logicalRanksPerPhysicalRank); + DimmRank dimmRank = + DimmRank(static_cast(physicalRank) / memSpec->physicalRanksPerDimmRank); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); Bank bank = ControllerExtension::getBank(payload); - Bank bankInGroup = Bank(static_cast(logicalRank) * memSpec->banksPerGroup - + static_cast(bank) % memSpec->banksPerGroup); + Bank bankInGroup = Bank(static_cast(logicalRank) * memSpec->banksPerGroup + + static_cast(bank) % memSpec->banksPerGroup); sc_time lastCommandStart; sc_time earliestTimeToStart = sc_time_stamp(); @@ -151,15 +161,18 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_slr); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RD][bankGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_slr); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RD][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RD][physicalRank]; if (lastCommandStart != scMaxTime) @@ -167,35 +180,45 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastBurstLengthByCommandAndPhysicalRank[Command::RD][physicalRank] == 32) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST32); - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_dlr); } lastCommandStart = lastScheduledByCommand[Command::RD]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::RD][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::RD] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::RD][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::RD][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::RD][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::RD] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr); } } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RDA][bankGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_slr); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RDA][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RDA][physicalRank]; if (lastCommandStart != scMaxTime) @@ -203,25 +226,33 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastBurstLengthByCommandAndPhysicalRank[Command::RDA][physicalRank] == 32) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST32); - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_dlr); } lastCommandStart = lastScheduledByCommand[Command::RDA]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::RDA][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::RDA] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::RDA][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::RDA][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::RDA][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::RDA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDRD_ddr); } } @@ -231,7 +262,8 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WR][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRDA + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRDA + tBURST16); else earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRDA); } @@ -241,54 +273,69 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WR][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_L_WTR_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_L_WTR_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_L_WTR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_L_WTR_slr); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::WR][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr); } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::WR][logicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndLogicalRank[Command::WR][logicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr); } lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::WR][physicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndPhysicalRank[Command::WR][physicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr); } lastCommandStart = lastScheduledByCommand[Command::WR]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::WR][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::WR] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::WR][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::WR][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::WR][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::WR] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr); } } @@ -296,49 +343,63 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::WRA][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_M_WTR_slr); } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::WRA][logicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndLogicalRank[Command::WRA][logicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_WTR_slr); } lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::WRA][physicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndPhysicalRank[Command::WRA][physicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_WTR_dlr); } lastCommandStart = lastScheduledByCommand[Command::WRA]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::WRA][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::WRA] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::WRA][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::WRA][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::WRA][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::WRA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRRD_ddr); } } } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); assert((burstLength == 16) || (burstLength == 32)); @@ -353,45 +414,58 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::RD][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr); } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RD][logicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndLogicalRank[Command::RD][logicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr); } lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RD][physicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndPhysicalRank[Command::RD][physicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr); } lastCommandStart = lastScheduledByCommand[Command::RD]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::RD][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::RD] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::RD][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::RD][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::RD][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::RD] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr); } } @@ -399,45 +473,58 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::RDA][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_L_RTW_slr); } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RDA][logicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndLogicalRank[Command::RDA][logicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_S_RTW_slr); } lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RDA][physicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndPhysicalRank[Command::RDA][physicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tCCD_RTW_dlr); } lastCommandStart = lastScheduledByCommand[Command::RDA]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::RDA][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::RDA] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::RDA][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::RDA][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::RDA][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::RDA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDWR_ddr); } } @@ -448,24 +535,29 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { if (lastBurstLengthByCommandAndBank[Command::WR][bank] == 32) { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_L_WR_slr); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_L_WR_slr); } else { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_WR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_WR_slr); } } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; - if (lastCommandStart != lastScheduledByCommandAndBank[Command::WR][bank]) // different bank + if (lastCommandStart != + lastScheduledByCommandAndBank[Command::WR][bank]) // different bank { if (lastBurstLengthByCommandAndBankGroup[Command::WR][bankGroup] == 32) { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_M_WR_slr); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_M_WR_slr); } else { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_WR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_WR_slr); } } } @@ -476,18 +568,21 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { if (lastBurstLengthByCommandAndBankGroup[Command::WR][bankGroup] == 32) { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_L_WR2_slr); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_L_WR2_slr); } else { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_WR2_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_WR2_slr); } } } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::WR][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_WR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_WR_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::WR][physicalRank]; if (lastCommandStart != scMaxTime) @@ -495,25 +590,33 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastBurstLengthByCommandAndPhysicalRank[Command::WR][physicalRank] == 32) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST32); - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_WR_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_WR_dlr); } lastCommandStart = lastScheduledByCommand[Command::WR]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::WR][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::WR] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::WR][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::WR][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::WR][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::WR] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr); } } @@ -524,11 +627,13 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { if (lastBurstLengthByCommandAndBankGroup[Command::WRA][bankGroup] == 32) { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_M_WR_slr); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_M_WR_slr); } else { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_WR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_M_WR_slr); } } } @@ -539,18 +644,21 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { if (lastBurstLengthByCommandAndBankGroup[Command::WRA][bankGroup] == 32) { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_L_WR2_slr); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tBURST16 + memSpec->tCCD_L_WR2_slr); } else { - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_WR2_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_L_WR2_slr); } } } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::WRA][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_WR_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S_WR_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::WRA][physicalRank]; if (lastCommandStart != scMaxTime) @@ -558,25 +666,33 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastBurstLengthByCommandAndPhysicalRank[Command::WRA][physicalRank] == 32) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST32); - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_WR_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_WR_dlr); } lastCommandStart = lastScheduledByCommand[Command::WRA]; - if (lastCommandStart != lastScheduledByCommandAndPhysicalRank[Command::WRA][physicalRank]) // different physical rank + if (lastCommandStart != + lastScheduledByCommandAndPhysicalRank[Command::WRA] + [physicalRank]) // different physical rank { - if (lastCommandStart == lastScheduledByCommandAndDimmRank[Command::WRA][dimmRank]) // same DIMM + if (lastCommandStart == + lastScheduledByCommandAndDimmRank[Command::WRA][dimmRank]) // same DIMM { if (lastBurstLengthByCommandAndDimmRank[Command::WRA][dimmRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_dpr); } else // different DIMM { if (lastBurstLengthByCommand[Command::WRA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr + tBURST16); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRWR_ddr); } } } @@ -588,15 +704,18 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBankGroup[Command::ACT][bankGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD_L_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD_L_slr); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::ACT][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD_S_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD_S_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::ACT][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD_dlr); lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) @@ -606,84 +725,102 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WRA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRAACT + tBURST16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRAACT + tBURST16); else earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRAACT); } lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::PREAB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::PRESB][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::REFAB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr - cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RFMAB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr - cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr - cmdLengthDiff); // TODO: No tRFC_dlr and tRFC_dpr between REFAB and ACT? lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::REFSB][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_slr - cmdLengthDiff); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRFCsb_slr - cmdLengthDiff); // TODO: No tRFCsb_dlr between REFSB and ACT? lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::REFSB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_slr - cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_slr - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::REFSB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_dlr - cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_dlr - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::RFMSB][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_slr - cmdLengthDiff); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRFCsb_slr - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RFMSB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_slr - cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_slr - cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RFMSB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_dlr - cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->tREFSBRD_dlr - cmdLengthDiff); if (last4ActivatesLogical[logicalRank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4ActivatesLogical[logicalRank].front() - + memSpec->tFAW_slr - memSpec->longCmdOffset); + earliestTimeToStart = std::max(earliestTimeToStart, + last4ActivatesLogical[logicalRank].front() + + memSpec->tFAW_slr - memSpec->longCmdOffset); if (last4ActivatesPhysical[physicalRank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4ActivatesPhysical[physicalRank].front() - + memSpec->tFAW_dlr - memSpec->longCmdOffset); + earliestTimeToStart = std::max(earliestTimeToStart, + last4ActivatesPhysical[physicalRank].front() + + memSpec->tFAW_dlr - memSpec->longCmdOffset); } else if (command == Command::PREPB) { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WR][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); } lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::PREPB][physicalRank]; @@ -702,32 +839,39 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::ACT][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RD][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RDA][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::WR][logicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndLogicalRank[Command::WR][logicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::WRA][logicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndLogicalRank[Command::WRA][logicalRank]) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); } lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::PREPB][physicalRank]; @@ -744,32 +888,39 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::ACT][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::RD][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::RDA][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::WR][bankInGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankInGroup[Command::WR][bankInGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); } lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::WRA][bankInGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankInGroup[Command::WRA][bankInGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + cmdLengthDiff); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + cmdLengthDiff); } lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::PREPB][physicalRank]; @@ -786,19 +937,24 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::ACT][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RDA][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDAACT + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDAACT + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::WRA][logicalRank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndLogicalRank[Command::WRA][logicalRank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + tBURST16 + memSpec->tRP + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + tWRPRE + tBURST16 + memSpec->tRP + cmdLengthDiff); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP + cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP + cmdLengthDiff); } lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::PREPB][logicalRank]; @@ -811,27 +967,33 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::REFAB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::REFAB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); lastCommandStart = lastScheduledByCommandAndDimmRank[Command::REFAB][dimmRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RFMAB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RFMAB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); lastCommandStart = lastScheduledByCommandAndDimmRank[Command::RFMAB][dimmRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); // REFSB tRFCsb_slr/dlr // PRESB tRP @@ -840,23 +1002,28 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::ACT][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::ACT][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD_L_slr + cmdLengthDiff); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRRD_L_slr + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::RDA][bankInGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDAACT + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDAACT + cmdLengthDiff); lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::WRA][bankInGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankInGroup[Command::WRA][bankInGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRAACT + tBURST16 + cmdLengthDiff); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRAACT + tBURST16 + cmdLengthDiff); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRAACT + cmdLengthDiff); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRAACT + cmdLengthDiff); } lastCommandStart = lastScheduledByCommandAndBankInGroup[Command::PREPB][bankInGroup]; @@ -871,55 +1038,67 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::REFAB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); // TODO: check this lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::REFAB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); // TODO: check this lastCommandStart = lastScheduledByCommandAndDimmRank[Command::REFAB][dimmRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RFMAB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_slr); // TODO: check this lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RFMAB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dlr); // TODO: check this lastCommandStart = lastScheduledByCommandAndDimmRank[Command::RFMAB][dimmRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC_dpr); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::REFSB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::REFSB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_dlr); lastCommandStart = lastScheduledByCommandAndLogicalRank[Command::RFMSB][logicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_slr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_slr); lastCommandStart = lastScheduledByCommandAndPhysicalRank[Command::RFMSB][physicalRank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_dlr); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCsb_dlr); if (last4ActivatesLogical[logicalRank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4ActivatesLogical[logicalRank].front() - + memSpec->tFAW_slr - memSpec->shortCmdOffset); + earliestTimeToStart = std::max(earliestTimeToStart, + last4ActivatesLogical[logicalRank].front() + + memSpec->tFAW_slr - memSpec->shortCmdOffset); if (last4ActivatesPhysical[physicalRank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4ActivatesPhysical[physicalRank].front() - + memSpec->tFAW_dlr - memSpec->shortCmdOffset); + earliestTimeToStart = std::max(earliestTimeToStart, + last4ActivatesPhysical[physicalRank].front() + + memSpec->tFAW_dlr - memSpec->shortCmdOffset); } else SC_REPORT_FATAL("CheckerDDR5", "Unknown command!"); @@ -941,13 +1120,14 @@ sc_time CheckerDDR5::timeToSatisfyConstraints(Command command, const tlm_generic void CheckerDDR5::insert(Command command, const tlm_generic_payload& payload) { LogicalRank logicalRank = LogicalRank(ControllerExtension::getRank(payload)); - PhysicalRank physicalRank = PhysicalRank( - static_cast(logicalRank) / memSpec->logicalRanksPerPhysicalRank); - DimmRank dimmRank = DimmRank(static_cast(physicalRank) / memSpec->physicalRanksPerDimmRank); + PhysicalRank physicalRank = + PhysicalRank(static_cast(logicalRank) / memSpec->logicalRanksPerPhysicalRank); + DimmRank dimmRank = + DimmRank(static_cast(physicalRank) / memSpec->physicalRanksPerDimmRank); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); Bank bank = ControllerExtension::getBank(payload); - Bank bankInGroup = Bank(static_cast(logicalRank) * memSpec->banksPerGroup - + static_cast(bank) % memSpec->banksPerGroup); + Bank bankInGroup = Bank(static_cast(logicalRank) * memSpec->banksPerGroup + + static_cast(bank) % memSpec->banksPerGroup); unsigned burstLength = ControllerExtension::getBurstLength(payload); // Hack: Convert MWR to WR and MWRA to WRA @@ -956,8 +1136,9 @@ void CheckerDDR5::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerDDR5", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerDDR5", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndDimmRank[command][dimmRank] = sc_time_stamp(); lastScheduledByCommandAndPhysicalRank[command][physicalRank] = sc_time_stamp(); @@ -970,7 +1151,7 @@ void CheckerDDR5::insert(Command command, const tlm_generic_payload& payload) if (command.isCasCommand()) { lastBurstLengthByCommandAndDimmRank[command][dimmRank] = burstLength; - lastBurstLengthByCommandAndPhysicalRank[command ][physicalRank] = burstLength; + lastBurstLengthByCommandAndPhysicalRank[command][physicalRank] = burstLength; lastBurstLengthByCommandAndLogicalRank[command][logicalRank] = burstLength; lastBurstLengthByCommandAndBankGroup[command][bankGroup] = burstLength; lastBurstLengthByCommandAndBank[command][bank] = burstLength; diff --git a/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.h b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.h index db0c3144..68aa6d75 100644 --- a/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.h +++ b/extensions/standards/DDR5/DRAMSys/controller/checker/CheckerDDR5.h @@ -40,9 +40,9 @@ #include -#include -#include #include +#include +#include namespace DRAMSys { @@ -51,15 +51,19 @@ class CheckerDDR5 final : public CheckerIF { public: explicit CheckerDDR5(const Configuration& config); - sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecDDR5 *memSpec; + const MemSpecDDR5* memSpec; std::vector> lastScheduledByCommandAndDimmRank; - std::vector> lastScheduledByCommandAndPhysicalRank; - std::vector> lastScheduledByCommandAndLogicalRank; + std::vector> + lastScheduledByCommandAndPhysicalRank; + std::vector> + lastScheduledByCommandAndLogicalRank; std::vector> lastScheduledByCommandAndBankGroup; std::vector> lastScheduledByCommandAndBank; std::vector lastScheduledByCommand; diff --git a/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.cpp b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.cpp index f081e85a..0f78ef8b 100644 --- a/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.cpp +++ b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.cpp @@ -44,18 +44,21 @@ using namespace tlm; namespace DRAMSys { -CheckerHBM3::CheckerHBM3(const Configuration &config) +CheckerHBM3::CheckerHBM3(const Configuration& config) { - memSpec = dynamic_cast(config.memSpec.get()); + memSpec = dynamic_cast(config.memSpec.get()); if (memSpec == nullptr) SC_REPORT_FATAL("CheckerHBM3", "Wrong MemSpec chosen"); lastScheduledByCommandAndBank = std::vector>( - Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); lastScheduledByCommandAndBankGroup = std::vector>( - Command::numberOfCommands(), ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); lastScheduledByCommandAndRank = std::vector>( - Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnRasBus = scMaxTime; lastCommandOnCasBus = scMaxTime; @@ -72,7 +75,8 @@ CheckerHBM3::CheckerHBM3(const Configuration &config) tWRRDL = memSpec->tWL + 2 * memSpec->tCK + memSpec->tWTRL; } -sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic_payload &payload) const +sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); @@ -85,7 +89,8 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) @@ -108,13 +113,15 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP); if (lastCommandOnRasBus != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandOnRasBus + memSpec->tCK / 2); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandOnRasBus + memSpec->tCK / 2); } else if (command == Command::RD) { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDRD + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDRD + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RD][bankGroup]; if (lastCommandStart != scMaxTime) @@ -159,7 +166,8 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDWR + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDWR + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -196,7 +204,8 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDRD + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDRD + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RD][bankGroup]; if (lastCommandStart != scMaxTime) @@ -216,8 +225,10 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL + 2 * memSpec->tCK + - std::max(memSpec->tWR - memSpec->tRTP, memSpec->tWTRL)); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + 2 * memSpec->tCK + + std::max(memSpec->tWR - memSpec->tRTP, memSpec->tWTRL)); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; if (lastCommandStart != scMaxTime) @@ -246,7 +257,8 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDWR + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDWR + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -296,48 +308,58 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = - std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP - memSpec->tCK); + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRTP + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = - std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP - memSpec->tCK); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + tWRPRE + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXP][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::REFPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::REFPB][bankGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RFMAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RFMPB][bank]; if (lastCommandStart != scMaxTime) @@ -349,7 +371,8 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::SREFEX][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS - memSpec->tCK); if (last4Activates[rank].size() >= 4) earliestTimeToStart = @@ -362,15 +385,18 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -411,7 +437,8 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -446,29 +473,35 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB); if (lastCommandOnRasBus != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandOnRasBus + memSpec->tCK / 2); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandOnRasBus + memSpec->tCK / 2); } else if (command == Command::REFPB) { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::ACT][bankGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDL + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDL + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -518,9 +551,11 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (bankwiseRefreshCounter[rank] == 0) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); } if (last4Activates[rank].size() >= 4) @@ -534,16 +569,19 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = - std::max(earliestTimeToStart, lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); + std::max(earliestTimeToStart, + lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -576,7 +614,8 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) @@ -601,15 +640,18 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::ACT][bankGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDL + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDL + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) @@ -727,14 +769,15 @@ sc_time CheckerHBM3::timeToSatisfyConstraints(Command command, const tlm_generic return earliestTimeToStart; } -void CheckerHBM3::insert(Command command, const tlm_generic_payload &payload) +void CheckerHBM3::insert(Command command, const tlm_generic_payload& payload) { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); Bank bank = ControllerExtension::getBank(payload); - PRINTDEBUGMESSAGE("CheckerHBM3", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerHBM3", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndBankGroup[command][bankGroup] = sc_time_stamp(); diff --git a/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.h b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.h index 979418a9..3a6dcfa8 100644 --- a/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.h +++ b/extensions/standards/HBM3/DRAMSys/controller/checker/CheckerHBM3.h @@ -40,25 +40,26 @@ #include -#include -#include #include +#include +#include namespace DRAMSys { - class CheckerHBM3 final : public CheckerIF { public: explicit CheckerHBM3(const Configuration& config); - sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: bool isFullCycle(const sc_core::sc_time& time) const; - const MemSpecHBM3 *memSpec; + const MemSpecHBM3* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndBankGroup; diff --git a/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp index 65566e11..f18cc42f 100644 --- a/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp +++ b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp @@ -46,29 +46,31 @@ namespace DRAMSys CheckerLPDDR5::CheckerLPDDR5(const Configuration& config) { - memSpec = dynamic_cast(config.memSpec.get()); + memSpec = dynamic_cast(config.memSpec.get()); if (memSpec == nullptr) SC_REPORT_FATAL("CheckerLPDDR5", "Wrong MemSpec chosen"); else { - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); - lastScheduledByCommandAndBankGroup = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBankGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); - lastBurstLengthByCommandAndRank = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->ranksPerChannel)); - lastBurstLengthByCommandAndBankGroup = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->bankGroupsPerChannel)); - lastBurstLengthByCommandAndBank = std::vector> - (Command::WRA + 1, ControllerVector(memSpec->banksPerChannel)); + lastBurstLengthByCommandAndRank = std::vector>( + Command::WRA + 1, ControllerVector(memSpec->ranksPerChannel)); + lastBurstLengthByCommandAndBankGroup = std::vector>( + Command::WRA + 1, ControllerVector(memSpec->bankGroupsPerChannel)); + lastBurstLengthByCommandAndBank = std::vector>( + Command::WRA + 1, ControllerVector(memSpec->banksPerChannel)); lastBurstLengthByCommand = std::vector(Command::WRA + 1); tBURST16 = 16 / memSpec->dataRate * memSpec->tCK; @@ -76,7 +78,8 @@ CheckerLPDDR5::CheckerLPDDR5(const Configuration& config) } } -sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); @@ -89,21 +92,26 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener if (command == Command::RD || command == Command::RDA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); - assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::M8B) || (burstLength == 32)); // 8B mode -> BL32 - assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) || (memSpec->dataRate == 8)); // BG mode -> 4:1 ratio + assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::M8B) || + (burstLength == 32)); // 8B mode -> BL32 + assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) || + (memSpec->dataRate == 8)); // BG mode -> 4:1 ratio assert(burstLength <= memSpec->maxBurstLength); lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD_L + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD_L + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RD][bankGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::RD][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); } lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; @@ -113,33 +121,43 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener { // TODO: model BG mode BL32 interleaved burst, remove this fix if (memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); } else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); } - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? - lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommand[Command::RD] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RDA][bankGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::RDA][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); } lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; @@ -149,176 +167,236 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener { // TODO: model BG mode BL32 interleaved burst, remove this fix if (memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); } else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); } - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? - lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) { // TODO: BG mode with BL32 if (lastBurstLengthByCommand[Command::RDA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + + memSpec->tCK + memSpec->tRPST + memSpec->tRPRE); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::WR][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_max_32 + memSpec->tWTR_L); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_max_32 + memSpec->tWTR_L); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_max_16 + memSpec->tWTR_L); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_max_16 + memSpec->tWTR_L); } lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::WR][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tWTR_S); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_min_32 + memSpec->tWTR_S); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tWTR_S); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_min_16 + memSpec->tWTR_S); } - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? - lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) { // TODO: BG mode with BL32 if (lastBurstLengthByCommand[Command::WR] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK - memSpec->tRL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK - + memSpec->tRL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK - memSpec->tRL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK - + memSpec->tRL); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WRA][bankGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::WRA][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_max_32 + memSpec->tWTR_L); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_max_32 + memSpec->tWTR_L); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_max_16 + memSpec->tWTR_L); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_max_16 + memSpec->tWTR_L); } lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::WRA][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tWTR_S); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_min_32 + memSpec->tWTR_S); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tWTR_S); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + + memSpec->BL_n_min_16 + memSpec->tWTR_S); } - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? - lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) { // TODO: BG mode with BL32 if (lastBurstLengthByCommand[Command::WRA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK - memSpec->tRL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK - + memSpec->tRL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK - memSpec->tRL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK - + memSpec->tRL); } } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); - assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::M8B) || (burstLength == 32)); // 8B mode -> BL32 - assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) || (memSpec->dataRate == 8)); // BG mode -> 4:1 ratio + assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::M8B) || + (burstLength == 32)); // 8B mode -> BL32 + assert(!(memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) || + (memSpec->dataRate == 8)); // BG mode -> 4:1 ratio assert(burstLength <= memSpec->maxBurstLength); lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD_S + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD_S + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RD][bankGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::RD][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_max_32 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_max_32 + + memSpec->tWCK2DQO - memSpec->tWL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_max_16 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_max_16 + + memSpec->tWCK2DQO - memSpec->tWL); } lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::RD][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_min_32 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_32 + + memSpec->tWCK2DQO - memSpec->tWL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_min_16 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_16 + + memSpec->tWCK2DQO - memSpec->tWL); } - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? - lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) { // TODO: BG mode with BL32 if (lastBurstLengthByCommand[Command::RD] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tRL + memSpec->BL_n_min_32 + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_32 + + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tRL + memSpec->BL_n_min_16 + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_16 + + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RDA][bankGroup]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBankGroup[Command::RDA][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_max_32 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_max_32 + + memSpec->tWCK2DQO - memSpec->tWL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_max_16 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_max_16 + + memSpec->tWCK2DQO - memSpec->tWL); } lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::RDA][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_min_32 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_32 + + memSpec->tWCK2DQO - memSpec->tWL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRL - + memSpec->BL_n_min_16 + memSpec->tWCK2DQO - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_16 + + memSpec->tWCK2DQO - memSpec->tWL); } - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? - lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) { // TODO: BG mode with BL32 if (lastBurstLengthByCommand[Command::RDA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tRL + memSpec->BL_n_min_32 + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_32 + + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart - + memSpec->tRL + memSpec->BL_n_min_16 + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRL + memSpec->BL_n_min_16 + + memSpec->tWCK2DQO + memSpec->tRPST - memSpec->tWL); } lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; @@ -327,9 +405,11 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener if (command == Command::MWR || command == Command::MWRA) { if (lastBurstLengthByCommandAndBank[Command::WR][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + 2.5 * memSpec->BL_n_max_32); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + 2.5 * memSpec->BL_n_max_32); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + 4 * memSpec->BL_n_max_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + 4 * memSpec->BL_n_max_16); } } @@ -339,16 +419,20 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener if (command == Command::WR || command == Command::WRA) { if (lastBurstLengthByCommandAndBankGroup[Command::WR][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); } else if (command == Command::MWR || command == Command::MWRA) { if (lastBurstLengthByCommandAndBankGroup[Command::WR][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_32); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_16); } } @@ -359,24 +443,33 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener { // TODO: model BG mode BL32 interleaved burst, remove this fix if (memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); } else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); } lastCommandStart = lastScheduledByCommand[Command::WR]; if (lastCommandStart != scMaxTime) { - if (lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank]) + if (lastScheduledByCommand[Command::WR] != + lastScheduledByCommandAndRank[Command::WR][rank]) { // TODO: BG mode with BL32 if (lastBurstLengthByCommand[Command::WR] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + memSpec->tCK); } } @@ -386,16 +479,20 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener if (command == Command::WR || command == Command::WRA) { if (lastBurstLengthByCommandAndBankGroup[Command::WRA][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_32); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_L_16); } else if (command == Command::MWR || command == Command::MWRA) { if (lastBurstLengthByCommandAndBankGroup[Command::WRA][bankGroup] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_32); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_max_16); } } @@ -406,23 +503,32 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener { // TODO: model BG mode BL32 interleaved burst, remove this fix if (memSpec->bankMode == MemSpecLPDDR5::BankMode::MBG) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_S_32 + 2 * memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_32); } else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_S_16); } lastCommandStart = lastScheduledByCommand[Command::WRA]; if (lastCommandStart != scMaxTime) { - if (lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank]) + if (lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank]) { if (lastBurstLengthByCommand[Command::WRA] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + memSpec->tCK); } } } @@ -440,81 +546,100 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::RDA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP + memSpec->tRPpb - memSpec->tCK); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + + memSpec->tRBTP + memSpec->tRPpb - memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP + memSpec->tRPpb - memSpec->tCK); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + + memSpec->tRBTP + memSpec->tRPpb - memSpec->tCK); } lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::RDA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb - memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb - memSpec->tCK); } lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPpb - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPpb - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPab - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPab - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCab - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCab - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2act - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2act - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFP2B][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2act - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2act - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::REFPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::REFP2B][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb - memSpec->tCK); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW - memSpec->tCK); + earliestTimeToStart = std::max( + earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW - memSpec->tCK); } else if (command == Command::PREPB) { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::RD][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 + memSpec->tRBTP); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 + memSpec->tRBTP); } lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WR][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR); } lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; @@ -525,50 +650,59 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::RD][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 + memSpec->tRBTP); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 + memSpec->tRBTP); } lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::RDA][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 + memSpec->tRBTP); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 + memSpec->tRBTP); } lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::WR][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR); } lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::WRA][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR); } lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; @@ -579,28 +713,35 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::RDA][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + + memSpec->tRBTP + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + + memSpec->tRBTP + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndRank[Command::WRA][rank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; @@ -619,32 +760,40 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::RDA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + + memSpec->tRBTP + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + + memSpec->tRBTP + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WRA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; @@ -661,10 +810,12 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndRank[Command::REFPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2pbR); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2pbR); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::REFP2B) { @@ -672,58 +823,73 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][secondBank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::RDA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + + memSpec->tRBTP + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + + memSpec->tRBTP + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][secondBank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::RDA][secondBank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_32 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_32 + + memSpec->tRBTP + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->BL_n_min_16 - + memSpec->tRBTP + memSpec->tRPpb); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->BL_n_min_16 + + memSpec->tRBTP + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WRA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][secondBank]; if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WRA][secondBank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_32 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_32 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tWL - + memSpec->BL_n_min_16 + memSpec->tCK + memSpec->tWR + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tWL + memSpec->BL_n_min_16 + memSpec->tCK + + memSpec->tWR + memSpec->tRPpb); } lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; @@ -744,10 +910,12 @@ sc_time CheckerLPDDR5::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndRank[Command::REFP2B][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2pbR); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tpbR2pbR); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else SC_REPORT_FATAL("CheckerLPDDR5", "Unknown command!"); @@ -772,8 +940,9 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerLPDDR5", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerLPDDR5", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndRank[command][rank] = sc_time_stamp(); lastScheduledByCommandAndBankGroup[command][bankGroup] = sc_time_stamp(); @@ -796,8 +965,8 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) lastCommandOnBus = sc_time_stamp() + memSpec->getCommandLength(command) - memSpec->tCK; - if (command == Command::ACT || command == Command::REFPB || command == Command::REFP2B - || command == Command::RFMPB || command == Command::RFMP2B) + if (command == Command::ACT || command == Command::REFPB || command == Command::REFP2B || + command == Command::RFMPB || command == Command::RFMP2B) { if (last4Activates[rank].size() == 4) last4Activates[rank].pop(); diff --git a/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.h b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.h index 7887dda3..77c250c1 100644 --- a/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.h +++ b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.h @@ -40,9 +40,9 @@ #include -#include -#include #include +#include +#include namespace DRAMSys { @@ -51,11 +51,13 @@ class CheckerLPDDR5 final : public CheckerIF { public: explicit CheckerLPDDR5(const Configuration& config); - sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecLPDDR5 *memSpec; + const MemSpecLPDDR5* memSpec; std::vector> lastScheduledByCommandAndRank; std::vector> lastScheduledByCommandAndBankGroup; diff --git a/scripts/pct/SocketCoupler.h b/scripts/pct/SocketCoupler.h index 3d802661..fb6dcbf9 100644 --- a/scripts/pct/SocketCoupler.h +++ b/scripts/pct/SocketCoupler.h @@ -37,11 +37,10 @@ #define SOCKETCOUPLER_H #include -#include #include +#include -template -class SocketCoupler : public sc_core::sc_module +template class SocketCoupler : public sc_core::sc_module { public: SocketCoupler(sc_core::sc_module_name name) : sc_core::sc_module(name) @@ -58,19 +57,23 @@ public: tlm_utils::multi_passthrough_initiator_socket iSocket; private: - tlm::tlm_sync_enum nb_transport_fw(int id, tlm::tlm_generic_payload &payload, - tlm::tlm_phase &phase, sc_core::sc_time &delay) + tlm::tlm_sync_enum nb_transport_fw(int id, + tlm::tlm_generic_payload& payload, + tlm::tlm_phase& phase, + sc_core::sc_time& delay) { return iSocket[id]->nb_transport_fw(payload, phase, delay); } - unsigned transport_dbg(int id, tlm::tlm_generic_payload &trans) + unsigned transport_dbg(int id, tlm::tlm_generic_payload& trans) { return iSocket[id]->transport_dbg(trans); } - tlm::tlm_sync_enum nb_transport_bw(int id, tlm::tlm_generic_payload &payload, - tlm::tlm_phase &phase, sc_core::sc_time &delay) + tlm::tlm_sync_enum nb_transport_bw(int id, + tlm::tlm_generic_payload& payload, + tlm::tlm_phase& phase, + sc_core::sc_time& delay) { return tSocket[id]->nb_transport_bw(payload, phase, delay); } diff --git a/scripts/pct/dummy.h b/scripts/pct/dummy.h index 72923e6d..af5b42a1 100644 --- a/scripts/pct/dummy.h +++ b/scripts/pct/dummy.h @@ -43,7 +43,6 @@ #include - /** * This is just a dummy module. Platform Architect is not able to parse the * real module... @@ -57,9 +56,7 @@ public: sc_core::sc_event terminateSimulation; SC_HAS_PROCESS(DRAMSys); - DRAMSys(sc_core::sc_module_name name, - std::string simulationToRun, - std::string pathToResources); + DRAMSys(sc_core::sc_module_name name, std::string simulationToRun, std::string pathToResources); }; class DRAMSysRecordable : public DRAMSys @@ -71,4 +68,3 @@ public: }; #endif // DUMMY_H - diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.cpp index d717c74d..06fa4636 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.cpp @@ -50,10 +50,12 @@ CheckerDDR3::CheckerDDR3(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerDDR3", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -69,7 +71,8 @@ CheckerDDR3::CheckerDDR3(const Configuration& config) : tWRAPDEN = memSpec->tWL + tBURST + memSpec->tWR + memSpec->tCK; } -sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); Bank bank = ControllerExtension::getBank(payload); @@ -83,29 +86,39 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP - memSpec->tAL); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP - memSpec->tAL); } lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; @@ -132,19 +145,24 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSDLL); } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { assert(ControllerExtension::getBurstLength(payload) == 8); lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -152,7 +170,10 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -160,17 +181,25 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -192,11 +221,14 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -223,7 +255,8 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PREPB) { @@ -233,7 +266,8 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) @@ -251,11 +285,13 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) @@ -277,11 +313,14 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -307,7 +346,8 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -327,7 +367,8 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -355,11 +396,13 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXP][rank]; if (lastCommandStart != scMaxTime) @@ -367,7 +410,8 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::SREFEX][rank]; if (lastCommandStart != scMaxTime) @@ -387,11 +431,14 @@ sc_time CheckerDDR3::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, memSpec->tAL + memSpec->tRTP + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, + lastCommandStart + std::max(tRDPDEN, memSpec->tAL + memSpec->tRTP + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -439,8 +486,9 @@ void CheckerDDR3::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerDDR3", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerDDR3", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndRank[command][rank] = sc_time_stamp(); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.h b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.h index bb9bed97..a7cca4d4 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR3.h @@ -35,9 +35,9 @@ #ifndef CHECKERDDR3_H #define CHECKERDDR3_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecDDR3.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecDDR3.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerDDR3 final : public CheckerIF { public: explicit CheckerDDR3(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecDDR3 *memSpec; + const MemSpecDDR3* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndRank; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp index ebfb8a98..cd8e740e 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.cpp @@ -50,13 +50,15 @@ CheckerDDR4::CheckerDDR4(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerDDR4", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndBankGroup = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndBankGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -73,7 +75,8 @@ CheckerDDR4::CheckerDDR4(const Configuration& config) : tWRAPDEN = memSpec->tWL + tBURST + memSpec->tCK + memSpec->tWR; } -sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); @@ -88,7 +91,8 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RD][bankGroup]; if (lastCommandStart != scMaxTime) @@ -98,9 +102,13 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RDA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -110,15 +118,20 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP - memSpec->tAL); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP - memSpec->tAL); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; @@ -153,19 +166,24 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSDLL); } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { assert(ControllerExtension::getBurstLength(payload) == 8); lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -173,7 +191,10 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -185,9 +206,13 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WRA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -197,9 +222,13 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD_S); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -225,11 +254,14 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -256,7 +288,8 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PREPB) { @@ -266,7 +299,8 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) @@ -284,11 +318,13 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) @@ -310,11 +346,14 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -340,7 +379,8 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -360,7 +400,8 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -388,11 +429,13 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXP][rank]; if (lastCommandStart != scMaxTime) @@ -400,7 +443,8 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::SREFEX][rank]; if (lastCommandStart != scMaxTime) @@ -420,11 +464,14 @@ sc_time CheckerDDR4::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, memSpec->tAL + memSpec->tRTP + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, + lastCommandStart + std::max(tRDPDEN, memSpec->tAL + memSpec->tRTP + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -473,8 +520,9 @@ void CheckerDDR4::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerDDR4", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerDDR4", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndBankGroup[command][bankGroup] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h index c805d71d..6ea3708d 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerDDR4.h @@ -35,14 +35,14 @@ #ifndef CHECKERDDR4_H #define CHECKERDDR4_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecDDR4.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecDDR4.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include -#include #include #include +#include namespace DRAMSys { @@ -51,11 +51,13 @@ class CheckerDDR4 final : public CheckerIF { public: explicit CheckerDDR4(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecDDR4 *memSpec; + const MemSpecDDR4* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndBankGroup; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.cpp index 2e44aba9..d4a097e3 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.cpp @@ -50,13 +50,15 @@ CheckerGDDR5::CheckerGDDR5(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerGDDR5", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndBankGroup = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndBankGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -74,7 +76,8 @@ CheckerGDDR5::CheckerGDDR5(const Configuration& config) : tWRPRE = memSpec->tWL + tBURST + memSpec->tWR; } -sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); @@ -99,9 +102,13 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RDA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -111,15 +118,20 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; @@ -130,7 +142,10 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_S); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -142,7 +157,10 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_S); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -166,7 +184,10 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTW); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -174,7 +195,10 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTW); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -186,9 +210,13 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WRA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -198,9 +226,13 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -226,11 +258,13 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -265,10 +299,12 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); if (last32Activates[rank].size() >= 32) - earliestTimeToStart = std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); + earliestTimeToStart = + std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); } else if (command == Command::PREPB) { @@ -334,11 +370,13 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -380,11 +418,13 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -414,9 +454,11 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) { if (bankwiseRefreshCounter[rank] == 0) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); } lastCommandStart = lastScheduledByCommandAndRank[Command::SREFEX][rank]; @@ -424,10 +466,12 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); if (last32Activates[rank].size() >= 32) - earliestTimeToStart = std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); + earliestTimeToStart = + std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); } else if (command == Command::PDEA) { @@ -497,11 +541,14 @@ sc_time CheckerGDDR5::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -549,8 +596,9 @@ void CheckerGDDR5::insert(Command command, const tlm_generic_payload& payload) BankGroup bankGroup = ControllerExtension::getBankGroup(payload); Bank bank = ControllerExtension::getBank(payload); - PRINTDEBUGMESSAGE("CheckerGDDR5", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerGDDR5", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndBankGroup[command][bankGroup] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.h b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.h index ebbde0b4..c7d78974 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5.h @@ -35,9 +35,9 @@ #ifndef CHECKERGDDR5_H #define CHECKERGDDR5_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecGDDR5.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecGDDR5.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerGDDR5 final : public CheckerIF { public: explicit CheckerGDDR5(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecGDDR5 *memSpec; + const MemSpecGDDR5* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndBankGroup; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.cpp index 3596bb0b..df75de09 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.cpp @@ -50,13 +50,15 @@ CheckerGDDR5X::CheckerGDDR5X(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerGDDR5X", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndBankGroup = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndBankGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -74,7 +76,8 @@ CheckerGDDR5X::CheckerGDDR5X(const Configuration& config) : tWRPRE = memSpec->tWL + tBURST + memSpec->tWR; } -sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); @@ -86,7 +89,7 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (command == Command::RD || command == Command::RDA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); - assert(!(memSpec->dataRate == 4) || (burstLength == 8)); // DDR mode (QDR wrt CK) + assert(!(memSpec->dataRate == 4) || (burstLength == 8)); // DDR mode (QDR wrt CK) assert(!(memSpec->dataRate == 8) || (burstLength == 16)); // QDR mode (ODR wrt CK) lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; @@ -101,9 +104,13 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RDA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -113,15 +120,20 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; @@ -132,7 +144,10 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_S); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -144,7 +159,10 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_S); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -159,7 +177,7 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener else if (command == Command::WR || command == Command::WRA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); - assert(!(memSpec->dataRate == 4) || (burstLength == 8)); // DDR mode (QDR wrt CK) + assert(!(memSpec->dataRate == 4) || (burstLength == 8)); // DDR mode (QDR wrt CK) assert(!(memSpec->dataRate == 8) || (burstLength == 16)); // QDR mode (ODR wrt CK) lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; @@ -170,7 +188,10 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTW); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -178,7 +199,10 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTW); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -190,9 +214,13 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WRA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -202,9 +230,13 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -230,11 +262,13 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -269,10 +303,12 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); if (last32Activates[rank].size() >= 32) - earliestTimeToStart = std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); + earliestTimeToStart = + std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); } else if (command == Command::PREPB) { @@ -338,11 +374,13 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -384,11 +422,13 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -418,9 +458,11 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) { if (bankwiseRefreshCounter[rank] == 0) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCPB); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); } lastCommandStart = lastScheduledByCommandAndRank[Command::SREFEX][rank]; @@ -428,10 +470,12 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); if (last32Activates[rank].size() >= 32) - earliestTimeToStart = std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); + earliestTimeToStart = + std::max(earliestTimeToStart, last32Activates[rank].front() + memSpec->t32AW); } else if (command == Command::PDEA) { @@ -501,11 +545,14 @@ sc_time CheckerGDDR5X::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -553,8 +600,9 @@ void CheckerGDDR5X::insert(Command command, const tlm_generic_payload& payload) BankGroup bankGroup = ControllerExtension::getBankGroup(payload); Bank bank = ControllerExtension::getBank(payload); - PRINTDEBUGMESSAGE("CheckerGDDR5X", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerGDDR5X", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndBankGroup[command][bankGroup] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.h b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.h index 5c619b25..f287fede 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR5X.h @@ -35,9 +35,9 @@ #ifndef CHECKERGDDR5X_H #define CHECKERGDDR5X_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecGDDR5X.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecGDDR5X.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerGDDR5X final : public CheckerIF { public: explicit CheckerGDDR5X(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecGDDR5X *memSpec; + const MemSpecGDDR5X* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndBankGroup; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.cpp index 227fc63e..3305e8fe 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.cpp @@ -50,13 +50,15 @@ CheckerGDDR6::CheckerGDDR6(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerGDDR6", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndBankGroup = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndBankGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -73,7 +75,8 @@ CheckerGDDR6::CheckerGDDR6(const Configuration& config) : tWRPRE = memSpec->tWL + tBURST + memSpec->tWR; } -sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); @@ -98,9 +101,13 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RDA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -110,15 +117,20 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; @@ -129,7 +141,10 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_S); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -141,7 +156,10 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_S); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -165,7 +183,10 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTW); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -173,7 +194,10 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTW); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -185,9 +209,13 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WRA][bankGroup]; if (lastCommandStart != scMaxTime) @@ -197,9 +225,13 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDS); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -225,11 +257,13 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -264,7 +298,8 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PREPB) { @@ -330,11 +365,13 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -376,11 +413,13 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -410,9 +449,11 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi if (lastCommandStart != scMaxTime) { if (bankwiseRefreshCounter[rank] == 0) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); } lastCommandStart = lastScheduledByCommandAndRank[Command::SREFEX][rank]; @@ -420,13 +461,15 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PDEA) { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDE); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -446,11 +489,13 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPREPDE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPREPDE); lastCommandStart = lastScheduledByCommandAndRank[Command::REFPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDE); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -478,19 +523,23 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPREPDE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPREPDE); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPREPDE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPREPDE); lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDE); lastCommandStart = lastScheduledByCommandAndRank[Command::REFPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tREFPDE); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXP][rank]; if (lastCommandStart != scMaxTime) @@ -518,11 +567,14 @@ sc_time CheckerGDDR6::timeToSatisfyConstraints(Command command, const tlm_generi lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -570,8 +622,9 @@ void CheckerGDDR6::insert(Command command, const tlm_generic_payload& payload) BankGroup bankGroup = ControllerExtension::getBankGroup(payload); Bank bank = ControllerExtension::getBank(payload); - PRINTDEBUGMESSAGE("CheckerGDDR6", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerGDDR6", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndBankGroup[command][bankGroup] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.h b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.h index acdbcdef..ab47894e 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerGDDR6.h @@ -35,9 +35,9 @@ #ifndef CHECKERGDDR6_H #define CHECKERGDDR6_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecGDDR6.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecGDDR6.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerGDDR6 final : public CheckerIF { public: explicit CheckerGDDR6(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecGDDR6 *memSpec; + const MemSpecGDDR6* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndBankGroup; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.cpp index f795b54a..b794b7ce 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.cpp @@ -50,13 +50,15 @@ CheckerHBM2::CheckerHBM2(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerHBM2", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndBankGroup = std::vector> - (Command::numberOfCommands(), - ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndBankGroup = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->bankGroupsPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnRasBus = scMaxTime; lastCommandOnCasBus = scMaxTime; @@ -74,7 +76,8 @@ CheckerHBM2::CheckerHBM2(const Configuration& config) : tWRRDL = memSpec->tWL + tBURST + memSpec->tWTRL; } -sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); BankGroup bankGroup = ControllerExtension::getBankGroup(payload); @@ -86,12 +89,14 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic if (command == Command::RD || command == Command::RDA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); - assert(!(memSpec->ranksPerChannel == 1) || (burstLength == 2 || burstLength == 4)); // Legacy mode + assert(!(memSpec->ranksPerChannel == 1) || + (burstLength == 2 || burstLength == 4)); // Legacy mode assert(!(memSpec->ranksPerChannel == 2) || (burstLength == 4)); // Pseudo-channel mode lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDRD + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDRD + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::RD][bankGroup]; if (lastCommandStart != scMaxTime) @@ -113,7 +118,8 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP); } lastCommandStart = lastScheduledByCommandAndBankGroup[Command::WR][bankGroup]; @@ -136,15 +142,18 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP); } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); - assert(!(memSpec->ranksPerChannel == 1) || (burstLength == 2 || burstLength == 4)); // Legacy mode + assert(!(memSpec->ranksPerChannel == 1) || + (burstLength == 2 || burstLength == 4)); // Legacy mode assert(!(memSpec->ranksPerChannel == 2) || (burstLength == 4)); // Pseudo-channel mode lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDWR + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCDWR + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -190,52 +199,65 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRTP + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP - memSpec->tCK); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + tWRPRE + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRP - memSpec->tCK); lastCommandStart = lastScheduledByCommand[Command::PDXA]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); lastCommandStart = lastScheduledByCommand[Command::PDXP]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFC - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::REFPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCSB - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCSB - memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD - memSpec->tCK); lastCommandStart = lastScheduledByCommand[Command::SREFEX]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS - memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS - memSpec->tCK); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW - memSpec->tCK); + earliestTimeToStart = std::max( + earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW - memSpec->tCK); } else if (command == Command::PREPB) { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) @@ -253,7 +275,8 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -283,15 +306,18 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -321,23 +347,28 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBankGroup[Command::ACT][bankGroup]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDL + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDL + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDS + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRDS + memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -367,9 +398,11 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic if (lastCommandStart != scMaxTime) { if (bankwiseRefreshCounter[rank] == 0) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCSB); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCSB); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRREFD); } lastCommandStart = lastScheduledByCommand[Command::SREFEX]; @@ -377,7 +410,8 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PDEA) { @@ -439,15 +473,19 @@ sc_time CheckerHBM2::timeToSatisfyConstraints(Command command, const tlm_generic { lastCommandStart = lastScheduledByCommand[Command::ACT]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRC + memSpec->tCK); lastCommandStart = lastScheduledByCommand[Command::RDA]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + std::max(memSpec->tRTP + memSpec->tRP, tRDSRE)); lastCommandStart = lastScheduledByCommand[Command::WRA]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommand[Command::PREPB]; if (lastCommandStart != scMaxTime) @@ -508,8 +546,9 @@ void CheckerHBM2::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerHBM2", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerHBM2", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndBankGroup[command][bankGroup] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.h b/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.h index fa83f280..c90dc952 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerHBM2.h @@ -35,9 +35,9 @@ #ifndef CHECKERHBM2_H #define CHECKERHBM2_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecHBM2.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecHBM2.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerHBM2 final : public CheckerIF { public: explicit CheckerHBM2(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecHBM2 *memSpec; + const MemSpecHBM2* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndBankGroup; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerIF.h b/src/libdramsys/DRAMSys/controller/checker/CheckerIF.h index 6580e910..cf82f17a 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerIF.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerIF.h @@ -45,16 +45,17 @@ namespace DRAMSys class CheckerIF { protected: - CheckerIF(const CheckerIF &) = default; - CheckerIF(CheckerIF &&) = default; - CheckerIF &operator=(const CheckerIF &) = default; - CheckerIF &operator=(CheckerIF &&) = default; + CheckerIF(const CheckerIF&) = default; + CheckerIF(CheckerIF&&) = default; + CheckerIF& operator=(const CheckerIF&) = default; + CheckerIF& operator=(CheckerIF&&) = default; public: CheckerIF() = default; virtual ~CheckerIF() = default; - [[nodiscard]] virtual sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const = 0; + [[nodiscard]] virtual sc_core::sc_time + timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const = 0; virtual void insert(Command command, const tlm::tlm_generic_payload& payload) = 0; }; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.cpp index 1e8ea005..564f8aab 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.cpp @@ -50,18 +50,22 @@ CheckerLPDDR4::CheckerLPDDR4(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerLPDDR4", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); - lastBurstLengthByCommandAndBank = ControllerVector>(Command::WRA + 1, ControllerVector(memSpec->banksPerChannel)); + lastBurstLengthByCommandAndBank = ControllerVector>( + Command::WRA + 1, ControllerVector(memSpec->banksPerChannel)); tBURST = memSpec->defaultBurstLength / memSpec->dataRate * memSpec->tCK; - tRDWR = memSpec->tRL + memSpec->tDQSCK + tBURST - memSpec->tWL + memSpec->tWPRE + memSpec->tRPST; + tRDWR = + memSpec->tRL + memSpec->tDQSCK + tBURST - memSpec->tWL + memSpec->tWPRE + memSpec->tRPST; tRDWR_R = memSpec->tRL + tBURST + memSpec->tRTRS - memSpec->tWL; tWRRD = memSpec->tWL + memSpec->tCK + tBURST + memSpec->tWTR; tWRRD_R = memSpec->tWL + tBURST + memSpec->tRTRS - memSpec->tRL; @@ -72,12 +76,21 @@ CheckerLPDDR4::CheckerLPDDR4(const Configuration& config) : tACTPDEN = 3 * memSpec->tCK + memSpec->tCMDCKE; tPRPDEN = memSpec->tCK + memSpec->tCMDCKE; tRDPDEN = 3 * memSpec->tCK + memSpec->tRL + memSpec->tDQSCK + tBURST + memSpec->tRPST; - tWRPDEN = 3 * memSpec->tCK + memSpec->tWL + (std::ceil(memSpec->tDQSS / memSpec->tCK) + std::ceil(memSpec->tDQS2DQ / memSpec->tCK)) * memSpec->tCK + tBURST + memSpec->tWR; - tWRAPDEN = 3 * memSpec->tCK + memSpec->tWL + (std::ceil(memSpec->tDQSS / memSpec->tCK) + std::ceil(memSpec->tDQS2DQ / memSpec->tCK)) * memSpec->tCK + tBURST + memSpec->tWR + 2 * memSpec->tCK; + tWRPDEN = + 3 * memSpec->tCK + memSpec->tWL + + (std::ceil(memSpec->tDQSS / memSpec->tCK) + std::ceil(memSpec->tDQS2DQ / memSpec->tCK)) * + memSpec->tCK + + tBURST + memSpec->tWR; + tWRAPDEN = + 3 * memSpec->tCK + memSpec->tWL + + (std::ceil(memSpec->tDQSS / memSpec->tCK) + std::ceil(memSpec->tDQS2DQ / memSpec->tCK)) * + memSpec->tCK + + tBURST + memSpec->tWR + 2 * memSpec->tCK; tREFPDEN = memSpec->tCK + memSpec->tCMDCKE; } -sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); Bank bank = ControllerExtension::getBank(payload); @@ -99,30 +112,42 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - tRDPRE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE - tRDPRE); } lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -130,7 +155,10 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -138,7 +166,8 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP); } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); assert((burstLength == 16) || (burstLength == 32)); @@ -152,7 +181,10 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -160,7 +192,10 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -168,17 +203,25 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::MWR || command == Command::MWRA) { @@ -186,17 +229,21 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) { if (lastBurstLengthByCommandAndBank[Command::WR][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDMW + 8 * memSpec->tCK); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->tCCDMW + 8 * memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDMW); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDMW); } lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; { if (lastBurstLengthByCommandAndBank[Command::WRA][bank] == 32) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDMW + 8 * memSpec->tCK); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + memSpec->tCCDMW + 8 * memSpec->tCK); else - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDMW); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCDMW); } } @@ -224,11 +271,13 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPpb - 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPpb - 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPab - 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRPab - 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -240,28 +289,35 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndRank[Command::REFAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCab - 2 * memSpec->tCK); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRFCab - 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::REFPB][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb - 2 * memSpec->tCK); + earliestTimeToStart = std::max(earliestTimeToStart, + lastCommandStart + memSpec->tRFCpb - 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::REFPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD - 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD - 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::SREFEX][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSR - 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSR - 2 * memSpec->tCK); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW - 3 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, + last4Activates[rank].front() + memSpec->tFAW - 3 * memSpec->tCK); } else if (command == Command::PREPB) { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) @@ -283,7 +339,8 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRAS + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -317,15 +374,18 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -355,19 +415,23 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRRD + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -398,7 +462,8 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSR); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW - memSpec->tCK); + earliestTimeToStart = std::max( + earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW - memSpec->tCK); } else if (command == Command::PDEA) { @@ -488,15 +553,19 @@ sc_time CheckerLPDDR4::timeToSatisfyConstraints(Command command, const tlm_gener { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCpb + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, tRDPRE + memSpec->tRPpb)); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, tRDPRE + memSpec->tRPpb)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRPpb)); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRPpb)); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -549,8 +618,9 @@ void CheckerLPDDR4::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerLPDDR4", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerLPDDR4", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndRank[command][rank] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.h b/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.h index 58d6e2f6..9ae8ef4d 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerLPDDR4.h @@ -35,9 +35,9 @@ #ifndef CHECKERLPDDR4_H #define CHECKERLPDDR4_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecLPDDR4.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecLPDDR4.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerLPDDR4 final : public CheckerIF { public: explicit CheckerLPDDR4(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecLPDDR4 *memSpec; + const MemSpecLPDDR4* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndRank; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.cpp index 24006e50..63db733b 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.cpp @@ -50,10 +50,12 @@ CheckerSTTMRAM::CheckerSTTMRAM(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerSTTMRAM", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -69,7 +71,8 @@ CheckerSTTMRAM::CheckerSTTMRAM(const Configuration& config) : tWRAPDEN = memSpec->tWL + tBURST + memSpec->tWR + memSpec->tCK; } -sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); Bank bank = ControllerExtension::getBank(payload); @@ -83,31 +86,39 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? - lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? - lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP - memSpec->tAL); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + tWRPRE - memSpec->tRTP - memSpec->tAL); } lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; @@ -134,19 +145,24 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSDLL); } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { assert(ControllerExtension::getBurstLength(payload) == 8); lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tRCD - memSpec->tAL); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -154,7 +170,10 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -162,17 +181,25 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -194,11 +221,14 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + memSpec->tAL + memSpec->tRTP + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -221,7 +251,8 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXS); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PREPB) { @@ -231,7 +262,8 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndBank[Command::RD][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) @@ -249,11 +281,13 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tAL + memSpec->tRTP); lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) @@ -271,7 +305,8 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tACTPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::RD][rank]; if (lastCommandStart != scMaxTime) @@ -291,7 +326,8 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -319,11 +355,13 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PREAB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + memSpec->tPRPDEN); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXP][rank]; if (lastCommandStart != scMaxTime) @@ -347,11 +385,14 @@ sc_time CheckerSTTMRAM::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, memSpec->tAL + memSpec->tRTP + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, + lastCommandStart + std::max(tRDPDEN, memSpec->tAL + memSpec->tRTP + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -395,8 +436,9 @@ void CheckerSTTMRAM::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerSTTMRAM", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerSTTMRAM", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndRank[command][rank] = sc_time_stamp(); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.h b/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.h index f8df0551..6523289f 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerSTTMRAM.h @@ -35,9 +35,9 @@ #ifndef CHECKERSTTMRAM_H #define CHECKERSTTMRAM_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecSTTMRAM.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecSTTMRAM.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerSTTMRAM final : public CheckerIF { public: explicit CheckerSTTMRAM(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecSTTMRAM *memSpec; + const MemSpecSTTMRAM* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndRank; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.cpp index a7c861fa..bd9471fe 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.cpp @@ -50,10 +50,12 @@ CheckerWideIO::CheckerWideIO(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerWideIO", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last2Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -69,7 +71,8 @@ CheckerWideIO::CheckerWideIO(const Configuration& config) : tWRAPDEN = memSpec->tWL + tBURST + memSpec->tWR; // + memSpec->tCK; ?? } -sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); Bank bank = ControllerExtension::getBank(payload); @@ -91,30 +94,42 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - tBURST); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE - tBURST); } lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -122,7 +137,10 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -130,7 +148,8 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP); } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); assert((burstLength == 2) || (burstLength == 4)); @@ -144,7 +163,10 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -152,7 +174,10 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -160,17 +185,25 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -188,11 +221,13 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -219,7 +254,8 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSR); if (last2Activates[rank].size() >= 2) - earliestTimeToStart = std::max(earliestTimeToStart, last2Activates[rank].front() + memSpec->tTAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last2Activates[rank].front() + memSpec->tTAW); } else if (command == Command::PREPB) { @@ -273,11 +309,13 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRP); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -363,11 +401,13 @@ sc_time CheckerWideIO::timeToSatisfyConstraints(Command command, const tlm_gener lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, tBURST + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, tBURST + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRP)); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -416,8 +456,9 @@ void CheckerWideIO::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerWideIO", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerWideIO", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndRank[command][rank] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.h b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.h index 774ec9f3..47326980 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO.h @@ -35,9 +35,9 @@ #ifndef CHECKERWIDEIO_H #define CHECKERWIDEIO_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecWideIO.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecWideIO.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerWideIO final : public CheckerIF { public: explicit CheckerWideIO(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecWideIO *memSpec; + const MemSpecWideIO* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndRank; diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.cpp b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.cpp index ebf51586..60beea84 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.cpp +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.cpp @@ -50,10 +50,12 @@ CheckerWideIO2::CheckerWideIO2(const Configuration& config) : if (memSpec == nullptr) SC_REPORT_FATAL("CheckerWideIO2", "Wrong MemSpec chosen"); - lastScheduledByCommandAndBank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->banksPerChannel, scMaxTime)); - lastScheduledByCommandAndRank = std::vector> - (Command::numberOfCommands(), ControllerVector(memSpec->ranksPerChannel, scMaxTime)); + lastScheduledByCommandAndBank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->banksPerChannel, scMaxTime)); + lastScheduledByCommandAndRank = std::vector>( + Command::numberOfCommands(), + ControllerVector(memSpec->ranksPerChannel, scMaxTime)); lastScheduledByCommand = std::vector(Command::numberOfCommands(), scMaxTime); lastCommandOnBus = scMaxTime; last4Activates = ControllerVector>(memSpec->ranksPerChannel); @@ -70,7 +72,8 @@ CheckerWideIO2::CheckerWideIO2(const Configuration& config) : tWRRD_R = memSpec->tWL + memSpec->tCK + tBURST + memSpec->tRTRS - memSpec->tRL; } -sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_generic_payload& payload) const +sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, + const tlm_generic_payload& payload) const { Rank rank = ControllerExtension::getRank(payload); Bank bank = ControllerExtension::getBank(payload); @@ -92,30 +95,42 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); if (command == Command::RDA) { lastCommandStart = lastScheduledByCommandAndBank[Command::WR][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE - tRDPRE); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE - tRDPRE); } lastCommandStart = lastScheduledByCommandAndRank[Command::WR][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -123,7 +138,10 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRRD_R); @@ -131,7 +149,8 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXP); } - else if (command == Command::WR || command == Command::WRA || command == Command::MWR || command == Command::MWRA) + else if (command == Command::WR || command == Command::WRA || command == Command::MWR || + command == Command::MWRA) { unsigned burstLength = ControllerExtension::getBurstLength(payload); assert((burstLength == 4) || (burstLength == 8)); @@ -145,7 +164,10 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] ? lastScheduledByCommand[Command::RD] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::RD] != lastScheduledByCommandAndRank[Command::RD][rank] + ? lastScheduledByCommand[Command::RD] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -153,7 +175,10 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR); - lastCommandStart = lastScheduledByCommand[Command::RDA] != lastScheduledByCommandAndRank[Command::RDA][rank] ? lastScheduledByCommand[Command::RDA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::RDA] != + lastScheduledByCommandAndRank[Command::RDA][rank] + ? lastScheduledByCommand[Command::RDA] + : scMaxTime; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDWR_R); @@ -161,17 +186,25 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] ? lastScheduledByCommand[Command::WR] : scMaxTime; + lastCommandStart = + lastScheduledByCommand[Command::WR] != lastScheduledByCommandAndRank[Command::WR][rank] + ? lastScheduledByCommand[Command::WR] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tCCD); - lastCommandStart = lastScheduledByCommand[Command::WRA] != lastScheduledByCommandAndRank[Command::WRA][rank] ? lastScheduledByCommand[Command::WRA] : scMaxTime; + lastCommandStart = lastScheduledByCommand[Command::WRA] != + lastScheduledByCommandAndRank[Command::WRA][rank] + ? lastScheduledByCommand[Command::WRA] + : scMaxTime; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tBURST + memSpec->tRTRS); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -189,11 +222,13 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -228,7 +263,8 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSR); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PREPB) { @@ -246,7 +282,8 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -276,7 +313,8 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + 2 * memSpec->tCK); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + 2 * memSpec->tCK); lastCommandStart = lastScheduledByCommandAndRank[Command::PDXA][rank]; if (lastCommandStart != scMaxTime) @@ -286,7 +324,7 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tRFCpb); } - else if(command == Command::REFAB) + else if (command == Command::REFAB) { lastCommandStart = lastScheduledByCommandAndRank[Command::ACT][rank]; if (lastCommandStart != scMaxTime) @@ -294,11 +332,13 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -324,7 +364,7 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene if (lastCommandStart != scMaxTime) earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSR); } - else if(command == Command::REFPB) + else if (command == Command::REFPB) { lastCommandStart = lastScheduledByCommandAndBank[Command::ACT][bank]; if (lastCommandStart != scMaxTime) @@ -336,11 +376,13 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndBank[Command::RDA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tRDPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndBank[Command::WRA][bank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); + earliestTimeToStart = + std::max(earliestTimeToStart, lastCommandStart + tWRPRE + memSpec->tRPpb); lastCommandStart = lastScheduledByCommandAndBank[Command::PREPB][bank]; if (lastCommandStart != scMaxTime) @@ -371,7 +413,8 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + memSpec->tXSR); if (last4Activates[rank].size() >= 4) - earliestTimeToStart = std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); + earliestTimeToStart = + std::max(earliestTimeToStart, last4Activates[rank].front() + memSpec->tFAW); } else if (command == Command::PDEA) { @@ -437,11 +480,14 @@ sc_time CheckerWideIO2::timeToSatisfyConstraints(Command command, const tlm_gene lastCommandStart = lastScheduledByCommandAndRank[Command::RDA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, tRDPRE + memSpec->tRPpb)); + earliestTimeToStart = std::max( + earliestTimeToStart, lastCommandStart + std::max(tRDPDEN, tRDPRE + memSpec->tRPpb)); lastCommandStart = lastScheduledByCommandAndRank[Command::WRA][rank]; if (lastCommandStart != scMaxTime) - earliestTimeToStart = std::max(earliestTimeToStart, lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRPpb)); + earliestTimeToStart = + std::max(earliestTimeToStart, + lastCommandStart + std::max(tWRAPDEN, tWRPRE + memSpec->tRPpb)); lastCommandStart = lastScheduledByCommandAndRank[Command::PREPB][rank]; if (lastCommandStart != scMaxTime) @@ -494,8 +540,9 @@ void CheckerWideIO2::insert(Command command, const tlm_generic_payload& payload) else if (command == Command::MWRA) command = Command::WRA; - PRINTDEBUGMESSAGE("CheckerWideIO2", "Changing state on bank " + std::to_string(static_cast(bank)) - + " command is " + command.toString()); + PRINTDEBUGMESSAGE("CheckerWideIO2", + "Changing state on bank " + std::to_string(static_cast(bank)) + + " command is " + command.toString()); lastScheduledByCommandAndBank[command][bank] = sc_time_stamp(); lastScheduledByCommandAndRank[command][rank] = sc_time_stamp(); diff --git a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.h b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.h index 86ada7d4..31a4035c 100644 --- a/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.h +++ b/src/libdramsys/DRAMSys/controller/checker/CheckerWideIO2.h @@ -35,9 +35,9 @@ #ifndef CHECKERWIDEIO2_H #define CHECKERWIDEIO2_H -#include "DRAMSys/controller/checker/CheckerIF.h" -#include "DRAMSys/configuration/memspec/MemSpecWideIO2.h" #include "DRAMSys/configuration/Configuration.h" +#include "DRAMSys/configuration/memspec/MemSpecWideIO2.h" +#include "DRAMSys/controller/checker/CheckerIF.h" #include #include @@ -49,11 +49,13 @@ class CheckerWideIO2 final : public CheckerIF { public: explicit CheckerWideIO2(const Configuration& config); - [[nodiscard]] sc_core::sc_time timeToSatisfyConstraints(Command command, const tlm::tlm_generic_payload& payload) const override; + [[nodiscard]] sc_core::sc_time + timeToSatisfyConstraints(Command command, + const tlm::tlm_generic_payload& payload) const override; void insert(Command command, const tlm::tlm_generic_payload& payload) override; private: - const MemSpecWideIO2 *memSpec; + const MemSpecWideIO2* memSpec; std::vector> lastScheduledByCommandAndBank; std::vector> lastScheduledByCommandAndRank; diff --git a/src/libdramsys/DRAMSys/simulation/DRAMSys.h b/src/libdramsys/DRAMSys/simulation/DRAMSys.h index 4170bc21..3202b88b 100644 --- a/src/libdramsys/DRAMSys/simulation/DRAMSys.h +++ b/src/libdramsys/DRAMSys/simulation/DRAMSys.h @@ -70,7 +70,7 @@ public: DRAMSys(const sc_core::sc_module_name& name, const ::DRAMSys::Config::Configuration& configLib); const Configuration& getConfig() const; - const AddressDecoder &getAddressDecoder() const { return *addressDecoder; } + const AddressDecoder& getAddressDecoder() const { return *addressDecoder; } /** * Returns true if all memory controllers are in idle state. diff --git a/tests/tests_configuration/jsonconverter.cpp b/tests/tests_configuration/jsonconverter.cpp index 1fadba54..f764e9f7 100644 --- a/tests/tests_configuration/jsonconverter.cpp +++ b/tests/tests_configuration/jsonconverter.cpp @@ -35,11 +35,11 @@ #include -#include #include #include +#include -int main(int argc, char **argv) +int main(int argc, char** argv) { if (argc < 2) { @@ -52,7 +52,6 @@ int main(int argc, char **argv) auto configuration = DRAMSys::Config::from_path(pathToJson, resourceDirectory); - nlohmann::json json; json["simulation"] = configuration; diff --git a/tests/tests_configuration/test_configuration.cpp b/tests/tests_configuration/test_configuration.cpp index 3cdecaf7..4bb9be08 100644 --- a/tests/tests_configuration/test_configuration.cpp +++ b/tests/tests_configuration/test_configuration.cpp @@ -46,12 +46,12 @@ using namespace DRAMSys::Config; class ConfigurationTest : public ::testing::Test { protected: - ConfigurationTest() - : memSpec(createMemSpec()), - tracePlayer(createTracePlayer()), - traceGeneratorOneState(createTraceGeneratorOneState()), - traceGeneratorMultipleStates(createTraceGeneratorMultipleStates()), - traceHammer(createTraceHammer()) + ConfigurationTest() : + memSpec(createMemSpec()), + tracePlayer(createTracePlayer()), + traceGeneratorOneState(createTraceGeneratorOneState()), + traceGeneratorMultipleStates(createTraceGeneratorMultipleStates()), + traceHammer(createTraceHammer()) { } @@ -118,38 +118,33 @@ protected: DRAMSys::Config::TrafficGenerator traceGeneratorOneState; DRAMSys::Config::TrafficGeneratorStateMachine traceGeneratorMultipleStates; DRAMSys::Config::RowHammer traceHammer; - std::vector traceSetup{{tracePlayer, traceGeneratorOneState, traceGeneratorMultipleStates, traceHammer}}; + std::vector traceSetup{ + {tracePlayer, traceGeneratorOneState, traceGeneratorMultipleStates, traceHammer}}; DRAMSys::Config::Configuration configuration{ - addressMapping, - mcConfig, - memSpec, - simConfig, - "std::string_simulationId", - traceSetup - }; + addressMapping, mcConfig, memSpec, simConfig, "std::string_simulationId", traceSetup}; }; DRAMSys::Config::MemSpec ConfigurationTest::createMemSpec() { MemArchitectureSpecType memArchitectureSpec{{{"burstLength", 16}, - {"dataRate", 2}, - {"nbrOfBankGroups", 8}, - {"nbrOfBanks", 16}, - {"nbrOfColumns", 2048}, - {"nbrOfRanks", 1}, - {"nbrOfDIMMRanks", 1}, - {"nbrOfPhysicalRanks", 1}, - {"nbrOfLogicalRanks", 1}, - {"nbrOfRows", 65536}, - {"width", 4}, - {"nbrOfDevices", 8}, - {"nbrOfChannels", 2}, - {"cmdMode", 1}, - {"refMode", 1}, - {"RAAIMT", 32}, - {"RAAMMT", 96}, - {"RAADEC", 1}}}; + {"dataRate", 2}, + {"nbrOfBankGroups", 8}, + {"nbrOfBanks", 16}, + {"nbrOfColumns", 2048}, + {"nbrOfRanks", 1}, + {"nbrOfDIMMRanks", 1}, + {"nbrOfPhysicalRanks", 1}, + {"nbrOfLogicalRanks", 1}, + {"nbrOfRows", 65536}, + {"width", 4}, + {"nbrOfDevices", 8}, + {"nbrOfChannels", 2}, + {"cmdMode", 1}, + {"refMode", 1}, + {"RAAIMT", 32}, + {"RAAMMT", 96}, + {"RAADEC", 1}}}; MemTimingSpecType memTimingSpec{{{ {"RCD", 22}, {"PPD", 2}, {"RP", 22}, {"RAS", 52}, @@ -195,7 +190,8 @@ DRAMSys::Config::TrafficGenerator ConfigurationTest::createTraceGeneratorOneStat return gen; } -DRAMSys::Config::TrafficGeneratorStateMachine ConfigurationTest::createTraceGeneratorMultipleStates() +DRAMSys::Config::TrafficGeneratorStateMachine +ConfigurationTest::createTraceGeneratorMultipleStates() { DRAMSys::Config::TrafficGeneratorStateMachine gen; diff --git a/tests/tests_dramsys/AddressDecoderTests.cpp b/tests/tests_dramsys/AddressDecoderTests.cpp index 29794c50..748ae984 100644 --- a/tests/tests_dramsys/AddressDecoderTests.cpp +++ b/tests/tests_dramsys/AddressDecoderTests.cpp @@ -109,7 +109,7 @@ TEST_F(AddressDecoderFixture, DeEncoding) std::uint64_t(0x2FFA'1231), std::uint64_t(0x0001'FFFF)}; - for (auto address: testAddresses) + for (auto address : testAddresses) { DRAMSys::DecodedAddress decodedAddress = addressDecoder.decodeAddress(address); uint64_t encodedAddress = addressDecoder.encodeAddress(decodedAddress); diff --git a/tests/tests_dramsys/b_transport/b_transport.cpp b/tests/tests_dramsys/b_transport/b_transport.cpp index 047c81e9..3a4aff20 100644 --- a/tests/tests_dramsys/b_transport/b_transport.cpp +++ b/tests/tests_dramsys/b_transport/b_transport.cpp @@ -47,9 +47,9 @@ public: class BTransportNoStorage : public SystemCTest { protected: - BTransportNoStorage() - : no_storage_config(DRAMSys::Config::from_path("b_transport/configs/no_storage.json")), - dramSysNoStorage("NoStorageDRAMSys", no_storage_config) + BTransportNoStorage() : + no_storage_config(DRAMSys::Config::from_path("b_transport/configs/no_storage.json")), + dramSysNoStorage("NoStorageDRAMSys", no_storage_config) { } @@ -60,9 +60,9 @@ protected: class BTransportStorage : public SystemCTest { protected: - BTransportStorage() - : storage_config(DRAMSys::Config::from_path("b_transport/configs/storage.json")), - dramSysStorage("StorageDRAMSys", storage_config) + BTransportStorage() : + storage_config(DRAMSys::Config::from_path("b_transport/configs/storage.json")), + dramSysStorage("StorageDRAMSys", storage_config) { } @@ -74,10 +74,11 @@ struct BlockingInitiator : sc_core::sc_module { tlm_utils::simple_initiator_socket iSocket; static constexpr std::array TEST_DATA = {0xDEADBEEF}; - DRAMSys::DRAMSys const &dramSys; + DRAMSys::DRAMSys const& dramSys; - BlockingInitiator(sc_core::sc_module_name const &name, DRAMSys::DRAMSys const &dramSys) - : sc_core::sc_module(name), dramSys(dramSys) + BlockingInitiator(sc_core::sc_module_name const& name, DRAMSys::DRAMSys const& dramSys) : + sc_core::sc_module(name), + dramSys(dramSys) { SC_THREAD(readAccess); SC_THREAD(writeAccess); @@ -100,7 +101,7 @@ struct BlockingInitiator : sc_core::sc_module tlm::tlm_generic_payload payload; payload.set_command(tlm::TLM_WRITE_COMMAND); payload.set_data_length(64); - payload.set_data_ptr(reinterpret_cast(&data)); + payload.set_data_ptr(reinterpret_cast(&data)); sc_core::sc_time delay = sc_core::SC_ZERO_TIME; iSocket->b_transport(payload, delay); @@ -136,7 +137,7 @@ TEST_F(BTransportStorage, DataWritten) tlm::tlm_generic_payload payload; payload.set_command(tlm::TLM_READ_COMMAND); payload.set_data_length(64); - payload.set_data_ptr(reinterpret_cast(&data)); + payload.set_data_ptr(reinterpret_cast(&data)); initiator.iSocket->transport_dbg(payload); EXPECT_EQ(data, BlockingInitiator::TEST_DATA); @@ -149,7 +150,7 @@ TEST_F(BTransportNoStorage, Warning) // Redirect stdout to buffer std::stringstream buffer; - std::streambuf *sbuf = std::cout.rdbuf(); + std::streambuf* sbuf = std::cout.rdbuf(); std::cout.rdbuf(buffer.rdbuf()); sc_core::sc_start(sc_core::sc_time(1, sc_core::SC_US)); diff --git a/tests/tests_dramsys/main.cpp b/tests/tests_dramsys/main.cpp index a909f627..a67d5747 100644 --- a/tests/tests_dramsys/main.cpp +++ b/tests/tests_dramsys/main.cpp @@ -33,11 +33,11 @@ * Lukas Steiner */ +#include "Testfile.h" #include #include -#include "Testfile.h" -int sc_main(int argc, char **argv) +int sc_main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); diff --git a/tests/tests_dramsys/test_misc.cpp b/tests/tests_dramsys/test_misc.cpp index dcadee20..81de2f58 100644 --- a/tests/tests_dramsys/test_misc.cpp +++ b/tests/tests_dramsys/test_misc.cpp @@ -1,16 +1,11 @@ #include -class MiscTest : public ::testing::Test { -protected: - virtual void SetUp() - { - } - - virtual void TearDown() - { - } -}; - -TEST_F(MiscTest, Test) +class MiscTest : public ::testing::Test { +protected: + virtual void SetUp() {} + + virtual void TearDown() {} }; + +TEST_F(MiscTest, Test){}; diff --git a/tests/tests_dramsys/test_utils.cpp b/tests/tests_dramsys/test_utils.cpp index a2cddc04..c672f981 100644 --- a/tests/tests_dramsys/test_utils.cpp +++ b/tests/tests_dramsys/test_utils.cpp @@ -2,8 +2,8 @@ #include -using sc_core::sc_time; using sc_core::SC_NS; +using sc_core::sc_time; using sc_core::SC_US; TEST(AlignAtNext, FullCycle) diff --git a/tests/tests_simulator/cache/ListInitiator.cpp b/tests/tests_simulator/cache/ListInitiator.cpp index eb02bab1..17224eee 100644 --- a/tests/tests_simulator/cache/ListInitiator.cpp +++ b/tests/tests_simulator/cache/ListInitiator.cpp @@ -43,11 +43,11 @@ #include #include -ListInitiator::ListInitiator(const sc_core::sc_module_name &name, MemoryManager &memoryManager) - : sc_core::sc_module(name), - iSocket("iSocket"), - peq(this, &ListInitiator::peqCallback), - memoryManager(memoryManager) +ListInitiator::ListInitiator(const sc_core::sc_module_name& name, MemoryManager& memoryManager) : + sc_core::sc_module(name), + iSocket("iSocket"), + peq(this, &ListInitiator::peqCallback), + memoryManager(memoryManager) { iSocket.register_nb_transport_bw(this, &ListInitiator::nb_transport_bw); SC_THREAD(process); @@ -55,7 +55,7 @@ ListInitiator::ListInitiator(const sc_core::sc_module_name &name, MemoryManager void ListInitiator::process() { - for (auto &testTransactionData : testTransactionList) + for (auto& testTransactionData : testTransactionList) { wait(testTransactionData.startTime - sc_core::sc_time_stamp()); @@ -64,10 +64,10 @@ void ListInitiator::process() ? tlm::TLM_WRITE_COMMAND : tlm::TLM_READ_COMMAND; - auto &trans = memoryManager.allocate(testTransactionData.dataLength); + auto& trans = memoryManager.allocate(testTransactionData.dataLength); trans.acquire(); - TestExtension *ext = new TestExtension(testTransactionData); + TestExtension* ext = new TestExtension(testTransactionData); trans.set_auto_extension(ext); trans.set_command(command); @@ -79,7 +79,8 @@ void ListInitiator::process() trans.set_response_status(tlm::TLM_INCOMPLETE_RESPONSE); if (trans.is_write()) - std::memcpy(trans.get_data_ptr(), &testTransactionData.data, testTransactionData.dataLength); + std::memcpy( + trans.get_data_ptr(), &testTransactionData.data, testTransactionData.dataLength); if (requestInProgress != nullptr) { @@ -113,15 +114,15 @@ void ListInitiator::process() } } -tlm::tlm_sync_enum ListInitiator::nb_transport_bw(tlm::tlm_generic_payload &trans, - tlm::tlm_phase &phase, - sc_core::sc_time &delay) +tlm::tlm_sync_enum ListInitiator::nb_transport_bw(tlm::tlm_generic_payload& trans, + tlm::tlm_phase& phase, + sc_core::sc_time& delay) { peq.notify(trans, phase, delay); return tlm::TLM_ACCEPTED; } -void ListInitiator::peqCallback(tlm::tlm_generic_payload &trans, const tlm::tlm_phase &phase) +void ListInitiator::peqCallback(tlm::tlm_generic_payload& trans, const tlm::tlm_phase& phase) { if (phase == tlm::END_REQ || (&trans == requestInProgress && phase == tlm::BEGIN_RESP)) { @@ -145,7 +146,7 @@ void ListInitiator::peqCallback(tlm::tlm_generic_payload &trans, const tlm::tlm_ } } -void ListInitiator::checkTransaction(tlm::tlm_generic_payload &trans) +void ListInitiator::checkTransaction(tlm::tlm_generic_payload& trans) { if (trans.is_response_error()) { @@ -153,19 +154,19 @@ void ListInitiator::checkTransaction(tlm::tlm_generic_payload &trans) } tlm::tlm_command command = trans.get_command(); - - uint64_t transData{}; - - if (trans.get_data_length() == 1) - transData = *reinterpret_cast(trans.get_data_ptr()); - else if (trans.get_data_length() == 2) - transData = *reinterpret_cast(trans.get_data_ptr()); - else if (trans.get_data_length() == 4) - transData = *reinterpret_cast(trans.get_data_ptr()); - else if (trans.get_data_length() == 8) - transData = *reinterpret_cast(trans.get_data_ptr()); - TestExtension *ext = nullptr; + uint64_t transData{}; + + if (trans.get_data_length() == 1) + transData = *reinterpret_cast(trans.get_data_ptr()); + else if (trans.get_data_length() == 2) + transData = *reinterpret_cast(trans.get_data_ptr()); + else if (trans.get_data_length() == 4) + transData = *reinterpret_cast(trans.get_data_ptr()); + else if (trans.get_data_length() == 8) + transData = *reinterpret_cast(trans.get_data_ptr()); + + TestExtension* ext = nullptr; trans.get_extension(ext); TestTransactionData data = ext->getTestData(); diff --git a/tests/tests_simulator/cache/ListInitiator.h b/tests/tests_simulator/cache/ListInitiator.h index ddc71906..d6689c48 100644 --- a/tests/tests_simulator/cache/ListInitiator.h +++ b/tests/tests_simulator/cache/ListInitiator.h @@ -44,7 +44,7 @@ public: tlm_utils::simple_initiator_socket iSocket; SC_HAS_PROCESS(ListInitiator); - ListInitiator(const sc_core::sc_module_name &name, MemoryManager &memoryManager); + ListInitiator(const sc_core::sc_module_name& name, MemoryManager& memoryManager); struct TestTransactionData { @@ -62,9 +62,11 @@ public: uint64_t data; }; - void appendTestTransactionList(const std::vector &testTransactionList) + void appendTestTransactionList(const std::vector& testTransactionList) { - std::copy(testTransactionList.cbegin(), testTransactionList.cend(), std::back_inserter(this->testTransactionList)); + std::copy(testTransactionList.cbegin(), + testTransactionList.cend(), + std::back_inserter(this->testTransactionList)); } private: @@ -73,11 +75,11 @@ private: public: TestExtension(TestTransactionData data) : data(std::move(data)) {} - tlm_extension_base *clone() const { return new TestExtension(data); } + tlm_extension_base* clone() const { return new TestExtension(data); } - void copy_from(const tlm_extension_base &ext) + void copy_from(const tlm_extension_base& ext) { - const TestExtension &cpyFrom = static_cast(ext); + const TestExtension& cpyFrom = static_cast(ext); data = cpyFrom.getTestData(); } @@ -89,16 +91,16 @@ private: void process(); - tlm::tlm_sync_enum nb_transport_bw(tlm::tlm_generic_payload &trans, - tlm::tlm_phase &phase, - sc_core::sc_time &delay); - void peqCallback(tlm::tlm_generic_payload &trans, const tlm::tlm_phase &phase); - void checkTransaction(tlm::tlm_generic_payload &trans); + tlm::tlm_sync_enum nb_transport_bw(tlm::tlm_generic_payload& trans, + tlm::tlm_phase& phase, + sc_core::sc_time& delay); + void peqCallback(tlm::tlm_generic_payload& trans, const tlm::tlm_phase& phase); + void checkTransaction(tlm::tlm_generic_payload& trans); std::vector testTransactionList; sc_core::sc_event endRequest; tlm_utils::peq_with_cb_and_phase peq; - tlm::tlm_generic_payload *requestInProgress = nullptr; - MemoryManager &memoryManager; + tlm::tlm_generic_payload* requestInProgress = nullptr; + MemoryManager& memoryManager; }; diff --git a/tests/tests_simulator/cache/TargetMemory.cpp b/tests/tests_simulator/cache/TargetMemory.cpp index b3f30353..435eae26 100644 --- a/tests/tests_simulator/cache/TargetMemory.cpp +++ b/tests/tests_simulator/cache/TargetMemory.cpp @@ -42,16 +42,16 @@ DECLARE_EXTENDED_PHASE(INTERNAL); -TargetMemory::TargetMemory(const sc_core::sc_module_name &name, +TargetMemory::TargetMemory(const sc_core::sc_module_name& name, sc_core::sc_time acceptDelay, sc_core::sc_time memoryLatency, - std::size_t bufferSize) - : sc_core::sc_module(name), - tSocket("tSocket"), - bufferSize(bufferSize), - acceptDelay(acceptDelay), - memoryLatency(memoryLatency), - peq(this, &TargetMemory::peqCallback) + std::size_t bufferSize) : + sc_core::sc_module(name), + tSocket("tSocket"), + bufferSize(bufferSize), + acceptDelay(acceptDelay), + memoryLatency(memoryLatency), + peq(this, &TargetMemory::peqCallback) { tSocket.register_nb_transport_fw(this, &TargetMemory::nb_transport_fw); @@ -59,9 +59,9 @@ TargetMemory::TargetMemory(const sc_core::sc_module_name &name, std::fill(memory.begin(), memory.end(), 0); } -tlm::tlm_sync_enum TargetMemory::nb_transport_fw(tlm::tlm_generic_payload &trans, - tlm::tlm_phase &phase, - sc_core::sc_time &delay) +tlm::tlm_sync_enum TargetMemory::nb_transport_fw(tlm::tlm_generic_payload& trans, + tlm::tlm_phase& phase, + sc_core::sc_time& delay) { peq.notify(trans, phase, delay); return tlm::TLM_ACCEPTED; @@ -86,7 +86,7 @@ void TargetMemory::printBuffer(int max, int n) std::cout.flush(); } -void TargetMemory::peqCallback(tlm::tlm_generic_payload &trans, const tlm::tlm_phase &phase) +void TargetMemory::peqCallback(tlm::tlm_generic_payload& trans, const tlm::tlm_phase& phase) { sc_core::sc_time delay; @@ -116,7 +116,7 @@ void TargetMemory::peqCallback(tlm::tlm_generic_payload &trans, const tlm::tlm_p responseInProgress = false; if (!responseQueue.empty()) { - tlm::tlm_generic_payload *next = responseQueue.front(); + tlm::tlm_generic_payload* next = responseQueue.front(); responseQueue.pop(); sendResponse(*next); } @@ -146,7 +146,7 @@ void TargetMemory::peqCallback(tlm::tlm_generic_payload &trans, const tlm::tlm_p } } -void TargetMemory::sendEndRequest(tlm::tlm_generic_payload &trans) +void TargetMemory::sendEndRequest(tlm::tlm_generic_payload& trans) { tlm::tlm_phase bw_phase; sc_core::sc_time delay; @@ -165,7 +165,7 @@ void TargetMemory::sendEndRequest(tlm::tlm_generic_payload &trans) printBuffer(bufferSize, currentTransactions); } -void TargetMemory::sendResponse(tlm::tlm_generic_payload &trans) +void TargetMemory::sendResponse(tlm::tlm_generic_payload& trans) { sc_assert(responseInProgress == false); @@ -186,13 +186,13 @@ void TargetMemory::sendResponse(tlm::tlm_generic_payload &trans) trans.release(); } -void TargetMemory::executeTransaction(tlm::tlm_generic_payload &trans) +void TargetMemory::executeTransaction(tlm::tlm_generic_payload& trans) { tlm::tlm_command command = trans.get_command(); sc_dt::uint64 address = trans.get_address(); - unsigned char *data_ptr = trans.get_data_ptr(); + unsigned char* data_ptr = trans.get_data_ptr(); unsigned int data_length = trans.get_data_length(); - unsigned char *byte_enable_ptr = trans.get_byte_enable_ptr(); + unsigned char* byte_enable_ptr = trans.get_byte_enable_ptr(); unsigned int streaming_width = trans.get_streaming_width(); if (address >= SIZE - 64) @@ -225,7 +225,7 @@ void TargetMemory::executeTransaction(tlm::tlm_generic_payload &trans) << (command == tlm::TLM_WRITE_COMMAND ? "Exec. Write " : "Exec. Read ") << "Addr = " << std::setfill('0') << std::setw(8) << std::dec << address << " Data = " << "0x" << std::setfill('0') << std::setw(8) << std::hex - << *reinterpret_cast(data_ptr) << "\033[0m" << std::endl; + << *reinterpret_cast(data_ptr) << "\033[0m" << std::endl; trans.set_response_status(tlm::TLM_OK_RESPONSE); } diff --git a/tests/tests_simulator/cache/TargetMemory.h b/tests/tests_simulator/cache/TargetMemory.h index ba526a6c..527d0942 100644 --- a/tests/tests_simulator/cache/TargetMemory.h +++ b/tests/tests_simulator/cache/TargetMemory.h @@ -47,21 +47,21 @@ class TargetMemory : public sc_core::sc_module public: tlm_utils::simple_target_socket tSocket; SC_HAS_PROCESS(TargetMemory); - TargetMemory(const sc_core::sc_module_name &name, + TargetMemory(const sc_core::sc_module_name& name, sc_core::sc_time acceptDelay, sc_core::sc_time memoryLatency, std::size_t bufferSize = DEFAULT_BUFFER_SIZE); private: - tlm::tlm_sync_enum nb_transport_fw(tlm::tlm_generic_payload &trans, - tlm::tlm_phase &phase, - sc_core::sc_time &delay); + tlm::tlm_sync_enum nb_transport_fw(tlm::tlm_generic_payload& trans, + tlm::tlm_phase& phase, + sc_core::sc_time& delay); - void peqCallback(tlm::tlm_generic_payload &trans, const tlm::tlm_phase &phase); + void peqCallback(tlm::tlm_generic_payload& trans, const tlm::tlm_phase& phase); - void sendEndRequest(tlm::tlm_generic_payload &trans); - void sendResponse(tlm::tlm_generic_payload &trans); - void executeTransaction(tlm::tlm_generic_payload &trans); + void sendEndRequest(tlm::tlm_generic_payload& trans); + void sendResponse(tlm::tlm_generic_payload& trans); + void executeTransaction(tlm::tlm_generic_payload& trans); void printBuffer(int max, int n); @@ -76,8 +76,8 @@ private: unsigned int currentTransactions = 0; bool responseInProgress = false; - tlm::tlm_generic_payload *endRequestPending = nullptr; + tlm::tlm_generic_payload* endRequestPending = nullptr; tlm_utils::peq_with_cb_and_phase peq; - std::queue responseQueue; + std::queue responseQueue; }; diff --git a/tests/tests_simulator/cache/tests_cache.cpp b/tests/tests_simulator/cache/tests_cache.cpp index 90ea9618..421d3698 100644 --- a/tests/tests_simulator/cache/tests_cache.cpp +++ b/tests/tests_simulator/cache/tests_cache.cpp @@ -50,23 +50,23 @@ public: class DirectMappedCache : public SystemCTest { protected: - DirectMappedCache() - : memoryManager(true), - initiator("ListInitiator", memoryManager), - target("TargetMemory", - sc_core::sc_time(1, sc_core::SC_NS), - sc_core::sc_time(10, sc_core::SC_NS)), - cache("Cache", - 32768, - 1, - 32, - 8, - 8, - 8, - true, - sc_core::sc_time(1, sc_core::SC_NS), - 5, - memoryManager) + DirectMappedCache() : + memoryManager(true), + initiator("ListInitiator", memoryManager), + target("TargetMemory", + sc_core::sc_time(1, sc_core::SC_NS), + sc_core::sc_time(10, sc_core::SC_NS)), + cache("Cache", + 32768, + 1, + 32, + 8, + 8, + 8, + true, + sc_core::sc_time(1, sc_core::SC_NS), + 5, + memoryManager) { initiator.iSocket.bind(cache.tSocket); cache.iSocket.bind(target.tSocket); diff --git a/tests/tests_simulator/main.cpp b/tests/tests_simulator/main.cpp index a55aa569..e4d5e235 100644 --- a/tests/tests_simulator/main.cpp +++ b/tests/tests_simulator/main.cpp @@ -36,7 +36,7 @@ #include #include -int sc_main(int argc, char **argv) +int sc_main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); diff --git a/tests/tests_util/test_json.cpp b/tests/tests_util/test_json.cpp index ee0d9e0d..8ac26e33 100644 --- a/tests/tests_util/test_json.cpp +++ b/tests/tests_util/test_json.cpp @@ -2,15 +2,12 @@ #include -class JsonTest : public ::testing::Test { +class JsonTest : public ::testing::Test +{ protected: - virtual void SetUp() - { - } + virtual void SetUp() {} - virtual void TearDown() - { - } + virtual void TearDown() {} }; TEST_F(JsonTest, Test) @@ -29,10 +26,10 @@ TEST_F(JsonTest, Test) in["test"].get_to(opt_in); in["null"].get_to(opt_null); in["nil"].get_to(opt_nil); - + ASSERT_TRUE(opt_in.has_value()); ASSERT_EQ(*opt_in, 5); - + ASSERT_FALSE(opt_null.has_value()); ASSERT_FALSE(opt_nil.has_value()); };