python: Switch to the new getPort mechanism to connect ports.
authorGabe Black <gabeblack@google.com>
Thu, 7 Mar 2019 09:36:08 +0000 (01:36 -0800)
committerGabe Black <gabeblack@google.com>
Tue, 19 Mar 2019 10:22:27 +0000 (10:22 +0000)
This retrieves ports using the getPort method, and connects them using
the bind method on the ports themselves. Any smarts as far as what type
of peers are allowed to connect or how they connect is left up to the
individual bind methods.

Change-Id: Ic640d1fce8af1bed411116e5830edc4a8a0f9d66
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17039
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/python/m5/params.py

index ff625e0d6277ecb03b2c446d4dd67d8a6f0ef280..52360221b41c36113a3c87a318115c087a37246a 100644 (file)
@@ -1943,8 +1943,6 @@ class PortRef(object):
 
     # Call C++ to create corresponding port connection between C++ objects
     def ccConnect(self):
-        from _m5.pyobject import connectPorts
-
         if self.ccConnected: # already done this
             return
 
@@ -1952,27 +1950,11 @@ class PortRef(object):
         if not self.peer: # nothing to connect to
             return
 
-        # check that we connect a master to a slave
-        if self.role == peer.role:
-            raise TypeError(
-                "cannot connect '%s' and '%s' due to identical role '%s'" % \
-                (peer, self, self.role))
-
-        if self.role == 'SLAVE':
-            # do nothing and let the master take care of it
-            return
+        port = self.simobj.getPort(self.name, self.index)
+        peer_port = peer.simobj.getPort(peer.name, peer.index)
+        port.bind(peer_port)
 
-        try:
-            # self is always the master and peer the slave
-            connectPorts(self.simobj.getCCObject(), self.name, self.index,
-                         peer.simobj.getCCObject(), peer.name, peer.index)
-        except:
-            print("Error connecting port %s.%s to %s.%s" %
-                  (self.simobj.path(), self.name,
-                   peer.simobj.path(), peer.name))
-            raise
         self.ccConnected = True
-        peer.ccConnected = True
 
 # A reference to an individual element of a VectorPort... much like a
 # PortRef, but has an index.