首页 > 解决方案 > 如何在 UInt Vec , Chisel 中获取 Max 元素的索引

问题描述

我正在尝试获取 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

解决方案


ChiselVec扩展了 Scala 的Seq. 意味着 aVec既有动态访问硬件方法,允许您生成硬件来搜索 a 中的内容(例如 , , ) ,也有所有可用于普通 Scala 序列的方法(例如)。VecindexWhereonlyIndexWherelastIndexWhereindexOf

出于执行硬件操作的目的,您希望使用前者(正如您在上次编辑中发现的那样——看起来很棒!)而不是后者。

为了解决这个问题,下面的屏幕截图显示了 Chisel 3.3.0-RC1 API 文档VecLike,过滤到排除的继承方法。这里值得注意的是indexWhere, onlyIndexWhere, lastIndexWhere, exists, forall, 和contains

VecLike 文档的输出仅过滤为 VecLike 中添加的方法

以及Vec. 这里唯一有趣的方法是reduceTree

在此处输入图像描述


推荐阅读