summaryrefslogtreecommitdiff
path: root/chiselFrontend/src
diff options
context:
space:
mode:
authorJim Lawson2016-08-12 12:25:00 -0700
committerJim Lawson2016-08-12 12:25:00 -0700
commit8c919f86fec33f1cdb367ae5e13f0cb7d5071ef5 (patch)
treed50ed99bf7b5d432c73ec6c96ac584d76fb6bf7b /chiselFrontend/src
parenta3e0744884b51894de6f3c576e6e1482d22484dd (diff)
parent8c8349e3eab69235f48826b59af8f67fe0b3e80c (diff)
Merge branch 'compile_options' into sdtwigg_connectwrap_renamechisel3
Diffstat (limited to 'chiselFrontend/src')
-rw-r--r--chiselFrontend/src/main/scala/chisel3/internal/Builder.scala11
-rw-r--r--chiselFrontend/src/main/scala/chisel3/internal/CompileOptions.scala16
2 files changed, 24 insertions, 3 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
index cd3e1ca7..dddc261e 100644
--- a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
+++ b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
@@ -97,12 +97,16 @@ private[chisel3] trait HasId {
private[chisel3] def getRef: Arg = _ref.get
}
-private[chisel3] class DynamicContext {
+private[chisel3] class DynamicContext(optionMap: Option[Map[String, String]] = None) {
val idGen = new IdGen
val globalNamespace = new Namespace(None, Set())
val components = ArrayBuffer[Component]()
var currentModule: Option[Module] = None
val errors = new ErrorLog
+ val compileOptions = new CompileOptions(optionMap match {
+ case Some(map: Map[String, String]) => map
+ case None => Map[String, String]()
+ })
}
private[chisel3] object Builder {
@@ -129,6 +133,7 @@ private[chisel3] object Builder {
// TODO(twigg): Ideally, binding checks and new bindings would all occur here
// However, rest of frontend can't support this yet.
+ def compileOptions = dynamicContext.compileOptions
def pushCommand[T <: Command](c: T): T = {
forcedModule._commands += c
c
@@ -142,8 +147,8 @@ private[chisel3] object Builder {
def errors: ErrorLog = dynamicContext.errors
def error(m: => String): Unit = errors.error(m)
- def build[T <: Module](f: => T): Circuit = {
- dynamicContextVar.withValue(Some(new DynamicContext)) {
+ def build[T <: Module](f: => T, optionMap: Option[Map[String, String]] = None): Circuit = {
+ dynamicContextVar.withValue(Some(new DynamicContext(optionMap))) {
errors.info("Elaborating design...")
val mod = f
mod.forceName(mod.name, globalNamespace)
diff --git a/chiselFrontend/src/main/scala/chisel3/internal/CompileOptions.scala b/chiselFrontend/src/main/scala/chisel3/internal/CompileOptions.scala
new file mode 100644
index 00000000..12789855
--- /dev/null
+++ b/chiselFrontend/src/main/scala/chisel3/internal/CompileOptions.scala
@@ -0,0 +1,16 @@
+// See LICENSE for license details.
+
+package chisel3.internal
+
+/** Initialize compilation options from a string map.
+ *
+ * @param optionsMap the map from "option" to "value"
+ */
+class CompileOptions(optionsMap: Map[String, String]) {
+ // The default for settings related to "strictness".
+ val strictDefault: String = optionsMap.getOrElse("strict", "false")
+ // Should Bundle connections require a strict match of fields.
+ // If true and the same fields aren't present in both source and sink, a MissingFieldException,
+ // MissingLeftFieldException, or MissingRightFieldException will be thrown.
+ val connectFieldsMustMatch: Boolean = optionsMap.getOrElse("connectFieldsMustMatch", strictDefault).toBoolean
+}