如何获取 UInt Vec 中 Max 元素的索引,Chisel
How to get the Index of Max element in UInt Vec , Chisel
我正在尝试获取 UInt 向量中 Max 元素的索引。
我的代码看起来像这样
val pwr = Vec.tabulate(N) {i => energyMeters(i).io.pwr}
val maxPwr = pwr.indexOf(pwr.max)
但是这段代码会产生编译错误:
No implicit Ordering Defined for Chisel.UInt.
val maxPwr = pwr.indexOf(pwr.max)
^
我知道我可能需要实现 max 函数,有人可以举例说明应该如何实现吗?
编辑:
我也试过这个:
val pwr = Vec.tabulate(N) {i => energyMeters(i).io.pwr}
val maxPwr = pwr reduceLeft {(x,y) => Mux(x > y,x,y)}
val maxPwridx = pwr.indexOf(maxPwr)
但是当我试图将 maxPwridx 转换为 UInt 时,详细说明失败了。
我最终得到了这个解决方法:
val pwr = Vec.tabulate(N) {i => energyMeters(i).io.pwr}
val maxPwr = pwr reduceLeft {(x,y) => Mux(x > y,x,y)}
val maxPwridx = pwr.indexWhere((x : UInt => x === maxPwr))
Chisel 的 Vec
扩展了 Scala 的 Seq
。这意味着 Vec
具有 两种 动态访问硬件方法,这些方法将允许您生成硬件以在 Vec
中搜索某些内容(例如,indexWhere
, onlyIndexWhere
, lastIndexWhere
) 以及普通 Scala 序列可用的所有方法(例如,indexOf
)。
为了进行硬件操作,您想使用前者(正如您在上次编辑中发现的那样——看起来很棒!)而不是后者。
为了解决这个问题,下面的屏幕截图显示了 VecLike
的 Chisel 3.3.0-RC1 API 文档,过滤掉了已排除的继承方法。值得注意的是 indexWhere
、onlyIndexWhere
、lastIndexWhere
、exists
、forall
和 contains
:
以及 Vec
的文档。这里唯一有趣的方法是 reduceTree
:
我正在尝试获取 UInt 向量中 Max 元素的索引。 我的代码看起来像这样
val pwr = Vec.tabulate(N) {i => energyMeters(i).io.pwr}
val maxPwr = pwr.indexOf(pwr.max)
但是这段代码会产生编译错误:
No implicit Ordering Defined for Chisel.UInt.
val maxPwr = pwr.indexOf(pwr.max)
^
我知道我可能需要实现 max 函数,有人可以举例说明应该如何实现吗?
编辑: 我也试过这个:
val pwr = Vec.tabulate(N) {i => energyMeters(i).io.pwr}
val maxPwr = pwr reduceLeft {(x,y) => Mux(x > y,x,y)}
val maxPwridx = pwr.indexOf(maxPwr)
但是当我试图将 maxPwridx 转换为 UInt 时,详细说明失败了。 我最终得到了这个解决方法:
val pwr = Vec.tabulate(N) {i => energyMeters(i).io.pwr}
val maxPwr = pwr reduceLeft {(x,y) => Mux(x > y,x,y)}
val maxPwridx = pwr.indexWhere((x : UInt => x === maxPwr))
Chisel 的 Vec
扩展了 Scala 的 Seq
。这意味着 Vec
具有 两种 动态访问硬件方法,这些方法将允许您生成硬件以在 Vec
中搜索某些内容(例如,indexWhere
, onlyIndexWhere
, lastIndexWhere
) 以及普通 Scala 序列可用的所有方法(例如,indexOf
)。
为了进行硬件操作,您想使用前者(正如您在上次编辑中发现的那样——看起来很棒!)而不是后者。
为了解决这个问题,下面的屏幕截图显示了 VecLike
的 Chisel 3.3.0-RC1 API 文档,过滤掉了已排除的继承方法。值得注意的是 indexWhere
、onlyIndexWhere
、lastIndexWhere
、exists
、forall
和 contains
:
以及 Vec
的文档。这里唯一有趣的方法是 reduceTree
: