summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel3
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-06-22 20:34:46 -0400
committerGitHub2020-06-22 20:34:46 -0400
commit9f44b593efe4830aeb56d17f5ed59277a74832f8 (patch)
treeac43010dd7fc2a14303497f95e12f2a40bb16d0e /src/main/scala/chisel3
parentd099d01ae6b11d8befdf7b32ab74c3167a552984 (diff)
parentb5e59895e13550006fd8e951b7e9483de00f82dd (diff)
Merge pull request #1481 from freechipsproject/driver-deprecations
Remove Deprecated Usages of chisel3.Driver, CircuitForm
Diffstat (limited to 'src/main/scala/chisel3')
-rw-r--r--src/main/scala/chisel3/Driver.scala3
-rw-r--r--src/main/scala/chisel3/compatibility.scala22
-rw-r--r--src/main/scala/chisel3/internal/firrtl/Emitter.scala2
-rw-r--r--src/main/scala/chisel3/testers/TesterDriver.scala68
4 files changed, 56 insertions, 39 deletions
diff --git a/src/main/scala/chisel3/Driver.scala b/src/main/scala/chisel3/Driver.scala
index 571fff60..6ac0a5c1 100644
--- a/src/main/scala/chisel3/Driver.scala
+++ b/src/main/scala/chisel3/Driver.scala
@@ -61,6 +61,7 @@ trait BackendCompilationUtilities extends FirrtlBackendCompilationUtilities {
/**
* This family provides return values from the chisel3 and possibly firrtl compile steps
*/
+@deprecated("This will be removed in Chisel 3.5", "Chisel3 3.4")
trait ChiselExecutionResult
/**
@@ -69,6 +70,7 @@ trait ChiselExecutionResult
* @param emitted The emitted Chirrrl text
* @param firrtlResultOption Optional Firrtl result, @see freechipsproject/firrtl for details
*/
+@deprecated("This will be removed in Chisel 3.5", "Chisel 3.4")
case class ChiselExecutionSuccess(
circuitOption: Option[Circuit],
emitted: String,
@@ -80,6 +82,7 @@ case class ChiselExecutionSuccess(
*
* @param message A clue might be provided here.
*/
+@deprecated("This will be removed in Chisel 3.5", "Chisel 3.4")
case class ChiselExecutionFailure(message: String) extends ChiselExecutionResult
@deprecated("Please switch to chisel3.stage.ChiselStage. Driver will be removed in 3.4.", "3.2.4")
diff --git a/src/main/scala/chisel3/compatibility.scala b/src/main/scala/chisel3/compatibility.scala
index 0c4c18a9..89aefef2 100644
--- a/src/main/scala/chisel3/compatibility.scala
+++ b/src/main/scala/chisel3/compatibility.scala
@@ -6,6 +6,7 @@
import chisel3._ // required for implicit conversions.
import chisel3.experimental.chiselName
import chisel3.util.random.FibonacciLFSR
+import chisel3.stage.{ChiselCircuitAnnotation, ChiselOutputFileAnnotation, ChiselStage, phases}
package object Chisel { // scalastyle:ignore package.object.name number.of.types number.of.methods
import chisel3.internal.firrtl.Width
@@ -395,21 +396,32 @@ package object Chisel { // scalastyle:ignore package.object.name number.of.t
implicit class fromIntToWidth(x: Int) extends chisel3.fromIntToWidth(x)
type BackendCompilationUtilities = firrtl.util.BackendCompilationUtilities
- val Driver = chisel3.Driver
val ImplicitConversions = chisel3.util.ImplicitConversions
// Deprecated as of Chisel3
object chiselMain {
import java.io.File
+ private var target_dir: Option[String] = None
+
+ private def parseArgs(args: Array[String]): Unit = {
+ for (i <- args.indices) {
+ if (args(i) == "--targetDir") {
+ target_dir = Some(args(i + 1))
+ }
+ }
+ }
+
def apply[T <: Module](args: Array[String], gen: () => T): Unit =
Predef.assert(false, "No more chiselMain in Chisel3")
def run[T <: Module] (args: Array[String], gen: () => T): Unit = {
- val circuit = Driver.elaborate(gen)
- Driver.parseArgs(args)
- val output_file = new File(Driver.targetDir + "/" + circuit.name + ".fir")
- Driver.dumpFirrtl(circuit, Option(output_file))
+ val circuit = ChiselStage.elaborate(gen())
+ parseArgs(args)
+ val output_file = new File(target_dir.getOrElse(new File(".").getCanonicalPath) + "/" + circuit.name + ".fir")
+
+ (new phases.Emitter).transform(Seq(ChiselCircuitAnnotation(circuit),
+ ChiselOutputFileAnnotation(output_file.toString)))
}
}
diff --git a/src/main/scala/chisel3/internal/firrtl/Emitter.scala b/src/main/scala/chisel3/internal/firrtl/Emitter.scala
index 1341b5f6..2124fa25 100644
--- a/src/main/scala/chisel3/internal/firrtl/Emitter.scala
+++ b/src/main/scala/chisel3/internal/firrtl/Emitter.scala
@@ -186,7 +186,7 @@ private class Emitter(circuit: Circuit) {
private def withIndent(f: => Unit) { indent(); f; unindent() }
private val res = new StringBuilder()
- res ++= s";${Driver.chiselVersionString}\n"
+ res ++= s";${BuildInfo.toString}\n"
res ++= s"circuit ${circuit.name} : "
withIndent { circuit.components.foreach(c => res ++= emit(c)) }
res ++= newline
diff --git a/src/main/scala/chisel3/testers/TesterDriver.scala b/src/main/scala/chisel3/testers/TesterDriver.scala
index 7e3730a3..2724da16 100644
--- a/src/main/scala/chisel3/testers/TesterDriver.scala
+++ b/src/main/scala/chisel3/testers/TesterDriver.scala
@@ -7,34 +7,53 @@ import java.io._
import chisel3.aop.Aspect
import chisel3.experimental.RunFirrtlTransform
-import chisel3.stage.phases.AspectPhase
-import chisel3.stage.{ChiselCircuitAnnotation, ChiselStage, DesignAnnotation}
+import chisel3.stage.phases.{AspectPhase, Convert, Elaborate, Emitter}
+import chisel3.stage.{
+ ChiselCircuitAnnotation,
+ ChiselGeneratorAnnotation,
+ ChiselOutputFileAnnotation,
+ ChiselStage,
+ DesignAnnotation
+}
import firrtl.{Driver => _, _}
+import firrtl.options.{Dependency, Phase, PhaseManager}
+import firrtl.stage.{FirrtlCircuitAnnotation, FirrtlStage}
import firrtl.transforms.BlackBoxSourceHelper.writeResourceToDirectory
object TesterDriver extends BackendCompilationUtilities {
+ /** Set the target directory to the name of the top module after elaboration */
+ final class AddImplicitTesterDirectory extends Phase {
+ override def prerequisites = Seq(Dependency[Elaborate])
+ override def optionalPrerequisites = Seq.empty
+ override def optionalPrerequisiteOf = Seq(Dependency[Emitter])
+ override def invalidates(a: Phase) = false
+
+ override def transform(a: AnnotationSeq) = a.flatMap {
+ case a@ ChiselCircuitAnnotation(circuit) =>
+ Seq(a, TargetDirAnnotation(
+ firrtl.util.BackendCompilationUtilities.createTestDirectory(circuit.name)
+ .getAbsolutePath
+ .toString))
+ case a => Seq(a)
+ }
+ }
+
/** For use with modules that should successfully be elaborated by the
* frontend, and which can be turned into executables with assertions. */
def execute(t: () => BasicTester,
additionalVResources: Seq[String] = Seq(),
annotations: AnnotationSeq = Seq()
): Boolean = {
- // Invoke the chisel compiler to get the circuit's IR
- val (circuit, dut) = new chisel3.stage.ChiselGeneratorAnnotation(finishWrapper(t)).elaborate.toSeq match {
- case Seq(ChiselCircuitAnnotation(cir), d:DesignAnnotation[_]) => (cir, d)
- }
-
- // Set up a bunch of file handlers based on a random temp filename,
- // plus the quirks of Verilator's naming conventions
- val target = circuit.name
+ val pm = new PhaseManager(
+ targets = Seq(Dependency[AddImplicitTesterDirectory],
+ Dependency[Emitter],
+ Dependency[Convert]))
- val path = createTestDirectory(target)
- val fname = new File(path, target)
+ val annotationsx = pm.transform(ChiselGeneratorAnnotation(t) +: annotations)
- // For now, dump the IR out to a file
- Driver.dumpFirrtl(circuit, Some(new File(fname.toString + ".fir")))
- val firrtlCircuit = Driver.toFirrtl(circuit)
+ val target: String = annotationsx.collectFirst { case FirrtlCircuitAnnotation(cir) => cir.main }.get
+ val path = annotationsx.collectFirst { case TargetDirAnnotation(dir) => dir }.map(new File(_)).get
// Copy CPP harness and other Verilog sources from resources into files
val cppHarness = new File(path, "top.cpp")
@@ -47,24 +66,7 @@ object TesterDriver extends BackendCompilationUtilities {
writeResourceToDirectory(name, path)
})
- // Compile firrtl
- val transforms = circuit.annotations.collect {
- case anno: RunFirrtlTransform => anno.transformClass
- }.distinct
- .filterNot(_ == classOf[Transform])
- .map { transformClass: Class[_ <: Transform] => transformClass.newInstance() }
- val newAnnotations = circuit.annotations.map(_.toFirrtl).toList ++ annotations ++ Seq(dut)
- val resolvedAnnotations = new AspectPhase().transform(newAnnotations).toList
- val optionsManager = new ExecutionOptionsManager("chisel3") with HasChiselExecutionOptions with HasFirrtlOptions {
- commonOptions = CommonOptions(topName = target, targetDirName = path.getAbsolutePath)
- firrtlOptions = FirrtlExecutionOptions(compilerName = "verilog", annotations = resolvedAnnotations,
- customTransforms = transforms,
- firrtlCircuit = Some(firrtlCircuit))
- }
- firrtl.Driver.execute(optionsManager) match {
- case _: FirrtlExecutionFailure => return false
- case _ =>
- }
+ (new FirrtlStage).execute(Array("--compiler", "verilog"), annotationsx)
// Use sys.Process to invoke a bunch of backend stuff, then run the resulting exe
if ((verilogToCpp(target, path, additionalVFiles, cppHarness) #&&