/* * Copyright (c) 2025 Fraunhofer IESE. All rights reserved. * * Authors: * Iron Prando da Silva */ #include "DDR5dbphaseentry.h" DDR5DBPhaseEntry::DDR5DBPhaseEntry(const QSqlQuery& query) { id = query.value(0).toLongLong(); phaseName = StringMapper(query.value(1).toString()); phaseBegin = query.value(2).toLongLong(); phaseEnd = query.value(3).toLongLong(); transact = query.value(4).toLongLong(); tBank = query.value(5).toLongLong(); tBankgroup = query.value(6).toLongLong(); tRank = query.value(7).toLongLong(); tBurstLength = query.value(8).toLongLong(); } bool DDR5DBPhaseEntry::potentialDependency(const TimeDependency& dep, const std::shared_ptr otherPhase) { auto other = std::dynamic_pointer_cast(otherPhase); if (!other) return false; if (dep.passFunction && !dep.passFunction->execute(shared_from_this(), other)) return false; bool isCmdPool = dep.phaseDep == StringMapper::Identifier::CMD_BUS; bool const skipOnIntraBankAndDifferentBanks = {dep.depType == DependencyType::IntraBank && tBank != other->tBank}; bool const skipOnIntraBankgroupAndDifferentBankgroup = { dep.depType == DependencyType::IntraBankGroup && tBankgroup != other->tBankgroup}; bool const skipOnIntraBankInGroupAndDifferentBankInGroup = { dep.depType == DependencyType::IntraBankInGroup && tBankInGroup != other->tBankInGroup}; bool const skipOnIntraLogRankAndDifferentRanks = { dep.depType == DependencyType::IntraLogicalRank && tLogicalRank != other->tLogicalRank}; bool const skipOnIntraPhysRankAndDifferentRanks = { dep.depType == DependencyType::IntraPhysicalRank && tPhysicalRank != other->tPhysicalRank}; bool const skipOnIntraDIMMRankAndDifferentRanks = { dep.depType == DependencyType::IntraDIMMRank && tDIMMRank != other->tDIMMRank}; bool const skipOnInterDIMMRankAndSameRank = {dep.depType == DependencyType::InterDIMMRank && tDIMMRank == other->tDIMMRank && !isCmdPool}; return !(skipOnIntraBankAndDifferentBanks || skipOnIntraBankgroupAndDifferentBankgroup || skipOnIntraBankInGroupAndDifferentBankInGroup || skipOnIntraLogRankAndDifferentRanks || skipOnIntraPhysRankAndDifferentRanks || skipOnIntraDIMMRankAndDifferentRanks || skipOnInterDIMMRankAndSameRank); }