summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel3/util/Decoupled.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/chisel3/util/Decoupled.scala')
-rw-r--r--src/main/scala/chisel3/util/Decoupled.scala22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/main/scala/chisel3/util/Decoupled.scala b/src/main/scala/chisel3/util/Decoupled.scala
index 5c71a4ea..b21bd04f 100644
--- a/src/main/scala/chisel3/util/Decoupled.scala
+++ b/src/main/scala/chisel3/util/Decoupled.scala
@@ -9,6 +9,8 @@ import chisel3._
import chisel3.experimental.{requireIsChiselType, DataMirror, Direction}
import chisel3.internal.naming._ // can't use chisel3_ version because of compile order
+import scala.annotation.nowarn
+
/** An I/O Bundle containing 'valid' and 'ready' signals that handshake
* the transfer of data stored in the 'bits' subfield.
* The base protocol implied by the directionality is that
@@ -97,7 +99,22 @@ object ReadyValidIO {
* of ready or valid.
* @param gen the type of data to be wrapped in DecoupledIO
*/
-class DecoupledIO[+T <: Data](gen: T) extends ReadyValidIO[T](gen)
+class DecoupledIO[+T <: Data](gen: T) extends ReadyValidIO[T](gen) {
+
+ /** Applies the supplied functor to the bits of this interface, returning a new
+ * typed DecoupledIO interface.
+ * @param f The function to apply to this DecoupledIO's 'bits' with return type B
+ * @return a new DecoupledIO of type B
+ */
+ def map[B <: Data](f: T => B): DecoupledIO[B] = {
+ val _map_bits = f(bits)
+ val _map = Wire(Decoupled(chiselTypeOf(_map_bits)))
+ _map.bits := _map_bits
+ _map.valid := valid
+ ready := _map.ready
+ _map
+ }
+}
/** This factory adds a decoupled handshaking protocol to a data bundle. */
object Decoupled {
@@ -231,7 +248,6 @@ class QueueIO[T <: Data](
* consumer.io.in <> q.io.deq
* }}}
*/
-@chiselName
class Queue[T <: Data](
val gen: T,
val entries: Int,
@@ -342,7 +358,7 @@ object Queue {
* consumer.io.in <> Queue(producer.io.out, 16)
* }}}
*/
- @chiselName
+ @nowarn("cat=deprecation&msg=TransitName")
def apply[T <: Data](
enq: ReadyValidIO[T],
entries: Int = 2,