summaryrefslogtreecommitdiff
path: root/src/cpu/testers/traffic_gen/base.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/testers/traffic_gen/base.cc')
-rw-r--r--src/cpu/testers/traffic_gen/base.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/cpu/testers/traffic_gen/base.cc b/src/cpu/testers/traffic_gen/base.cc
index 6778e417b..ad4f67d9d 100644
--- a/src/cpu/testers/traffic_gen/base.cc
+++ b/src/cpu/testers/traffic_gen/base.cc
@@ -52,6 +52,7 @@
#include "cpu/testers/traffic_gen/idle_gen.hh"
#include "cpu/testers/traffic_gen/linear_gen.hh"
#include "cpu/testers/traffic_gen/random_gen.hh"
+#include "cpu/testers/traffic_gen/stream_gen.hh"
#include "debug/Checkpoint.hh"
#include "debug/TrafficGen.hh"
#include "params/BaseTrafficGen.hh"
@@ -78,7 +79,12 @@ BaseTrafficGen::BaseTrafficGen(const BaseTrafficGenParams* p)
retryPkt(NULL),
retryPktTick(0),
updateEvent([this]{ update(); }, name()),
- masterID(system->getMasterId(this))
+ masterID(system->getMasterId(this)),
+ streamGenerator(StreamGen::create(p))
+{
+}
+
+BaseTrafficGen::~BaseTrafficGen()
{
}
@@ -172,6 +178,19 @@ BaseTrafficGen::update()
// get the next packet and try to send it
PacketPtr pkt = activeGenerator->getNextPacket();
+ // If generating stream/substream IDs are enabled,
+ // try to pick and assign them to the new packet
+ if (streamGenerator) {
+ auto sid = streamGenerator->pickStreamID();
+ auto ssid = streamGenerator->pickSubStreamID();
+
+ pkt->req->setStreamId(sid);
+
+ if (streamGenerator->ssidValid()) {
+ pkt->req->setSubStreamId(ssid);
+ }
+ }
+
// suppress packets that are not destined for a memory, such as
// device accesses that could be part of a trace
if (pkt && system->isMemAddr(pkt->getAddr())) {