diff options
| author | Adam Izraelevitz | 2019-05-09 12:06:29 -0700 |
|---|---|---|
| committer | mergify[bot] | 2019-05-09 19:06:29 +0000 |
| commit | 524b8957e36a7ac931ca0fe042a64fce80195057 (patch) | |
| tree | 9150d162c32d3dc27dfc5b12d81642d8a01b3490 /src | |
| parent | 14b9ead2ee028ba977e9c61eff962380d4e87d30 (diff) | |
Bugfix: GroupComponents (#1082)
* Added test to GroupComponentsSpec demonstrating bug
* Added bugfix to GroupComponents for invalid ports of grouped instances
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/transforms/GroupComponents.scala | 5 | ||||
| -rw-r--r-- | src/test/scala/firrtlTests/transforms/GroupComponentsSpec.scala | 37 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/transforms/GroupComponents.scala b/src/main/scala/firrtl/transforms/GroupComponents.scala index 8c36bb6d..6e149762 100644 --- a/src/main/scala/firrtl/transforms/GroupComponents.scala +++ b/src/main/scala/firrtl/transforms/GroupComponents.scala @@ -264,6 +264,11 @@ class GroupComponents extends firrtl.Transform { val group = byNode(getWRef(c.loc).name) groupStatements(group) += Connect(c.info, c.loc, inGroupFixExps(group, topStmts)(c.expr)) Block(topStmts) + case i: IsInvalid if byNode(getWRef(i.expr).name) != "" => + // Sink is in group + val group = byNode(getWRef(i.expr).name) + groupStatements(group) += i + EmptyStmt // TODO Attach if all are in a group? case _: IsDeclaration | _: Connect | _: Attach => // Sink is in Top diff --git a/src/test/scala/firrtlTests/transforms/GroupComponentsSpec.scala b/src/test/scala/firrtlTests/transforms/GroupComponentsSpec.scala index b4c27875..f731073b 100644 --- a/src/test/scala/firrtlTests/transforms/GroupComponentsSpec.scala +++ b/src/test/scala/firrtlTests/transforms/GroupComponentsSpec.scala @@ -331,6 +331,43 @@ class GroupComponentsSpec extends MiddleTransformSpec { """.stripMargin execute(input, check, groups) } + + "Instances with uninitialized ports" should "work properly" in { + val input = + s"""circuit $top : + | module $top : + | input in: UInt<16> + | output out: UInt<16> + | inst other of Other + | other is invalid + | out <= add(in, other.out) + | module Other: + | input in: UInt<16> + | output out: UInt<16> + | out <= add(asUInt(in), UInt(1)) + """.stripMargin + val groups = Seq( + GroupAnnotation(Seq(topComp("other")), "Wrapper", "wrapper") + ) + val check = + s"""circuit $top : + | module $top : + | input in: UInt<16> + | output out: UInt<16> + | inst wrapper of Wrapper + | out <= add(in, wrapper.other_out) + | module Wrapper : + | output other_out: UInt<16> + | inst other of Other + | other_out <= other.out + | other.in is invalid + | module Other: + | input in: UInt<16> + | output out: UInt<16> + | out <= add(asUInt(in), UInt(1)) + """.stripMargin + execute(input, check, groups) + } } class GroupComponentsIntegrationSpec extends FirrtlFlatSpec { |
