diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/Chisel/util/Arbiter.scala | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/main/scala/Chisel/util/Arbiter.scala b/src/main/scala/Chisel/util/Arbiter.scala index 2747640f..3e59ffa9 100644 --- a/src/main/scala/Chisel/util/Arbiter.scala +++ b/src/main/scala/Chisel/util/Arbiter.scala @@ -13,10 +13,12 @@ class ArbiterIO[T <: Data](gen: T, n: Int) extends Bundle { } /** Arbiter Control determining which producer has access */ -object ArbiterCtrl +private object ArbiterCtrl { - def apply(request: Seq[Bool]): Seq[Bool] = { - Bool(true) +: (1 until request.length).map(i => !request.slice(0, i).foldLeft(Bool(false))(_ || _)) + def apply(request: Seq[Bool]): Seq[Bool] = request.length match { + case 0 => Seq() + case 1 => Seq(Bool(true)) + case _ => Bool(true) +: request.tail.init.scanLeft(request.head)(_ || _).map(!_) } } |
