diff options
| author | Andrew Waterman | 2015-07-16 17:24:37 -0700 |
|---|---|---|
| committer | Andrew Waterman | 2015-07-16 17:24:37 -0700 |
| commit | f4f704f0239319428da6288aaefb7d46db3a3972 (patch) | |
| tree | 6fa3440926dba1cf6187c888992ae2be3f159997 /src | |
| parent | e1c38eafd0d8f1413cc26a911d3751679e33fe4b (diff) | |
Add PriorityEncoderOH
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/utils.scala | 13 |
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))) +} |
