summaryrefslogtreecommitdiff
path: root/src/test/scala
diff options
context:
space:
mode:
authorJack2017-01-30 22:34:25 -0800
committerJack Koenig2017-01-31 11:30:28 -0800
commitf8408623e13149ccd4bfae443d916eeb9c5a2146 (patch)
treecc00843639b4fbd26c14172c778879bf0cfe6d5b /src/test/scala
parentec5fcc2930e8ef99ea307bc1435fe323b4b79963 (diff)
Add compile [to Verilog] to ChiselRunners
Diffstat (limited to 'src/test/scala')
-rw-r--r--src/test/scala/chiselTests/ChiselSpec.scala21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/test/scala/chiselTests/ChiselSpec.scala b/src/test/scala/chiselTests/ChiselSpec.scala
index 7b915c09..4588abe1 100644
--- a/src/test/scala/chiselTests/ChiselSpec.scala
+++ b/src/test/scala/chiselTests/ChiselSpec.scala
@@ -8,6 +8,12 @@ import org.scalatest.prop._
import org.scalacheck._
import chisel3._
import chisel3.testers._
+import firrtl.{
+ ExecutionOptionsManager,
+ HasFirrtlOptions,
+ FirrtlExecutionSuccess,
+ FirrtlExecutionFailure
+}
/** Common utility functions for Chisel unit tests. */
trait ChiselRunners extends Assertions {
@@ -21,7 +27,20 @@ trait ChiselRunners extends Assertions {
assert(!runTester(t, additionalVResources))
}
def elaborate(t: => Module): Unit = Driver.elaborate(() => t)
-
+ /** Compiles a Chisel Module to Verilog */
+ def compile(t: => Module): String = {
+ val manager = new ExecutionOptionsManager("compile") with HasFirrtlOptions
+ with HasChiselExecutionOptions
+ Driver.execute(manager, () => t) match {
+ case ChiselExecutionSuccess(_, _, Some(firrtlExecRes)) =>
+ firrtlExecRes match {
+ case FirrtlExecutionSuccess(_, verilog) => verilog
+ case FirrtlExecutionFailure(msg) => fail(msg)
+ }
+ case ChiselExecutionSuccess(_, _, None) => fail() // This shouldn't happen
+ case ChiselExecutionFailure(msg) => fail(msg)
+ }
+ }
}
/** Spec base class for BDD-style testers. */