1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
// SPDX-License-Identifier: Apache-2.0
package chisel3
import chisel3.internal.ErrorLog
import internal.firrtl._
import firrtl._
import firrtl.options.{Dependency, Phase, PhaseManager, StageError}
import firrtl.options.phases.DeletedWrapper
import firrtl.options.Viewer.view
import firrtl.annotations.JsonProtocol
import firrtl.util.{BackendCompilationUtilities => FirrtlBackendCompilationUtilities}
import chisel3.stage.{ChiselExecutionResultView, ChiselGeneratorAnnotation, ChiselStage}
import chisel3.stage.phases.DriverCompatibility
import java.io._
/**
* The Driver provides methods to invoke the chisel3 compiler and the firrtl compiler.
* By default firrtl is automatically run after chisel. an [[ExecutionOptionsManager]]
* is needed to manage options. It can parser command line arguments or coordinate
* multiple chisel toolchain tools options.
*
* @example
* {{{
* val optionsManager = new ExecutionOptionsManager("chisel3")
* with HasFirrtlOptions
* with HasChiselExecutionOptions {
* commonOptions = CommonOption(targetDirName = "my_target_dir")
* chiselOptions = ChiselExecutionOptions(runFirrtlCompiler = false)
* }
* chisel3.Driver.execute(optionsManager, () => new Dut)
* }}}
* or via command line arguments
* @example {{{
* args = "--no-run-firrtl --target-dir my-target-dir".split(" +")
* chisel3.execute(args, () => new DUT)
* }}}
*/
trait BackendCompilationUtilities extends FirrtlBackendCompilationUtilities {
/** Compile Chirrtl to Verilog by invoking Firrtl inside the same JVM
*
* @param prefix basename of the file
* @param dir directory where file lives
* @return true if compiler completed successfully
*/
def compileFirrtlToVerilog(prefix: String, dir: File): Boolean = {
val optionsManager = new ExecutionOptionsManager("chisel3") with HasChiselExecutionOptions with HasFirrtlOptions {
commonOptions = CommonOptions(topName = prefix, targetDirName = dir.getAbsolutePath)
firrtlOptions = FirrtlExecutionOptions(compilerName = "verilog")
}
firrtl.Driver.execute(optionsManager) match {
case _: FirrtlExecutionSuccess => true
case _: FirrtlExecutionFailure => false
}
}
}
/**
* 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
/**
*
* @param circuitOption Optional circuit, has information like circuit name
* @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,
firrtlResultOption: Option[FirrtlExecutionResult]
) extends ChiselExecutionResult
/**
* Getting one of these indicates failure of some sort.
*
* @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
|