soc: Revive generation of a PointToPoint interconnect
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 13 May 2020 14:06:15 +0000 (00:06 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 13 May 2020 14:06:53 +0000 (00:06 +1000)
When there's only one master, one slave, and that slave is at 0

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
litex/soc/integration/soc.py

index 2967daa2cfabaa84d6536dc6bbe6317bc036411a..c051c254b4d351eb3e3011141ac3f378cb8a040b 100644 (file)
@@ -824,7 +824,18 @@ class SoC(Module):
         # SoC Bus Interconnect ---------------------------------------------------------------------
         bus_masters = self.bus.masters.values()
         bus_slaves  = [(self.bus.regions[n].decoder(self.bus), s) for n, s in self.bus.slaves.items()]
-        if len(bus_masters) and len(bus_slaves):
+
+        use_p2p = False
+        if len(bus_masters) == 1 and len(bus_slaves) == 1:
+            n = list(self.bus.slaves)[0]
+            if self.bus.regions[n].origin == 0:
+                use_p2p = True
+
+        if use_p2p:
+            self.submodules.bus_interconnect = wishbone.InterconnectPointToPoint(
+                master = list(bus_masters)[0],
+                slave  = list(self.bus.slaves.values())[0])
+        elif len(bus_masters) and len(bus_slaves):
             self.submodules.bus_interconnect = wishbone.InterconnectShared(
                 masters        = bus_masters,
                 slaves         = bus_slaves,