summaryrefslogtreecommitdiff
path: root/core/src/main/scala/chisel3/Element.scala
diff options
context:
space:
mode:
authormergify[bot]2022-04-12 00:09:55 +0000
committerGitHub2022-04-12 00:09:55 +0000
commit898142ba05b04fb1602b249fd1ae81baa3f47f89 (patch)
tree75304868c8e8a43abc79a5e125c51167fccce6b4 /core/src/main/scala/chisel3/Element.scala
parentd766e8f7270579406d54abc9015d494cd199c6ce (diff)
Enhance views to [sometimes] support dynamic indexing and implement FlatIO (backport #2476) (#2479)
* Capture 1:1 mappings of Aggregates inside of views This is implemented by including any corresponding Aggregates from the DataView.mapping in the AggregateViewBinding.childMap (which is now of type Map[Data, Data]). This enables dynamically indexing Vecs that are themselves elements of larger Aggregates in views when the corresponding element of the view is a Vec of the same type. It also increases the number of cases where a single Target can represent part of a view. (cherry picked from commit 1f6b1ca14ccf86918065073c3f6f3626dd83a68e) * Add FlatIO API for creating ports from Bundles without a prefix (cherry picked from commit 772a3a1fe3b9372b7c2d7cd2d424b2adcd633cdb) * [docs] Add FlatIO to the general cookbook (cherry picked from commit b4159641350f238f0f899b69954142ce8ee11544) Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'core/src/main/scala/chisel3/Element.scala')
-rw-r--r--core/src/main/scala/chisel3/Element.scala11
1 files changed, 8 insertions, 3 deletions
diff --git a/core/src/main/scala/chisel3/Element.scala b/core/src/main/scala/chisel3/Element.scala
index 401f2bdf..39b7689c 100644
--- a/core/src/main/scala/chisel3/Element.scala
+++ b/core/src/main/scala/chisel3/Element.scala
@@ -36,10 +36,15 @@ abstract class Element extends Data {
case Some(litArg) => Some(ElementLitBinding(litArg))
case _ => Some(DontCareBinding())
}
- case Some(b @ AggregateViewBinding(viewMap, _)) =>
+ // TODO Do we even need this? Looking up things in the AggregateViewBinding is fine
+ case Some(b @ AggregateViewBinding(viewMap)) =>
viewMap.get(this) match {
- case Some(elt) => Some(ViewBinding(elt))
- case _ => throwException(s"Internal Error! $this missing from topBinding $b")
+ case Some(elt: Element) => Some(ViewBinding(elt))
+ // TODO We could generate a reduced AggregateViewBinding, but is there a point?
+ // Generating the new object would be somewhat slow, it's not clear if we should do this
+ // matching anyway
+ case Some(data: Aggregate) => Some(b)
+ case _ => throwException(s"Internal Error! $this missing from topBinding $b")
}
case topBindingOpt => topBindingOpt
}