【问题标题】:How to get the Index of Max element in UInt Vec , Chisel如何在 UInt Vec 中获取 Max 元素的索引,Chisel
【发布时间】:2020-04-06 02:33:04
【问题描述】:

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


    【解决方案1】:

    Chisel 的 Vec 扩展了 Scala 的 Seq。这意味着Vec 具有both 动态访问硬件方法,允许您生成硬件以搜索Vec 中的某些内容(例如,indexWhereonlyIndexWherelastIndexWhere ) 以及所有可用于普通 Scala 序列的方法(例如,indexOf)。

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

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

    还有Vec 的文档。这里唯一有趣的方法是reduceTree

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-16
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多