diff --git a/src/sim/SConscript b/src/sim/SConscript index 75b595b8a1..e26676c00a 100644 --- a/src/sim/SConscript +++ b/src/sim/SConscript @@ -42,6 +42,7 @@ SimObject('SubSystem.py', sim_objects=['SubSystem']) SimObject('RedirectPath.py', sim_objects=['RedirectPath']) SimObject('PowerState.py', sim_objects=['PowerState'], enums=['PwrState']) SimObject('PowerDomain.py', sim_objects=['PowerDomain']) +SimObject('SignalPort.py', sim_objects=[]) Source('async.cc') Source('backtrace_%s.cc' % env['BACKTRACE_IMPL'], add_tags='gem5 trace') diff --git a/src/sim/SignalPort.py b/src/sim/SignalPort.py new file mode 100644 index 0000000000..fc529a8b45 --- /dev/null +++ b/src/sim/SignalPort.py @@ -0,0 +1,77 @@ +# Copyright 2023 Google, Inc. +# +# 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. + +from m5.params import Port, VectorPort + +SIGNAL_SOURCE_ROLE_TEMPLATE = "Signal source <%s>" +SIGNAL_SINK_ROLE_TEMPLATE = "Signal sink <%s>" + + +def SignalSourcePort(type_signature): + source_role = SIGNAL_SOURCE_ROLE_TEMPLATE % type_signature + sink_role = SIGNAL_SINK_ROLE_TEMPLATE % type_signature + Port.compat(source_role, sink_role) + + class SignalSourcePort(Port): + def __init__(self, desc): + super().__init__(source_role, desc, is_source=True) + + return SignalSourcePort + + +def VectorSignalSourcePort(type_signature): + source_role = SIGNAL_SOURCE_ROLE_TEMPLATE % type_signature + sink_role = SIGNAL_SINK_ROLE_TEMPLATE % type_signature + Port.compat(source_role, sink_role) + + class VectorSignalSourcePort(VectorPort): + def __init__(self, desc): + super().__init__(source_role, desc, is_source=True) + + return VectorSignalSourcePort + + +def SignalSinkPort(type_signature): + source_role = SIGNAL_SOURCE_ROLE_TEMPLATE % type_signature + sink_role = SIGNAL_SINK_ROLE_TEMPLATE % type_signature + Port.compat(source_role, sink_role) + + class SignalSinkPort(Port): + def __init__(self, desc): + super().__init__(sink_role, desc) + + return SignalSinkPort + + +def VectorSignalSinkPort(type_signature): + source_role = SIGNAL_SOURCE_ROLE_TEMPLATE % type_signature + sink_role = SIGNAL_SINK_ROLE_TEMPLATE % type_signature + Port.compat(source_role, sink_role) + + class VectorSignalSinkPort(VectorPort): + def __init__(self, desc): + super().__init__(sink_role, desc) + + return VectorSignalSinkPort