Chisel IO接口构造器中clone方法的使用

Usage of clone method in Chisel IO interface constructors

Sodor处理器集合的几个IO接口构造函数实现了自己的clone方法。我研究了 Scala 中 clone 方法的用法,但仍然无法弄清楚为什么要这样做。 (我在设计中的任何地方都找不到这些方法的任何明确用法)

Sodor 目前仍在 Chisel 2 上。clone 在 Chisel 3 中重命名为 cloneType,以区别于 Java 和 Scala 中的 clonecloneType 通常需要 Chisel 来实例化 参数化 Bundles 的新实例。例如:

class MyBundle extends Bundle {
  val foo = UInt(32.W)
}
class MyParameterizedBundle(width: Int) extends Bundle {
  val bar = UInt(width.W)
}

Chisel 经常需要从给定 Bundle class 的另一个实例创建一个实例 class。 Chisel 使用 Java 反射来做到这一点。如果构造函数没有参数,那么它可以从默认构造函数实例化对象。但是,它无法通过反射从 MyParameterizedBundle 的实例中确定 width 的值,因此它无法为构造函数提供适当的参数。这就是 cloneType 函数的用途。它告诉 Chisel 如何从给定对象创建 Bundle 的新实例。

我们希望将来能解决这个问题,但还没有时间实施。最有前途的方法是通过 Scala macro annotations.

自动生成 cloneType