Допустим, у меня есть Vec of Bool. Я хочу заполнить новый Vec того же размера значениями, равными количеству истинных значений, которые я видел до этого индекса в исходном Vec. Я хочу сделать это комбинированно.
Когда мой опыт HLS и стиль кодирования устоялись в моей голове, я хочу написать что-то вроде этого:
def foo ( in : Vec[UInt] ) = {
val out = Vec.fill(in.size) {UInt(in.size)}
val nextInd = Wire(init = 0.U)
in.zipWithIndex.foreach {case(val, ind) =>
when(val === true.B) {
out(ind) := nextInd
nextInd := Wire(init = nextInd+1.U)
}
}
}
Но я понимаю, что это создает комбинационную петлю, но я не могу найти хороший способ ее смоделировать. Каким-то образом мне нужно создать новую переменную итерации цикла и передать ее между итерациями.