diff options
| author | mergify[bot] | 2022-10-07 19:56:19 +0000 |
|---|---|---|
| committer | GitHub | 2022-10-07 19:56:19 +0000 |
| commit | 5b13d04b28ddd05e4acbc5b9b3755c92ac0d9515 (patch) | |
| tree | b860b79bb606ef63c2d1fe705eceb7f641422bc2 /core/src/main/scala/chisel3/experimental | |
| parent | b72cc42f4f23906db0f201b1d9543a64accbc2ec (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/scala/chisel3/experimental')
| -rw-r--r-- | core/src/main/scala/chisel3/experimental/hierarchy/Lookupable.scala | 17 |
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 { |
