summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel/util/CircuitMath.scala
diff options
context:
space:
mode:
authorRichard Lin2016-06-08 17:12:42 -0700
committerRichard Lin2016-06-08 17:12:42 -0700
commit07fa5622ccc995f925d6d967d2a386540c9064cc (patch)
treefab4d62dba2ffb78e673ee54939d9088739a79f1 /src/main/scala/chisel/util/CircuitMath.scala
parent53813f61b7dfe246d214ab966739d01c65c8ecb0 (diff)
parent68447044e8eba5c8f525639130f1a347677ff543 (diff)
Merge pull request #197 from ucb-bar/lowercaseChisel
Rename package Chisel to chisel, add Chisel package for compatibility
Diffstat (limited to 'src/main/scala/chisel/util/CircuitMath.scala')
-rw-r--r--src/main/scala/chisel/util/CircuitMath.scala28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/main/scala/chisel/util/CircuitMath.scala b/src/main/scala/chisel/util/CircuitMath.scala
new file mode 100644
index 00000000..c3b94fdb
--- /dev/null
+++ b/src/main/scala/chisel/util/CircuitMath.scala
@@ -0,0 +1,28 @@
+// See LICENSE for license details.
+
+/** Circuit-land math operations.
+ */
+
+package chisel.util
+
+import chisel._
+
+/** Compute Log2 with truncation of a UInt in hardware using a Mux Tree
+ * An alternative interpretation is it computes the minimum number of bits needed to represent x
+ * @example
+ * {{{ data_out := Log2(data_in) }}}
+ * @note Truncation is used so Log2(UInt(12412)) = 13*/
+object Log2 {
+ /** Compute the Log2 on the least significant n bits of x */
+ def apply(x: Bits, width: Int): UInt = {
+ if (width < 2) {
+ UInt(0)
+ } else if (width == 2) {
+ x(1)
+ } else {
+ Mux(x(width-1), UInt(width-1), apply(x, width-1))
+ }
+ }
+
+ def apply(x: Bits): UInt = apply(x, x.getWidth)
+}