diff options
| author | Jack Koenig | 2019-01-04 13:39:04 -0800 |
|---|---|---|
| committer | Jack Koenig | 2019-01-04 16:13:54 -0800 |
| commit | 1931649a050619a711c066f669d93d436bd03296 (patch) | |
| tree | f130774f6b1b4fec295ddc9a6d987bc41d9a36ad /src/main | |
| parent | 8bc25bbc0ff998565afd153a44bf8f11316ba0f0 (diff) | |
Fix GroupComponents to work with unused components
Previously, components that did not affect the output would cause
exceptions because they were missing from the label2group Map. This
commit treats them as "reachable" by the ports so they are included in
the default "ungrouped" group.
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/scala/firrtl/transforms/GroupComponents.scala | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/transforms/GroupComponents.scala b/src/main/scala/firrtl/transforms/GroupComponents.scala index 805b534e..8c36bb6d 100644 --- a/src/main/scala/firrtl/transforms/GroupComponents.scala +++ b/src/main/scala/firrtl/transforms/GroupComponents.scala @@ -119,6 +119,11 @@ class GroupComponents extends firrtl.Transform { } } + // Unused nodes are not reachable from any group nor the root--add them to root group + for ((v, _) <- deps.getEdgeMap) { + reachableNodes.getOrElseUpdate(v, mutable.Set("")) + } + // Add nodes who are reached by a single group, to that group reachableNodes.foreach { case (node, membership) => if(membership.size == 1) { @@ -307,7 +312,9 @@ class GroupComponents extends firrtl.Transform { } def onStmt(stmt: Statement): Unit = stmt match { case w: WDefInstance => - case h: IsDeclaration => h map onExpr(WRef(h.name)) + case h: IsDeclaration => + bidirGraph.addVertex(h.name) + h map onExpr(WRef(h.name)) case Attach(_, exprs) => // Add edge between each expression exprs.tail map onExpr(getWRef(exprs.head)) case Connect(_, loc, expr) => |
