26 lines
661 B
Scala
26 lines
661 B
Scala
package uncore
|
|
|
|
import Chisel._
|
|
|
|
package object Util {
|
|
implicit class UIntIsOneOf(val x: UInt) extends AnyVal {
|
|
def isOneOf(s: Seq[UInt]): Bool = s.map(x === _).reduce(_||_)
|
|
|
|
def isOneOf(u1: UInt, u2: UInt*): Bool = isOneOf(u1 +: u2.toSeq)
|
|
}
|
|
|
|
implicit class SeqToAugmentedSeq[T <: Data](val x: Seq[T]) extends AnyVal {
|
|
def apply(idx: UInt): T = {
|
|
if (x.size == 1) {
|
|
x.head
|
|
} else {
|
|
val half = 1 << (log2Ceil(x.size) - 1)
|
|
val newIdx = idx & UInt(half - 1)
|
|
Mux(idx >= UInt(half), x.drop(half)(newIdx), x.take(half)(newIdx))
|
|
}
|
|
}
|
|
|
|
def asUInt(): UInt = Cat(x.map(_.asUInt).reverse)
|
|
}
|
|
}
|