scala foreach of a 2-D List/Array in chisel with types issue

scala foreach of a 2-D List/Array in chisel with types issue

二维List/Array的每个元素可以使用"foreach"吗? 我试过代码:

val n_vec = (0 to 2).map(i=>
              (0 to 2).map(j=>
                Wire(UInt(3.W))
              )
            ) 
n_vec.foreach((i:Int)=>(
  n_vec(i).foreach((j:Int)=>{
    n_vec(i)(j) := i.U + j.U
  })
))

错误信息是

top.scala:24: error: type mismatch;
 found   : Int => Unit
 required: chisel3.core.UInt => ?
      n_vec(i).foreach((j:Int)=>{
                              ^

请问能不能这样用,怎么用?

是的,可以这样使用。

解决方案:

var x = 0
var y = 0 
n_vec.foreach(i=>{
  i.foreach(j=>{
    j := x.U + y.U
    y = y + 1
  })
  y = 0
  x = x + 1
})
x = 0
y = 0

这样写会更干净:

n_vec.foreach { i=>
  i.foreach { j=>
    j := x.U + y.U
    y = y + 1
  }
  y = 0
  x = x + 1
}

但是您不需要手动递增 xy,只需遍历索引即可:

n_vec.indices.foreach { x =>
  n_vec(x).indices.foreach { y =>
    n_vec(x)(y) := x.U + y.U
  }
}

或更好(这与上面的完全一致)

for { 
  x <- n_vec.indices
  y <- n_vec(x).indices
} {
  n_vec(x)(y) := x.U + y.U
}