summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/util/PriorityMuxSpec.scala
diff options
context:
space:
mode:
authorJack2023-01-08 04:47:27 +0000
committerJack2023-01-08 04:47:27 +0000
commit5aa60ecda6bd2b02dfc7253a47e53c7647981a5c (patch)
tree53ea2570c4af7824d6203e0c0cd7953c1ba4910c /src/test/scala/chiselTests/util/PriorityMuxSpec.scala
parenta50a5a287a23ba6b833b13d8cec84dd5dfe0fc61 (diff)
parent116210ff806ccdda91b4c3343f78bad66783d0e6 (diff)
Merge branch '3.5.x' into 3.5-release
Diffstat (limited to 'src/test/scala/chiselTests/util/PriorityMuxSpec.scala')
-rw-r--r--src/test/scala/chiselTests/util/PriorityMuxSpec.scala60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/util/PriorityMuxSpec.scala b/src/test/scala/chiselTests/util/PriorityMuxSpec.scala
new file mode 100644
index 00000000..32cf2431
--- /dev/null
+++ b/src/test/scala/chiselTests/util/PriorityMuxSpec.scala
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: Apache-2.0
+
+package chiselTests.util
+
+import chisel3._
+import chisel3.util.{is, switch, Counter, PriorityMux}
+import chisel3.testers.BasicTester
+import chisel3.stage.ChiselStage.emitChirrtl
+
+import chiselTests.ChiselFlatSpec
+
+class PriorityMuxTester extends BasicTester {
+
+ val sel = Wire(UInt(3.W))
+ sel := 0.U // default
+
+ val elts = Seq(5.U, 6.U, 7.U)
+ val muxed = PriorityMux(sel, elts)
+
+ // Priority is given to lowest order bit
+ val tests = Seq(
+ 1.U -> elts(0),
+ 2.U -> elts(1),
+ 3.U -> elts(0),
+ 4.U -> elts(2),
+ 5.U -> elts(0),
+ 6.U -> elts(1),
+ 7.U -> elts(0)
+ )
+ val (cycle, done) = Counter(0 until tests.size + 1)
+
+ for (((in, out), idx) <- tests.zipWithIndex) {
+ when(cycle === idx.U) {
+ sel := in
+ assert(muxed === out)
+ }
+ }
+
+ when(done) {
+ stop()
+ }
+}
+
+class PriorityMuxSpec extends ChiselFlatSpec {
+ behavior.of("PriorityMux")
+
+ it should "be functionally correct" in {
+ assertTesterPasses(new PriorityMuxTester)
+ }
+
+ it should "be stack safe" in {
+ emitChirrtl(new RawModule {
+ val n = 1 << 15
+ val in = IO(Input(Vec(n, UInt(8.W))))
+ val sel = IO(Input(UInt(n.W)))
+ val out = IO(Output(UInt(8.W)))
+ out := PriorityMux(sel, in)
+ })
+ }
+}