diff options
| author | Schuyler Eldridge | 2019-10-09 20:07:26 -0400 |
|---|---|---|
| committer | GitHub | 2019-10-09 20:07:26 -0400 |
| commit | 973ecf516c0ef2b222f2eb68dc8b514767db59af (patch) | |
| tree | 8788b25bafa0d4198d3af077070a4616aac09ecb /src | |
| parent | 357eba4c2b1549de70843899b4dae7d657757d50 (diff) | |
| parent | 75fd8d3eec98adb2f777e609ae1beea57ee5eedd (diff) | |
Merge pull request #1199 from freechipsproject/top-wiring-idempotent
Make TopWiringTransform Idempotent
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/transforms/TopWiring.scala | 8 | ||||
| -rw-r--r-- | src/test/scala/firrtlTests/transforms/TopWiringTest.scala | 21 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/main/scala/firrtl/transforms/TopWiring.scala b/src/main/scala/firrtl/transforms/TopWiring.scala index 65281382..fb6f73b4 100644 --- a/src/main/scala/firrtl/transforms/TopWiring.scala +++ b/src/main/scala/firrtl/transforms/TopWiring.scala @@ -261,7 +261,13 @@ class TopWiringTransform extends Transform { val newCircuit = state.circuit.copy(modules = modulesx) val fixedCircuit = fixupCircuit(newCircuit) val mappings = sources(state.circuit.main).zipWithIndex - (state.copy(circuit = fixedCircuit), mappings) + + val annosx = state.annotations.filter { + case _: TopWiringAnnotation => false + case _ => true + } + + (state.copy(circuit = fixedCircuit, annotations = annosx), mappings) } else { (state, List.empty) } //Generate output files based on the mapping. diff --git a/src/test/scala/firrtlTests/transforms/TopWiringTest.scala b/src/test/scala/firrtlTests/transforms/TopWiringTest.scala index 9dd290f8..1c01d6d2 100644 --- a/src/test/scala/firrtlTests/transforms/TopWiringTest.scala +++ b/src/test/scala/firrtlTests/transforms/TopWiringTest.scala @@ -17,7 +17,8 @@ import firrtl.annotations.{ CircuitName, ModuleName, ComponentName, - Annotation + Annotation, + Target } import firrtl.transforms.TopWiring._ @@ -626,6 +627,24 @@ class TopWiringTests extends MiddleTransformSpec with TopWiringTestsCommon { case _ => fail } } + + "TopWiringTransform" should "remove TopWiringAnnotations" in { + val input = + """|circuit Top: + | module Top: + | wire foo: UInt<1>""".stripMargin + + val bar = + Target + .deserialize("~Top|Top>foo") + .toNamed match { case a: ComponentName => a } + + val annotations = Seq(TopWiringAnnotation(bar, "bar_")) + val outputState = (new TopWiringTransform).execute(CircuitState(Parser.parse(input), MidForm, annotations, None)) + + outputState.circuit.serialize should include ("output bar_foo") + outputState.annotations.toSeq should be (empty) + } } class AggregateTopWiringTests extends MiddleTransformSpec with TopWiringTestsCommon { |
