Реализуйте задачу Verilog $ onehot в долоте - PullRequest
0 голосов
/ 08 октября 2018

Есть ли простой способ проверить кодировку 1-hot bus в Chisel?

Мое текущее решение кажется немного уродливым.Могу ли я сделать лучше?

val range = Output (Vec (num, Bool()))
val outSum = io.range map ( p => if ( p == true.B ) 1.U else 0.U ) reduceleft (_ + _)

// This is $onehot0
assert (outSum <= 1.U, "One-hot0 bus encoding failed")

// This is $onehot
assert (outSum == 1.U, "One-hot bus encoding failed")

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете использовать PopCount

import chisel3._
import chisel3.util.PopCount

...

val io = IO(new Bundle {
  val range = Output(Vec(num, Bool()))
})
val outSum = PopCount(io.range)
// assertions...
...