Add clksPerRequest field to state definition
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -91,6 +91,7 @@ struct TraceGeneratorState
|
||||
Optional<uint64_t> addressIncrement;
|
||||
Optional<uint64_t> minAddress;
|
||||
Optional<uint64_t> maxAddress;
|
||||
Optional<uint64_t> clksPerRequest;
|
||||
};
|
||||
|
||||
struct TraceGeneratorStateTransition
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user