summaryrefslogtreecommitdiff
path: root/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
diff options
context:
space:
mode:
authorJim Lawson2016-08-16 11:59:20 -0700
committerJim Lawson2016-08-17 13:41:43 -0700
commitf41f2533c55e506f7d5bf2ee0198de4d9a3dbea3 (patch)
tree4a9786dd4e468d9517517603b06b123e1e35b44f /chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
parenta264157a47f56216cebf2d98c1c8118c344dad5f (diff)
Reduce rocket-chip elaboration errors.
Diffstat (limited to 'chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala')
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala24
1 files changed, 22 insertions, 2 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala b/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
index 71de50f6..b7fd65a5 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/BiConnect.scala
@@ -166,8 +166,28 @@ object BiConnect {
case (Some(Output), None) => issueConnectR2L(left, right)
case (None, Some(Input)) => issueConnectR2L(left, right)
- case (Some(Input), Some(Input)) => throw BothDriversException
- case (Some(Output), Some(Output)) => throw NeitherDriverException
+ case (Some(Input), Some(Input)) => {
+ if (compileOptions.portDeterminesDirection)
+ (left.binding, right.binding) match {
+ case (PortBinding(_, _), PortBinding(_, _)) => throw BothDriversException
+ case (PortBinding(_, _), _) => issueConnectL2R(left, right)
+ case (_, PortBinding(_, _)) => issueConnectR2L(left, right)
+ case _ => throw BothDriversException
+ } else {
+ throw BothDriversException
+ }
+ }
+ case (Some(Output), Some(Output)) => {
+ if (compileOptions.portDeterminesDirection)
+ (left.binding, right.binding) match {
+ case (PortBinding(_, _), PortBinding(_, _)) => throw BothDriversException
+ case (PortBinding(_, _), _) => issueConnectR2L(left, right)
+ case (_, PortBinding(_, _)) => issueConnectL2R(left, right)
+ case _ => throw BothDriversException
+ } else {
+ throw BothDriversException
+ }
+ }
case (None, None) => throw UnknownDriverException
}
}