diff --git a/src/cpu/testers/traffic_gen/PyTrafficGen.py b/src/cpu/testers/traffic_gen/PyTrafficGen.py
new file mode 100644
index 0000000..c29ad0a
--- /dev/null
+++ b/src/cpu/testers/traffic_gen/PyTrafficGen.py
@@ -0,0 +1,71 @@
+# Copyright (c) 2018 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Andreas Sandberg
+
+from m5.defines import buildEnv
+from m5.SimObject import *
+from BaseTrafficGen import *
+
+class PyTrafficGen(BaseTrafficGen):
+    type = 'PyTrafficGen'
+    cxx_header = "cpu/testers/traffic_gen/pygen.hh"
+
+    @cxxMethod
+    def start(self, meta_generator):
+        """
+        Start generating traffic using the provided meta-generator. The
+        meta-generator is an iterable Python object that describes a
+        list of traffic generator instances.
+        """
+        pass
+
+    cxx_exports = [
+        PyBindMethod("createIdle"),
+        PyBindMethod("createExit"),
+        PyBindMethod("createLinear"),
+        PyBindMethod("createRandom"),
+        PyBindMethod("createDram"),
+        PyBindMethod("createDramRot"),
+    ]
+
+    @cxxMethod(override=True)
+    def createTrace(self, duration, trace_file, addr_offset=0):
+        if buildEnv['HAVE_PROTOBUF']:
+            return self.getCCObject().createTrace(duration, trace_file,
+                                                  addr_offset=addr_offset)
+        else:
+            raise NotImplementedError("Trace playback requires that gem5 "
+                                      "was built with protobuf support.")
diff --git a/src/cpu/testers/traffic_gen/SConscript b/src/cpu/testers/traffic_gen/SConscript
index f851b79..fc99d6e 100644
--- a/src/cpu/testers/traffic_gen/SConscript
+++ b/src/cpu/testers/traffic_gen/SConscript
@@ -52,6 +52,10 @@
 DebugFlag('TrafficGen')
 SimObject('BaseTrafficGen.py')
 
+if env['USE_PYTHON']:
+    Source('pygen.cc', add_tags='python')
+    SimObject('PyTrafficGen.py')
+
 # Only build the traffic generator if we have support for protobuf as the
 # tracing relies on it
 if env['HAVE_PROTOBUF']:
diff --git a/src/cpu/testers/traffic_gen/pygen.cc b/src/cpu/testers/traffic_gen/pygen.cc
new file mode 100644
index 0000000..ce1d591
--- /dev/null
+++ b/src/cpu/testers/traffic_gen/pygen.cc
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2018 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Andreas Sandberg
+ */
+#include "cpu/testers/traffic_gen/pygen.hh"
+
+#include "config/have_protobuf.hh"
+#include "debug/TrafficGen.hh"
+#include "params/PyTrafficGen.hh"
+#include "sim/init.hh"
+
+namespace py = pybind11;
+
+PyTrafficGen::PyTrafficGen(const PyTrafficGenParams *p)
+    : BaseTrafficGen(p)
+{
+}
+
+void
+PyTrafficGen::start(pybind11::object meta_generator)
+{
+    metaGenerator = meta_generator.begin();
+    BaseTrafficGen::start();
+}
+
+std::shared_ptr<BaseGen>
+PyTrafficGen::nextGenerator()
+{
+    if (!metaGenerator)
+        return std::shared_ptr<BaseGen>();
+
+    if (metaGenerator == py::iterator::sentinel()) {
+        DPRINTF(TrafficGen, "No more generators available.\n");
+        return std::shared_ptr<BaseGen>();
+    }
+
+    try {
+        DPRINTF(TrafficGen, "Casting to C++ base class.\n");
+        std::shared_ptr<BaseGen> gen =
+            metaGenerator->cast<std::shared_ptr<BaseGen>>();
+        metaGenerator++;
+        return gen;
+    } catch (py::cast_error) {
+        fatal("Meta generator didn't return a valid trace generator\n");
+    }
+}
+
+void
+pybind_init_tracers(py::module &m_native)
+{
+    using namespace pybind11::literals;
+
+    py::module m = m_native.def_submodule("trace");
+
+    py::class_<BaseGen, std::shared_ptr<BaseGen>> c_base(m, "BaseGen");
+}
+
+static EmbeddedPyBind _py_tracers("trace", pybind_init_tracers);
+
+PyTrafficGen*
+PyTrafficGenParams::create()
+{
+    return new PyTrafficGen(this);
+}
+
diff --git a/src/cpu/testers/traffic_gen/pygen.hh b/src/cpu/testers/traffic_gen/pygen.hh
new file mode 100644
index 0000000..2c35bc4
--- /dev/null
+++ b/src/cpu/testers/traffic_gen/pygen.hh
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2018 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Andreas Sandberg
+ */
+
+#ifndef __CPU_TRAFFIC_GEN_PYGEN_HH__
+#define __CPU_TRAFFIC_GEN_PYGEN_HH__
+
+#include "pybind11/pybind11.h"
+
+#include "cpu/testers/traffic_gen/base.hh"
+#include "cpu/testers/traffic_gen/base_gen.hh"
+
+struct PyTrafficGenParams;
+
+class M5_LOCAL PyTrafficGen : public BaseTrafficGen
+{
+  public:
+    PyTrafficGen(const PyTrafficGenParams* p);
+    ~PyTrafficGen() {}
+
+  public: // Python API
+    void start(pybind11::object meta_generator);
+
+  protected: // BaseTrafficGen
+    std::shared_ptr<BaseGen> nextGenerator() override;
+
+  protected: // Internal state
+    pybind11::iterator metaGenerator;
+};
+
+#endif //__CPU_TRAFFIC_GEN_PYGEN_HH__
