summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Waterman2015-07-16 17:24:37 -0700
committerAndrew Waterman2015-07-16 17:24:37 -0700
commitf4f704f0239319428da6288aaefb7d46db3a3972 (patch)
tree6fa3440926dba1cf6187c888992ae2be3f159997 /src
parente1c38eafd0d8f1413cc26a911d3751679e33fe4b (diff)
Add PriorityEncoderOH
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/utils.scala13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/main/scala/utils.scala b/src/main/scala/utils.scala
index 0fb275d6..a86c81e8 100644
--- a/src/main/scala/utils.scala
+++ b/src/main/scala/utils.scala
@@ -398,3 +398,16 @@ object Queue
q.io.deq
}
}
+
+object PriorityEncoderOH
+{
+ private def encode(in: Seq[Bool]): UInt = {
+ val outs = Vec.tabulate(in.size)(i => UInt(BigInt(1) << i, in.size))
+ PriorityMux(in :+ Bool(true), outs :+ UInt(0, in.size))
+ }
+ def apply(in: Seq[Bool]): Vec[Bool] = {
+ val enc = encode(in)
+ Vec.tabulate(in.size)(enc(_))
+ }
+ def apply(in: Bits): UInt = encode((0 until in.getWidth).map(i => in(i)))
+}