Add clksPerRequest field to state definition

This commit is contained in:
2022-01-03 15:20:03 +01:00
parent 2540c9d194
commit e1e2e9c0f9
4 changed files with 21 additions and 1 deletions

View File

@@ -72,6 +72,7 @@ void to_json(json &j, const TraceSetup &c)
initiator_j["addressIncrement"] = state.addressIncrement;
initiator_j["minAddress"] = state.minAddress;
initiator_j["maxAddress"] = state.maxAddress;
initiator_j["clksPerRequest"] = state.clksPerRequest;
}
else
{
@@ -87,6 +88,7 @@ void to_json(json &j, const TraceSetup &c)
state_j["addressIncrement"] = state.second.addressIncrement;
state_j["minAddress"] = state.second.minAddress;
state_j["maxAddress"] = state.second.maxAddress;
state_j["clksPerRequest"] = state.second.clksPerRequest;
remove_null_values(state_j);
states_j.insert(states_j.end(), state_j);
}
@@ -155,6 +157,9 @@ void from_json(const json &j, TraceSetup &c)
if (state_j.contains("maxAddress"))
state_j.at("maxAddress").get_to(state.maxAddress);
if (state_j.contains("clksPerRequest"))
state_j.at("clksPerRequest").get_to(state.clksPerRequest);
// Default to 0
unsigned int id = 0;

View File

@@ -91,6 +91,7 @@ struct TraceGeneratorState
Optional<uint64_t> addressIncrement;
Optional<uint64_t> minAddress;
Optional<uint64_t> maxAddress;
Optional<uint64_t> clksPerRequest;
};
struct TraceGeneratorStateTransition

View File

@@ -84,7 +84,7 @@ void TrafficGeneratorIf::sendNextPayload()
if (transactionsSent == 0)
sendingOffset = SC_ZERO_TIME;
else
sendingOffset = generatorClk - (sc_time_stamp() % generatorClk);
sendingOffset = (generatorClk * clksPerRequest()) - (sc_time_stamp() % generatorClk);
// TODO: do not send two requests in the same cycle
sendToTarget(*payload, tlm::BEGIN_REQ, sendingOffset);
@@ -123,6 +123,7 @@ TrafficGenerator::TrafficGenerator(const sc_module_name &name, const DRAMSysConf
uint64_t minAddress = evaluateMinAddress(conf.states.at(currentState));
uint64_t maxAddress = evaluateMaxAddress(conf.states.at(currentState));
randomAddressDistribution = std::uniform_int_distribution<uint64_t>(minAddress, maxAddress);
currentClksPerRequest = evaluateClksPerRequest(conf.states.at(currentState));
calculateTransitions();
}
@@ -212,6 +213,7 @@ void TrafficGenerator::transitionToNextState()
uint64_t minAddress = evaluateMinAddress(conf.states.at(currentState));
uint64_t maxAddress = evaluateMaxAddress(conf.states.at(currentState));
randomAddressDistribution = std::uniform_int_distribution<uint64_t> (minAddress, maxAddress);
currentClksPerRequest = evaluateClksPerRequest(conf.states.at(currentState));
currentAddress = 0x00;
transactionsSentInCurrentState = 0;
@@ -311,6 +313,14 @@ uint64_t TrafficGenerator::evaluateAddressIncrement(const DRAMSysConfiguration::
return 0x00;
}
uint64_t TrafficGenerator::evaluateClksPerRequest(const DRAMSysConfiguration::TraceGeneratorState &state)
{
if (state.clksPerRequest.isValid())
return state.clksPerRequest.getValue();
else
return 1;
}
TrafficGeneratorHammer::TrafficGeneratorHammer(const sc_core::sc_module_name &name,
const DRAMSysConfiguration::TraceHammer &conf, TraceSetup *setup)
: TrafficGeneratorIf(name, setup, 1, 1), generatorClk(evaluateGeneratorClk(conf)), rowIncrement(conf.rowIncrement),

View File

@@ -57,6 +57,7 @@ private:
virtual tlm::tlm_command getNextCommand() = 0;
virtual sc_core::sc_time getGeneratorClk() = 0;
virtual void payloadSent(){};
virtual uint64_t clksPerRequest() { return 1; }
};
class TrafficGenerator : public TrafficGeneratorIf
@@ -73,12 +74,14 @@ private:
static uint64_t evaluateMinAddress(const DRAMSysConfiguration::TraceGeneratorState &state);
static uint64_t evaluateMaxAddress(const DRAMSysConfiguration::TraceGeneratorState &state);
static uint64_t evaluateAddressIncrement(const DRAMSysConfiguration::TraceGeneratorState &state);
static uint64_t evaluateClksPerRequest(const DRAMSysConfiguration::TraceGeneratorState &state);
void prepareNextPayload() override;
uint64_t getNextAddress() override;
tlm::tlm_command getNextCommand() override;
sc_core::sc_time getGeneratorClk() override;
void payloadSent() override;
uint64_t clksPerRequest() override { return currentClksPerRequest; };
void calculateTransitions();
void transitionToNextState();
@@ -88,6 +91,7 @@ private:
const DRAMSysConfiguration::TraceGenerator &conf;
unsigned int currentState = 0;
uint64_t currentAddress = 0x00;
uint64_t currentClksPerRequest = 1;
uint64_t transactionsSentInCurrentState = 0;
const uint64_t maxTransactions;