diff --git a/tapeout/src/main/scala/transforms/.pads/AddIOPadsTransform.scala b/tapeout/src/main/scala/transforms/.pads/AddIOPadsTransform.scala index 1d12adb8..b79c1093 100644 --- a/tapeout/src/main/scala/transforms/.pads/AddIOPadsTransform.scala +++ b/tapeout/src/main/scala/transforms/.pads/AddIOPadsTransform.scala @@ -5,12 +5,18 @@ package barstools.tapeout.transforms.pads import firrtl._ import firrtl.passes._ import barstools.tapeout.transforms._ +import firrtl.options.Dependency +import firrtl.stage.Forms +import firrtl.stage.TransformManager.TransformDependency import scala.collection.mutable // Main Add IO Pad transform operates on low Firrtl class AddIOPadsTransform extends Transform with SeqTransformBased with DependencyAPIMigration { + override def prerequisites: Seq[TransformDependency] = Forms.LowForm + override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters + val transformList = new mutable.ArrayBuffer[Transform] def transforms: Seq[Transform] = transformList diff --git a/tapeout/src/main/scala/transforms/AddSuffixToModuleNames.scala b/tapeout/src/main/scala/transforms/AddSuffixToModuleNames.scala index ff8c1857..ada3a719 100644 --- a/tapeout/src/main/scala/transforms/AddSuffixToModuleNames.scala +++ b/tapeout/src/main/scala/transforms/AddSuffixToModuleNames.scala @@ -6,6 +6,8 @@ import firrtl._ import firrtl.ir._ import firrtl.annotations._ import firrtl.Mappers._ +import firrtl.stage.Forms +import firrtl.stage.TransformManager.TransformDependency case class KeepNameAnnotation(target: ModuleTarget) extends SingleTargetAnnotation[ModuleTarget] { @@ -23,6 +25,9 @@ case class ModuleNameSuffixAnnotation(target: CircuitTarget, suffix: String) // emitted, this should be safe. class AddSuffixToModuleNames extends Transform with DependencyAPIMigration { + override def prerequisites: Seq[TransformDependency] = Forms.LowForm + override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters + def processAnnos(annos: AnnotationSeq): (AnnotationSeq, (String) => String) = { val whitelist = annos.collect({ case KeepNameAnnotation(tgt) => tgt.module }).toSet val newAnnos = annos.filterNot(_.isInstanceOf[ModuleNameSuffixAnnotation]) diff --git a/tapeout/src/main/scala/transforms/EnumerateModules.scala b/tapeout/src/main/scala/transforms/EnumerateModules.scala index 4bd2855f..f1f66033 100644 --- a/tapeout/src/main/scala/transforms/EnumerateModules.scala +++ b/tapeout/src/main/scala/transforms/EnumerateModules.scala @@ -5,6 +5,8 @@ package barstools.tapeout.transforms import firrtl._ import firrtl.ir._ import firrtl.passes.Pass +import firrtl.stage.Forms +import firrtl.stage.TransformManager.TransformDependency class EnumerateModulesPass(enumerate: (Module) => Unit) extends Pass { @@ -23,6 +25,9 @@ class EnumerateModulesPass(enumerate: (Module) => Unit) extends Pass { class EnumerateModules(enumerate: (Module) => Unit) extends Transform with SeqTransformBased with DependencyAPIMigration { + override def prerequisites: Seq[TransformDependency] = Forms.LowForm + override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters + def transforms: Seq[Transform] = Seq(new EnumerateModulesPass(enumerate)) def execute(state: CircuitState): CircuitState = { diff --git a/tapeout/src/main/scala/transforms/ResetInverter.scala b/tapeout/src/main/scala/transforms/ResetInverter.scala index e6bdad45..2cbbd45a 100644 --- a/tapeout/src/main/scala/transforms/ResetInverter.scala +++ b/tapeout/src/main/scala/transforms/ResetInverter.scala @@ -7,6 +7,8 @@ import firrtl.PrimOps.Not import firrtl.annotations.{Annotation, CircuitName, ModuleName, SingleTargetAnnotation} import firrtl.ir._ import firrtl.passes.Pass +import firrtl.stage.Forms +import firrtl.stage.TransformManager.TransformDependency import firrtl.{CircuitState, DependencyAPIMigration, Transform} case class ResetInverterAnnotation(target: ModuleName) extends SingleTargetAnnotation[ModuleName] { @@ -39,6 +41,10 @@ object ResetN extends Pass { } class ResetInverterTransform extends Transform with DependencyAPIMigration { + + override def prerequisites: Seq[TransformDependency] = Forms.LowForm + override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters + override def execute(state: CircuitState): CircuitState = { state.annotations.filter(_.isInstanceOf[ResetInverterAnnotation]) match { case Nil => state diff --git a/tapeout/src/main/scala/transforms/retime/Retime.scala b/tapeout/src/main/scala/transforms/retime/Retime.scala index f790f7b3..e554bead 100644 --- a/tapeout/src/main/scala/transforms/retime/Retime.scala +++ b/tapeout/src/main/scala/transforms/retime/Retime.scala @@ -4,6 +4,8 @@ package barstools.tapeout.transforms.retime import chisel3.experimental.RunFirrtlTransform import firrtl.annotations._ +import firrtl.stage.Forms +import firrtl.stage.TransformManager.TransformDependency import firrtl.{CircuitState, DependencyAPIMigration, Transform} case class RetimeAnnotation(target: Named) extends SingleTargetAnnotation[Named] { @@ -11,6 +13,10 @@ case class RetimeAnnotation(target: Named) extends SingleTargetAnnotation[Named] } class RetimeTransform extends Transform with DependencyAPIMigration { + + override def prerequisites: Seq[TransformDependency] = Forms.LowForm + override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters + override def execute(state: CircuitState): CircuitState = { state.annotations.filter(_.isInstanceOf[RetimeAnnotation]) match { case Nil => state diff --git a/tapeout/src/main/scala/transforms/utils/FileUtils.scala b/tapeout/src/main/scala/transforms/utils/FileUtils.scala index 76ee45ec..0d38d376 100644 --- a/tapeout/src/main/scala/transforms/utils/FileUtils.scala +++ b/tapeout/src/main/scala/transforms/utils/FileUtils.scala @@ -5,6 +5,8 @@ package barstools.tapeout.transforms import chisel3.experimental.{ChiselAnnotation, annotate} import firrtl._ import firrtl.annotations._ +import firrtl.stage.Forms +import firrtl.stage.TransformManager.TransformDependency import firrtl.transforms.BlackBoxTargetDirAnno object WriteConfig { @@ -50,6 +52,10 @@ case class TechnologyLocationAnnotation(dir: String) extends SingleTargetAnnotat } class TechnologyLocation extends Transform with DependencyAPIMigration { + + override def prerequisites: Seq[TransformDependency] = Forms.LowForm + override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters + def execute(state: CircuitState): CircuitState = { throw new Exception("Technology Location transform execution doesn't work!") }