From b3f264a0a0c6b242a9e7287db49af4fdd4d47127 Mon Sep 17 00:00:00 2001 From: Tiago Muck Date: Thu, 2 May 2019 18:38:26 -0500 Subject: [PATCH] mem-ruby: Add functionalReadBuffers to AbstractController MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Forwards a functional read accesses to all message buffers, similar to functionalWriteBuffers. Change-Id: I54b0ba16aab84575e4c9d6102f6c519b309aa95b Signed-off-by: Tiago Mück Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22020 Tested-by: kokoro Reviewed-by: Bradford Beckmann Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- .../slicc_interface/AbstractController.hh | 1 + src/mem/slicc/symbols/StateMachine.py | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/mem/ruby/slicc_interface/AbstractController.hh b/src/mem/ruby/slicc_interface/AbstractController.hh index 1c34bdef4..48f9618ae 100644 --- a/src/mem/ruby/slicc_interface/AbstractController.hh +++ b/src/mem/ruby/slicc_interface/AbstractController.hh @@ -112,6 +112,7 @@ class AbstractController : public ClockedObject, public Consumer //! These functions are used by ruby system to read/write the data blocks //! that exist with in the controller. + virtual bool functionalReadBuffers(PacketPtr&) = 0; virtual void functionalRead(const Addr &addr, PacketPtr) = 0; void functionalMemoryRead(PacketPtr); //! The return value indicates the number of messages written with the diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py index 0e336e676..ee6b5fb7d 100644 --- a/src/mem/slicc/symbols/StateMachine.py +++ b/src/mem/slicc/symbols/StateMachine.py @@ -1,3 +1,15 @@ +# Copyright (c) 2019 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. +# # Copyright (c) 1999-2008 Mark D. Hill and David A. Wood # Copyright (c) 2009 The Hewlett-Packard Development Company # Copyright (c) 2013 Advanced Micro Devices, Inc. @@ -313,6 +325,7 @@ class $c_ident : public AbstractController Sequencer* getCPUSequencer() const; GPUCoalescer* getGPUCoalescer() const; + bool functionalReadBuffers(PacketPtr&); int functionalWriteBuffers(PacketPtr&); void countTransition(${ident}_State state, ${ident}_Event event); @@ -1039,6 +1052,29 @@ $c_ident::functionalWriteBuffers(PacketPtr& pkt) code(''' return num_functional_writes; } +''') + + # Function for functional reads to messages buffered in the controller + code(''' +bool +$c_ident::functionalReadBuffers(PacketPtr& pkt) +{ +''') + for var in self.objects: + vtype = var.type + if vtype.isBuffer: + vid = "m_%s_ptr" % var.ident + code('if ($vid->functionalRead(pkt)) return true;') + + for var in self.config_parameters: + vtype = var.type_ast.type + if vtype.isBuffer: + vid = "m_%s_ptr" % var.ident + code('if ($vid->functionalRead(pkt)) return true;') + + code(''' + return false; +} ''') code.write(path, "%s.cc" % c_ident) -- 2.30.2