summaryrefslogtreecommitdiff
path: root/core/src/main/scala/chisel3/experimental/package.scala
diff options
context:
space:
mode:
authorJack2022-04-26 02:53:08 +0000
committerJack2022-04-26 02:53:08 +0000
commit3a6cc75d72cbf890bbd45a002c31d16abfc6896d (patch)
tree298a39cbdbcd7e89953d75dbd840884f29ff7699 /core/src/main/scala/chisel3/experimental/package.scala
parentbe1ac06bf20c6c3d84c8ce5b0a50e2980e546e7e (diff)
parentd5a964f6e7beea1f38f9623224fc65e2397e1fe7 (diff)
Merge branch '3.5.x' into 3.5-release
Diffstat (limited to 'core/src/main/scala/chisel3/experimental/package.scala')
-rw-r--r--core/src/main/scala/chisel3/experimental/package.scala28
1 files changed, 28 insertions, 0 deletions
diff --git a/core/src/main/scala/chisel3/experimental/package.scala b/core/src/main/scala/chisel3/experimental/package.scala
index ce258a25..9b9c83f4 100644
--- a/core/src/main/scala/chisel3/experimental/package.scala
+++ b/core/src/main/scala/chisel3/experimental/package.scala
@@ -57,6 +57,34 @@ package object experimental {
type Direction = ActualDirection
val Direction = ActualDirection
+ /** The same as [[IO]] except there is no prefix for the name of the val */
+ def FlatIO[T <: Record](gen: => T)(implicit sourceInfo: SourceInfo, compileOptions: CompileOptions): T = noPrefix {
+ import dataview._
+ def coerceDirection(d: Data) = {
+ import chisel3.{SpecifiedDirection => SD}
+ DataMirror.specifiedDirectionOf(gen) match {
+ case SD.Flip => Flipped(d)
+ case SD.Input => Input(d)
+ case SD.Output => Output(d)
+ case _ => d
+ }
+ }
+ val ports: Seq[Data] =
+ gen.elements.toSeq.reverse.map {
+ case (name, data) =>
+ val p = IO(coerceDirection(chiselTypeClone(data).asInstanceOf[Data]))
+ p.suggestName(name)
+ p
+
+ }
+
+ implicit val dv: DataView[Seq[Data], T] = DataView.mapping(
+ _ => chiselTypeClone(gen).asInstanceOf[T],
+ (seq, rec) => seq.zip(rec.elements.toSeq.reverse).map { case (port, (_, field)) => port -> field }
+ )
+ ports.viewAs[T]
+ }
+
implicit class ChiselRange(val sc: StringContext) extends AnyVal {
import scala.language.experimental.macros