aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/passes/PadWidths.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/passes/PadWidths.scala')
-rw-r--r--src/main/scala/firrtl/passes/PadWidths.scala21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/passes/PadWidths.scala b/src/main/scala/firrtl/passes/PadWidths.scala
index cbd8250a..0b318511 100644
--- a/src/main/scala/firrtl/passes/PadWidths.scala
+++ b/src/main/scala/firrtl/passes/PadWidths.scala
@@ -6,9 +6,30 @@ package passes
import firrtl.ir._
import firrtl.PrimOps._
import firrtl.Mappers._
+import firrtl.options.Dependency
+
+import scala.collection.mutable
// Makes all implicit width extensions and truncations explicit
object PadWidths extends Pass {
+
+ override val prerequisites =
+ ((new mutable.LinkedHashSet())
+ ++ firrtl.stage.Forms.LowForm
+ - Dependency(firrtl.passes.Legalize)
+ + Dependency(firrtl.passes.RemoveValidIf)
+ + Dependency[firrtl.transforms.ConstantPropagation]).toSeq
+
+ override val dependents =
+ Seq( Dependency(firrtl.passes.memlib.VerilogMemDelays),
+ Dependency[SystemVerilogEmitter],
+ Dependency[VerilogEmitter] )
+
+ override def invalidates(a: Transform): Boolean = a match {
+ case _: firrtl.transforms.ConstantPropagation | Legalize => true
+ case _ => false
+ }
+
private def width(t: Type): Int = bitWidth(t).toInt
private def width(e: Expression): Int = width(e.tpe)
// Returns an expression with the correct integer width