summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Izraelevitz2020-01-17 15:52:57 -0800
committermergify[bot]2020-01-17 23:52:57 +0000
commit0a98a82c588882eb2905a5564792670c2cfaf858 (patch)
tree651d48f9162f53046b1ae8495d1fd0c3ef49c6ea
parentd4300b9deae6dde7ce0f314ea73a9ca4a1c3868c (diff)
Bugfix: Select.instances now works with blackboxes (#1303)
-rw-r--r--src/main/scala/chisel3/aop/Select.scala7
-rw-r--r--src/test/scala/chiselTests/aop/SelectSpec.scala16
2 files changed, 20 insertions, 3 deletions
diff --git a/src/main/scala/chisel3/aop/Select.scala b/src/main/scala/chisel3/aop/Select.scala
index 612cdcc7..390f82a5 100644
--- a/src/main/scala/chisel3/aop/Select.scala
+++ b/src/main/scala/chisel3/aop/Select.scala
@@ -80,8 +80,11 @@ object Select {
*/
def instances(module: BaseModule): Seq[BaseModule] = {
check(module)
- module._component.get.asInstanceOf[DefModule].commands.collect {
- case i: DefInstance => i.id
+ module._component.get match {
+ case d: DefModule => d.commands.collect {
+ case i: DefInstance => i.id
+ }
+ case other => Nil
}
}
diff --git a/src/test/scala/chiselTests/aop/SelectSpec.scala b/src/test/scala/chiselTests/aop/SelectSpec.scala
index f3c756ab..80ab518f 100644
--- a/src/test/scala/chiselTests/aop/SelectSpec.scala
+++ b/src/test/scala/chiselTests/aop/SelectSpec.scala
@@ -7,7 +7,9 @@ import chiselTests.ChiselFlatSpec
import chisel3._
import chisel3.aop.Select.{PredicatedConnect, When, WhenNot}
import chisel3.aop.{Aspect, Select}
-import firrtl.{AnnotationSeq}
+import chisel3.experimental.ExtModule
+import chisel3.stage.{ChiselGeneratorAnnotation, DesignAnnotation}
+import firrtl.AnnotationSeq
import scala.reflect.runtime.universe.TypeTag
@@ -139,5 +141,17 @@ class SelectSpec extends ChiselFlatSpec {
)
}
+ "Blackboxes" should "be supported in Select.instances" in {
+ class BB extends ExtModule { }
+ class Top extends RawModule {
+ val bb = Module(new BB)
+ }
+ val top = ChiselGeneratorAnnotation(() => {
+ new Top()
+ }).elaborate(1).asInstanceOf[DesignAnnotation[Top]].design
+ val bbs = Select.collectDeep(top) { case b: BB => b }
+ assert(bbs.size == 1)
+ }
+
}