summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Lawson2020-01-21 15:48:44 -0800
committerGitHub2020-01-21 15:48:44 -0800
commit08ae1050dd62f7c5dba6d4acb62cd2848b460d5d (patch)
treec6a3e7fe25a9becc639689ec82e41c9880355683
parent18cca9c376ccd53d1c8a308519427bb0d74bc9c5 (diff)
parent7341082e3c5b08dc9d1a01937b5aad55e9833603 (diff)
Merge branch 'master' into add-asbool-to-clock
-rw-r--r--src/main/scala/chisel3/util/BitPat.scala9
-rw-r--r--src/test/scala/chiselTests/Decoder.scala14
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)