chisel - 如何获取 UInt Vec 中 Max 元素的索引,Chisel

标签 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 文档,过滤掉了已排除的继承方法。此处值得注意的是 indexWhereonlyIndexWherelastIndexWhereexistsforall包含:

Output of VecLike documentation filtered to only methods added in VecLike

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

enter image description here

关于chisel - 如何获取 UInt Vec 中 Max 元素的索引,Chisel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61052153/

相关文章:

chisel - 如何测试 RawModule?

scala - 如何使用外交将 AHB 端口连接到 DRAM Controller 设备

scala - 无法在 Chisel3 中使用 PeekPokeTester 打印

bus - Chisel:如何实现高效的 one-hot mux?

scala - 使用 FIRRTL 注释连接多位线和引脚

chisel - 关于凿子 :Vec & Wire 的语法

chisel - 在 Chisel3 中 BlackBoxing 后生成 Verilog 代码

complex-numbers - 复数的类型类

chisel - 如何在 chisel3.2 中的 bundle 内建议名称?