【发布时间】:2017-01-03 17:47:39
【问题描述】:
Sodor 处理器集合的几个 IO 接口构造函数实现了自己的克隆方法。我研究了 Scala 中克隆方法的用法,但仍然无法弄清楚为什么会这样做。 (我在设计的任何地方都找不到这些方法的任何明确用法)
【问题讨论】:
Sodor 处理器集合的几个 IO 接口构造函数实现了自己的克隆方法。我研究了 Scala 中克隆方法的用法,但仍然无法弄清楚为什么会这样做。 (我在设计的任何地方都找不到这些方法的任何明确用法)
【问题讨论】:
Sodor 目前仍在 Chisel 2 上。clone 在 Chisel 3 中重命名为 cloneType,以区别于 Java 和 Scala 中的 clone。 cloneType 通常需要 Chisel 来实例化 parameterized Bundles 的新实例。例如:
class MyBundle extends Bundle {
val foo = UInt(32.W)
}
class MyParameterizedBundle(width: Int) extends Bundle {
val bar = UInt(width.W)
}
Chisel 通常需要从该类的另一个实例创建给定 Bundle 类的实例。 Chisel 使用 Java 反射来做到这一点。如果构造函数没有参数,那么它可以从默认构造函数中实例化对象。但是,它无法通过反射从 MyParameterizedBundle 的实例中确定width 的值,因此它无法为构造函数提供适当的参数。这就是cloneType 函数的用途。它告诉 Chisel 如何从给定对象创建 Bundle 的新实例。
我们希望在未来修复这个疣,但还没有时间实施它。最有前途的方法是通过Scala macro annotations自动生成cloneType。
【讨论】: