aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/transforms/SortModules.scala23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/transforms/SortModules.scala b/src/main/scala/firrtl/transforms/SortModules.scala
new file mode 100644
index 00000000..ffac1661
--- /dev/null
+++ b/src/main/scala/firrtl/transforms/SortModules.scala
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: Apache-2.0
+
+package firrtl.transforms
+
+import firrtl.{CircuitState, DependencyAPIMigration, Transform}
+import firrtl.analyses.InstanceKeyGraph
+import firrtl.options.Dependency
+import firrtl.stage.Forms
+
+/** Return a circuit where all modules (and external modules) are defined before use. */
+class SortModules extends Transform with DependencyAPIMigration {
+
+ override def prerequisites = Seq(Dependency(firrtl.passes.CheckChirrtl))
+ override def optionalPrerequisites = Seq.empty
+ override def optionalPrerequisiteOf = Forms.ChirrtlEmitters
+ override def invalidates(a: Transform) = false
+
+ override def execute(state: CircuitState): CircuitState = {
+ val modulesx = InstanceKeyGraph(state.circuit).moduleOrder.reverse
+ state.copy(circuit = state.circuit.copy(modules = modulesx))
+ }
+
+}