summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel3/util
diff options
context:
space:
mode:
authorchick2019-12-18 10:04:13 -0800
committerchick2019-12-18 10:04:13 -0800
commitc720c99a75f565c8b4fbc7147d7b9daee9123d10 (patch)
treec31784ab0dddf2db955dbe5d6e4cf2f62ef63c40 /src/main/scala/chisel3/util
parent954cc41e1349d0df6d2250d6270590340cd36e82 (diff)
BitPat supports whitespace and underscores, presumably for human readability.
The BitPat.parse factory though did not remove these from the returned count. This fixes that adds whitespace and underscores to the unit tests This is an updated vesion of Chisel PR #1069
Diffstat (limited to 'src/main/scala/chisel3/util')
-rw-r--r--src/main/scala/chisel3/util/BitPat.scala9
1 files changed, 6 insertions, 3 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.