summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Lawson2016-09-28 09:33:11 -0700
committerGitHub2016-09-28 09:33:11 -0700
commit12a651513541d6c96e3b709b424d5d3384179076 (patch)
tree5fc05aacab0938b53dedd5375e644fb3dd3dff18
parent0c73611321cf12ff07c68e867f94430a329075e7 (diff)
parent2edfe895e4ff9f751c52904f73fe701502aa926a (diff)
Merge pull request #299 from ucb-bar/gsdt-decoupleddirection298
Don't use firrtlDirection for direction checks - fix #298.
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala2
-rw-r--r--chiselFrontend/src/main/scala/chisel3/core/Data.scala4
-rw-r--r--src/main/scala/chisel3/util/Decoupled.scala4
3 files changed, 6 insertions, 4 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala b/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala
index 6baf5202..a0eefbfe 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/Aggregate.scala
@@ -63,7 +63,7 @@ object Vec {
val maxWidth = elts.map(_.width).reduce(_ max _)
val vec = Wire(new Vec(t.cloneTypeWidth(maxWidth), elts.length))
def doConnect(sink: T, source: T) = {
- if (elts.head.flatten.exists(_.firrtlDirection != Direction.Unspecified)) {
+ if (elts.head.flatten.exists(_.dir != Direction.Unspecified)) {
sink bulkConnect source
} else {
sink connect source
diff --git a/chiselFrontend/src/main/scala/chisel3/core/Data.scala b/chiselFrontend/src/main/scala/chisel3/core/Data.scala
index 4bb58572..52bc8128 100644
--- a/chiselFrontend/src/main/scala/chisel3/core/Data.scala
+++ b/chiselFrontend/src/main/scala/chisel3/core/Data.scala
@@ -241,7 +241,9 @@ abstract class Data extends HasId {
// firrtlDirection is the direction we report to firrtl.
// It maintains the user-specified value (as opposed to the "actual" or applied/propagated value).
- var firrtlDirection: Direction = Direction.Unspecified
+ // NOTE: This should only be used for emitting acceptable firrtl.
+ // The Element.dir should be used for any tests involving direction.
+ private var firrtlDirection: Direction = Direction.Unspecified
/** Default pretty printing */
def toPrintable: Printable
}
diff --git a/src/main/scala/chisel3/util/Decoupled.scala b/src/main/scala/chisel3/util/Decoupled.scala
index 36502862..70b191bd 100644
--- a/src/main/scala/chisel3/util/Decoupled.scala
+++ b/src/main/scala/chisel3/util/Decoupled.scala
@@ -84,7 +84,7 @@ object Decoupled
* @note unsafe (and will error) on the producer (input) side of an IrrevocableIO
*/
def apply[T <: Data](irr: IrrevocableIO[T]): DecoupledIO[T] = {
- require(getFirrtlDirection(irr.bits) == OUTPUT, "Only safe to cast produced Irrevocable bits to Decoupled.")
+ require(irr.bits.flatten forall (_.dir == OUTPUT), "Only safe to cast produced Irrevocable bits to Decoupled.")
val d = Wire(new DecoupledIO(irr.bits))
d.bits := irr.bits
d.valid := irr.valid
@@ -117,7 +117,7 @@ object Irrevocable
* @note unsafe (and will error) on the consumer (output) side of an DecoupledIO
*/
def apply[T <: Data](dec: DecoupledIO[T]): IrrevocableIO[T] = {
- require(getFirrtlDirection(dec.bits) == INPUT, "Only safe to cast consumed Decoupled bits to Irrevocable.")
+ require(dec.bits.flatten forall (_.dir == INPUT), "Only safe to cast consumed Decoupled bits to Irrevocable.")
val i = Wire(new IrrevocableIO(dec.bits))
dec.bits := i.bits
dec.valid := i.valid