在 Chisel 中使用 `reduce(_ ## _) ` 进行 IndexedSeq 到 UInt 转换是件好事吗?

问题描述 投票:0回答:2

对于一个小 Chisel 项目 我正在使用 reduce(_ ## _) 函数将 IndexedSeq 转换为 UInt。

class PdChain(n: Int = 4) extends Module {
  val io = IO(new Bundle {
    val count = Output(UInt(n.W))
  })
  // instantiate PdivTwo modules
  val pDivTwo = for (i <- 0 until n) yield {
    val pdivtwo = Module(new PDivTwo(i == 0))
    pdivtwo
  }
  val pDivTwo_io = VecInit(pDivTwo.map(_.io))

  // connect together
  pDivTwo_io(0).en := 1.U(1.W)
  for(i <- 1 until n) {
    pDivTwo_io(i).en := pDivTwo_io(i-1).p
  }

  val countValue = for (i <- 0 until n) yield pDivTwo_io(i).q

  io.count := countValue.reverse.reduce(_ ## _)
}

countValue
被视为
IndexedSeq
并且
reduce()
操作将其转换为
UInt

这在我的项目中没有错误。 但是我读到

reduce()
函数必须用于交换操作。

连接

##
运算符 不可交换,那么这里应该避免使用它吗?

scala reduce chisel
2个回答
1
投票
感谢 Seth-Tisue,我得到了答案:是的,我应该避免

reduce()

在这种情况下,应使用

reduceLeft()


    


0
投票
我个人发现将序列包装在

VecInit

 中并使用 
asUInt
 进行此类转换更直观:

io.count := VecInit(countValue).asUInt


    

© www.soinside.com 2019 - 2024. All rights reserved.