Add RequestBufferSizeRead and RequestBufferSizeWrite configurations for ReadWrite Buffer
This commit is contained in:
@@ -180,6 +180,8 @@ struct McConfig
|
||||
std::optional<unsigned int> LowWatermark;
|
||||
std::optional<SchedulerBufferType> SchedulerBuffer;
|
||||
std::optional<unsigned int> RequestBufferSize;
|
||||
std::optional<unsigned int> RequestBufferSizeRead;
|
||||
std::optional<unsigned int> RequestBufferSizeWrite;
|
||||
std::optional<CmdMuxType> CmdMux;
|
||||
std::optional<RespQueueType> RespQueue;
|
||||
std::optional<RefreshPolicyType> RefreshPolicy;
|
||||
@@ -206,6 +208,8 @@ NLOHMANN_JSONIFY_ALL_THINGS(McConfig,
|
||||
LowWatermark,
|
||||
SchedulerBuffer,
|
||||
RequestBufferSize,
|
||||
RequestBufferSizeRead,
|
||||
RequestBufferSizeWrite,
|
||||
CmdMux,
|
||||
RespQueue,
|
||||
RefreshPolicy,
|
||||
|
||||
@@ -282,6 +282,14 @@ void Configuration::loadMCConfig(const DRAMSys::Config::McConfig& mcConfig)
|
||||
if (requestBufferSize == 0)
|
||||
SC_REPORT_FATAL("Configuration", "Minimum request buffer size is 1!");
|
||||
|
||||
requestBufferSizeRead = mcConfig.RequestBufferSizeRead.value_or(requestBufferSizeRead);
|
||||
if (requestBufferSizeRead == 0)
|
||||
SC_REPORT_FATAL("Configuration", "Minimum request buffer size is 1!");
|
||||
|
||||
requestBufferSizeWrite = mcConfig.RequestBufferSizeWrite.value_or(requestBufferSizeWrite);
|
||||
if (requestBufferSizeWrite == 0)
|
||||
SC_REPORT_FATAL("Configuration", "Minimum request buffer size is 1!");
|
||||
|
||||
if (const auto& _arbitrationDelayFw = mcConfig.ArbitrationDelayFw)
|
||||
{
|
||||
arbitrationDelayFw =
|
||||
|
||||
@@ -96,6 +96,8 @@ public:
|
||||
Reorder
|
||||
} arbiter = Arbiter::Simple;
|
||||
unsigned int requestBufferSize = 8;
|
||||
unsigned int requestBufferSizeRead = 8;
|
||||
unsigned int requestBufferSizeWrite = 8;
|
||||
enum class RefreshPolicy
|
||||
{
|
||||
NoRefresh,
|
||||
|
||||
@@ -39,16 +39,18 @@ using namespace tlm;
|
||||
namespace DRAMSys
|
||||
{
|
||||
|
||||
BufferCounterReadWrite::BufferCounterReadWrite(unsigned requestBufferSize) :
|
||||
requestBufferSize(requestBufferSize)
|
||||
BufferCounterReadWrite::BufferCounterReadWrite(unsigned requestBufferSizeRead,
|
||||
unsigned requestBufferSizeWrite) :
|
||||
requestBufferSizeRead(requestBufferSizeRead),
|
||||
requestBufferSizeWrite(requestBufferSizeWrite)
|
||||
{
|
||||
numReadWriteRequests = std::vector<unsigned>(2);
|
||||
}
|
||||
|
||||
bool BufferCounterReadWrite::hasBufferSpace() const
|
||||
{
|
||||
return (numReadWriteRequests[0] < requestBufferSize &&
|
||||
numReadWriteRequests[1] < requestBufferSize);
|
||||
return (numReadWriteRequests[0] < requestBufferSizeRead &&
|
||||
numReadWriteRequests[1] < requestBufferSizeWrite);
|
||||
}
|
||||
|
||||
void BufferCounterReadWrite::storeRequest(const tlm_generic_payload& trans)
|
||||
|
||||
@@ -46,7 +46,8 @@ namespace DRAMSys
|
||||
class BufferCounterReadWrite final : public BufferCounterIF
|
||||
{
|
||||
public:
|
||||
explicit BufferCounterReadWrite(unsigned requestBufferSize);
|
||||
explicit BufferCounterReadWrite(unsigned requestBufferSizeRead,
|
||||
unsigned requestBufferSizeWrite);
|
||||
[[nodiscard]] bool hasBufferSpace() const override;
|
||||
void storeRequest(const tlm::tlm_generic_payload& trans) override;
|
||||
void removeRequest(const tlm::tlm_generic_payload& trans) override;
|
||||
@@ -55,7 +56,8 @@ public:
|
||||
[[nodiscard]] unsigned getNumWriteRequests() const override;
|
||||
|
||||
private:
|
||||
const unsigned requestBufferSize;
|
||||
const unsigned requestBufferSizeRead;
|
||||
const unsigned requestBufferSizeWrite;
|
||||
std::vector<unsigned> numReadWriteRequests;
|
||||
};
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ SchedulerFifo::SchedulerFifo(const Configuration& config)
|
||||
bufferCounter = std::make_unique<BufferCounterBankwise>(config.requestBufferSize,
|
||||
config.memSpec->banksPerChannel);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::ReadWrite)
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSize);
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSizeRead, config.requestBufferSizeWrite);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::Shared)
|
||||
bufferCounter = std::make_unique<BufferCounterShared>(config.requestBufferSize);
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ SchedulerFrFcfs::SchedulerFrFcfs(const Configuration& config)
|
||||
bufferCounter = std::make_unique<BufferCounterBankwise>(config.requestBufferSize,
|
||||
config.memSpec->banksPerChannel);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::ReadWrite)
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSize);
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSizeRead, config.requestBufferSizeWrite);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::Shared)
|
||||
bufferCounter = std::make_unique<BufferCounterShared>(config.requestBufferSize);
|
||||
}
|
||||
|
||||
@@ -52,7 +52,8 @@ SchedulerFrFcfsGrp::SchedulerFrFcfsGrp(const Configuration& config)
|
||||
bufferCounter = std::make_unique<BufferCounterBankwise>(config.requestBufferSize,
|
||||
config.memSpec->banksPerChannel);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::ReadWrite)
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSize);
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSizeRead,
|
||||
config.requestBufferSizeWrite);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::Shared)
|
||||
bufferCounter = std::make_unique<BufferCounterShared>(config.requestBufferSize);
|
||||
}
|
||||
|
||||
@@ -54,7 +54,8 @@ SchedulerGrpFrFcfs::SchedulerGrpFrFcfs(const Configuration& config)
|
||||
bufferCounter = std::make_unique<BufferCounterBankwise>(config.requestBufferSize,
|
||||
config.memSpec->banksPerChannel);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::ReadWrite)
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSize);
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSizeRead,
|
||||
config.requestBufferSizeWrite);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::Shared)
|
||||
bufferCounter = std::make_unique<BufferCounterShared>(config.requestBufferSize);
|
||||
|
||||
|
||||
@@ -56,7 +56,8 @@ SchedulerGrpFrFcfsWm::SchedulerGrpFrFcfsWm(const Configuration& config) :
|
||||
bufferCounter = std::make_unique<BufferCounterBankwise>(config.requestBufferSize,
|
||||
config.memSpec->banksPerChannel);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::ReadWrite)
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSize);
|
||||
bufferCounter = std::make_unique<BufferCounterReadWrite>(config.requestBufferSizeRead,
|
||||
config.requestBufferSizeWrite);
|
||||
else if (config.schedulerBuffer == Configuration::SchedulerBuffer::Shared)
|
||||
bufferCounter = std::make_unique<BufferCounterShared>(config.requestBufferSize);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user