in hardware/chisel/src/main/scala/shell/VME.scala [221:234]
def firstOneOH (in: UInt) = {
val oneHotIdx = for(bitIdx <- 0 until in.getWidth) yield {
if (bitIdx == 0){
in(0)
}
else{
in(bitIdx) && ~in(bitIdx-1,0).orR
}
}
val oHot = VecInit(oneHotIdx).asUInt
val newVec = in&(~oHot) // turn bit to 0
val bitPostn = PriorityEncoder(oneHotIdx)
(oHot, newVec,bitPostn)
}