- Simplest way to make custom transforms run in same place as they did prior to Dependency API
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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!")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user