summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/scala/chisel3/internal/Builder.scala9
-rw-r--r--src/test/scala/chiselTests/naming/PrefixSpec.scala26
2 files changed, 32 insertions, 3 deletions
diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala
index 9f79fe1e..e3dfff09 100644
--- a/core/src/main/scala/chisel3/internal/Builder.scala
+++ b/core/src/main/scala/chisel3/internal/Builder.scala
@@ -170,9 +170,12 @@ private[chisel3] trait HasId extends InstanceId {
* @return this object
*/
def suggestName(seed: => String): this.type = {
- if (suggested_seed.isEmpty) suggested_seedVar = seed
- naming_prefix = Builder.getPrefix
- for (hook <- suggest_postseed_hooks.reverse) { hook(seed) }
+ if (suggested_seed.isEmpty) {
+ suggested_seedVar = seed
+ // Only set the prefix if a seed hasn't been suggested
+ naming_prefix = Builder.getPrefix
+ for (hook <- suggest_postseed_hooks.reverse) { hook(seed) }
+ }
this
}
diff --git a/src/test/scala/chiselTests/naming/PrefixSpec.scala b/src/test/scala/chiselTests/naming/PrefixSpec.scala
index b5eac1d4..d8cb3348 100644
--- a/src/test/scala/chiselTests/naming/PrefixSpec.scala
+++ b/src/test/scala/chiselTests/naming/PrefixSpec.scala
@@ -521,4 +521,30 @@ class PrefixSpec extends ChiselPropSpec with Utils {
Select.wires(top).map(_.instanceName) should be(List("nonData_value", "value"))
}
}
+ property("Prefixing should not be affected by repeated calls of suggestName") {
+ class Test extends Module {
+ val in = IO(Input(UInt(3.W)))
+ val prefixed = {
+ val wire = Wire(UInt(3.W)).suggestName("wire") // "prefixed_wire"
+ wire := in
+
+ val thisShouldNotBeHere = {
+ // Second suggestName doesn't modify the instanceName since it was
+ // already suggested, but also should not modify the prefix either
+
+ // Incorrect behavior would rename the wire to
+ // "prefixed_thisShouldNotBeHere_wire"
+ wire.suggestName("wire")
+
+ val out = IO(Output(UInt(3.W)))
+ out := wire
+ out
+ }
+ thisShouldNotBeHere
+ }
+ }
+ aspectTest(() => new Test) { top: Test =>
+ Select.wires(top).map(_.instanceName) should be(List("prefixed_wire"))
+ }
+ }
}