Fix issue with REFP2B with multiple ranks

This commit is contained in:
2025-04-08 12:39:38 +02:00
parent db615eb6a4
commit 8268f2e33b

View File

@@ -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<unsigned>(bank) + memSpec.banksPerRank * static_cast<unsigned>(rank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
for (unsigned int i = static_cast<unsigned>(bank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(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<unsigned>(bank) + memSpec.banksPerRank * static_cast<unsigned>(rank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
for (unsigned int i = static_cast<unsigned>(bank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(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<unsigned>(bank) + memSpec.banksPerRank * static_cast<unsigned>(rank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
for (unsigned int i = static_cast<unsigned>(bank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(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<unsigned>(bank) + memSpec.banksPerRank * static_cast<unsigned>(rank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
for (unsigned int i = static_cast<unsigned>(bank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(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=<ComponentLevel.BankGroup: 2>)
{
const sc_time constraint = currentTime + (memSpec.tRCpb + memSpec.tCK);
for (unsigned int i = static_cast<unsigned>(bank) + memSpec.banksPerRank * static_cast<unsigned>(rank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
for (unsigned int i = static_cast<unsigned>(bank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(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=<ComponentLevel.BankGroup: 2>)
{
const sc_time constraint = currentTime + (memSpec.tRFCpb - memSpec.tCK);
for (unsigned int i = static_cast<unsigned>(bank) + memSpec.banksPerRank * static_cast<unsigned>(rank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
for (unsigned int i = static_cast<unsigned>(bank); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
{
Bank currentBank{i};
sc_time &earliestTimeToStart = nextCommandByBank[Command::ACT][currentBank];