summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/experimental/DataMirrorSpec.scala
diff options
context:
space:
mode:
authorJack2022-07-30 22:41:15 +0000
committerJack2022-07-30 22:41:15 +0000
commit4cd44fa4dab370fcc5c20bcacc1fa0ee02327252 (patch)
tree05730be260feca0d2a870c4bb88325d36631a8fc /src/test/scala/chiselTests/experimental/DataMirrorSpec.scala
parentfe9635ef21bad233945617a24ab16cfa4055f2d1 (diff)
parentbced77045c8fc5db37e40b159c49220929e15d46 (diff)
Merge branch '3.5.x' into 3.5-release
Diffstat (limited to 'src/test/scala/chiselTests/experimental/DataMirrorSpec.scala')
-rw-r--r--src/test/scala/chiselTests/experimental/DataMirrorSpec.scala58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/experimental/DataMirrorSpec.scala b/src/test/scala/chiselTests/experimental/DataMirrorSpec.scala
new file mode 100644
index 00000000..731596ec
--- /dev/null
+++ b/src/test/scala/chiselTests/experimental/DataMirrorSpec.scala
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: Apache-2.0
+
+package chiselTests.experimental
+
+import chisel3._
+import chisel3.util.Valid
+import chisel3.stage.ChiselStage
+import chisel3.experimental.DataMirror
+import chiselTests.ChiselFlatSpec
+
+class DataMirrorSpec extends ChiselFlatSpec {
+ behavior.of("DataMirror")
+
+ def assertBinding(x: Data, io: Boolean, wire: Boolean, reg: Boolean) = {
+ DataMirror.isIO(x) should be(io)
+ DataMirror.isWire(x) should be(wire)
+ DataMirror.isReg(x) should be(reg)
+ }
+
+ def assertIO(x: Data) = assertBinding(x, true, false, false)
+
+ def assertWire(x: Data) = assertBinding(x, false, true, false)
+
+ def assertReg(x: Data) = assertBinding(x, false, false, true)
+
+ def assertNone(x: Data) = assertBinding(x, false, false, false)
+
+ it should "validate bindings" in {
+ class MyModule extends Module {
+ val typ = UInt(4.W)
+ val vectyp = Vec(8, UInt(4.W))
+ val io = IO(new Bundle {
+ val in = Input(UInt(4.W))
+ val vec = Input(vectyp)
+ val out = Output(UInt(4.W))
+ })
+ val vec = Wire(vectyp)
+ val regvec = Reg(vectyp)
+ val wire = Wire(UInt(4.W))
+ val reg = RegNext(wire)
+
+ assertIO(io)
+ assertIO(io.in)
+ assertIO(io.out)
+ assertIO(io.vec(1))
+ assertIO(io.vec)
+ assertWire(vec)
+ assertWire(vec(0))
+ assertWire(wire)
+ assertReg(reg)
+ assertReg(regvec)
+ assertReg(regvec(2))
+ assertNone(typ)
+ assertNone(vectyp)
+ }
+ ChiselStage.elaborate(new MyModule)
+ }
+}