diff options
| author | Jim Lawson | 2020-01-21 15:48:44 -0800 |
|---|---|---|
| committer | GitHub | 2020-01-21 15:48:44 -0800 |
| commit | 08ae1050dd62f7c5dba6d4acb62cd2848b460d5d (patch) | |
| tree | c6a3e7fe25a9becc639689ec82e41c9880355683 /src | |
| parent | 18cca9c376ccd53d1c8a308519427bb0d74bc9c5 (diff) | |
| parent | 7341082e3c5b08dc9d1a01937b5aad55e9833603 (diff) | |
Merge branch 'master' into add-asbool-to-clock
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/chisel3/util/BitPat.scala | 9 | ||||
| -rw-r--r-- | src/test/scala/chiselTests/Decoder.scala | 14 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/main/scala/chisel3/util/BitPat.scala b/src/main/scala/chisel3/util/BitPat.scala index 83475d1b..7c0abdb2 100644 --- a/src/main/scala/chisel3/util/BitPat.scala +++ b/src/main/scala/chisel3/util/BitPat.scala @@ -14,7 +14,7 @@ object BitPat { * @return bits the literal value, with don't cares being 0 * @return mask the mask bits, with don't cares being 0 and cares being 1 * @return width the number of bits in the literal, including values and - * don't cares. + * don't cares, but not including the white space and underscores */ private def parse(x: String): (BigInt, BigInt, Int) = { // Notes: @@ -25,14 +25,17 @@ object BitPat { require(x.head == 'b', "BitPats must be in binary and be prefixed with 'b'") var bits = BigInt(0) var mask = BigInt(0) + var count = 0 for (d <- x.tail) { - if (d != '_') { + if (! (d == '_' || d.isWhitespace)) { require("01?".contains(d), "Literal: " + x + " contains illegal character: " + d) mask = (mask << 1) + (if (d == '?') 0 else 1) bits = (bits << 1) + (if (d == '1') 1 else 0) + count += 1 } } - (bits, mask, x.length - 1) + + (bits, mask, count) } /** Creates a [[BitPat]] literal from a string. diff --git a/src/test/scala/chiselTests/Decoder.scala b/src/test/scala/chiselTests/Decoder.scala index 59ad6324..44cacccc 100644 --- a/src/test/scala/chiselTests/Decoder.scala +++ b/src/test/scala/chiselTests/Decoder.scala @@ -36,8 +36,18 @@ class DecoderSpec extends ChiselPropSpec { 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 "?").mkString - ("b" + bs, "b" + bp) + 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) |
