diff options
Diffstat (limited to 'src/test/scala/chiselTests/Decoder.scala')
| -rw-r--r-- | src/test/scala/chiselTests/Decoder.scala | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/src/test/scala/chiselTests/Decoder.scala b/src/test/scala/chiselTests/Decoder.scala deleted file mode 100644 index 0c644b49..00000000 --- a/src/test/scala/chiselTests/Decoder.scala +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 - -package chiselTests - -import org.scalacheck._ - -import chisel3._ -import chisel3.testers.BasicTester -import chisel3.util._ - -class Decoder(bitpats: List[String]) extends Module { - val io = IO(new Bundle { - val inst = Input(UInt(32.W)) - val matched = Output(Bool()) - }) - io.matched := VecInit(bitpats.map(BitPat(_) === io.inst)).reduce(_ || _) -} - -class DecoderTester(pairs: List[(String, String)]) extends BasicTester { - val (insts, bitpats) = pairs.unzip - val (cnt, wrap) = Counter(true.B, pairs.size) - val dut = Module(new Decoder(bitpats)) - dut.io.inst := VecInit(insts.map(_.asUInt))(cnt) - when(!dut.io.matched) { - assert(cnt === 0.U) - stop() - } - when(wrap) { - stop() - } -} - -class DecoderSpec extends ChiselPropSpec { - - // Use a single Int to make both a specific instruction and a BitPat that will match it - val bitpatPair = for (seed <- Arbitrary.arbitrary[Int]) yield { - val rnd = new scala.util.Random(seed) - val bs = seed.toBinaryString - val bp = bs.map(if (rnd.nextBoolean) _ else "?") - - // The following randomly throws in white space and underscores which are legal and ignored. - val bpp = bp.map { a => - if (rnd.nextBoolean) { - a - } else { - a + (if (rnd.nextBoolean) "_" else " ") - } - }.mkString - - ("b" + bs, "b" + bpp) - } - private def nPairs(n: Int) = Gen.containerOfN[List, (String, String)](n, bitpatPair) - - property("BitPat wildcards should be usable in decoding") { - forAll(nPairs(4)) { (pairs: List[(String, String)]) => - assertTesterPasses { new DecoderTester(pairs) } - } - } -} |
