improve PriorityEncoderOH and add Counter util
This commit is contained in:
parent
2af84f994a
commit
2ec76390e3
@ -78,14 +78,26 @@ object PriorityEncoder
|
|||||||
|
|
||||||
object PriorityEncoderOH
|
object PriorityEncoderOH
|
||||||
{
|
{
|
||||||
def apply(in: Bits): UFix = doApply(in, 0)
|
def apply(in: Bits): Bits = Vec(apply((0 until in.getWidth).map(in(_)))){Bits()}.toBits
|
||||||
def doApply(in: Bits, n: Int = 0): UFix = {
|
def apply(in: Seq[Bits]): Seq[Bool] = {
|
||||||
val out = Vec(in.getWidth) { Bool() }
|
|
||||||
var none_hot = Bool(true)
|
var none_hot = Bool(true)
|
||||||
for (i <- 0 until in.getWidth) {
|
val out = collection.mutable.ArrayBuffer[Bool]()
|
||||||
out(i) := none_hot && in(i)
|
for (i <- 0 until in.size) {
|
||||||
|
out += none_hot && in(i)
|
||||||
none_hot = none_hot && !in(i)
|
none_hot = none_hot && !in(i)
|
||||||
}
|
}
|
||||||
out.toBits
|
out
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object Counter
|
||||||
|
{
|
||||||
|
def apply(cond: Bool, n: Int) = {
|
||||||
|
val c = Reg(resetVal = UFix(0, log2Up(n)))
|
||||||
|
val wrap = c === UFix(n-1)
|
||||||
|
when (cond) {
|
||||||
|
c := Mux(Bool(!isPow2(n)) && wrap, UFix(0), c + UFix(1))
|
||||||
|
}
|
||||||
|
(c, wrap && cond)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user