summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel3/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/chisel3/util')
-rw-r--r--src/main/scala/chisel3/util/Bitwise.scala9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/main/scala/chisel3/util/Bitwise.scala b/src/main/scala/chisel3/util/Bitwise.scala
index 950fa65f..fec4be9a 100644
--- a/src/main/scala/chisel3/util/Bitwise.scala
+++ b/src/main/scala/chisel3/util/Bitwise.scala
@@ -65,17 +65,18 @@ object Fill {
*/
def apply(n: Int, x: UInt): UInt = {
n match {
+ case _ if n < 0 => throw new IllegalArgumentException(s"n (=$n) must be nonnegative integer.")
case 0 => UInt(0.W)
case 1 => x
case _ if x.isWidthKnown && x.getWidth == 1 =>
Mux(x.toBool, ((BigInt(1) << n) - 1).asUInt(n.W), 0.U(n.W))
- case _ if n > 1 =>
- val p2 = Array.ofDim[UInt](log2Up(n + 1))
+ case _ =>
+ val nBits = log2Ceil(n + 1)
+ val p2 = Array.ofDim[UInt](nBits)
p2(0) = x
for (i <- 1 until p2.length)
p2(i) = Cat(p2(i-1), p2(i-1))
- Cat((0 until log2Up(n + 1)).filter(i => (n & (1 << i)) != 0).map(p2(_)))
- case _ => throw new IllegalArgumentException(s"n (=$n) must be nonnegative integer.")
+ Cat((0 until nBits).filter(i => (n & (1 << i)) != 0).map(p2(_)))
}
}
}