diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2018-04-27 18:57:01 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2018-07-13 09:26:23 +0000 |
commit | a4be6388b1f25a1aa11a9d24488270f052c4d9dd (patch) | |
tree | 8a5a76456035ac1a19f5ca65c9a36fd34fe8b75f /src/cpu/testers/traffic_gen/PyTrafficGen.py | |
parent | 672953ef43f8559bd1ac1f8cb5dba9b997ca0ec9 (diff) | |
download | gem5-a4be6388b1f25a1aa11a9d24488270f052c4d9dd.tar.xz |
cpu: Add a Python-enabled traffic generator
The current traffic generator relies on a configuration file that
describes a small machine to generate stimuli. This configuration file
is usually generated by the gem5 Python configuration. This creates an
unnecessary and fragile step.
This changeset introduces a Python-based trace module. When
instantiated, the module exposes a start method that takes an iterable
object as a parameter (e.g., a generator). The iterable object is
expected to represent a list of generators that will be run one after
the other. For example:
system.tgen = PyTrafficGen()
m5.instantiate()
def trace():
yield system.tgen.createIdle(1000)
yield system.tgen.createExit(0)
system.tgen.start(trace())
Change-Id: I58e60ca517e86c197859f4daaa67750066abdc1c
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/11518
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/cpu/testers/traffic_gen/PyTrafficGen.py')
-rw-r--r-- | src/cpu/testers/traffic_gen/PyTrafficGen.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/cpu/testers/traffic_gen/PyTrafficGen.py b/src/cpu/testers/traffic_gen/PyTrafficGen.py new file mode 100644 index 000000000..c29ad0a3b --- /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.") |