From 33e6272ed8cac19e3e130c7b7e8a6698c092ad00 Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Mon, 22 Apr 2024 20:13:55 -0700 Subject: [PATCH] Remove old TapeoutStage/ModelStageMain stuff --- .../scala/transforms/ExtraTransforms.scala | 26 ------ .../transforms/GenerateModelStageMain.scala | 51 ------------ .../main/scala/transforms/retime/Retime.scala | 48 ----------- .../scala/transforms/stage/TapeoutStage.scala | 50 ------------ .../scala/transforms/utils/FileUtils.scala | 79 ------------------- .../transforms/utils/LowerAnnotations.scala | 5 -- .../transforms/utils/ProgrammaticBundle.scala | 27 ------- .../scala/transforms/utils/YamlHelpers.scala | 23 ------ 8 files changed, 309 deletions(-) delete mode 100644 tools/tapeout/src/main/scala/transforms/ExtraTransforms.scala delete mode 100644 tools/tapeout/src/main/scala/transforms/GenerateModelStageMain.scala delete mode 100644 tools/tapeout/src/main/scala/transforms/retime/Retime.scala delete mode 100644 tools/tapeout/src/main/scala/transforms/stage/TapeoutStage.scala delete mode 100644 tools/tapeout/src/main/scala/transforms/utils/FileUtils.scala delete mode 100644 tools/tapeout/src/main/scala/transforms/utils/LowerAnnotations.scala delete mode 100644 tools/tapeout/src/main/scala/transforms/utils/ProgrammaticBundle.scala delete mode 100644 tools/tapeout/src/main/scala/transforms/utils/YamlHelpers.scala diff --git a/tools/tapeout/src/main/scala/transforms/ExtraTransforms.scala b/tools/tapeout/src/main/scala/transforms/ExtraTransforms.scala deleted file mode 100644 index 4b427653..00000000 --- a/tools/tapeout/src/main/scala/transforms/ExtraTransforms.scala +++ /dev/null @@ -1,26 +0,0 @@ -// See LICENSE for license details. - -package tapeout.transforms - -import firrtl.Mappers._ -import firrtl._ -import firrtl.annotations.{CircuitTarget, ModuleTarget, SingleTargetAnnotation} -import firrtl.ir._ -import firrtl.stage.Forms -import firrtl.stage.TransformManager.TransformDependency -import firrtl.options.{Dependency} - -class ExtraLowTransforms extends Transform with DependencyAPIMigration { - // this PropagatePresetAnnotations is needed to run the RemoveValidIf pass (that is removed from CIRCT). - // additionally, since that pass isn't explicitly a prereq of the LowFormEmitter it - // needs to wrapped in this xform - override def prerequisites: Seq[TransformDependency] = Forms.LowForm :+ - Dependency[firrtl.transforms.PropagatePresetAnnotations] - override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized - override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters - override def invalidates(a: Transform): Boolean = false - - def execute(state: CircuitState): CircuitState = { - state - } -} diff --git a/tools/tapeout/src/main/scala/transforms/GenerateModelStageMain.scala b/tools/tapeout/src/main/scala/transforms/GenerateModelStageMain.scala deleted file mode 100644 index 5a1a3fdb..00000000 --- a/tools/tapeout/src/main/scala/transforms/GenerateModelStageMain.scala +++ /dev/null @@ -1,51 +0,0 @@ -package tapeout.transforms - -import tapeout.transforms.stage._ -import firrtl._ -import firrtl.annotations._ -import firrtl.ir._ -import firrtl.options.{Dependency, InputAnnotationFileAnnotation, StageMain} -import firrtl.stage.{FirrtlCircuitAnnotation, FirrtlStage, RunFirrtlTransformAnnotation} -import logger.LazyLogging - -private class GenerateModelStageMain(annotations: AnnotationSeq) extends LazyLogging { - val outAnno: Option[String] = annotations.collectFirst { case OutAnnoAnnotation(s) => s } - - val annoFiles: List[String] = annotations.flatMap { - case InputAnnotationFileAnnotation(f) => Some(f) - case _ => None - }.toList - - // Dump firrtl and annotation files - // Use global param outAnno - protected def dumpAnnos( - annotations: AnnotationSeq - ): Unit = { - outAnno.foreach { annoPath => - val outputFile = new java.io.PrintWriter(annoPath) - outputFile.write(JsonProtocol.serialize(annotations.filter(_ match { - case _: DeletedAnnotation => false - case _: EmittedComponent => false - case _: EmittedAnnotation[_] => false - case _: FirrtlCircuitAnnotation => false - case _: OutAnnoAnnotation => false - case _ => true - }))) - outputFile.close() - } - } - - def executeStageMain(): Unit = { - val annos = new FirrtlStage().execute(Array.empty, annotations) - - annos.collectFirst { case FirrtlCircuitAnnotation(circuit) => circuit } match { - case Some(circuit) => - dumpAnnos(annos) - case _ => - throw new Exception(s"executeStageMain failed while executing FIRRTL!\n") - } - } -} - -// main run class -object GenerateModelStageMain extends StageMain(new TapeoutStage()) diff --git a/tools/tapeout/src/main/scala/transforms/retime/Retime.scala b/tools/tapeout/src/main/scala/transforms/retime/Retime.scala deleted file mode 100644 index 321f3d42..00000000 --- a/tools/tapeout/src/main/scala/transforms/retime/Retime.scala +++ /dev/null @@ -1,48 +0,0 @@ -// See LICENSE for license details. - -package 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] { - override def duplicate(n: Named): Annotation = RetimeAnnotation(n) -} - -class RetimeTransform extends Transform with DependencyAPIMigration { - - override def prerequisites: Seq[TransformDependency] = Forms.LowForm - override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized - override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters - override def invalidates(a: Transform): Boolean = false - - override def execute(state: CircuitState): CircuitState = { - state.annotations.filter(_.isInstanceOf[RetimeAnnotation]) match { - case Nil => state - case seq => - seq.foreach { - case RetimeAnnotation(ModuleName(module, CircuitName(_))) => - logger.info(s"Retiming module $module") - case RetimeAnnotation(ComponentName(name, ModuleName(module, CircuitName(_)))) => - logger.info(s"Retiming instance $module.$name") - case _ => - throw new Exception(s"There should be RetimeAnnotations, got ${seq.mkString(" -- ")}") - } - state - } - } -} - -trait RetimeLib { - self: chisel3.Module => - - def retime[T <: chisel3.Module](module: T): Unit = { - chisel3.experimental.annotate(new chisel3.experimental.ChiselAnnotation with RunFirrtlTransform { - def transformClass: Class[_ <: Transform] = classOf[RetimeTransform] - def toFirrtl: Annotation = RetimeAnnotation(module.toNamed) - }) - } -} diff --git a/tools/tapeout/src/main/scala/transforms/stage/TapeoutStage.scala b/tools/tapeout/src/main/scala/transforms/stage/TapeoutStage.scala deleted file mode 100644 index 5fdadf23..00000000 --- a/tools/tapeout/src/main/scala/transforms/stage/TapeoutStage.scala +++ /dev/null @@ -1,50 +0,0 @@ -// See LICENSE for license details. - -package tapeout.transforms.stage - -import tapeout.transforms.GenerateModelStageMain -import chisel3.stage.ChiselCli -import firrtl.stage.{RunFirrtlTransformAnnotation} -import firrtl.AnnotationSeq -import firrtl.annotations.{Annotation, NoTargetAnnotation} -import firrtl.options.{HasShellOptions, Shell, ShellOption, Stage, Unserializable} -import firrtl.stage.FirrtlCli -import logger.Logger - -sealed trait TapeoutOption extends Unserializable { - this: Annotation => -} - -case class OutAnnoAnnotation(outAnno: String) extends NoTargetAnnotation with TapeoutOption - -object OutAnnoAnnotation extends HasShellOptions { - val options: Seq[ShellOption[_]] = Seq( - new ShellOption[String]( - longOption = "out-anno-file", - shortOption = Some("oaf"), - toAnnotationSeq = (s: String) => Seq(OutAnnoAnnotation(s)), - helpText = "out-anno-file" - ) - ) -} - -trait TapeoutCli { - this: Shell => - parser.note("Tapeout specific options") - - Seq( - OutAnnoAnnotation - ).foreach(_.addOptions(parser)) -} - -class TapeoutStage() extends Stage { - override val shell: Shell = new Shell(applicationName = "tapeout") with TapeoutCli with ChiselCli with FirrtlCli - - override def run(annotations: AnnotationSeq): AnnotationSeq = { - Logger.makeScope(annotations) { - val stageMain = new GenerateModelStageMain(annotations) - stageMain.executeStageMain() - } - annotations - } -} diff --git a/tools/tapeout/src/main/scala/transforms/utils/FileUtils.scala b/tools/tapeout/src/main/scala/transforms/utils/FileUtils.scala deleted file mode 100644 index 5c18aa18..00000000 --- a/tools/tapeout/src/main/scala/transforms/utils/FileUtils.scala +++ /dev/null @@ -1,79 +0,0 @@ -// See LICENSE for license details. - -package tapeout.transforms.utils - -import chisel3.experimental.{annotate, ChiselAnnotation} -import firrtl._ -import firrtl.annotations._ -import firrtl.stage.Forms -import firrtl.stage.TransformManager.TransformDependency -import firrtl.transforms.BlackBoxTargetDirAnno - -object WriteConfig { - def apply(dir: String, file: String, contents: String): Unit = { - val writer = new java.io.PrintWriter(new java.io.File(s"$dir/$file")) - writer.write(contents) - writer.close() - } -} - -object GetTargetDir { - def apply(state: CircuitState): String = { - val annos = state.annotations - val destDir = annos.map { - case BlackBoxTargetDirAnno(s) => Some(s) - case _ => None - }.flatten - val loc = { - if (destDir.isEmpty) "." - else destDir.head - } - val targetDir = new java.io.File(loc) - if (!targetDir.exists()) FileUtils.makeDirectory(targetDir.getAbsolutePath) - loc - } -} - -trait HasSetTechnologyLocation { - self: chisel3.Module => - - def setTechnologyLocation(dir: String) { - annotate(new ChiselAnnotation { - override def toFirrtl: Annotation = { - TechnologyLocationAnnotation(dir) - } - }) - } -} - -case class TechnologyLocationAnnotation(dir: String) extends SingleTargetAnnotation[CircuitName] { - val target: CircuitName = CircuitName("All") - override def duplicate(n: CircuitName): Annotation = TechnologyLocationAnnotation(dir) -} - -class TechnologyLocation extends Transform with DependencyAPIMigration { - - override def prerequisites: Seq[TransformDependency] = Forms.LowForm - override def optionalPrerequisites: Seq[TransformDependency] = Forms.LowFormOptimized - override def optionalPrerequisiteOf: Seq[TransformDependency] = Forms.LowEmitters - - def execute(state: CircuitState): CircuitState = { - throw new Exception("Technology Location transform execution doesn't work!") - } - - def get(state: CircuitState): String = { - val annos = state.annotations - val dir = annos.flatMap { - case TechnologyLocationAnnotation(dir) => Some(dir) - case _ => None - } - dir.length match { - case 0 => "" - case 1 => - val targetDir = new java.io.File(dir.head) - if (!targetDir.exists()) throw new Exception(s"Technology yaml directory $targetDir doesn't exist!") - dir.head - case _ => throw new Exception("Only 1 tech directory annotation allowed!") - } - } -} diff --git a/tools/tapeout/src/main/scala/transforms/utils/LowerAnnotations.scala b/tools/tapeout/src/main/scala/transforms/utils/LowerAnnotations.scala deleted file mode 100644 index ef417e2c..00000000 --- a/tools/tapeout/src/main/scala/transforms/utils/LowerAnnotations.scala +++ /dev/null @@ -1,5 +0,0 @@ -package tapeout.transforms.utils - -object LowerName { - def apply(s: String): String = s.replace(".", "_").replace("[", "_").replace("]", "") -} diff --git a/tools/tapeout/src/main/scala/transforms/utils/ProgrammaticBundle.scala b/tools/tapeout/src/main/scala/transforms/utils/ProgrammaticBundle.scala deleted file mode 100644 index 6c277fea..00000000 --- a/tools/tapeout/src/main/scala/transforms/utils/ProgrammaticBundle.scala +++ /dev/null @@ -1,27 +0,0 @@ -package tapeout.transforms.utils - -import chisel3._ - -import scala.collection.immutable.ListMap - -class CustomBundle[T <: Data](elts: (String, T)*) extends Record { - val elements = ListMap(elts.map { case (field, elt) => field -> chiselTypeOf(elt) }: _*) - def apply(elt: String): T = elements(elt) - def apply(elt: Int): T = elements(elt.toString) -} - -class CustomIndexedBundle[T <: Data](elts: (Int, T)*) extends Record { - // Must be String, Data - val elements = ListMap(elts.map { case (field, elt) => field.toString -> chiselTypeOf(elt) }: _*) - // TODO: Make an equivalent to the below work publicly (or only on subclasses?) - def indexedElements = ListMap(elts.map { case (field, elt) => field -> chiselTypeOf(elt) }: _*) - def apply(elt: Int): T = elements(elt.toString) -} - -object CustomIndexedBundle { - def apply[T <: Data](gen: T, idxs: Seq[Int]) = new CustomIndexedBundle(idxs.map(_ -> gen): _*) - // Allows Vecs of elements of different types/widths - def apply[T <: Data](gen: Seq[T]) = new CustomIndexedBundle(gen.zipWithIndex.map { case (elt, field) => - field -> elt - }: _*) -} diff --git a/tools/tapeout/src/main/scala/transforms/utils/YamlHelpers.scala b/tools/tapeout/src/main/scala/transforms/utils/YamlHelpers.scala deleted file mode 100644 index 0dae7ffa..00000000 --- a/tools/tapeout/src/main/scala/transforms/utils/YamlHelpers.scala +++ /dev/null @@ -1,23 +0,0 @@ -package tapeout.transforms.utils - -import firrtl.FileUtils -import net.jcazevedo.moultingyaml._ - -import java.io.File - -class YamlFileReader(resource: String) { - def parse[A](file: String = "")(implicit reader: YamlReader[A]): Seq[A] = { - // If the user doesn't provide a Yaml file name, use defaults - val yamlString = file match { - case f if f.isEmpty => - // Use example config if no file is provided - val stream = FileUtils.getTextResource(resource) - stream - case f if new File(f).exists => - FileUtils.getText(f) - case _ => - throw new Exception("No valid Yaml file found!") - } - yamlString.parseYamls.map(x => reader.read(x)) - } -}