From 8268f2e33ba605e48ffda151763a31182e30b60e Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Tue, 8 Apr 2025 12:39:38 +0200 Subject: [PATCH] Fix issue with REFP2B with multiple ranks --- .../DRAMSys/controller/checker/CheckerLPDDR5.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp index 54027f15..bbd8e8ee 100644 --- a/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp +++ b/extensions/standards/LPDDR5/DRAMSys/controller/checker/CheckerLPDDR5.cpp @@ -1839,7 +1839,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) if (burstLength == 32) { const sc_time constraint = currentTime + ((memSpec.BL_n_min_32 + memSpec.tRBTP) + memSpec.tRPpb); - for (unsigned int i = static_cast(bank) + memSpec.banksPerRank * static_cast(rank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) + for (unsigned int i = static_cast(bank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) { Bank currentBank{i}; sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][currentBank]; @@ -1853,7 +1853,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) if (burstLength != 32) { const sc_time constraint = currentTime + ((memSpec.BL_n_min_16 + memSpec.tRBTP) + memSpec.tRPpb); - for (unsigned int i = static_cast(bank) + memSpec.banksPerRank * static_cast(rank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) + for (unsigned int i = static_cast(bank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) { Bank currentBank{i}; sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][currentBank]; @@ -2456,7 +2456,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) if (burstLength == 32) { const sc_time constraint = currentTime + ((((memSpec.tWL + memSpec.BL_n_min_32) + memSpec.tCK) + memSpec.tWR) + memSpec.tRPpb); - for (unsigned int i = static_cast(bank) + memSpec.banksPerRank * static_cast(rank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) + for (unsigned int i = static_cast(bank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) { Bank currentBank{i}; sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][currentBank]; @@ -2470,7 +2470,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) if (burstLength != 32) { const sc_time constraint = currentTime + ((((memSpec.tWL + memSpec.BL_n_min_16) + memSpec.tCK) + memSpec.tWR) + memSpec.tRPpb); - for (unsigned int i = static_cast(bank) + memSpec.banksPerRank * static_cast(rank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) + for (unsigned int i = static_cast(bank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) { Bank currentBank{i}; sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][currentBank]; @@ -3666,7 +3666,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) // Bank (ACT,REFP2B) (memSpec.tRCpb + memSpec.tCK) [] Per2ComponentsIn(level=) { const sc_time constraint = currentTime + (memSpec.tRCpb + memSpec.tCK); - for (unsigned int i = static_cast(bank) + memSpec.banksPerRank * static_cast(rank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) + for (unsigned int i = static_cast(bank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) { Bank currentBank{i}; sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][currentBank]; @@ -3843,7 +3843,7 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload) // Bank (REFP2B,ACT) (memSpec.tRFCpb - memSpec.tCK) [] Per2ComponentsIn(level=) { const sc_time constraint = currentTime + (memSpec.tRFCpb - memSpec.tCK); - for (unsigned int i = static_cast(bank) + memSpec.banksPerRank * static_cast(rank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) + for (unsigned int i = static_cast(bank); i < memSpec.banksPerRank * (1 + static_cast(rank)); i += memSpec.getPer2BankOffset()) { Bank currentBank{i}; sc_time &earliestTimeToStart = nextCommandByBank[Command::ACT][currentBank];