summaryrefslogtreecommitdiff
path: root/chiselFrontend/src/main/scala
diff options
context:
space:
mode:
authorJim Lawson2016-08-29 17:04:51 -0700
committerJim Lawson2016-08-29 17:04:51 -0700
commit1973e4d7333e2c57be4bcb7204210ecafdacab93 (patch)
tree9752427bbfa2487dc6250cfb0d2aa8b952c3d24a /chiselFrontend/src/main/scala
parent62817134d222747f1eab34626fe7b1bb13b9f6df (diff)
Check module-specific compile options.
Import chisel3.NotStrict.CompileOptions in Chisel package. Add CompileOptions tests.
Diffstat (limited to 'chiselFrontend/src/main/scala')
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala12
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/Binding.scala6
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/MonoConnect.scala8
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/Reg.scala2
4 files changed, 15 insertions, 13 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala b/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
index 857b25aa..969e5654 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
@@ -1,3 +1,5 @@
+// See LICENSE for license details.
+
package chisel3.core
import chisel3.internal.Builder.{compileOptions, pushCommand}
@@ -70,7 +72,7 @@ object BiConnect {
// Verify right has no extra fields that left doesn't have
for((field, right_sub) <- right_b.elements) {
if(!left_b.elements.isDefinedAt(field)) {
- if (compileOptions.connectFieldsMustMatch) {
+ if (compileOptions.connectFieldsMustMatch || context_mod.compileOptions.connectFieldsMustMatch) {
throw MissingLeftFieldException(field)
}
}
@@ -81,7 +83,7 @@ object BiConnect {
right_b.elements.get(field) match {
case Some(right_sub) => connect(sourceInfo, left_sub, right_sub, context_mod)
case None => {
- if (compileOptions.connectFieldsMustMatch) {
+ if (compileOptions.connectFieldsMustMatch || context_mod.compileOptions.connectFieldsMustMatch) {
throw MissingRightFieldException(field)
}
}
@@ -167,7 +169,7 @@ object BiConnect {
case (None, Some(Input)) => issueConnectR2L(left, right)
case (Some(Input), Some(Input)) => {
- if (compileOptions.dontAssumeDirectionality) {
+ if (compileOptions.dontAssumeDirectionality || context_mod.compileOptions.dontAssumeDirectionality) {
throw BothDriversException
} else {
(left.binding, right.binding) match {
@@ -179,7 +181,7 @@ object BiConnect {
}
}
case (Some(Output), Some(Output)) => {
- if (compileOptions.dontAssumeDirectionality) {
+ if (compileOptions.dontAssumeDirectionality || context_mod.compileOptions.dontAssumeDirectionality) {
throw BothDriversException
} else {
(left.binding, right.binding) match {
@@ -191,7 +193,7 @@ object BiConnect {
}
}
case (None, None) => {
- if (compileOptions.dontAssumeDirectionality) {
+ if (compileOptions.dontAssumeDirectionality || context_mod.compileOptions.dontAssumeDirectionality) {
throw UnknownDriverException
} else {
issueConnectR2L(left, right)
diff --git a/chiselFrontend/src/main/scala/chisel3/core/Binding.scala b/chiselFrontend/src/main/scala/chisel3/core/Binding.scala
index a32d3ade..b36794f1 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/Binding.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/Binding.scala
@@ -1,6 +1,6 @@
package chisel3.core
-import chisel3.internal.Builder.compileOptions
+import chisel3.internal.Builder.{compileOptions, forcedModule}
/**
* The purpose of a Binding is to indicate what type of hardware 'entity' a
@@ -91,7 +91,7 @@ object Binding {
element.binding = binder(unbound)
}
// If autoIOWrap is enabled and we're rebinding a PortBinding, just ignore the rebinding.
- case portBound @ PortBinding(_, _) if (!compileOptions.requireIOWrap && binder.isInstanceOf[PortBinder]) =>
+ case portBound @ PortBinding(_, _) if (!(compileOptions.requireIOWrap || forcedModule.compileOptions.requireIOWrap)&& binder.isInstanceOf[PortBinder]) =>
case binding => throw AlreadyBoundException(binding.toString)
}
)
@@ -145,7 +145,7 @@ object Binding {
case binding =>
// The following kludge is an attempt to provide backward compatibility
// It should be done at at higher level.
- if ((compileOptions.requireIOWrap || !elementOfIO(element)))
+ if ((compileOptions.requireIOWrap || forcedModule.compileOptions.requireIOWrap || !elementOfIO(element)))
throw NotSynthesizableException
else
Binding.bind(element, PortBinder(element._parent.get), "Error: IO")
diff --git a/chiselFrontend/src/main/scala/chisel3/core/MonoConnect.scala b/chiselFrontend/src/main/scala/chisel3/core/MonoConnect.scala
index 66729bac..41754827 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/MonoConnect.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/MonoConnect.scala
@@ -79,7 +79,7 @@ object MonoConnect {
source_b.elements.get(field) match {
case Some(source_sub) => connect(sourceInfo, sink_sub, source_sub, context_mod)
case None => {
- if (compileOptions.connectFieldsMustMatch) {
+ if (compileOptions.connectFieldsMustMatch || context_mod.compileOptions.connectFieldsMustMatch) {
throw MissingFieldException(field)
}
}
@@ -134,13 +134,13 @@ object MonoConnect {
case (Some(Output), Some(Output)) => issueConnect(sink, source)
case (Some(Output), Some(Input)) => issueConnect(sink, source)
case (_, None) => {
- if (!compileOptions.dontAssumeDirectionality) {
+ if (!(compileOptions.dontAssumeDirectionality || context_mod.compileOptions.dontAssumeDirectionality)) {
issueConnect(sink, source)
} else {
throw UnreadableSourceException
}
}
- case (Some(Input), Some(Output)) if (!compileOptions.dontTryConnectionsSwapped) => issueConnect(source, sink)
+ case (Some(Input), Some(Output)) if (!(compileOptions.dontTryConnectionsSwapped || context_mod.compileOptions.dontTryConnectionsSwapped)) => issueConnect(source, sink)
case (Some(Input), _) => throw UnwritableSinkException
}
}
@@ -172,7 +172,7 @@ object MonoConnect {
case (Some(Input), Some(Output)) => issueConnect(sink, source)
case (Some(Output), _) => throw UnwritableSinkException
case (_, None) => {
- if (!compileOptions.dontAssumeDirectionality) {
+ if (!(compileOptions.dontAssumeDirectionality || context_mod.compileOptions.dontAssumeDirectionality)) {
issueConnect(sink, source)
} else {
throw UnreadableSourceException
diff --git a/chiselFrontend/src/main/scala/chisel3/core/Reg.scala b/chiselFrontend/src/main/scala/chisel3/core/Reg.scala
index b77c9a31..36c88245 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/Reg.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/Reg.scala
@@ -10,7 +10,7 @@ import chisel3.internal.sourceinfo.{SourceInfo, UnlocatableSourceInfo}
object Reg {
private[core] def makeType[T <: Data](t: T = null, next: T = null, init: T = null): T = {
if (t ne null) {
- if (Builder.compileOptions.declaredTypeMustBeUnbound) {
+ if (Builder.compileOptions.declaredTypeMustBeUnbound || Builder.forcedModule.compileOptions.declaredTypeMustBeUnbound) {
Binding.checkUnbound(t, s"t ($t) must be unbound Type. Try using cloneType?")
}
t.chiselCloneType