Pointer to reference.

This commit is contained in:
Lukas Steiner
2022-04-06 11:31:42 +02:00
parent 576691cd65
commit 917d8dacc4
12 changed files with 61 additions and 61 deletions

View File

@@ -144,7 +144,7 @@ void to_json(json &j, const TraceSetup &c)
json transition_j;
transition_j["from"] = transition.first;
transition_j["to"] = transition.second.to;
transition_j["propability"] = transition.second.propability;
transition_j["probability"] = transition.second.probability;
remove_null_values(transition_j);
transitions_j.insert(transitions_j.end(), transition_j);
}
@@ -247,7 +247,7 @@ void from_json(const json &j, TraceSetup &c)
TraceGeneratorStateTransition transition;
unsigned int from = transition_j.at("from");
transition.to = transition_j.at("to");
transition.propability = transition_j.at("propability");
transition.probability = transition_j.at("probability");
generator.transitions.emplace(from, transition);
}
}

View File

@@ -110,7 +110,7 @@ struct TraceGeneratorIdleState : public TraceGeneratorState
struct TraceGeneratorStateTransition
{
unsigned int to;
float propability;
float probability;
};
struct TraceGenerator : public TrafficInitiator

View File

@@ -70,7 +70,7 @@ MemoryManager::~MemoryManager()
//PRINTDEBUGMESSAGE("MemoryManager","Number of freed payloads: " + to_string(numberOfFrees));
}
tlm_generic_payload *MemoryManager::allocate(unsigned dataLength)
tlm_generic_payload& MemoryManager::allocate(unsigned dataLength)
{
if (freePayloads[dataLength].empty())
{
@@ -85,17 +85,17 @@ tlm_generic_payload *MemoryManager::allocate(unsigned dataLength)
payload->set_data_ptr(data);
}
return payload;
return *payload;
}
else
{
tlm_generic_payload *result = freePayloads[dataLength].top();
tlm_generic_payload* result = freePayloads[dataLength].top();
freePayloads[dataLength].pop();
return result;
return *result;
}
}
void MemoryManager::free(tlm_generic_payload *payload)
void MemoryManager::free(tlm_generic_payload* payload)
{
unsigned dataLength = payload->get_data_length();
freePayloads[dataLength].push(payload);

View File

@@ -47,13 +47,13 @@ class MemoryManager : public tlm::tlm_mm_interface
public:
MemoryManager();
~MemoryManager() override;
tlm::tlm_generic_payload *allocate(unsigned dataLength);
void free(tlm::tlm_generic_payload *payload) override;
tlm::tlm_generic_payload& allocate(unsigned dataLength);
void free(tlm::tlm_generic_payload* payload) override;
private:
uint64_t numberOfAllocations;
uint64_t numberOfFrees;
std::unordered_map<unsigned, std::stack<tlm::tlm_generic_payload *>> freePayloads;
std::unordered_map<unsigned, std::stack<tlm::tlm_generic_payload*>> freePayloads;
bool storageEnabled = false;
};

View File

@@ -49,7 +49,7 @@ StlPlayer::StlPlayer(const sc_module_name &name,
unsigned int maxPendingReadRequests,
unsigned int maxPendingWriteRequests,
bool addLengthConverter,
TraceSetup *setup,
TraceSetup& setup,
bool relative) :
TrafficInitiator(name, setup, maxPendingReadRequests, maxPendingWriteRequests,
Configuration::getInstance().memSpec->defaultBytesPerBurst, addLengthConverter),
@@ -102,17 +102,17 @@ void StlPlayer::sendNextPayload()
}
// Allocate a generic payload for this request.
tlm_generic_payload *payload = setup->allocatePayload(lineIterator->dataLength);
payload->acquire();
tlm_generic_payload& payload = setup.allocatePayload(lineIterator->dataLength);
payload.acquire();
// Fill up the payload.
payload->set_address(lineIterator->address);
payload->set_response_status(TLM_INCOMPLETE_RESPONSE);
payload->set_dmi_allowed(false);
payload->set_byte_enable_length(0);
payload->set_data_length(lineIterator->dataLength);
payload->set_command(lineIterator->command);
std::copy(lineIterator->data.begin(), lineIterator->data.end(), payload->get_data_ptr());
payload.set_address(lineIterator->address);
payload.set_response_status(TLM_INCOMPLETE_RESPONSE);
payload.set_dmi_allowed(false);
payload.set_byte_enable_length(0);
payload.set_data_length(lineIterator->dataLength);
payload.set_command(lineIterator->command);
std::copy(lineIterator->data.begin(), lineIterator->data.end(), payload.get_data_ptr());
sc_time sendingTime;
sc_time sendingOffset;
@@ -127,13 +127,13 @@ void StlPlayer::sendNextPayload()
else
sendingTime = sc_time_stamp() + sendingOffset + lineIterator->sendingTime;
sendToTarget(*payload, BEGIN_REQ, sendingTime - sc_time_stamp());
sendToTarget(payload, BEGIN_REQ, sendingTime - sc_time_stamp());
transactionsSent++;
if (payload->get_command() == tlm::TLM_READ_COMMAND)
if (payload.get_command() == tlm::TLM_READ_COMMAND)
pendingReadRequests++;
else if (payload->get_command() == tlm::TLM_WRITE_COMMAND)
else if (payload.get_command() == tlm::TLM_WRITE_COMMAND)
pendingWriteRequests++;
PRINTDEBUGMESSAGE(name(), "Performing request #" + std::to_string(transactionsSent));

View File

@@ -70,7 +70,7 @@ public:
unsigned int maxPendingReadRequests,
unsigned int maxPendingWriteRequests,
bool addLengthConverter,
TraceSetup *setup,
TraceSetup& setup,
bool relative);
~StlPlayer() override;
@@ -89,8 +89,8 @@ private:
static constexpr unsigned lineBufferSize = 10000;
std::vector<LineContent> *currentBuffer;
std::vector<LineContent> *parseBuffer;
std::vector<LineContent>* currentBuffer;
std::vector<LineContent>* parseBuffer;
std::array<std::vector<LineContent>, 2> lineContents;
std::vector<LineContent>::const_iterator lineIterator;

View File

@@ -106,10 +106,10 @@ TraceSetup::TraceSetup(const DRAMSysConfiguration::TraceSetup &traceSetup, const
StlPlayer *player;
if (ext == "stl")
player = new StlPlayer(moduleName.c_str(), stlFile, playerClk, maxPendingReadRequests,
maxPendingWriteRequests, addLengthConverter, this, false);
maxPendingWriteRequests, addLengthConverter, *this, false);
else if (ext == "rstl")
player = new StlPlayer(moduleName.c_str(), stlFile, playerClk, maxPendingReadRequests,
maxPendingWriteRequests, addLengthConverter, this, true);
maxPendingWriteRequests, addLengthConverter, *this, true);
else
throw std::runtime_error("Unsupported file extension in " + name);
@@ -118,7 +118,7 @@ TraceSetup::TraceSetup(const DRAMSysConfiguration::TraceSetup &traceSetup, const
}
else if constexpr (std::is_same_v<T, DRAMSysConfiguration::TraceGenerator>)
{
TrafficGenerator *trafficGenerator = new TrafficGenerator(name.c_str(), initiator, this);
TrafficGenerator *trafficGenerator = new TrafficGenerator(name.c_str(), initiator, *this);
players.push_back(std::unique_ptr<TrafficInitiator>(trafficGenerator));
totalTransactions += trafficGenerator->getTotalTransactions();
@@ -129,7 +129,7 @@ TraceSetup::TraceSetup(const DRAMSysConfiguration::TraceSetup &traceSetup, const
uint64_t rowIncrement = initiator.rowIncrement;
players.push_back(
std::unique_ptr<TrafficInitiator>(new TrafficGeneratorHammer(name.c_str(), initiator, this)));
std::unique_ptr<TrafficInitiator>(new TrafficGeneratorHammer(name.c_str(), initiator, *this)));
totalTransactions += numRequests;
}
},
@@ -195,12 +195,12 @@ void TraceSetup::transactionFinished()
std::cout << std::endl;
}
tlm_generic_payload *TraceSetup::allocatePayload(unsigned dataLength)
tlm_generic_payload& TraceSetup::allocatePayload(unsigned dataLength)
{
return memoryManager.allocate(dataLength);
}
tlm_generic_payload *TraceSetup::allocatePayload()
tlm_generic_payload& TraceSetup::allocatePayload()
{
return allocatePayload(defaultDataLength);
}

View File

@@ -56,8 +56,8 @@ public:
void trafficInitiatorTerminates();
void transactionFinished();
tlm::tlm_generic_payload *allocatePayload(unsigned dataLength);
tlm::tlm_generic_payload *allocatePayload();
tlm::tlm_generic_payload& allocatePayload(unsigned dataLength);
tlm::tlm_generic_payload& allocatePayload();
private:
unsigned int numberOfTrafficInitiators;

View File

@@ -44,7 +44,7 @@
using namespace sc_core;
using namespace tlm;
TrafficGeneratorIf::TrafficGeneratorIf(const sc_core::sc_module_name &name, TraceSetup *setup,
TrafficGeneratorIf::TrafficGeneratorIf(const sc_core::sc_module_name& name, TraceSetup& setup,
unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests,
unsigned int dataLength, bool addLengthConverter)
: TrafficInitiator(name, setup, maxPendingReadRequests, maxPendingWriteRequests, dataLength, addLengthConverter)
@@ -69,14 +69,14 @@ void TrafficGeneratorIf::sendNextPayload()
else if (command == tlm::TLM_WRITE_COMMAND)
pendingWriteRequests++;
tlm_generic_payload *payload = setup->allocatePayload();
payload->acquire();
payload->set_address(address);
payload->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
payload->set_dmi_allowed(false);
payload->set_byte_enable_length(0);
payload->set_data_length(defaultDataLength);
payload->set_command(command);
tlm_generic_payload& payload = setup.allocatePayload();
payload.acquire();
payload.set_address(address);
payload.set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
payload.set_dmi_allowed(false);
payload.set_byte_enable_length(0);
payload.set_data_length(defaultDataLength);
payload.set_command(command);
sc_time generatorClk = getGeneratorClk();
sc_time sendingOffset;
@@ -86,7 +86,7 @@ void TrafficGeneratorIf::sendNextPayload()
sendingOffset = (generatorClk * clksPerRequest()) - (sc_time_stamp() % generatorClk) + generatorClk * clksToIdle();
// TODO: do not send two requests in the same cycle
sendToTarget(*payload, tlm::BEGIN_REQ, sendingOffset);
sendToTarget(payload, tlm::BEGIN_REQ, sendingOffset);
transactionsSent++;
PRINTDEBUGMESSAGE(name(), "Performing request #" + std::to_string(transactionsSent));
@@ -94,7 +94,7 @@ void TrafficGeneratorIf::sendNextPayload()
}
TrafficGenerator::TrafficGenerator(const sc_module_name &name, const DRAMSysConfiguration::TraceGenerator &conf,
TraceSetup *setup)
TraceSetup& setup)
: TrafficGeneratorIf(name, setup, conf.maxPendingReadRequests.value_or(defaultMaxPendingReadRequests),
conf.maxPendingWriteRequests.value_or(defaultMaxPendingWriteRequests),
conf.dataLength.value_or(Configuration::getInstance().memSpec->defaultBytesPerBurst),
@@ -153,19 +153,19 @@ void TrafficGenerator::calculateTransitions()
while (true)
{
auto transitionsIt = conf.transitions.equal_range(state);
float propabilityAccumulated = 0.0f;
float probabilityAccumulated = 0.0f;
std::map<unsigned int, std::pair<float, float>> transitionsDistribution;
for (auto it = transitionsIt.first; it != transitionsIt.second; ++it)
{
float lowerLimit = propabilityAccumulated;
propabilityAccumulated += it->second.propability;
float upperLimit = propabilityAccumulated;
float lowerLimit = probabilityAccumulated;
probabilityAccumulated += it->second.probability;
float upperLimit = probabilityAccumulated;
transitionsDistribution[it->second.to] = {lowerLimit, upperLimit};
}
if (propabilityAccumulated > 1.001f)
SC_REPORT_WARNING("TrafficGenerator", "Sum of transition propabilities greater than 1.");
if (probabilityAccumulated > 1.001f)
SC_REPORT_WARNING("TrafficGenerator", "Sum of transition probabilities greater than 1.");
float random = randomDistribution(randomGenerator);
bool transitionFound = false;
@@ -376,7 +376,7 @@ uint64_t TrafficGenerator::evaluateMaxAddress(const DRAMSysConfiguration::TraceG
}
TrafficGeneratorHammer::TrafficGeneratorHammer(const sc_core::sc_module_name &name,
const DRAMSysConfiguration::TraceHammer &conf, TraceSetup *setup)
const DRAMSysConfiguration::TraceHammer &conf, TraceSetup& setup)
: TrafficGeneratorIf(name, setup, 1, 1, Configuration::getInstance().memSpec->defaultBytesPerBurst, false),
generatorClk(evaluateGeneratorClk(conf)), rowIncrement(conf.rowIncrement), numRequests(conf.numRequests)
{

View File

@@ -49,7 +49,7 @@
class TrafficGeneratorIf : public TrafficInitiator
{
public:
TrafficGeneratorIf(const sc_core::sc_module_name &name, TraceSetup *setup,
TrafficGeneratorIf(const sc_core::sc_module_name &name, TraceSetup& setup,
unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests,
unsigned int dataLength, bool addLengthConverter);
@@ -68,7 +68,7 @@ class TrafficGenerator : public TrafficGeneratorIf
{
public:
TrafficGenerator(const sc_core::sc_module_name &name, const DRAMSysConfiguration::TraceGenerator &conf,
TraceSetup *setup);
TraceSetup& setup);
uint64_t getTotalTransactions() const;
void waitUntil(const sc_core::sc_event *ev);
@@ -131,7 +131,7 @@ class TrafficGeneratorHammer final : public TrafficGeneratorIf
{
public:
TrafficGeneratorHammer(const sc_core::sc_module_name &name, const DRAMSysConfiguration::TraceHammer &conf,
TraceSetup *setup);
TraceSetup& setup);
private:
void prepareNextPayload() override;

View File

@@ -43,7 +43,7 @@
using namespace sc_core;
using namespace tlm;
TrafficInitiator::TrafficInitiator(const sc_module_name &name, TraceSetup *setup,
TrafficInitiator::TrafficInitiator(const sc_module_name &name, TraceSetup& setup,
unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests,
unsigned int defaultDataLength, bool addLengthConverter) :
sc_module(name),
@@ -62,7 +62,7 @@ TrafficInitiator::TrafficInitiator(const sc_module_name &name, TraceSetup *setup
void TrafficInitiator::terminate()
{
std::cout << sc_time_stamp() << " " << this->name() << " terminated " << std::endl;
setup->trafficInitiatorTerminates();
setup.trafficInitiatorTerminates();
}
tlm_sync_enum TrafficInitiator::nb_transport_bw(tlm_generic_payload &payload,
@@ -87,7 +87,7 @@ void TrafficInitiator::peqCallback(tlm_generic_payload &payload,
payload.release();
sendToTarget(payload, END_RESP, SC_ZERO_TIME);
if (Configuration::getInstance().simulationProgressBar)
setup->transactionFinished();
setup.transactionFinished();
transactionsReceived++;

View File

@@ -56,7 +56,7 @@ class TrafficInitiator : public sc_core::sc_module
{
public:
tlm_utils::simple_initiator_socket<TrafficInitiator> iSocket;
TrafficInitiator(const sc_core::sc_module_name &name, TraceSetup *setup,
TrafficInitiator(const sc_core::sc_module_name &name, TraceSetup& setup,
unsigned int maxPendingReadRequests, unsigned int maxPendingWriteRequests,
unsigned int defaultDataLength, bool addLengthConverter);
SC_HAS_PROCESS(TrafficInitiator);
@@ -68,7 +68,7 @@ protected:
tlm_utils::peq_with_cb_and_phase<TrafficInitiator> payloadEventQueue;
void terminate();
TraceSetup *setup;
TraceSetup& setup;
void sendToTarget(tlm::tlm_generic_payload &payload, const tlm::tlm_phase &phase,
const sc_core::sc_time &delay);