Merge branch 'fix/lpddr5_ref' into 'develop'
Fix LPDDR5 AllBank and Per2Bank Refresh See merge request ems/astdm/modeling.dram/dram.sys.5!114
This commit is contained in:
@@ -1839,8 +1839,12 @@ 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);
|
||||
sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][bank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
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];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1849,8 +1853,12 @@ 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);
|
||||
sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][bank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
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];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2448,8 +2456,12 @@ 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);
|
||||
sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][bank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
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];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2458,8 +2470,12 @@ 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);
|
||||
sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][bank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
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];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3650,8 +3666,12 @@ 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);
|
||||
sc_time &earliestTimeToStart = nextCommandByBank[Command::REFP2B][bank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
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];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
}
|
||||
|
||||
// Rank (ACT,ACT) memSpec.tRRD [] SameComponent()
|
||||
@@ -3813,13 +3833,6 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload)
|
||||
}
|
||||
case Command::REFP2B:
|
||||
{
|
||||
// Bank (REFP2B,ACT) (memSpec.tRFCpb - memSpec.tCK) [] SameComponent()
|
||||
{
|
||||
const sc_time constraint = currentTime + (memSpec.tRFCpb - memSpec.tCK);
|
||||
sc_time &earliestTimeToStart = nextCommandByBank[Command::ACT][bank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
|
||||
// Bank (REFP2B,REFP2B) memSpec.tRFCpb [] SameComponent()
|
||||
{
|
||||
const sc_time constraint = currentTime + memSpec.tRFCpb;
|
||||
@@ -3827,6 +3840,17 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload)
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
|
||||
// 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); i < memSpec.banksPerRank * (1 + static_cast<unsigned>(rank)); i += memSpec.getPer2BankOffset())
|
||||
{
|
||||
Bank currentBank{i};
|
||||
sc_time &earliestTimeToStart = nextCommandByBank[Command::ACT][currentBank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
}
|
||||
|
||||
// Rank (REFP2B,ACT) (memSpec.tpbR2act - memSpec.tCK) [] SameComponent()
|
||||
{
|
||||
const sc_time constraint = currentTime + (memSpec.tpbR2act - memSpec.tCK);
|
||||
@@ -3872,6 +3896,13 @@ void CheckerLPDDR5::insert(Command command, const tlm_generic_payload& payload)
|
||||
}
|
||||
case Command::REFAB:
|
||||
{
|
||||
// Rank (REFAB,ACT) (memSpec.tRFCab - memSpec.tCK) [] SameComponent()
|
||||
{
|
||||
const sc_time constraint = currentTime + (memSpec.tRFCab - memSpec.tCK);
|
||||
sc_time &earliestTimeToStart = nextCommandByRank[Command::ACT][rank];
|
||||
earliestTimeToStart = std::max(earliestTimeToStart, constraint);
|
||||
}
|
||||
|
||||
// Rank (REFAB,REFAB) memSpec.tRFCab [] SameComponent()
|
||||
{
|
||||
const sc_time constraint = currentTime + memSpec.tRFCab;
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
#include "DRAMSys/configuration/memspec/MemSpecLPDDR5.h"
|
||||
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
|
||||
namespace DRAMSys
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user