- Simplest way to make custom transforms run in same place as they did prior to Dependency API

This commit is contained in:
chick
2020-09-28 15:20:42 -07:00
parent d06d8cc16c
commit 0430403920
6 changed files with 34 additions and 0 deletions

View File

@@ -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

View File

@@ -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])

View File

@@ -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 = {

View File

@@ -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

View File

@@ -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

View File

@@ -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!")
}