- 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._
|
||||||
import firrtl.passes._
|
import firrtl.passes._
|
||||||
import barstools.tapeout.transforms._
|
import barstools.tapeout.transforms._
|
||||||
|
import firrtl.options.Dependency
|
||||||
|
import firrtl.stage.Forms
|
||||||
|
import firrtl.stage.TransformManager.TransformDependency
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
|
|
||||||
// Main Add IO Pad transform operates on low Firrtl
|
// Main Add IO Pad transform operates on low Firrtl
|
||||||
class AddIOPadsTransform extends Transform with SeqTransformBased with DependencyAPIMigration {
|
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]
|
val transformList = new mutable.ArrayBuffer[Transform]
|
||||||
def transforms: Seq[Transform] = transformList
|
def transforms: Seq[Transform] = transformList
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import firrtl._
|
|||||||
import firrtl.ir._
|
import firrtl.ir._
|
||||||
import firrtl.annotations._
|
import firrtl.annotations._
|
||||||
import firrtl.Mappers._
|
import firrtl.Mappers._
|
||||||
|
import firrtl.stage.Forms
|
||||||
|
import firrtl.stage.TransformManager.TransformDependency
|
||||||
|
|
||||||
case class KeepNameAnnotation(target: ModuleTarget)
|
case class KeepNameAnnotation(target: ModuleTarget)
|
||||||
extends SingleTargetAnnotation[ModuleTarget] {
|
extends SingleTargetAnnotation[ModuleTarget] {
|
||||||
@@ -23,6 +25,9 @@ case class ModuleNameSuffixAnnotation(target: CircuitTarget, suffix: String)
|
|||||||
// emitted, this should be safe.
|
// emitted, this should be safe.
|
||||||
class AddSuffixToModuleNames extends Transform with DependencyAPIMigration {
|
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) = {
|
def processAnnos(annos: AnnotationSeq): (AnnotationSeq, (String) => String) = {
|
||||||
val whitelist = annos.collect({ case KeepNameAnnotation(tgt) => tgt.module }).toSet
|
val whitelist = annos.collect({ case KeepNameAnnotation(tgt) => tgt.module }).toSet
|
||||||
val newAnnos = annos.filterNot(_.isInstanceOf[ModuleNameSuffixAnnotation])
|
val newAnnos = annos.filterNot(_.isInstanceOf[ModuleNameSuffixAnnotation])
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ package barstools.tapeout.transforms
|
|||||||
import firrtl._
|
import firrtl._
|
||||||
import firrtl.ir._
|
import firrtl.ir._
|
||||||
import firrtl.passes.Pass
|
import firrtl.passes.Pass
|
||||||
|
import firrtl.stage.Forms
|
||||||
|
import firrtl.stage.TransformManager.TransformDependency
|
||||||
|
|
||||||
class EnumerateModulesPass(enumerate: (Module) => Unit) extends Pass {
|
class EnumerateModulesPass(enumerate: (Module) => Unit) extends Pass {
|
||||||
|
|
||||||
@@ -23,6 +25,9 @@ class EnumerateModulesPass(enumerate: (Module) => Unit) extends Pass {
|
|||||||
class EnumerateModules(enumerate: (Module) => Unit)
|
class EnumerateModules(enumerate: (Module) => Unit)
|
||||||
extends Transform with SeqTransformBased with DependencyAPIMigration {
|
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 transforms: Seq[Transform] = Seq(new EnumerateModulesPass(enumerate))
|
||||||
|
|
||||||
def execute(state: CircuitState): CircuitState = {
|
def execute(state: CircuitState): CircuitState = {
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import firrtl.PrimOps.Not
|
|||||||
import firrtl.annotations.{Annotation, CircuitName, ModuleName, SingleTargetAnnotation}
|
import firrtl.annotations.{Annotation, CircuitName, ModuleName, SingleTargetAnnotation}
|
||||||
import firrtl.ir._
|
import firrtl.ir._
|
||||||
import firrtl.passes.Pass
|
import firrtl.passes.Pass
|
||||||
|
import firrtl.stage.Forms
|
||||||
|
import firrtl.stage.TransformManager.TransformDependency
|
||||||
import firrtl.{CircuitState, DependencyAPIMigration, Transform}
|
import firrtl.{CircuitState, DependencyAPIMigration, Transform}
|
||||||
|
|
||||||
case class ResetInverterAnnotation(target: ModuleName) extends SingleTargetAnnotation[ModuleName] {
|
case class ResetInverterAnnotation(target: ModuleName) extends SingleTargetAnnotation[ModuleName] {
|
||||||
@@ -39,6 +41,10 @@ object ResetN extends Pass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ResetInverterTransform extends Transform with DependencyAPIMigration {
|
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 = {
|
override def execute(state: CircuitState): CircuitState = {
|
||||||
state.annotations.filter(_.isInstanceOf[ResetInverterAnnotation]) match {
|
state.annotations.filter(_.isInstanceOf[ResetInverterAnnotation]) match {
|
||||||
case Nil => state
|
case Nil => state
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ package barstools.tapeout.transforms.retime
|
|||||||
|
|
||||||
import chisel3.experimental.RunFirrtlTransform
|
import chisel3.experimental.RunFirrtlTransform
|
||||||
import firrtl.annotations._
|
import firrtl.annotations._
|
||||||
|
import firrtl.stage.Forms
|
||||||
|
import firrtl.stage.TransformManager.TransformDependency
|
||||||
import firrtl.{CircuitState, DependencyAPIMigration, Transform}
|
import firrtl.{CircuitState, DependencyAPIMigration, Transform}
|
||||||
|
|
||||||
case class RetimeAnnotation(target: Named) extends SingleTargetAnnotation[Named] {
|
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 {
|
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 = {
|
override def execute(state: CircuitState): CircuitState = {
|
||||||
state.annotations.filter(_.isInstanceOf[RetimeAnnotation]) match {
|
state.annotations.filter(_.isInstanceOf[RetimeAnnotation]) match {
|
||||||
case Nil => state
|
case Nil => state
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ package barstools.tapeout.transforms
|
|||||||
import chisel3.experimental.{ChiselAnnotation, annotate}
|
import chisel3.experimental.{ChiselAnnotation, annotate}
|
||||||
import firrtl._
|
import firrtl._
|
||||||
import firrtl.annotations._
|
import firrtl.annotations._
|
||||||
|
import firrtl.stage.Forms
|
||||||
|
import firrtl.stage.TransformManager.TransformDependency
|
||||||
import firrtl.transforms.BlackBoxTargetDirAnno
|
import firrtl.transforms.BlackBoxTargetDirAnno
|
||||||
|
|
||||||
object WriteConfig {
|
object WriteConfig {
|
||||||
@@ -50,6 +52,10 @@ case class TechnologyLocationAnnotation(dir: String) extends SingleTargetAnnotat
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TechnologyLocation extends Transform with DependencyAPIMigration {
|
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 = {
|
def execute(state: CircuitState): CircuitState = {
|
||||||
throw new Exception("Technology Location transform execution doesn't work!")
|
throw new Exception("Technology Location transform execution doesn't work!")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user