scala Chisel:定义对用户定义的Bundle类型进行操作的函数

gudnpqoy  于 2023-08-05  发布在  Scala
关注(0)|答案(1)|浏览(140)

我有一个包含2D vec的Bundle类型:

def myBundle extends Bundle {
  val v = Vec(4, Vec( 4, UInt()))
  // etc ...
}

字符串
我想定义一个硬件生成函数,它对myBundle进行操作,并返回一个myBundle,如下所示:

def elementwise_add(x: myBundle, y: myBundle): MyBundle {
  val result = new MyBundle
  for(i <- 0 until 4)
    for(j <- 0 until 4)
      result.v(i)(j) = x.v(i)(j) + y.v(i)(j)
   return result
}


但是,如果我定义了这个,Chisel会在编译过程中抛出一个错误:“值更新不是chisel3.Vec[chisel3.UInt]的成员,您的意思是更新了吗?“
我应该如何定义这个函数(以及其他类似的函数),以便它生成我在这里试图生成的硬件?
(Note:这里的Vec在本例中很重要,因为我希望能够用硬件信号寻址myBundle.v)

avwztpqn

avwztpqn1#

变更:

def elementwise_add(x: myBundle, y: myBundle): MyBundle {
  val result = new MyBundle
  for(i <- 0 until 4)
    for(j <- 0 until 4)
      result.v(i)(j) = x.v(i)(j) + y.v(i)(j)
   return result
}

字符串
致:

def elementwise_add(x: myBundle, y: myBundle): MyBundle {
  val result = new MyBundle
  for(i <- 0 until 4)
    for(j <- 0 until 4)
      result.v(i)(j) := x.v(i)(j) + y.v(i)(j)
   return result
}


(use chisel assign(:=)操作符而不是Scala =)并确保您使用的是Chisel 5.0或更高版本(我使用的是3.5.6),并且此代码可以按预期工作。

相关问题