summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMegan Wachs2022-01-07 15:28:56 -0800
committerGitHub2022-01-07 23:28:56 +0000
commita1af6b7099f1207c67db3561507615fd18c487ef (patch)
tree86083634d8b7a67ff0a249768692164737f35de3 /src/test
parent72d5be9634c677e47ec8fce204be55c8936166fb (diff)
Add a Select.ios that works with Definition/Instance, fix isA behavior (#2315)
* New Feature: Add a Select.ios that works with Definition/Instance * BugFix: isA now truly ignores type parameters
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/chiselTests/experimental/hierarchy/Examples.scala10
-rw-r--r--src/test/scala/chiselTests/experimental/hierarchy/InstanceSpec.scala128
2 files changed, 137 insertions, 1 deletions
diff --git a/src/test/scala/chiselTests/experimental/hierarchy/Examples.scala b/src/test/scala/chiselTests/experimental/hierarchy/Examples.scala
index c0f504ff..996b36ee 100644
--- a/src/test/scala/chiselTests/experimental/hierarchy/Examples.scala
+++ b/src/test/scala/chiselTests/experimental/hierarchy/Examples.scala
@@ -236,4 +236,14 @@ object Examples {
class HasTypeParams[D <: Data](d: D) extends Module {
@public val blah = Wire(d)
}
+
+ @instantiable
+ class HasMultipleTypeParamsInside extends Module {
+ val tpDef0 = Definition(new HasTypeParams(Bool()))
+ val tpDef1 = Definition(new HasTypeParams(UInt(4.W)))
+ val i00 = Instance(tpDef0)
+ val i01 = Instance(tpDef0)
+ val i10 = Instance(tpDef1)
+ val i11 = Instance(tpDef1)
+ }
}
diff --git a/src/test/scala/chiselTests/experimental/hierarchy/InstanceSpec.scala b/src/test/scala/chiselTests/experimental/hierarchy/InstanceSpec.scala
index 9ceb9b40..94af9a8b 100644
--- a/src/test/scala/chiselTests/experimental/hierarchy/InstanceSpec.scala
+++ b/src/test/scala/chiselTests/experimental/hierarchy/InstanceSpec.scala
@@ -754,6 +754,16 @@ class InstanceSpec extends ChiselFunSpec with Utils {
}
getFirrtlAndAnnos(new Top)
}
+ it("9.3 it should ignore type parameters (even though it would be nice if it didn't)") {
+ class Top extends Module {
+ val d0: Definition[Module] = Definition(new HasTypeParams(Bool()))
+ require(d0.isA[HasTypeParams[Bool]])
+ require(d0.isA[HasTypeParams[_]])
+ require(d0.isA[HasTypeParams[UInt]])
+ require(!d0.isA[HasBlah])
+ }
+ getFirrtlAndAnnos(new Top)
+ }
}
describe("10: Select APIs") {
it("10.0: instancesOf") {
@@ -850,6 +860,122 @@ class InstanceSpec extends ChiselFunSpec with Utils {
})
intercept[Exception] { getFirrtlAndAnnos(new AddFour, Seq(aspect)) }
}
+ it("10.9: allInstancesOf.ios") {
+ val aspect = aop.inspecting.InspectingAspect({ m: AddFour =>
+ val abs = aop.Select.allInstancesOf[AddOne](m.toDefinition).flatMap { i: Instance[AddOne] => aop.Select.ios(i).map(_.toAbsoluteTarget) }
+ val rel = aop.Select.allInstancesOf[AddOne](m.toDefinition).flatMap { i: Instance[AddOne] => aop.Select.ios(i).map(_.toTarget) }
+ abs should be (Seq(
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>clock".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>reset".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>in".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>out".rt,
+
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>clock".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>reset".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>in".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>out".rt,
+
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>clock".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>reset".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>in".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>out".rt,
+
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>clock".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>reset".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>in".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>out".rt,
+ ))
+
+ rel should be (Seq(
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>clock".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>reset".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>in".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i0:AddOne>out".rt,
+
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>clock".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>reset".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>in".rt,
+ "~AddFour|AddFour/i0:AddTwoMixedModules/i1:AddOne_1>out".rt,
+
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>clock".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>reset".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>in".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i0:AddOne>out".rt,
+
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>clock".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>reset".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>in".rt,
+ "~AddFour|AddFour/i1:AddTwoMixedModules/i1:AddOne_1>out".rt,
+ ))
+ })
+ getFirrtlAndAnnos(new AddFour, Seq(aspect))
+ }
+ it("10.10: allDefinitionsOf.ios") {
+ val aspect = aop.inspecting.InspectingAspect({ m: AddFour =>
+ val abs = aop.Select.allDefinitionsOf[AddOne](m.toDefinition).flatMap { i: Definition[AddOne] => aop.Select.ios(i).map(_.toAbsoluteTarget) }
+ val rel = aop.Select.allDefinitionsOf[AddOne](m.toDefinition).flatMap { i: Definition[AddOne] => aop.Select.ios(i).map(_.toTarget) }
+ abs should be (Seq(
+ "~AddFour|AddOne>clock".rt,
+ "~AddFour|AddOne>reset".rt,
+ "~AddFour|AddOne>in".rt,
+ "~AddFour|AddOne>out".rt,
+
+ "~AddFour|AddOne_1>clock".rt,
+ "~AddFour|AddOne_1>reset".rt,
+ "~AddFour|AddOne_1>in".rt,
+ "~AddFour|AddOne_1>out".rt,
+ ))
+
+ rel should be (Seq(
+ "~AddFour|AddOne>clock".rt,
+ "~AddFour|AddOne>reset".rt,
+ "~AddFour|AddOne>in".rt,
+ "~AddFour|AddOne>out".rt,
+
+ "~AddFour|AddOne_1>clock".rt,
+ "~AddFour|AddOne_1>reset".rt,
+ "~AddFour|AddOne_1>in".rt,
+ "~AddFour|AddOne_1>out".rt,
+ ))
+
+ })
+ getFirrtlAndAnnos(new AddFour, Seq(aspect))
+ }
+ it("10.11 Select.instancesIn for typed BaseModules") {
+ val aspect = aop.inspecting.InspectingAspect({ m: HasMultipleTypeParamsInside =>
+ val targets = aop.Select.instancesIn(m.toDefinition).map { i: Instance[BaseModule] => i.toTarget }
+ targets should be (Seq(
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i00:HasTypeParams".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i01:HasTypeParams".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i10:HasTypeParams_1".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i11:HasTypeParams_1".it,
+ ))
+ })
+ getFirrtlAndAnnos(new HasMultipleTypeParamsInside, Seq(aspect))
+ }
+ it("10.12 Select.instancesOf for typed BaseModules if type is ignored") {
+ val aspect = aop.inspecting.InspectingAspect({ m: HasMultipleTypeParamsInside =>
+ val targets = aop.Select.instancesOf[HasTypeParams[_]](m.toDefinition).map { i: Instance[HasTypeParams[_]] => i.toTarget }
+ targets should be (Seq(
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i00:HasTypeParams".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i01:HasTypeParams".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i10:HasTypeParams_1".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i11:HasTypeParams_1".it,
+ ))
+ })
+ getFirrtlAndAnnos(new HasMultipleTypeParamsInside, Seq(aspect))
+ }
+ it("10.13 Select.instancesOf for typed BaseModules even type is specified wrongly (should be ignored, even though we wish it weren't)") {
+ val aspect = aop.inspecting.InspectingAspect({ m: HasMultipleTypeParamsInside =>
+ val targets = aop.Select.instancesOf[HasTypeParams[SInt]](m.toDefinition).map { i: Instance[HasTypeParams[_]] => i.toTarget }
+ targets should be (Seq(
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i00:HasTypeParams".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i01:HasTypeParams".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i10:HasTypeParams_1".it,
+ "~HasMultipleTypeParamsInside|HasMultipleTypeParamsInside/i11:HasTypeParams_1".it,
+ ))
+ })
+ getFirrtlAndAnnos(new HasMultipleTypeParamsInside, Seq(aspect))
+ }
}
}
-