summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authormergify[bot]2022-10-07 19:56:19 +0000
committerGitHub2022-10-07 19:56:19 +0000
commit5b13d04b28ddd05e4acbc5b9b3755c92ac0d9515 (patch)
treeb860b79bb606ef63c2d1fe705eceb7f641422bc2 /core/src/main
parentb72cc42f4f23906db0f201b1d9543a64accbc2ec (diff)
Make nested IsInstantiables with Data in them work (#2761) (#2766)
* Add unit test for Issue 2760 * checkpoint: Fix for nested instance * remove comments about stuff not working * make the test check the output a little more * relax the requirement on returning empty ioMap * Update core/src/main/scala/chisel3/experimental/hierarchy/core/Lookupable.scala * Update core/src/main/scala/chisel3/Data.scala * Update core/src/main/scala/chisel3/experimental/hierarchy/core/Lookupable.scala Co-authored-by: Jack Koenig <koenig@sifive.com> * Update src/test/scala/chiselTests/experimental/hierarchy/InstanceSpec.scala Co-authored-by: Jack Koenig <koenig@sifive.com> * Update core/src/main/scala/chisel3/experimental/hierarchy/core/Lookupable.scala * Add another unit test which unfortunately still passes * Update core/src/main/scala/chisel3/Data.scala * Update src/test/scala/chiselTests/experimental/hierarchy/InstanceSpec.scala Co-authored-by: Jack Koenig <koenig@sifive.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> (cherry picked from commit 1f9f26dc2bffcb4cc4daf2dc16c5cb455c6769ef) Co-authored-by: Megan Wachs <megan@sifive.com>
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/scala/chisel3/experimental/hierarchy/Lookupable.scala17
1 files changed, 13 insertions, 4 deletions
diff --git a/core/src/main/scala/chisel3/experimental/hierarchy/Lookupable.scala b/core/src/main/scala/chisel3/experimental/hierarchy/Lookupable.scala
index c83479b0..aa35455d 100644
--- a/core/src/main/scala/chisel3/experimental/hierarchy/Lookupable.scala
+++ b/core/src/main/scala/chisel3/experimental/hierarchy/Lookupable.scala
@@ -335,11 +335,20 @@ object Lookupable {
}
def instanceLookup[A](that: A => B, instance: Instance[A]): C = {
val ret = that(instance.proto)
- val ioMap: Option[Map[Data, Data]] = instance.underlying match {
- case Clone(x: ModuleClone[_]) => Some(x.ioMap)
- case Proto(x: BaseModule) => Some(x.getChiselPorts.map { case (_, data) => data -> data }.toMap)
- case _ => None
+
+ def getIoMap(hierarchy: Hierarchy[_]): Option[Map[Data, Data]] = {
+ hierarchy.underlying match {
+ case Clone(x: ModuleClone[_]) => Some(x.ioMap)
+ case Proto(x: BaseModule) => Some(x.getChiselPorts.map { case (_, data) => data -> data }.toMap)
+ case Clone(x: InstantiableClone[_]) => getIoMap(x._innerContext)
+ case Clone(x: InstanceClone[_]) => None
+ case other => {
+ Builder.exception(s"Internal Error! Unexpected case where we can't get IO Map: $other")
+ }
+ }
}
+ val ioMap = getIoMap(instance)
+
if (isView(ret)) {
cloneViewToContext(ret, instance.cache, ioMap, instance.getInnerDataContext)
} else {