From 14cd39e0455a810aef261383603d032b2be59c78 Mon Sep 17 00:00:00 2001 From: "Wesley W. Terpstra" Date: Mon, 26 Sep 2016 13:05:49 -0700 Subject: [PATCH] rocketchip: rename identically names devices with _%d (#340) * rocketchip: rename identically names devices with _%d If you connect two devices with the same name in TL2 (totally ok there), when they get put into the TL1 addrmap, one gets silently overwritten. This renames the second occurance as _1, third as _2, and so on... * junctions: blow if duplicates add to addrmap --- src/main/scala/junctions/addrmap.scala | 2 ++ src/main/scala/rocketchip/Utils.scala | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/scala/junctions/addrmap.scala b/src/main/scala/junctions/addrmap.scala index 275e4ff3..56158001 100644 --- a/src/main/scala/junctions/addrmap.scala +++ b/src/main/scala/junctions/addrmap.scala @@ -75,6 +75,8 @@ class AddrMap( var prot = 0 var cacheable = true for (AddrMapEntry(name, r) <- entriesIn) { + require (!mapping.contains(name)) + if (r.start != 0) { base = r.start } else { diff --git a/src/main/scala/rocketchip/Utils.scala b/src/main/scala/rocketchip/Utils.scala index 45d54811..ac93ad9d 100644 --- a/src/main/scala/rocketchip/Utils.scala +++ b/src/main/scala/rocketchip/Utils.scala @@ -83,7 +83,12 @@ object GenerateGlobalAddrMap { } }.flatten - lazy val tl2AddrMap = new AddrMap(tl2Devices, collapse = true) + lazy val uniquelyNamedTL2Devices = + tl2Devices.groupBy(_.name).values.map(_.zipWithIndex.map { + case (e, i) => if (i == 0) e else e.copy(name = e.name + "_" + i) + }).flatten.toList + + lazy val tl2AddrMap = new AddrMap(uniquelyNamedTL2Devices, collapse = true) lazy val pBusIOAddrMap = new AddrMap(AddrMapEntry("TL2", tl2AddrMap) +: (p(ExtMMIOPorts) ++ pDevicesEntries), collapse = true) val memBase = 0x80000000L