aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/Utils.scala
diff options
context:
space:
mode:
authorAndrew Waterman2016-09-13 20:54:20 -0700
committerDonggyu2016-09-13 20:54:20 -0700
commit8fc37582267b2319e5fa25818fcd1346d8e180ae (patch)
tree2a9e2ae060cb7be6b417408d3cbd3e282cc690bc /src/main/scala/firrtl/Utils.scala
parent36c19ed40bec120ef38aefa7e2c875c5e21bf048 (diff)
Fix a lurking width-inference bug; improve adjacent style (#298)
ceil(log(x) / log(2)) does not, in general, round to ceil(log2(x)). I noticed this because of #297.
Diffstat (limited to 'src/main/scala/firrtl/Utils.scala')
-rw-r--r--src/main/scala/firrtl/Utils.scala13
1 files changed, 2 insertions, 11 deletions
diff --git a/src/main/scala/firrtl/Utils.scala b/src/main/scala/firrtl/Utils.scala
index bc1ca704..05628d3f 100644
--- a/src/main/scala/firrtl/Utils.scala
+++ b/src/main/scala/firrtl/Utils.scala
@@ -81,23 +81,14 @@ object Utils extends LazyLogging {
else "\"h" + bi.toString(16) + "\""
implicit def toWrappedExpression (x:Expression) = new WrappedExpression(x)
- def ceil_log2(x: BigInt): BigInt = (x-1).bitLength
- def ceil_log2(x: Int): Int = scala.math.ceil(scala.math.log(x) / scala.math.log(2)).toInt
+ def ceilLog2(x: BigInt): Int = (x-1).bitLength
def max(a: BigInt, b: BigInt): BigInt = if (a >= b) a else b
def min(a: BigInt, b: BigInt): BigInt = if (a >= b) b else a
def pow_minus_one(a: BigInt, b: BigInt): BigInt = a.pow(b.toInt) - 1
val BoolType = UIntType(IntWidth(1))
val one = UIntLiteral(BigInt(1), IntWidth(1))
val zero = UIntLiteral(BigInt(0), IntWidth(1))
- def uint(i: Int): UIntLiteral = {
- val num_bits = req_num_bits(i)
- val w = IntWidth(scala.math.max(1, num_bits - 1))
- UIntLiteral(BigInt(i), w)
- }
- def req_num_bits(i: Int): Int = {
- val ix = if (i < 0) ((-1 * i) - 1) else i
- ceil_log2(ix + 1) + 1
- }
+ def uint(i: BigInt): UIntLiteral = UIntLiteral(i, IntWidth(1 max i.bitLength))
def create_exps(n: String, t: Type): Seq[Expression] =
create_exps(WRef(n, t, ExpKind, UNKNOWNGENDER))