aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Koenig2021-09-11 00:29:10 -0700
committerGitHub2021-09-11 00:29:10 -0700
commitbeb5bc9850fd69adff36f38fb00a1f68bb1918fe (patch)
tree7288c60abd0a4507df57acddea80232cdae9ca95
parentc7917c88f8e8aaa93255a731c75f3e0e6901e2fb (diff)
Remove BlackBoxSourceHelper from ReplaceMemTransform (#2355)
BlackBoxSourceHelper should only run late in compilation to allow transforms to tweak its behavior (eg. changing BlackBoxTargetDirAnno).
-rw-r--r--src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala4
-rw-r--r--src/test/scala/firrtlTests/ReplSeqMemTests.scala3
-rw-r--r--src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala47
3 files changed, 48 insertions, 6 deletions
diff --git a/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala b/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala
index 6f883db2..9acccafa 100644
--- a/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala
+++ b/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala
@@ -9,7 +9,6 @@ import firrtl.annotations._
import firrtl.options.{CustomFileEmission, Dependency, HasShellOptions, ShellOption}
import firrtl.passes.wiring._
import firrtl.stage.{Forms, RunFirrtlTransformAnnotation}
-import firrtl.transforms.BlackBoxSourceHelper
import java.io.{CharArrayWriter, PrintWriter}
@@ -161,7 +160,6 @@ class ReplSeqMem extends SeqTransform with HasShellOptions with DependencyAPIMig
new ResolveMemoryReference,
new ReplaceMemMacros,
new WiringTransform,
- new DumpMemoryAnnotations,
- new BlackBoxSourceHelper
+ new DumpMemoryAnnotations
)
}
diff --git a/src/test/scala/firrtlTests/ReplSeqMemTests.scala b/src/test/scala/firrtlTests/ReplSeqMemTests.scala
index 9f83bec2..924c767f 100644
--- a/src/test/scala/firrtlTests/ReplSeqMemTests.scala
+++ b/src/test/scala/firrtlTests/ReplSeqMemTests.scala
@@ -39,7 +39,8 @@ class ReplSeqMemSpec extends SimpleTransformSpec {
def outputForm = LowForm
def transforms =
Seq(new ConstantPropagation, CommonSubexpressionElimination, new DeadCodeElimination, RemoveEmpty)
- }
+ },
+ new BlackBoxSourceHelper
)
def checkMemConf(circuitState: CircuitState, mems: Set[MemConf]) {
diff --git a/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala b/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala
index 81b5fd5d..45be4cb3 100644
--- a/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala
+++ b/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala
@@ -2,16 +2,37 @@
package firrtlTests.transforms
-import firrtl.annotations.{CircuitName, ModuleName}
+import firrtl.annotations._
import firrtl.transforms._
-import firrtl.{Transform, VerilogEmitter}
+import firrtl._
import firrtl.FileUtils
import firrtl.testutils.LowTransformSpec
+import firrtl.stage._
+import firrtl.options.Dependency
+import java.io.File
+import firrtl.util.BackendCompilationUtilities.createTestDirectory
+import _root_.logger._
+
+class ChangeBlackBoxTargetDir extends Transform with DependencyAPIMigration {
+ override def prerequisites =
+ Dependency[firrtl.passes.memlib.ReplSeqMem] +: Forms.LowFormOptimized
+ override def optionalPrerequisiteOf = Forms.BackendEmitters
+ override def invalidates(a: Transform): Boolean = false
+
+ def execute(state: CircuitState): CircuitState = {
+ val annosx = state.annotations.map {
+ case BlackBoxTargetDirAnno(dir) => BlackBoxTargetDirAnno(s"$dir/subdir")
+ case other => other
+ }
+ state.copy(annotations = annosx)
+ }
+}
class BlacklBoxSourceHelperTransformSpec extends LowTransformSpec {
def transform: Transform = new BlackBoxSourceHelper
private val moduleName = ModuleName("Top", CircuitName("Top"))
+ private val bbTarget = CircuitTarget("Top").module("AdderExtModule")
private val input = """
|circuit Top :
|
@@ -150,4 +171,26 @@ class BlacklBoxSourceHelperTransformSpec extends LowTransformSpec {
)
}
+ "BlackBoxSourceHelper" should "not run until late" in {
+ val name = "BlackBoxSourceHelper_late"
+
+ val dir = createTestDirectory(name)
+ val subdir = new File(dir, "subdir")
+
+ val filename = "BFFAdd.v"
+
+ val annos = List(
+ FirrtlSourceAnnotation(input),
+ RunFirrtlTransformAnnotation(new ChangeBlackBoxTargetDir),
+ BlackBoxTargetDirAnno(dir.toString),
+ BlackBoxInlineAnno(bbTarget, filename, "<contentx>"),
+ EmitCircuitAnnotation(classOf[VerilogEmitter]),
+ LogLevelAnnotation(LogLevel.Debug)
+ )
+
+ (new FirrtlPhase).transform(annos)
+
+ new File(subdir, filename) should exist
+ new File(dir, filename) shouldNot exist
+ }
}